verilog中层次化的事件队列

本文解析了Verilog层次化事件队列的五个核心部分:动态事件、停止运行事件、非阻塞事件、监控事件和PLI命令队列。重点讲解了它们的工作原理及在设计中的应用,强调了非阻塞赋值和#0延时赋值的特殊性。不推荐使用#0延时赋值来避免竞争冒险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓层次化的事件队列指的是用于调度仿真事件的不同的Verilog事件队列,在IEEE verilog标准中,层次化事件队列被看做一个概念模型。设计仿真工具的厂商如何来实现事件队列,关系到仿真器的效率,是技术秘诀。
在IEEE 1364-1995 Verilog标准的5.3节中定义了层次化事件队列在逻辑上分为用于当前仿真时间的4个不同的队列,和用于下一段仿真时间的若干个附件队列;
(1)动态事件队列
阻塞赋值
计算非阻塞赋值右边的表达式
连续赋值
执行$display命令
计算原语的输入和输出的变化

(2)停止运行的事件队列
#0 延时阻塞赋值

(3)非阻塞事件队列
更新非阻塞赋值语句左边的值

(4)监控事件队列
执行$monitor命令
执行$strobe命令

(5)其他指定的PLI命令队列
其他PLI命令
这五个就是Verilog的层次化事件队列

在IEEE标准范围内被加入到这些队列中的事件只能从动态事件队列中消除,而排列在其他队列中的事件要等到被激活后,即被排入动态事件队列中后,才能真正开始等待执行。

非阻塞赋值LHS变量的更新是安排在非阻塞事件队列中,而RHS表达式的计算是在某个仿真时刻随机开始的,与上述其他动态事件是一样的。

#0延时赋值是设计人员企图在不同的程序块中给同一个变量赋值。通过稍加延时赋值来消除Verilog可能产生的竞争冒险。这样做会使定时事件的分析变得更加复杂,完全可以用其他方法来代替,不推荐使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值