芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 4845|回复: 0

verilog阻塞赋值和非阻塞赋值混用的一种危害

[复制链接]
  • TA的每日心情
    开心
    2021-12-31 09:03
  • 71

    主题

    78

    帖子

    976

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    976
    发表于 2021-8-24 12:06:35 | 显示全部楼层 |阅读模式
    初学者在verilog学习中,往往容易犯一种比较典型的错误,即阻塞赋值和非阻塞赋值混淆使用。众所周知,非阻塞赋值(<=)往往用在always语句等时序逻辑之中,而阻塞赋值(=)往往用于assign语句等组合逻辑语句之中。那么,两者混用,会有什么后果呢?
    在实际应用中,混用可能有时候编译不会报错,但是会导致发生不可预料的逻辑错误以及仿真错误。


    例如:我们有如下led代码:


    003.jpg

    红框中框出的部分,为在alwasy语句中使用了阻塞赋值。

    对其进行前仿真结果如下图:

    001.jpg

    对其进行后仿真结果如下图:

    002.jpg

    可以看到,前仿真和后仿真的结果不一致,在前仿真中,led翻转只持续了一拍,而在后仿真中,led符合计数器满发生翻转的规律。
    如果在板级验证层面,在本工程上把计数器的值修改到便于观察,使(cnt==24999999),可以看到实际现象如后仿真一般,led正常闪烁。
    所以,过于随意的使用阻塞赋值和非阻塞赋值,会导致不可预知的后果,请大家务必牢记!


    led_beh_aft.rar

    6.1 KB, 下载次数: 236

    回复

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-11-21 20:15 , Processed in 0.112076 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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