Verilog симуляция, управляемая событиями. Событие - это изменение значения переменной verilog (или именованного события). Симуляция делается по шагам.
Шаг начинается с ввода событий, помещенных в очередь событий. Каждое новое изменение значений из-за оценки создает новые события, которые добавляются в очередь. Симуляция заканчивается, когда очередь пуста (больше нет активных событий). Каждый такой шаг продвигает время симуляции.
Сам шаг разделен на несколько зон, которые выполняются с использованием алгоритма, определенного в стандарте.
Для verilog 2K существует примерно 3 основных зоны:
зона назначения блокировки. Verilog выполняет все процедурные блоки, запланированные очередью событий, и реагирует на новые события назначения блокировки. Он просто планирует события nbas, которые будут выполнены позже. Когда все события блокировки завершены, он попадает в следующую зону.
Неблокирующая зона назначения. Здесь он выполняет все блоки, которые реагируют на события расписания nba. Он поместит в очередь событие ba и nba. Когда все nba выполнено, он может вернуться в зону '1', если есть событие ba, и выполнить все заново.
зона монитора / строба - это зона, в которой работает $ monitor (и $ strob). Он запускается после выполнения зон ba и nba (больше никаких событий).
В вашем случае a = 1
выполняется в зоне назначения блокировки. это значение сохраняется до конца этой зоны. $display
также будет выполнено в этой зоне. Таким образом, он увидит значение 'a == 0`.
a <= 1
будет запланировано выполнение в неблокирующей зоне после выполнения $ dislpay.
$monitor
выберет события в зоне мониторинга, после того как неблокирование выполнено. Таким образом, он покажет вам значение 1
.
Ваши операторы выполняются в блоке initial
. В результате отсутствует распространение событий. Только события выбираются с помощью операторов always
и assign
. Если вы поместите свой $display
в блок всегда, вы увидите более интересные результаты. always @* $display(a);
Вы должны прочитать о стандартной семантике симуляции в verilog, чтобы получить больше информации.