Verilog设计:阻塞与非阻塞赋值的深入解析
需积分: 17 14 浏览量
更新于2024-08-20
收藏 447KB PPT 举报
"这篇资料主要介绍了Verilog语言中的阻塞赋值和非阻塞赋值的概念,以及在数字系统设计中的应用。通过深入理解这两种赋值方式,有助于编写出更有效的Verilog代码。资料来自于深圳大学信息工程学院的课程内容,涉及到always块的使用规则、事件控制以及信号类型的定义等关键点。"
在Verilog语言中,阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-Blocking Assignment)是两种不同的赋值方式,它们在数字系统设计中扮演着至关重要的角色。
1. 阻塞赋值( Blocking Assignment):使用“=”符号,如 `b = a;`。当这个赋值语句执行完毕后,当前块才会继续执行,意味着b的值会在赋值语句完成后立即更新。这种方式常用于组合逻辑的描述,因为它会立即影响到后续的计算。
2. 非阻塞赋值(Non-Blocking Assignment):使用“<=”符号,如 `b <= a;`。在这种情况下,赋值不会立即完成,而是在当前块执行完毕后,即在下一次时钟边沿更新时进行。非阻塞赋值常用于时序逻辑,特别是在描述状态机和其他寄存器更新时,以避免组合逻辑的错误反馈。
在always块中,阻塞和非阻塞赋值的应用至关重要:
- always块可以用来表示时序逻辑或组合逻辑,但为了避免混淆和潜在错误,通常建议将它们分开处理。
- 每个always块只能有一个事件控制,可以是时钟边沿触发或电平敏感。使用`posedge`或`negedge`关键字表示沿触发,没有这些关键字则可能表示组合逻辑或电平敏感的锁存器。
- 在表示时序逻辑的always块中,应确保只由一个时钟边沿触发,且最好同时触发置位或复位。
- 信号类型需定义为reg型或整型,整型默认为32位,但可以通过范围说明创建不同宽度的整型变量。
- 在always块中应避免组合反馈回路,否则可能需要手动插入锁存器以保持信号值。
- 对同一变量的赋值不应跨越多个always块,否则可能导致非法的并行赋值。
此外,非阻塞赋值的电路通常与触发沿有关,而非输入电平的变化。对于综合器而言,赋值为'bx表示无关状态,可以生成最简洁的硬件电路。
了解并熟练掌握阻塞和非阻塞赋值是编写可综合、无错误的Verilog代码的基础,这对于数字系统的建模和实现至关重要。在设计过程中,合理选择和使用这两种赋值方式能够有效防止逻辑错误,提高设计的可靠性和可维护性。
2020-07-26 上传
2022-04-22 上传
2020-04-03 上传
点击了解资源详情
2023-05-12 上传
2023-05-02 上传
2023-07-27 上传
2023-05-12 上传
Pa1nk1LLeR
- 粉丝: 67
- 资源: 2万+
最新资源
- ArtLinks:链接到我所有的艺术作品
- exam-countdown:一个帮助我跟踪即将到来的考试的小网站
- Excel模板客户登记表.zip
- PV8_PEMFC8_battery10_inverter_ACload_LC_grid_储能_SIMULINK_Battery
- PrivacyBreacher:旨在展示Android操作系统中的隐私问题的应用
- 毕业设计&课设--东南大学本科毕业设计(论文)模版.zip
- magnitude-to-number:将十亿,百万和万亿字符串转换为整数
- txt_wysiwyg:互联网的 TXT WYSIWG 编辑器
- my-delivery-boy
- 485_UART2实验_485采集温湿度_STM32F103_STM32uart2_modbus解析_rs485
- 核
- Yakov_Fain-Book:雅各布精美书
- pi4-cluster-ansible-roles:Ansible角色,用于执行Raspberry Pi 4工作程序节点的初始设置(尚无k8s软件)
- OfficeManagementSystem:一种有助于执行办公室日常活动的系统,包括出勤管理,任务管理,休假管理,投诉管理等
- 毕业设计&课设--高校校园设备管理系统-毕业设计.zip
- FitnessTracker:使用Spring Boot的Fitness Tracker RESTful Web应用程序