uvm config db在继承component的部件和继承object的部件中的使用

场景:在test case中有uvm_config_db set. 一个config:uvm_config_db#()::set( pointer,path, "cfg",cfg);

1.继承component的部件,有uvm_driver,uvm_sequencer,uvm_monitor等。

在build_phase中先用get_type的方式例化一个cfg。然后uvm_config_db#()::get(pointer,path,"cfg",cfg);此path与test case中的path相同。

2.继承object的部件,有uvm_sequence. uvm_config.

首先声明cfg。不需要new config,然后在body或者pre_body中进行uvm_config_db 的get。

uvm_config_db#()get(pointer,get_full_name(),"cfg",cfg); 第二个参数换成get_full_name()来获得有效路径。

3. 关于uvm_config_db需要注意的几点。

3.1 set和get最好一一对应,可以set 多次,get一次,获得的是最后set的值。

3.2 关于set的path。set的默认指向路径是uvm_test_top(test那一层)。get最不易出错的是写全路径。举例:

1.test 中uvm_config_db#(cfg_t):: set(null,"*","lzlz_cfg",lzlz_cfg); "*"意思是set下面的层次都可以看得到。

scoreboard中 uvm_config_db#(cfg_t)::get(null,"uvm_test_top.env.lz_scoreboard","lzlz_cfg",lzlz_cfg);

重要的是第三个参数必须要保持一致,是set和get共用的名字。前两个参数是指的全部路径,对于get来说指向具体的get位置。

3.3 遇到过的uvm_config_db的奇怪的用法。

在model中set, uvm_config_db#(virtual if)::set(null,"",$sformatf("TX_NAME_%d",INST),tx);

在monitor中set, uvm_config_db#(virtual vif)::get(this,"",$sformatf("TX_NAME_%d",lane_num),tx_vif);

关于两边的path问题,都没有设定却能够正常使用。

关于uvm_config_db可以这样理解,uvm_config_db#(uvm_object)::set(comp,string0,string1,obj),set 操作可以认为做了一个联合数组aa[{comp.get_full_name(),string0,string1}] = obj,而get操作就是得到 aa[{comp.get_full_name(),string0,string1}],那么关于你的问题,在transaction中get某个obj,就可以这样,在test中uvm_config_db#(uvm_object)::set(null,string0,string1,obj),而get时也是uvm_config_db#(uvm_object)::get(null,string0,string1,obj),这样即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值