1

信号 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。

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

我在下面附上了结果波形的图像

DVE 结果波形

4

1 回答 1

1

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

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 更改为 0”

因为该always块是按串行顺序执行语句的单个线程,所以当它循环返回执行 //1 时,已经发生了从 //3 的更改。

于 2019-02-09T05:38:46.220 回答