批量例化多个同样的module,interface,monitor的方法

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循环减少代码量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值