只要wait(event.triggered)在->event之前执行,或者在同一个time step执行,都能正确地等到事件。 wait_trigger的用法: 1)如果wait_trigger在trigger之后调用,那@是等不到->的,就不会被trigger触发。 2)在wait_trigger被trigger过一次之后,并不用调用event.reset()重置event。依然可以使用wait_trigger阻塞并等待下一...
首先,需要先看看uvm_event_base这个类,其实本质就是个object,只不过包含了几个变量,on、num_waiters代表wait_trigger的数量,m_event就是sv的event数据类型啦,此外还有callback函数的队列。 virtualclassuvm_event_baseextendsuvm_object;protectedbiton;protectedintnum_waiters;protectedeventm_event;protecteduvm_event_ca...
virtual function bit pre_trigger (uvm_event e, uvm_object data=null); return 0; endfunctio virtual function void post_trigger (uvm_event e, uvm_object data=null); return; endfunction trigger操作携带数据 trigger操作可携带数据,若触发事件的进程与等待时间触发的进程有数据传输,可以在trigger操作携带...
event1.trigger(copy); $display("start trigger"); end initial begin class1 copy; uvm_object copy1; uvm_event event1; event1=uvm_event_pool::get_global("event000"); $display("start wait"); event1.wait_trigger_data(copy1); $cast(copy, copy1); $display("get a %0d", copy.a);...
event无法携带更多的信息,而uvm_event可以通过trigger(uvm_event data = null)的可选参数,将所要伴随触发的数据信息都写入到该触发事件中,而等待该事件的对象可以通过方法wait_trigger_data(output uvm_object data)来获取事件触发时写入的数据对象。 event触发时无法直接触发回调函数,而uvm_event可以通过add_callback...
别担心,你只需在uvm_event_pool中找到src中那个event的句柄。然后,通过event.wait_trigger静静等待,数据就会自动找上门来啦!再通过event.get_trigger_data,data就被你稳稳地接住啦!👏注意哦,src和dst之间的数据类型要匹配哦,这样才能确保数据传递的顺利进行。🔗...
uvm_event with parameter example The below example consists of two components comp_a and comp_b. comp_a will trigger an event and comp_b wait for the event trigger. Along with the event trigger, comp_a will randomize the transaction object trans and send it to the comp_b via event trig...
uvm_event是sv中event的class warpper,内建了很多方法。 # uvm_pool.svh class uvm_object_string_pool #(type T=uvm_object) extends uvm_pool #(string,T); ... typedef class uvm_barrier; typedef class uvm_event; typedef uvm_object_string_pool #(uvm_barrier) uvm_barrier_pool; typedef...
比如说,我们在tc里的main_phase中发完包之后,一般都会设置drain_time来等带dut将数据吐完,我们就可以在scoreboard中设置一个uvm_event等待socreboard接收完数据,然后再通过uvm_event通知tc,触发main_phase中的uvm_event.trigger,结束仿真。下面我们来看实现。
// 使用uvm_event_pool创建事件。 uvm_event_pool event_pool; uvm_event another_event; initial begin. event_pool = uvm_event_pool::get_global_pool(); another_event = event_pool.get("another_event"); end. 2. 事件触发方法。 `trigger()`. 功能:触发事件,通知所有等待该事件的进程。 示例: ...