以下 2 段 verilog 代码有什么区别?
1)
always@(in)
out = #5 in;
和
2)
always@(in)
out <= #5 in;
考虑到always块中没有其他行,输出会有什么不同吗?问题参考幻灯片 16(参见 o5 和 o6 输出) http://www.sutherland-hdl.com/papers/1996-CUG-presentation_nonblocking_assigns.pdf
以下 2 段 verilog 代码有什么区别?
1)
always@(in)
out = #5 in;
和
2)
always@(in)
out <= #5 in;
考虑到always块中没有其他行,输出会有什么不同吗?问题参考幻灯片 16(参见 o5 和 o6 输出) 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