override 求助
能不能在testcase里用override,
因为这个包在两个driver里用到,
如果我只想替换某个driver的包,该怎么替换?
class testcase1 extends base_test;
....
virtual function vlid build_phase(uvm_phase phase);
super.build_phase(phase);
tx_sequ=tx_sequence::type_id::create.....;
set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());
endfunction
....
endclass
class tx_sequence extends uvm_sequence #(pkg);
....
pkg tx_pkg;
virtual task body();
`uvm_do(tx_pkg)
endtask
....
endclass
这么改没起作用
?
只能override component吧
class tx_case_1 extends base_test;
...
...build_phase(uvm_phase phase);tx_sequ=tx_sequence::type_id::create.....;
set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());
endfunction
endtask
...
endclass
class tx_sequence extends uvm_sequence #(pkg);
pkg tx_pkg;
...
virtual task body();
`uvm_do(tx_pkg);
endtask
...
endclass
这样override不起作用,应该在哪override?
1. 注册到factory中(uvm_object/component_utils())
2. 使用factory机制即代理类type_id::create()方式实例化,而不是new()的方式。
3. 重载类与被重载类是派生关系,或有多重重载时,最终重载类与最初被重载类是派生关系。
4. component与object不能互相重载。
确认一下一上几条是否满足了?
谢谢!
用set_type_override_by_type(pkg::get_type(),pkg_ex::get_type());
这样可以override
但是set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());这样不行,
是不是因为tx_sequ和override在同一个build-phase里?
因为你使用的是uvm_do这个macro,而这个macro包含的uvm_create macro是使用的是create_by_type,因此只能使用set_type_override,如果你想用set_inst_override,则要这样,首先set_inst_override第一个参数填写sequencer的hier,同时不可以使用uvm_do,而必须把uvm_do进行分步使用,也就是第一步:tr = ...::type_id::create("name",get_sequencer());
第二步:uvm_send(tr)