【问题标题】:UVM phases for transactions objects交易对象的 UVM 阶段
【发布时间】:2016-05-26 12:27:06
【问题描述】:

我有一个与 UVM 阶段有关的问题。据我了解 UVM 阶段,例如build_phase、connect_phases,只对uvm_component有效,是派生类。

这意味着从 uvm_transaction 派生的所有类,即 uvm_sequence,uvm_sequence_item 不支持这些阶段。而在代码中如果我们这样写

class setupSeq  extends uvm_sequence #(seqItem);
        `uvm_object_utils(setupSeq  )

    function build_phase (uvm_phase phase);
         req = seqItem::type_id::create("req");
     endfunction

    task body();
        start_item(req);
          …
        finish_item(req);
    endtask
…

endclass

这将产生模拟错误,因为 build_phase 将永远不会被调用,并且主体任务无法识别“req”对象。

所以我的问题是 – 为什么 uvm_transaction 即 uvm_sequence 类不支持阶段?

【问题讨论】:

    标签: system-verilog uvm


    【解决方案1】:

    因为你不需要它们。当您开始构建序列时,您已经处于 run_phase。所有序列的生命周期都在 run_phase 期间,因此在序列中包含其他阶段没有意义。具有单独的构建/连接/运行阶段的原因是为了有序地启动测试平台,这样您就可以从一个组件连接到另一个组件,而不必担心其他组件是否存在。

    所以把你的 req 构造放在序列的构造函数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      相关资源
      最近更新 更多