下面两段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
发布于 2013-08-28 01:27:13
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游乐场上的工作示例:http://www.edaplayground.com/s/6/114
发布于 2013-08-27 22:43:28
当in在#5延迟开始之前切换时,它们会产生不同的输出。无论#5的切换速度有多快,非阻塞赋值总是会延迟in的in。
EDA游乐场的例子。请注意sim输出中的差异。
https://stackoverflow.com/questions/18455750
复制相似问题