【原创】systemVerilog中的event到底怎么回事儿

本文详细介绍了SystemVerilog中event的使用,包括如何触发和阻塞事件,以及@和wait的差异。通过示例解释了触发事件的不同方式,如”->”和”->>”,并探讨了@操作符、wait()方法和wait_order()方法的使用场景及注意事项。文章强调了事件触发与挂起等待的时间点匹配的重要性,以及wait_order()在特定顺序事件触发时的作用。
摘要由CSDN通过智能技术生成

在SystemVerilog构建测试平台时,经常会用到event来实现多个进程之间的同步处理,例如一个进程处于等待某事件发生,当该事件发生了那么对应的进程将会被执行。但是有时候我们会遇到明明已经触发了事件,为什么对应的进程还处于挂起等待状态呢?本文将示例说明其中原因。

event实际上是一个静态对象句柄指向一个同步的对象,当有进程等待一个某个事件时,这个进程就会被放入这个同步对象中的一个队列中,对于一个事件实际上是可以有多个进程对于这个事件处于一种等待的状态。那么如何让一个进程对于一个事件处于挂起等待状态呢?在SystemVerilog中可以通过@和wait来实现对于事件的等待。

具体触发和阻塞使用方式如下:

触发线程: -> event_name;

阻塞线程:@event_name/ wait(event_name.triggered);

首先,我们先了解下触发事件的方式有哪些。常用的事件触发方式有两种,一种是经常用到的”->”,一种是”->>”,其中”->”直到触发成功才会执行该语句下面的语句,而”->>”不对等到event触发了才执行其后的语句。

【示例】 

 【仿真结果】

图片

示例中13行等待5个时间单位后使用”->”触发flag1,其后的语句在触发了flag1后才执行,即->阻塞了其后语句的执行。18行使用”->>”触发flag2,此时有个前提是flag1触发,即flag1先于flag2触发,但是19行的执行并没有等待”->>”触发完flag2后才执行,即18行的->>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅芯思见

你的鼓励是我创作的最大源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值