当敏感列表中描述的逻辑重新分配时,为什么总是阻止不重新激活

Why always block not reactivating when there is a reassignment of logic described in sensitivity list

信号 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 时,我希望总是阻止重新激活并将值 0 分配回 driver_b。

然而事实并非如此,波形似乎表明一旦 driver_a 在 always 块中被分配给 0,always 块不会重新激活并将 0 分配回 driver_b的价值。简而言之,我希望 driver_b 的值始终保持为 0,因为 always 块中的代码在零模拟时间内执行。

我在下面附上了生成的波形图

因为代码被解释为单个有序的语句集。就好像你写了

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

语句 //1 表示 "Wait for driver_a to change" 语句 //2 表示 "Change driver_b to the value of driver_a" 语句 //3 表示 "Change driver_a to 0"

因为 always 块是一个单线程,它按顺序执行语句,从 //3 开始的变化在它循环回执行 //1 时已经发生了。