在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: verilog

问verilog:阻塞和非阻塞赋值的顺序问题?

[复制链接]
发表于 2006-12-2 00:49:03 | 显示全部楼层
最好在时序里不要用=
发表于 2006-12-2 11:11:54 | 显示全部楼层
学习完毕 谢谢
发表于 2006-12-2 17:17:09 | 显示全部楼层
,=会立即执行(下一行就可以用),而<=要等到所有右边的计算完成后,才赋值.
支持
发表于 2006-12-2 17:47:12 | 显示全部楼层

回复 #1 verilog 的帖子

非阻塞赋值“<="和阻塞赋值”=“都是在触发沿触发,但是<=不讲先后顺序,而=讲先后顺序。
如:
always @(posedge clk) (1)
.....
b<=a;
c<=b;
.......

always @(posedge clk)  (2)
......
b=a;
c=b;
.....
(1)中b和c都是取的a和b的值,
而(2)中b取a原来的值,而c取的是b赋值后的值,即a的值。
发表于 2006-12-2 21:53:22 | 显示全部楼层
两个always并行的话会出现竞争的吧,结果会出错的么?
发表于 2006-12-11 11:37:36 | 显示全部楼层
用<=的好
发表于 2006-12-17 19:37:47 | 显示全部楼层


原帖由 jackzhang 于 2003-8-7 10:44 发表
这个问题是比较蹊跷,其实呢你知道基本意思就可以了,只要在时序快里就用<=
其实在这两个模块里用〈= 还是 = 的结果都是一样的。



我认为这种说法是不正确的。
在这两个模块里,用nonblocking和blocking会产生不同的效果。

如果第一个always用=,产生的结果就是i=1

nonblocking是在当前仿真周期结束时才付值,而blocking是立即付值。

所以如果将两个always都用=,always的书写顺序会造成仿真结果不同,但是综合电路却是一样的,这就会造成形式验证错误(rtl vs netlist)

所以,如果被付值的变量要在其他always中引用,最好该变量用<=。

当然,最简单的办法就是组合用=,时序用<=
发表于 2008-3-11 17:27:22 | 显示全部楼层
good point
发表于 2009-1-21 10:52:10 | 显示全部楼层
very good
发表于 2010-9-27 10:46:34 | 显示全部楼层
组合用阻塞,时序用非阻塞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 13:28 , Processed in 0.022433 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表