[UVM] factory override
factory override
·
一、componnet override
要覆盖默认组件:
a)定义一个从默认组件类派生的类
b)执行覆盖
c)build env
应该在test中指定环境覆盖
1.1 type override
第二个参数replace决定是否替换现有的覆盖(replace = 1)
1.2 Instance Overrides

代码中实例覆盖的顺序会影响实例覆盖的应用
一个简单的例子
class my_agt extends uvm_agt;
`uvm_component_utils(my_agt)
function new(string name,uvm_component parent);
super.name(name);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
//for debug
`uvm_info("AGT",$sformatf("%s(%s)",get_full_name(),get_type_name()),UVM_NONE)
endfunction
........
endclass
class my_env extends uvm_env
`uvm_component_utils(my_env)
my_agt agt1;
function new(string name,uvm_component parent);
super.new(name,parent);
agt1=my_agt::type_id::create("agt1",this);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction
task run_phase(uvm_phase phase);
phase.raise_objection(this);
#100ps;
phase.drop_objection(this);
endtask
........
endclass
class agt2 extends my_agt;
`uvm_component_utils(agt2)
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
endclass
class my_test extends uvm_test;
`uvm_component_utils(my_test)
my_env env1;
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
env1=my_env::type_id::create("env1",this);
my_agt::type_id::set_inst_override(agt2::get_type(),"uvm_test_top.env1.agt1");
endfunction
......
endclass
最终运行结果
![]()
如果test中override和env1次序调换,结果有误
class agt2 extends my_agt;
`uvm_component_utils(agt2)
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
endclass
class my_test extends uvm_test;
`uvm_component_utils(my_test)
my_env env1;
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
my_agt::type_id::set_inst_override(agt2::get_type(),"uvm_test_top.env1.agt1");
env1=my_env::type_id::create("env1",this);
endfunction
......
endclass
如有不正,欢迎指正
参考:uvm_user_guide
更多推荐




所有评论(0)