uvm_event和uvm_event_pool


前言


1、uvm_event

uvm_event类有两种不同的操作模式:边沿敏感和电平敏感。

边沿敏感模式包括:trigger(),wait_trigger(),wait_ptrigger()和wait_ptrigger_data() 方法。不要使用reset(),is_on(),is_off(),wait_on()和wait_off()方法。
wait_*方法会被阻塞,在调用trigger()时释放。

电平敏感模式包括:trigger(),reset(),is_on(),is_off(),wait_on()和wait_off()方法,不要使用任何wait_*trigger方法。
trigger()方法将事件状态设置为ON,并释放该事件的所有现有wait_trigger()和wait_on()。

reset()方法将事件状态设置为OFF并释放该事件的所有wait_off()。如果用于边沿敏感等待,reset()调用将在之后解除触发器!如果事件被用作边缘敏感的同步机制,你不应该调用reset() !

下图是UVM-1.1中关于uvm_event的实现。
在这里插入图片描述
在这里插入图片描述

下图是UVM-1.2 & IEEE UVM中关于uvm_event的实现。
在这里插入图片描述

2、uvm_event_pool

uvm_event_pool顾名思义,用于存放uvm_event的一个池子。通过这个池子,uvm_event可以被全局访问。

在这里插入图片描述
在这里插入图片描述
必须选择使用uvm_event作为电平敏感事件或边沿敏感事件,不能把这两种使用模式混在一起。
对于电平敏感的同步,使用trigger()打开事件,使用reset()关闭事件。
对于边沿敏感的同步,只使用trigger()来触发边缘,不要调用reset()方法。
在使用事件作为边沿敏感同步时,调用reset()方法将解除触发机制,这将导致任何trigger()调用都不能再释放该事件,极有可能导致线程被锁定。

电平敏感的事件同步如下所示,利用uvm_event_pool.get_global(“reset”),获取一个用于全局复位的复位事件reset_event,利用reset_event.trigger()来触发打开事件,利用reset_event.reset()来关闭事件。
在这里插入图片描述
在这里插入图片描述
uvm_event_pool的应用示例如下所示,同样先利用uvm_event_pool.get_global(“reset”),获取一个用于全局复位的复位事件reset_event,这个reset_event是全局的,在上面的reset_monitor中进行触发和复位,在这里利用reset_event.wait_on()来阻塞进程,用于同步控制。
在这里插入图片描述


总结

本文主要记录一下uvm_event和uvm_event_pool的介绍和使用。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值