【问题标题】:Wait trigger data only catching the first event等待触发数据仅捕获第一个事件
【发布时间】:2020-12-15 12:36:30
【问题描述】:

我正在使用 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

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

【问题讨论】:

  • 您需要提供更多信息。绝对不清楚您的 type_1 是什么以及它如何与“事件”一起使用。在这两种情况下如何以及在何处声明变量,...如果您能提供一个可重现的小例子,那就太好了。但是,我不确定周围是否还有很多 ovm。为什么不使用“uvm”?
  • 这是一个老项目...你到底需要知道什么?

标签: events system-verilog uvm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多