在always块中将信号driver_a重新分配回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块中的代码将在零仿真时间内执行。
我在下面附加了所产生波形的图像
答案 0 :(得分: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
块是一个按串行顺序执行语句的线程,所以// 3循环返回执行// 1时已经发生了对// 3的更改。