uvm_event是一个类,定义在uvm_pkg中,需要通过include语句引入。在使用uvm_event之前,需要在UVM组件中声明一个uvm_event对象,可以在组件的内部或全局声明。 二、uvm_event的触发和等待 uvm_event的触发和等待是成对出现的。当需要触发事件时,可以通过调用uvm_event的trigger方法实现;当需要等待事件触发时,可以通过调用...
10.get_num_waiters:返回等待事件的进程数; 11.wait_trigger_data:此方法调用<uvm_event_base::wait_trigger>然后调用<get_trigger_data>; 12.wait_ptrigger_data:此方法调用<uvm_event_base::wait_ptrigger>然后调用<get_trigger_data>; 13.trigger:触发事件,恢复所有等待的进程; 14.get_trigger_data:通过...
1.uvm_event的使用 在uvm中只需要将 uvm_event放到 uvm_event_pool中即可,这在进行移植验证环境时,是非常便利的事情,并且我们在使用时,也不需要关心event的路径,只需要从event_pool中get到这个event就可以了。比如说,我们在tc里的main_phase中发完包之后,一般都会设置drain_time来等待dut将数据吐完,我们就可以在...
方案二、使用event来进行线程同步 同样是通过config_db set/get将cfg传到component中,当cfg更新的时候,trigger event, 在目标component总wait到event trigger后更新参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39...
其中,uvm_event是UVM中的一种事件机制,可以用于实现各种同步和通信操作。 uvm_event的定义和声明非常简单,只需要在UVM中定义一个uvm_event对象即可: ``` class my_class extends uvm_object; uvm_event my_event; endclass ``` 在使用uvm_event时,我们可以通过wait_for_trigger()方法等待事件的触发,也可以...
UVM框架下,事件与事件池的运用是进行验证环境移植时的重要工具。张强的《UVM实战》书虽未详细介绍uvm_event的用法,但其在移植验证环境、简化事件管理方面提供了高效手段。在UVM中,通过将uvm_event添加到uvm_event_pool,使得在移植验证环境时更加便捷。使用uvm_event_pool时,无需关注事件路径,直接从池...
在SV中,可以使用event来实现进程之间的同步,在UVM中也与专门的类来实现进程之间的同步: uvm_event#(typeT=uvm_object)。 uvm_event相比于event最大的优势是可以实现不同组件之间的同步。比如组件A,B要实现同步,如果使用SV的方法,必须在组件B中将组件A中的事件event赋值给组件B中的event,B.event=A.event。但是...
event无法携带更多的信息,而uvm_event可以通过trigger(uvm_event data = null)的可选参数,将所要伴随触发的数据信息都写入到该触发事件中,而等待该事件的对象可以通过方法wait_trigger_data(output uvm_object data)来获取事件触发时写入的数据对象。 event触发时无法直接触发回调函数,而uvm_event可以通过add_callback...
8.1 uvm event的用法 9 sequence、sequencer、driver关系 9.1 uvm_sequence和uvm_sequence_item都继承于uvm_object, 不同于uvm_component只应当在build阶段作为UVM环境的不动产进行创建和配置,它们可以在任何阶段创建。 9.2 组件之间可以通过TLM进行通信,如sequencer和driver;sequence和组件之间(如sequencer)则通过uvm_event...
在上面的例子中, 既有串行的激励关系,也有并行的激励关系, 在更复杂的场景中还可以考虑加入事件同步(通过 uvm_event 、 uvm_barrier 或 interface 上的信号变化),或者一定的延迟关系(最好基于时钟)来构成 sequence/item 之间的时序关系。