我試圖通過實例覆蓋序列。 的示例代碼將能夠最好地描述它:uvm set_inst_override序列
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
我的目標是隻覆蓋SEQ2與SEQ3(其類型擴展SEQ2的類型)。 我沒有得到任何錯誤,但原始序列運行, 我在做什麼錯了?
由於提前,
以斯哈
首先,小CLAR因爲你似乎對UVM的首要機制有點困惑。重寫時,您不會用另一個實例替換對象的特定實例。你正在控制對象的類型。因此,說明您的目標的正確方法是:「將'seq2'的類型從'my_seq_c'覆蓋到'my_err_seq_c'」。您不需要定義'seq3'字段以從重寫機制中獲益(也可以從您的代碼中看到,您根本沒有使用它)。 – 2014-09-29 14:14:15