Task里的阻塞赋值和非阻塞赋值
时间:10-02
整理:3721RD
点击:
用Verilog写了一个测试文件,在task用到非阻塞赋值,结果结果不对,但是改为阻塞赋值就对了,请教各位大牛,这是神马问题,大概就是下面的问题啊
task
begin
省略无关代码
for(i=0;i<1024;i=i+1)
begin
signal<=a;
end
改为
for(i=0;i<1024;i=i+1)
begin
signal=a;
end
endtask
其他信息都不变,改为阻塞赋值仿真结果就对了,
这是怎么回事啊?
task
begin
省略无关代码
for(i=0;i<1024;i=i+1)
begin
signal<=a;
end
改为
for(i=0;i<1024;i=i+1)
begin
signal=a;
end
endtask
其他信息都不变,改为阻塞赋值仿真结果就对了,
这是怎么回事啊?
用阻塞赋值, assign 會等到下一個 time slot 才會將右值 assign 給左變數, 因此導致 signal 的 1024 個 assign 都是 i=1023 時的 a 值
非阻塞之所以就非阻塞是因为它的值是在下一个时钟沿到达时同时变化,不会阻塞当前值。
task
begin
省略无关代码
for(i=0;i<1024;i=i+1)
begin
signal<=a;
@(posedge clk);
end
改为
for(i=0;i<1024;i=i+1)
begin
signal=a;@(posedge clk);
end
endtask
如果改为在每个循环加上时钟的话,有区别吗?我仿真的时候,带着时钟呢,但是用非阻塞赋值,结果不对