• 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的介绍和使用。

  • 相关阅读:
    Dubbo服务调用过程流程图
    【无标题】
    MySQL如何查询某个字段含有字母数字的值
    专升本三本计科仔学习java到实习之路3
    大厂钟爱的全链路压测有什么意义?四种压测方案详细对比分析
    数商云:日化用品行业采购智能管理平台整合供应闭环,实现企业端到端寻源采购
    网站被劫持了怎么办
    verilog移位寄存器实现序列检测
    怎么将PDF文件转换成图片呢?
    数据库系统个人记录
  • 原文地址:https://blog.csdn.net/hh199203/article/details/127652972