EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 677|回复: 2

[咨询求助] 问verilog:阻塞和非阻塞赋值的顺序问题?

[复制链接]

6

主题

2

回帖

33

E币

技术员

Rank: 2

积分
14
发表于 2019-12-4 09:26:47 | 显示全部楼层 |阅读模式
假如有两个always块a,b,其敏感信号一样
在a中使用非阻塞赋值"<="
在b中使用阻塞赋值"="
那么每次敏感信号来后,是不是总是b块中赋值语句先执行,然后才是a中的赋值语句执行

就比如下面的程序段:
always(posedge clock)
begin
.....
i<=i+1;
......
end
always(posedge clock)
begin
......
case(i)
0:a=i;
1:a=i+1;
...
endcase
end
假如clock上升沿来前,i是0,那么进入always块后,在第2个块里的case语句中判断时
i是1还是0?仿真看来是i=0
是不是同样敏感信号下,always块中阻塞赋值和非阻塞赋值同时存在时,都是阻塞赋值先执行完,再轮到非阻塞赋值?(时序如果不是这样,我又得改程序了)
刚开始接触veilog,实在太菜,这个问题总是不明白,希望谁能详细解释一下,谢谢了
积分规则
回复

使用道具 举报

0

主题

2

回帖

3

E币

技术员

Rank: 2

积分
2
发表于 2019-12-4 09:27:24 | 显示全部楼层
在第二个always块里,i的值是没有改变之前的,这与赋值形式没有关系。可以这样,你把第二个always块里的=换成<=,然后把两个always块合到一起,就明白了。
回复 支持 反对

使用道具 举报

2

主题

5

回帖

16

E币

技术员

Rank: 2

积分
9
发表于 2019-12-4 09:27:47 | 显示全部楼层
其实只要遵循这样的原则:时序电路用<=,组合电路用=
就对了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-24 12:02 , Processed in 0.039070 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表