以下 2 个 verilog 代码片段有什么区别?
1)
always@(in)
out = #5 in;
AND
2)
always@(in)
out <= #5 in;
考虑到always块中不存在其他行,输出会有什么不同吗?
问题参考幻灯片 16(参见 o5 和 o6 输出)http://www.sutherland-hdl.com/papers/1996-CUG-presentation_nonblocking_assigns.pdf http://www.sutherland-hdl.com/papers/1996-CUG-presentation_nonblocking_assigns.pdf
out = #5 in;
阻塞下一个操作5个时间单位。它将阻止接下来的监控@(in)
直到5个时间单位过去。如果您添加一个$display
在赋值语句之前和之后你会看到已经过去了 5 个时间单位。
always @(in) begin
$display("enter @ %0t",$realtime);
out = #5 in;
$display("exit @ %0t",$realtime);
end
/*******************
* Example output:
* enter @ time 10
* exit @ time 15
*******************/
out <= #5 in;
安排未来发生 5 个时间单位的分配,并允许下一个操作开始,而无需等待分配完成。
always @(in) begin
$display("enter @ %0t",$realtime);
out <= #5 in;
$display("exit @ %0t",$realtime);
end
/*******************
* Example output:
* enter @ time 10
* exit @ time 10
*******************/
EDA Playground 的工作示例:http://www.edaplayground.com/s/6/114 http://www.edaplayground.com/s/6/114
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)