Verilog阻塞与非阻塞赋值详解及其应用
版权申诉
5星 · 超过95%的资源 182 浏览量
更新于2024-09-12
收藏 584KB PDF 举报
Verilog语言中的阻塞赋值与非阻塞赋值是两种不同的数据更新机制,它们对程序执行流程有着显著的影响。阻塞赋值(Blocking Assignment)是一种实时操作,当遇到阻塞赋值时,编译器会在当前时间步立刻计算右侧表达式(Right Hand Side, RHS)的值,并立即更新左侧变量。这意味着在同一个时间步内,阻塞赋值会阻止其他语句的执行,直到赋值完成。这种赋值适合于需要立即反映状态变化的情况。
非阻塞赋值(Non-blocking Assignment),又称异步赋值,其右侧表达式同样会被计算,但左侧变量的更新则是异步的。非阻塞赋值不会阻塞其他语句,而是将计算结果放入事件队列,等待所有活跃事件处理完毕后,才会在下一个时间步进行左值更新。因此,非阻塞赋值更适合于不需立即反映的状态更新,或者与系统任务配合,如显示任务$display和选通任务$strobe。
$display任务用于即时显示指定格式的数据,而$strobe则不同,它会推迟到事件列表中所有活跃事件完成后在时间步末尾执行,这意味着$strobe的输出不会受到阻塞赋值的影响,确保了结果的准确性。在编写仿真测试时,$strobe通常比$display更推荐使用,因为$display可能会因阻塞赋值导致输出不准确。
举例说明:
1. 当没有延时时,如果初始代码中有阻塞赋值和$display,如`x = 1'b1; $display("x1=%d", x);`,结果将是先显示x1=0,然后在下一个时钟周期显示x1=1,因为阻塞赋值和显示在同一时钟周期发生。
2. 带有延时的情况,比如延时分别置于RHS前,`#50 clk上升沿, #100 RHS_a->a`,由于延时,$display和RHS的执行顺序会根据延时发生改变,影响最终输出。
通过理解阻塞与非阻塞赋值以及系统任务的特性,硬件设计师可以更有效地控制和预测Verilog程序的行为,确保硬件设计的正确性和效率。同时,在实际应用中,选择合适的赋值方式和系统任务是优化设计的关键步骤。
414 浏览量
195 浏览量
198 浏览量
125 浏览量
114 浏览量
2023-08-29 上传
475 浏览量
2024-10-11 上传
weixin_38677936
- 粉丝: 3
- 资源: 954
最新资源
- easypanel虚拟主机控制面板 v1.3.2
- Coursera
- wind-js-server:用于将Grib2风向预报数据公开为JSON的服务
- 生命源头论坛 LifeYT-BBS V2.1
- TUTK_IOTC_Platform_14W42P2.zip TUTK IOTC官方sdk
- WeatherJournalApp
- 电商小程序源码项目实战
- 美女婚纱照片模板下载
- GB 50231-1998 机械设备安装工程施工及验收通用规范.rar
- MPT-开源
- facebook-archive:使用Facebook的存档数据可以享受一些乐趣
- 阿普奇工业显示器PANEL2000.zip
- action_react
- Torus-开源
- 应用js
- WPF将控件中的文字旋转.zip