首页 > 代码库 > verilog中阻塞与非阻塞
verilog中阻塞与非阻塞
越是看似简单、经常接触的。我们越是不知其所以然。这就是我写本文的原因。
阻塞和非阻塞赋值一般使用在进程中,包括always和initial进程、assign赋值等操作中。
阻塞赋值与非阻塞赋值
always @(event-expression)
begin <LHS1=RHS1>
<LHS2=RHS2>
......
end
同样可将采用非阻塞赋值方式的always进程块写成下面的形式:
always @(event-expression)
begin <LHS1<=RHS1>
<LHS2<=RHS2>
......
end
阻塞赋值“=”与非阻塞赋值“<=”的本质区别在于:非阻塞赋值语句右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,我们 可以将其理解为所有的右端表达式RHS1、RHS2等在进程开始时同时计算,计算完后 ,等进程结束时同时分别赋给左端变量LHS1、LHS2等。
而阻塞赋值语句在每个右端表达式计算完后立即赋给左端变量,即赋值语句LHS1=RHS1执行完后LHS1是立即更新的,同时只有LHS1=RHS1执行 完后才可执行语句LHS1=RHS2,依次类推。前一条语句的执行结果直接影响到后面语句的执行结果。
verilog中阻塞与非阻塞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。