锁存器外围电路电路建模时,为什么用非阻塞赋值

verilog 阻塞非阻塞赋值_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
verilog 阻塞非阻塞赋值
上传于||文档简介
&&深​入​理​解​阻​塞​和​非​阻​塞​赋​值​的​不​同
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
你可能喜欢君,已阅读到文档的结尾了呢~~
精讲阻塞赋值非阻塞赋值阻塞,赋值,阻塞赋值,非阻塞赋值,非阻塞,阻塞式赋值,异步非阻塞
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
精讲阻塞赋值非阻塞赋值
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口【转】深入理解阻塞赋值与非阻塞赋值的不同
阻塞赋值:对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算RHS并更新LHS,此时不允许有来自任何其他verilog语句的干扰。赋值语句结束,变量值立即发生改变。阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上是在前一句赋值语句结束后再开始下面的赋值。
非阻塞赋值:(&=)对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值。非阻塞操作的开始时计算非阻塞赋值符的RHS表达式,赋值操作结束时刻才更新LHS,可以认为是两个步骤(赋值开始时刻和结束时刻)来完成阻塞赋值。在计算非阻塞语句RHS表达式和更新LHS表达式期间,其他的verilog语句包括其他的verilog非阻塞赋值语句都能同时计算RHS和更新LHS表达式,允许其他的verilog语句同时进行操作。注意:非阻塞操作只能用于对寄存器类型变量进行赋值,因此只能用于“initial和”“always”块中,不允许连续赋值(assign)。
二。为防止冒险竞争,可综合的verilog风格要求,阻塞赋值和非阻塞赋值的八项原则
&(1)时序电路建模时,采用非阻塞赋值。
&&&&&&&&&&&&
计算RHS时,所有的变量值均是触发沿到来前的值,更新的值LHS作为触发沿后的值,并且保持到下一个触发沿到来时候,等待更新。这样,就可以使得在同一个块中非阻塞赋值语句不必要求出现的顺序,都是在全部进行RHS计算后同时更新LHS的值。非阻塞赋值可以简单的认为是赋予下一状态的值。
(2)锁存器电路建模时,采用非阻塞赋值。
&&&&&&&&&&
实用非阻塞赋值实现时序逻辑,实现锁存器是最为安全的。
(3)用always块来建立组合逻辑模型时,要用阻塞赋值。
只需要在always块中使用阻塞赋值语句就可以实现组合逻辑,这样做既简单且方针又快又好,这样的风格是值得推荐的。采用阻塞赋值可以在提高在同一个always块内的组合逻辑的参数传递。
(4)在同一个always块内建立时序和组合逻辑电路时,用非阻塞赋值。
在同一个always块中描述时序和组合的缓和电路时,采用非阻塞赋值。但是组合和时序逻辑可以写在两个always块中,也可以写在不同的always块中。例如:
always@(posedge& clock or negedge reset)
&&&&&&&&&&&&&&&&
if(!reset) q&=1'b0;//时序逻辑
&&&&&&&&&&&&&&&&
else q&=a^b;//组合逻辑,a^b计算的是触发沿前的值,在块结束后,更新至q
或者将组合逻辑和时序逻辑分别写在不同的块中:
always @(a or b)
&&&&&&&&&&&&&
y=a^b;//组合逻辑
always @(posedge clock or negedge reset)
&&&&&&&&&&&&&&
if(!reset) q&=1'b0;//时序逻辑
&&&&&&&&&&&&&&&else
q&=y;//y是触发沿前的组合逻辑电路的值
(5)在同一个always块中不要既要用非阻塞赋值又用阻塞方式赋值。
在同一个always块中对同一个变量既进行阻塞赋值又进行非阻塞赋值会产生综合错误的结果,不是可综合的verilog风格。但是在同一个alwasy块中进行阻塞赋值和非阻塞赋值操作的对象不是同一个变量是可行的,但是不建议使用这种风格。
(6)不要在一个以上的always块中为同一个变量赋值。
在一个以上的always块中对同一个变量进行赋值可能导致冒险竞争,即使采用非阻塞赋值方式也可能产生冒险竞争。always块是并行的,执行的顺序是随机的,所以仿真时会产生冒险竞争,所以严禁在多个always块中对同一个变量赋值。
(7)用$srobe系统任务来显示用非阻塞赋值的变量值。
&&&&&&&&&&
非阻塞语句的赋值是在所有的$display命令执行后在能更新,即$dispaly显示的是非阻塞语句更新前的值。
&$srobe时所有的非阻塞语句更新完之后才能显示,有同步的含义。
(8)复制时不要使用#0延迟。&
另外,对同一变量进行多次非阻塞赋值时,最后一个非阻塞赋值决定了最后的变量的值。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 verilog非阻塞赋值 的文章

 

随机推荐