首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有内部赋值延迟的阻塞语句和非阻塞语句的区别

具有内部赋值延迟的阻塞语句和非阻塞语句的区别
EN

Stack Overflow用户
提问于 2013-08-27 09:58:15
回答 2查看 6.5K关注 0票数 3

下面两段verilog代码有什么不同?

1)

代码语言:javascript
复制
always@(in)
  out = #5 in;

2)

代码语言:javascript
复制
 always@(in)
   out <= #5 in;

考虑到always块中没有其他行,那么输出会有什么不同吗?问题涉及幻灯片16 (请参见o5和o6输出) http://www.sutherland-hdl.com/papers/1996-CUG-presentation_nonblocking_assigns.pdf

EN

回答 2

Stack Overflow用户

发布于 2013-08-28 01:27:13

out = #5 in;在5个时间单位内阻止下一个操作。它将阻止监视下一个@(in),直到5个时间单位过去。如果你在赋值前后添加一个$display语句,你会看到5个时间单位已经过去了。

代码语言:javascript
复制
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个时间单位,并允许下一个操作开始,而无需等待分配完成。

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2013-08-27 22:43:28

in#5延迟开始之前切换时,它们会产生不同的输出。无论#5的切换速度有多快,非阻塞赋值总是会延迟inin

EDA游乐场的例子。请注意sim输出中的差异。

  • Blocking assignment
  • Non-Blocking assignment
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18455750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档