我正在使用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
由于intellucatal属性,我无法粘贴大部分代码。。。但我正确地注册了活动等
OVM/UVM的触发器和wait_trigger的工作原理与SystemVerilog的事件触发器->e
和事件控件@e
相同——在执行触发器之前,事件控件必须阻止等待触发器。您可以在wait(e.triggered())
中使用事件的触发方法,该方法从触发到时间步长结束都返回true。然后,在时间步长内触发器和事件控制之间的排序不再重要;ap持久性触发。
您可以尝试使用OVM的wait_ptrigger_data
,它在下面使用此触发方法。