Я пытаюсь переопределить последовательность по экземпляру. Пример кода будет описывать его лучше всего: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', чтобы извлечь выгоду из механизма переопределения (также как вы можете видеть из своего кода, вы его вообще не используете). –