1.对于module,例化在top.sv里面一般选择带参数。用generate,genvar等减少代码量。
module #(inst = 0)(); endmodule
top.sv里面例化。
for(genvar i=0;i
module#(.inst(i)) u_module ( .......);
end
2.interface的多个例化。在module中set,在uvm_env的什么地方get。interface是连接tb与env的唯一通道。
module中set时放在initial begin end块中,
if test_if;
int num;
uvm_config_db#(virtual if)::set(null,"",$formatf("test%d_if",num), test_if);
//这个地方的第二的参数在单个if的时候是指向get的全路径,这里没有指定。
在uvm_env中。在connect phase中get。
virtual if v_if;
int num=0;//class中声明
uvm_config_db#(if)::get(this,"",$formatf("test%d_if",num),v_if);//注意,get和set在formatf中设置的相同。
3.例化多个monitor。在env中。
monitor test_monitor[$];
build_phase里面。
for(int i=0;i
test_monitor.push_back(monitor::type_id::create($formatf("TEST_MONITOR%d",i),this));
end
此时,例化了n个test_monitor.句柄是test_monitor[0],别名叫TEST_MONITOR0.env中用到的是test_monitor[0]比较多,可以用for循环减少代码量。