UVM中set/get_config_int/string/object与uvm_cofig_int/string/object的使用

set_config与get_config
get_config_int这种写法最初来自OVM中,UVM继承了这种写法,并在此基础上发展出了config_db。set_config与get_config依然是UVM标准的一部分,并没有过时。
使用set_config_int来代替uvm_config_db#(int)::set的代码为:

//my_case0.sv
37 function void my_case0::build_phase(uvm_phase phase);
…
40 uvm_config_db#(uvm_object_wrapper)::set(this,
41                                         "env.i_agt.sqr.main_phase",
42                                         "default_sequence",
43                                          case0_sequence::type_id::get());
44 set_config_int("env.i_agt.drv", "pre_num", 999);  //3
45 set_config_int("env.mdl", "rm_value", 10);        //3
46 set_config_string("env.i_agt.sqr", "default_sequence", "case0_sequence");  //3
47 endfunction

在my_model中使用get_config_int来获取参数值:

//my_model.sv
20 function void my_model::build_phase(uvm_phase phase);
21 int rm_value;
22 super.build_phase(phase);
…
25 void'(get_config_int("rm_value", rm_value)));    //2
26 `uvm_info("my_model", $sformatf("get the rm_value %0d", rm_value), UVM_LOW)
27 endfunction

set_config_int与uvm_config_db#(int)::set是完全等价的,而get_config_int与uvm_config_db#(int)::get是完全等价的。
参数可以使用set_config_int设置,而使用uvm_config_db#(int)::get来获取;或者使用uvm_config_db#(int)::set来设置,而
使用get_config_int来获取。
除了set/get_config_int外,还有set/get_config_string和set/get_config_object。它们分别对应uvm_config_db#(string)::set/get和uvm_config_db#(uvm_object)::set/get。
config_db比set/get_config强大的地方在于,它设置的参数类型并不局限于以上三种。常见的枚举类型、virtual interface、bit类
型、队列等都可以成为config_db设置的数据类型。
在这些所有的类型中,最常见的无疑是int类型和string类型。UVM提供命令行参数来对它们进行设置:
<sim command> +uvm_set_config_int=<comp>,<field>,<value>
<sim command> +uvm_set_config_string=<comp>,<field>,<value>
如可以使用如下的方式对pre_num进行设置:
<sim command> +uvm_set_config_int="uvm_test_top.env.i_agt.drv,pre_num,'h8"
在设置int型参数时,可以在其前加上如下的前缀:'b、'o、'd、'h,分别表示二进制、八进制、十进制和十六进制的数据。如果不加任何前缀,则默认为十进制。
在本书即将出版时,UVM1.2发布,set_config与get_config被从UVM标准中移除,成为过时的用法。

在UVM中, uvm_config_int/string/object就是uvm_config_db的别名。

./example_and_uvm_source_code/uvm-1.1d/src/base/uvm_component.svh
typedef uvm_config_db#(uvm_bitstream_t)  uvm_config_int;
typedef uvm_config_db#(string)           uvm_config_string;
typedef uvm_config_db#(uvm_object)       uvm_config_object;
//例子:
uvm_config_object::set(this, "master", "cfg", cfg);
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UVM,可以使用uvm_config_db的set和get方法来设置和获取配置信息。这些方法可以用于在不同的组件之间传递数据。引用\[1\]的代码示例展示了如何使用uvm_config_db的set方法来设置一个接口数组。在这个例子使用了一个for循环来遍历接口数组,并将每个接口设置到配置数据库。引用\[2\]的代码示例展示了set方法的另一种用法,其第一个参数是一个环境对象,第二个参数是一个字符串,用于指定配置的位置,第三个参数是配置的名称,第四个参数是配置的值。引用\[3\]提到,在传递虚拟接口时,可以将第一个参数设置为null,UVM会自动将其替换为uvm_root::get(),即替换为uvm_top。uvm_top是uvm_root的一个唯一实例,是UVM的树根,也是一个全局变量,可以直接使用。 #### 引用[.reference_title] - *1* [UVMinterface数组的set,get](https://blog.csdn.net/zhajio/article/details/101195556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [uvm_config_db的set()与get()方法](https://blog.csdn.net/weixin_42294124/article/details/125016224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值