OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5707|回复: 4

关于阻塞赋值与非阻塞赋值的一点问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-7-23
在线时间
1 小时
发表于 2019-7-23 23:11:58 | 显示全部楼层 |阅读模式
1金钱
如果把如图红色线条画出来的部分全部改成阻塞赋值,结果会有不同吗
捕获.PNG

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2019-6-10
在线时间
25 小时
发表于 2019-7-23 23:11:59 | 显示全部楼层
非阻塞赋值“<=”与阻塞赋值“=”与的区别在于:非阻塞赋值“<=”右端表达式计算完后并不立即赋给左端,而是同时启动下一条语句继续执行,我们可以将其理解为所有右端表达式在进程开始时同时计算,是并行的,计算完后,等进程结束时同时分别赋给左端变量。

而阻塞赋值语句在每个“=”右端表达式计算完后立即赋给左端变量,即赋值语句b=a,执行完后b是立即更新的,同时,只有b=a执行完后才可执行语句c=b,前一条语句的执行结果直接影响到后面语句的执行结果,即这种赋值方式是串行的。

非阻塞赋值“<=”不能用于“assign”持续赋值中,而只能用于对寄存器型变量进行赋值,即用在“initial”和“always”等过程块中;

阻塞赋值则既能用于“assign”持续赋值,也能用于“initial”和“always”等过程赋值中。

对于时序逻辑描述和建模,应尽量使用非阻塞赋值方式。以免发生不必要的错误。
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-7-22
在线时间
5 小时
发表于 2019-7-25 09:34:31 | 显示全部楼层
1、结果是相同的,因为每一个条件判断下只有一条语句,顺序执行和并行执行的效果是一样的;
2、做工程的习惯很好,正如楼上所说,在时序电路中,尽量使用非阻塞赋值的方式,以免产生不必要的错误;
3、正如使用always语句时尽量将条件列举完整,以避免产生latch,产生毛刺。
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2019-7-25 10:58:06 | 显示全部楼层
楼上两位分析的很到位,赞
回复

使用道具 举报

0

主题

131

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-7-1
在线时间
6 小时
发表于 2019-7-25 13:37:34 | 显示全部楼层
支持两位啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 07:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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