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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3167|回复: 10

[求助] 关于阻塞赋值与非阻塞赋值

[复制链接]
发表于 2012-11-29 19:45:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
菜鸟求助
最近在学习阻塞赋值和非阻塞赋值,今天在仿真如下程序时
module t(
clk,
b,
c,
d);
input b,clk;
output c,d;
reg c,d;
always @ ( posedge clk)
begin:blk
c = b;
d <= c;
end
endmodule
得到的仿真结果却是bc之间为非阻塞赋值,cd之间为阻塞赋值,不懂啊~求大神指点~!
发表于 2012-11-29 23:47:32 | 显示全部楼层
阻塞和非阻塞的区分,用单条语句无法看出效果。并不是说阻塞当前语句的赋值操作,而是说阻塞后面语句的赋值操作。
如果是:
在时序逻辑中
a=b;
c=a;
则,第一个赋值阻塞了第二个赋值,所以b直接给了c。
如果是:
在时序逻辑中
a<=b;
c<=a;
则,两个赋值是同时发生的,所以c得到的是a的过去值,而不是b。这里隐含了一个事务队列的处理机制,详细内容可以找些资料好好推敲。这是HDL语言的精妙所在,看似并行,但不失顺序。
发表于 2012-11-30 09:05:50 | 显示全部楼层
b = c这一句阻塞了后面的 d <= c ,应该是b=c先执行完,再执行下面的非阻塞,从波形上看到的应该是在clk的上升沿检测到b,然后c的值改变,d值改变在c之后,我仿了一下
发表于 2012-11-30 09:16:18 | 显示全部楼层
一个always块里面不建议用混合的赋值方式
发表于 2012-11-30 18:22:43 | 显示全部楼层
回复 2# gaurson


    今天想了好久,源头就是verilog的事务队列处理机制,好好研究一下,多谢高人指点啊~~
发表于 2012-11-30 18:54:31 | 显示全部楼层
研究这个有点邪门,哈哈~~~
发表于 2012-11-30 22:17:34 | 显示全部楼层
这个VHDL也有相应的问题吗?
 楼主| 发表于 2012-12-6 18:22:46 | 显示全部楼层
谢谢!回复 2# gaurson
 楼主| 发表于 2012-12-6 18:31:17 | 显示全部楼层
就是打错了结果得到这样。。。回复 6# Gary.wang
发表于 2012-12-7 11:56:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-1-31 01:56 , Processed in 0.034619 second(s), 10 queries , Gzip On, Redis On.

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