Как создать процесс со списком конфиденциальности в VHDL
Всегда следует использовать список деликатности. запускать процессы в производственных модулях. Списки чувствительности — это параметры процесса, в которых перечислены все сигналы, к которым этот процесс чувствителен. Если какой-либо из сигналов изменится, процесс проснется, и код внутри него будет выполнен.
Мы уже научились использовать wait on
и wait until
операторы для пробуждения процесса при изменении сигнала. Однако, если честно, я не так пишу большинство своих процессов.
Эта запись в блоге является частью серии учебных пособий по основам VHDL.
При написании кода VHDL стиль написания зависит от того, предназначен ли код для запуска только в симуляторе. Если я пишу код моделирования, как мы делали в этой серии руководств, я всегда используйте wait
заявления для управления процессами. Если я пишу код, который собираюсь реализовать на физическом уровне, я никогда используйте wait
заявления.
Синтаксис процесса со списком конфиденциальности:process(<signal1>, <signal2>, ..) is
begin
<main logic here>
end process;
Важной особенностью списка конфиденциальности является то, что все сигналы, которые считываются в процессе, должны быть в списке чувствительности. Однако симулятор не сообщит вам, если вы не добавите сигнал в список чувствительности, потому что это допустимо на языке VHDL. Проблема в том, что если вы этого не сделаете, код будет вести себя иначе при синтезе и использовании в физической реализации.
В VHDL-2008 ключевое слово all
разрешено использовать вместо перечисления каждого сигнала. К сожалению, большинство программ для синтеза не поддерживают эту новую версию языка VHDL.
Упражнение
В этом видеоуроке мы узнаем, как создать процесс, используя список конфиденциальности в 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; -- Process triggered using Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Equivalent process using a sensitivity list 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
в конце процесса.
Процессы со списками конфиденциальности обычно используются в коде, предназначенном для синтеза. Такой код обычно называют кодом уровня передачи регистров (RTL). Это условность, но на это есть веские причины. Хотя некоторые wait on
и wait until
операторы могут быть синтезированы, трудно сказать, какое оборудование это создаст.
Вывод
- Процесс со списком конфиденциальности эквивалентен процессу с
wait on
в конце - Все сигналы, которые считываются в рамках процесса, должны быть в списке чувствительности.
- Используйте
wait
операторы в коде моделирования и списки конфиденциальности в коде RTL
Перейти к следующему руководству »
VHDL
- Как создать список строк в VHDL
- Как создать управляемый Tcl тестовый стенд для модуля кодовой блокировки VHDL
- Как создать ШИМ-контроллер на VHDL
- Как создать кольцевой буфер FIFO в VHDL
- Как создать самопроверяющийся тестовый стенд
- Как создать связанный список в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как создать конечный автомат на VHDL