Почему всегда блокировка не реактивируется, когда в списке чувствительности есть переназначение логики - PullRequest
0 голосов
/ 09 февраля 2019

Сигнал driver_a переназначается в блоке Always обратно на 0, но почему блок Always не активируется и присваивает значение driver_b?

always @(driver_a) begin
driver_b = driver_a;
driver_a = 0;
end

initial begin
driver_a = 0; driver_b = 0;
#2 driver_a = 8'h8;
#2 driver_a = 8'hf;
end

В форме сигнала я ожидаю, что после driver_a назначит его значениедля driver_b, затем в следующей строке, когда driver_a будет назначен на 0, я ожидал, что блок Always будет реактивирован и присвоит значение 0 обратно driver_b.

однако это не тот случай, форма сигнала, кажется, показываетчто после того, как driver_a будет назначен 0 в блоке Always, блок Always не будет активирован повторно и вернет 0 обратно значению driver_b.Вкратце Я бы ожидал, что значение driver_b всегда останется 0 , так как код в блоке Always выполняется за нулевое время моделирования.

Я прикрепил изображение результирующего сигнала ниже

DVE Waveform of results

1 Ответ

0 голосов
/ 09 февраля 2019

Поскольку код интерпретируется как единый упорядоченный набор операторов.Это так же, как если бы вы написали

always begin
     @(driver_a)           // 1
     driver_b = driver_a;  // 2
     driver_a = 0;         // 3
end

Оператор // 1 означает «Ожидание изменения driver_a» Оператор // 2 означает «Измените driver_b на значение driver_a» Оператор // 3 означает «Изменитьdriver_a to 0 "

Поскольку блок always является одним потоком, который выполняет операторы в последовательном порядке, изменение из // 3 уже произошло, когда он возвращается к выполнению //1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...