等待触发数据只捕获第一个事件

Wait trigger data only catching the first event

我正在使用 OVM

我的代码在一个地方触发了 ovm 事件(我添加了打印以确认)。然而,在另一个地方我正在等待那个触发器并且它只被“捕获”一次(我也在这里添加了打印以确认)。

function void trigger_event_for_incoming_transaction(ovm_object txn);
    if (is_type_1(txn))
      type_1.trigger(txn);            
endfunction

还有其他地方:

    task look_for_type_1();    
      forever begin
        type_1.wait_trigger_data(my_obj);
      end
    endtask

由于智力障碍,我无法粘贴大部分代码 属性... 但是我正确地注册了事件等等

OVM/UVM的触发器和wait_trigger与SystemVerilog的事件触发器->e和事件控件@e的工作方式相同——事件控件必须阻塞等待触发器 执行触发器之前。您可以在 wait(e.triggered()) 中使用事件的触发方法,其中 returns 从触发点到时间步结束时为真。那么时间步内触发器和事件控件之间的顺序就不再重要了; p持久触发器.

您可以尝试使用 OVM 的 wait_ptrigger_data,它在下面使用了这个触发方法。