【发布时间】:2014-09-29 12:50:11
【问题描述】:
我正在尝试逐个覆盖序列。 一个示例代码将最好地描述它:
class my_vir_seq extends base_vir_seq;
my_seq_c seq1, seq2;
`uvm_object_utils_begin(my_vir_seq)
`uvm_field_object(seq1, UVM_ALL_ON)
`uvm_field_object(seq2, UVM_ALL_ON)
`uvm_object_utils_end
`uvm_declare_p_sequencer(v_seqr)
function new(string name = "my_vir_seq");
super.new(name);
endfunction // new
virtual task body();
`uvm_do_on(seq1, p_sequencer.my_seqr)
`uvm_do_on(seq2, p_sequencer.my_seqr)
endtask // body
endclass
class my_err_vir_seq extends my_vir_seq;
my_err_seq_c seq3;
`uvm_object_utils_begin(my_err_vir_seq)
`uvm_field_object(seq3, UVM_ALL_ON)
`uvm_object_utils_end
`uvm_declare_p_sequencer(v_seqr)
function new(string name = "my_err_vir_seq");
super.new(name);
my_seq_c::type_id::set_inst_override(my_err_seq_c::get_type(), "sve.v_seqr.my_err_vir_seq.seq2" );
endfunction // new
endclass
我的目标是只用seq3 覆盖seq2(它的类型扩展了seq2 的类型)。
我没有收到任何错误,但原始序列运行,
我做错了什么?
提前致谢,
伊扎尔
【问题讨论】:
-
首先,做一个小澄清,因为您似乎对 UVM 中的覆盖机制有点困惑。覆盖时,您不会用另一个实例替换对象的特定实例。您正在控制对象将具有的类型。因此,陈述您的目标的正确方法是:“将
seq2的类型从my_seq_c覆盖到my_err_seq_c”。您无需定义seq3字段即可从覆盖机制中受益(从代码中也可以看出,您根本没有使用它)。
标签: system-verilog uvm