阻塞与非阻塞语句的区别

2019-03-25 10:37发布

module DataBusOfBus(DataBus,link_bus,write); inout[11:0] DataBus; input link_bus; reg [11:0] outsigs;   assign DataBus=(link_bus)?outsigs:12'hzzz;   always @(posedge write)           begin            outsigs<=DataBus*5;           end    endmodule     为什么assign用的是阻塞赋值而always中用的是非阻塞? 如果assign中的阻塞赋值换为非阻塞赋值以及always中的非阻塞换为阻塞会有出现什么结果? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
eeleader
1楼-- · 2019-03-25 17:12
< /

VERILOG 语法规定:

assign 只能用于阻塞赋值;

aways 模块中即可用阻塞赋值也可以非阻塞赋值,根据电路设计需要;

 

需要说明的是:

阻塞赋值 立即执行(=);

非阻塞赋值,等到模块结束后,同时执行;

 

 

assign 不能用于非阻塞赋值!

 

 

leomeng
2楼-- · 2019-03-25 19:20
谢谢  这位大哥指点
linhaiqing60
3楼-- · 2019-03-26 00:18
在用verilog设计电路的时候,对于阻塞非阻塞记住下面这两点:

1.用always描述组合逻辑时用阻塞语句(建议还是用assign语句描述组合逻辑);
2.描述时序逻辑电路用非阻塞。

ps:同一个always块中,最好不要同时用阻塞和非阻塞语句。

一周热门 更多>