据我所知,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类不支持这些阶段?
发布于 2016-05-26 23:37:23
因为你不需要他们。当您开始构造序列时,您已经在run_phase中了。所有序列的生命周期都在run_phase期间,因此在序列中包含其他阶段是没有意义的。有单独的构建/连接/运行阶段的原因是以有序的方式启动测试平台,以便您可以从一个组件连接到另一个组件,而无需担心另一个组件是否存在。
因此,将请求构造放在序列构造函数中。
https://stackoverflow.com/questions/37460845
复制相似问题