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

Освоение операторов Wait в VHDL: Wait On, Wait Until и их комбинирование

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

Помимо знакомых wait; (бесконечная пауза) и wait for (пауза по времени), VHDL предлагает два мощных оператора для событийно-ориентированной синхронизации: Wait On и Wait Until. Их также можно комбинировать с wait for для создания сложных потоков управления.

Wait On

Оператор wait on приостанавливает процесс до изменения любого из перечисленных сигналов.

wait on <signal_name1>, <signal_name2>, ...;

Wait Until

Оператор wait until приостанавливает выполнение до тех пор, пока заданное булевское условие не станет истинным.

wait until <condition>;

Комбинирование операторов Wait

Все три конструкции могут использоваться вместе для создания тонких временных поведений:

wait on <signal_name1> until <condition> for <time_value>;

Например, следующая строка приостановится на 10 нс или до изменения signal1 и равенства signal2 и signal3:

wait on signal1 until signal2 = signal3 for 10 ns;

Практический пример

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

 entity T07_WaitOnUntilTb is end entity; architecture sim of T07_WaitOnUntilTb 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 is begin wait on CountUp, CountDown; report "CountUp=" & integer'image(CountUp) & " CountDown=" & integer'image(CountDown); end process; process is begin wait until CountUp = CountDown; report "Jackpot!"; end process; end architecture; 

Вывод консоли в ModelSim иллюстрирует последовательность событий:

VSIM 2> run # ** Note: CountUp=1 CountDown=9 # Time: 0 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=2 CountDown=8 # Time: 10 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=3 CountDown=7 # Time: 20 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=4 CountDown=6 # Time: 30 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=5 CountDown=5 # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=6 CountDown=4 # Time: 50 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=7 CountDown=3 # Time: 60 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=8 CountDown=2 # Time: 70 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=9 CountDown=1 # Time: 80 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=10 CountDown=0 # Time: 90 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=11 CountDown=-1 # Time: 100 ns Iteration: 1 Instance: /t07_waitonuntiltb

Анализ

Первый процесс обновляет CountUp и CountDown одновременно каждые 10 нс. Поскольку присваивание сигналов вступает в силу только после оператора wait, оба счетчика обновляются вместе на каждом шаге симуляции.

Второй процесс использует wait on CountUp, CountDown;, приостанавливаясь до изменения любого счетчика. Как показано, это срабатывает в 0 нс (начальное обновление) и затем при каждом изменении любого сигнала.

Третий процесс использует wait until CountUp = CountDown;. Он просыпается при каждом изменении сигнала, но продолжает выполнение только когда условие истинно. Следовательно, сообщение «Jackpot!» появляется только один раз — в 40 нс, когда оба счетчика достигают 5.

Освоение операторов Wait в VHDL: Wait On, Wait Until и их комбинирование

Вывод

Переходите к следующему уроку для глубокого погружения в синхронизацию VHDL.

VHDL

  1. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  2. Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
  3. Освоение функций VHDL: практическое руководство по эффективному дизайну
  4. Использование процедур в VHDL: упростите свой дизайн с повторно используемым кодом
  5. Использование констант и generic map в VHDL для гибкого дизайна модулей
  6. Освоение инстанцирования port map в VHDL: практическое руководство
  7. Освоение оператора Case-When в VHDL: эффективный дизайн мультиплексора
  8. Бесплатный симулятор и редактор VHDL: руководство для студентов
  9. Микроконтроллеры PIC18: особенности, производительность и руководство по использованию
  10. Понимание референс-десигнаторов: как маркировать соединения сборки ПП