Verilog编程:阻塞与非阻塞赋值的关键区别
需积分: 17 192 浏览量
更新于2024-07-11
收藏 447KB PPT 举报
"这篇资料主要讲述了Verilog模块编程中的关键概念,特别是关于阻塞赋值和非阻塞赋值的使用。它强调了在不同情况下如何正确选择赋值方式,以避免逻辑错误和不必要的锁存器。"
在Verilog语言中,阻塞赋值(blocking assignment,`=`)和非阻塞赋值(non-blocking assignment,`<=`)是构建数字系统模型的重要工具。它们在创建时序电路和组合逻辑电路时有着不同的作用。
1. **时序电路建模**:时序电路通常涉及到存储元件,如寄存器,应使用非阻塞赋值。非阻塞赋值确保赋值操作在当前时钟周期结束时才生效,这有助于保持数据的稳定性,避免亚稳态的出现。
2. **锁存器建模**:与时序电路类似,锁存器的建模也推荐使用非阻塞赋值,以确保在特定时钟边沿之后数据才会更新。
3. **组合逻辑建模**:在构建组合逻辑电路时,使用阻塞赋值是合适的。阻塞赋值会在赋值语句执行时立即改变变量的值,因此适合表达即时的逻辑关系。
4. **混合时序和组合逻辑**:在同一个always块中,如果需要同时描述时序和组合逻辑,应当使用非阻塞赋值。但要避免在同一always块内混用阻塞和非阻塞赋值,这可能导致逻辑混乱。
5. **避免多块赋值**:一个变量不应该在多个always块中被赋值,否则会造成不确定的行为,综合器可能插入额外的锁存器来处理这种情况。
6. **$strobe系统任务**:为了观察使用非阻塞赋值的变量值,可以使用$strobe系统任务。它允许在特定时间点打印变量的值,而不会干扰正常的执行流程。
7. **#0延迟**:在赋值时,不应使用#0延迟,因为这会导致立即赋值,可能不符合预期的时序行为。
8. **always块的使用**:每个always块应只响应一个事件控制表达式,可以是时钟边沿(posedge或negedge)或电平触发。对于时序逻辑,推荐使用单一时钟沿触发,以避免同步问题。在always块中,所有被赋值的信号必须是reg型或integer型,并且要避免组合反馈回路,防止综合器自动添加不必要的锁存器。
9. **无关状态`bx`**:将信号赋值为'bx(未知状态)可以让综合器简化电路,因为它会忽略这个值。
理解并正确使用Verilog中的阻塞和非阻塞赋值是数字系统设计的关键,它直接影响到设计的正确性和综合结果的效率。深圳大学信息工程学院提供的这些指导原则有助于开发者编写出更加清晰、可靠的Verilog代码。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2019-03-31 上传
2008-03-15 上传
2020-07-26 上传
2023-05-02 上传
2023-07-27 上传
2023-05-12 上传
八亿中产
- 粉丝: 27
- 资源: 2万+
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器