我有一个与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并且body任务无法识别“req”对象。
所以我的问题是 - 为什么uvm_transaction不支持这些阶段,即uvm_sequence类?
答案 0 :(得分:4)
因为你不需要它们。当你开始构建序列时,你已经在run_phase中了。所有序列的生命周期都在run_phase期间,因此序列中的其他阶段没有意义。具有单独的构建/连接/运行阶段的原因是以有序的方式启动测试平台,以便您可以从一个组件到另一个组件建立连接,而不必担心其他组件是否存在。
所以把你的req构造放在序列的构造函数中。