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提供命令行参数来对它们进行设置:
+uvm_set_config_int=,,
+uvm_set_config_string=,,
如可以使用如下的方式对pre_num进行设置:
+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);

你可能感兴趣的:(UVM,uvm_config_int)