Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Использование списков чувствительности в процессах VHDL для надежного RTL-проектирования

В производственном VHDL процессы обычно управляются списком чувствительности, а не операторами wait. Список чувствительности перечисляет все сигналы, изменение которых должно пробудить процесс.

Хотя wait on и wait until удобны для симуляции, они редко используются в синтезируемом RTL. При синтезе оператор wait часто игнорируется, что приводит к непредсказуемому оборудованию. Наоборот, список чувствительности напрямую отображается в комбинационный или синхронный по такту блок, который инструменты синтеза могут реализовать надежно.

Базовые уроки VHDL – Чувствительность процесса

При написании кода для симулятора я всегда полагаюсь на операторы wait для управления временем. Для любого дизайна, который будет синтезирован в кремний, я полностью избегаю wait и использую списки чувствительности.

Синтаксис процесса со списком чувствительности:

 process( signal1, signal2, ... ) is begin -- основная логика здесь end process; 

Обратите внимание: каждый сигнал, считываемый внутри процесса, должен присутствовать в списке. Компилятор VHDL не выдаст предупреждение об отсутствующем сигнале, но его пропуск изменит поведение после синтеза.

VHDL-2008 ввел ключевое слово all для автоматического включения всех считываемых сигналов, например process(all). Однако большинство коммерческих синтезаторов до сих пор не поддерживают эту возможность.

Упражнение

В сопровождающем видеоуроке мы разбираем создание процесса, использующего список чувствительности.

Итоговый фрагмент VHDL из этого урока:

 entity T09_SensitivityListTb is end entity; architecture sim of T09_SensitivityListTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; -- Процесс, запускаемый через Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Эквивалентный процесс с использованием списка чувствительности process(CountUp, CountDown) is begin if CountUp = CountDown then report "Process B: Jackpot!"; end if; end process; end architecture; 

Запуск этого тестбенча в ModelSim дает:

 VSIM 2> run # ** Note: Process A: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb # ** Note: Process B: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb 

Анализ

Вывод консоли демонстрирует, что процесс с wait on и процесс со списком чувствительности срабатывают при идентичных условиях. Эта эквивалентность верна, потому что список чувствительности неявно ведет себя как wait on, помещенный в конец процесса.

На практике списки чувствительности являются де-факто стандартом для синтезируемого RTL. Они обеспечивают понятную семантику, позволяют инструментам синтеза генерировать корректное оборудование и избегают двусмысленностей, которые могут вводить операторы wait.

Использование списков чувствительности в процессах VHDL для надежного RTL-проектирования

Ключевые выводы

  • Процесс со списком чувствительности функционально идентичен процессу, заканчивающемуся wait on.
  • Все сигналы, считываемые внутри процесса, должны присутствовать в его списке чувствительности.
  • Используйте операторы wait только для кода симуляции; для синтезируемого RTL применяйте списки чувствительности.

Переходите к следующему уроку здесь.

VHDL

  1. Создание списков строк в VHDL: лучшие практики и пример
  2. Создание Tcl-управляемого тестбенча для VHDL-модуля кодового замка
  3. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  4. Проектирование надежного кольцевого буфера FIFO на VHDL в блочной ОЗУ
  5. Как создать самопроверяющийся тестбенч в VHDL — практическое руководство
  6. Реализация динамического связного списка в VHDL с защищенными типами и указателями доступа
  7. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  8. Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
  9. Освоение функций VHDL: практическое руководство по эффективному дизайну
  10. Проектирование конечного автомата в VHDL: практический пример светофора