本文主要是介绍uvm_config_db,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 功能意义
- 命令解析
- class hierarchy
- class定义
- methods
- get
- set
- exists
- wait_modified
- 细节注意
- 参考文档
理解仍深入不下去,还需要不断学习uvm和systemverilog的知识。
放在这里,以备以后的提升吧。
功能意义
uvm_config_db#(T)
是一个类,用于配置uvm_component实例的资源;uvm_config_db主要是提供了一种资源配置的简化方法。
命令解析
class hierarchy
uvm_config_db#(T)
或者
uvm_config_db
T就是待配置选项的type类型。
class定义
class uvm_config_db#(type T = int
) extends uvm_resource_db#(T)
methods
- get。判断
inst_name
的field_name
,是否等于指定的value。 - set。设置
inst_name
的field_name
。 - exists。检查
inst_name
的field_name
设置值,是否有效。 wait_modified
。等待inst_name
的field_name
开始配置;否则后续命令不继续往下执行。
get
static function bit get(
uvm_component cntxt,
string inst_name,
string field_name,
inout T value
)
uvm_component cntxt
是UVM树形结构的起始点。可以认为是string inst_name
的相对层次路径。uvm_component cntxt
与string inst_name
,配合得到UVM树形结构的具体层次。string field_name
是指定层次下的field字段名称。inout T value
是field字段的type类型。- get的返回值是function bit类型(不要看成简单的bit类型),即0或者1。1代表指定层次的
inst_name
,其对应field_name
的value值,并做好了get function工作。
常用实例源代码:
uvm_config_db#(virtual my_if)::get(this, "", "vif", vif)
由此得知:
1. get作为function,前两个参数,决定了UVM树形结构的具体层次;
2. get的第三个参数,field_name
字段名称;
3. get的第四个参数,是指定层次的inst_name
,其对应field_name
的value值。
个人理解:
正如UVM实战里讲的,uvm_config_db#(T)::get
是收信;uvm_config_db#(T)::set
是寄信。
set
static function void set(
uvm_component cntxt,
string inst_name,
string field_name,
T value
)
initial beginuvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", input_if);uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.mon", "vif", input_if);uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.o_agt.mon", "vif", output_if);end
exists
static function bit exists(
uvm_component cntxt,
string inst_name,
string field_name,
bit spell_chk =
)
bit spell_chk
;为1的话,表示打开spell拼写检查而且做了相关function的工作。- 疑问:什么是spell检查? 自己阅读了UVM库源代码,意思应该是“如果没有找到指定
inst_name
的field_name
,就报告warning”。
wait_modified
static task wait_modified(
uvm_component cntxt,
string inst_name,
string field_name
)
细节注意
uvm_config_db#(T)
的功能都是静态的,所以功能调用必须要用::
符号;- 仿真命令行参数里加上
+UVM_CONFIG_DB_TRACE
,就可以显示所有配置DB的值。是仿真波形可以probe的意思?!个人理解,应该是的;因为uvm_config_db的function都是静态函数,可以被仿真波形显示出来值的。 - 如果
uvm_config_db#(T)::set
的第一个参数是null,代表第二个参数inst_name必须是UVM属性层次结构,其完整的绝对路径。 uvm_component cntxt
与string inst_name
, 因为类型不一样,所以空含义是分别用null
和""
表示的。
参考文档
www.accellera.org/images/downloads/standards/uvm/UVM_Class_Reference_Manual_1.2.pdf
http://www.accellera.org/images/downloads/standards/uvm/UVM_Class_Reference_Manual_1.2.pdf
这篇关于uvm_config_db的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!