等待触发数据只捕获第一个事件
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
,它在下面使用了这个触发方法。
我正在使用 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
,它在下面使用了这个触发方法。