#UVM# 关于 config_db 机制中的set和get函数

config_db机制用于在UVM验证平台间传递参数。它们通常都是成对出现的。set函数是寄信,而get函数是收信。如在某个测试用例的build_phase中可以使用如下方式寄信:

uvm_config_db#(int)::set(this, "env.i_agt.drv", "pre_num", 100);

详细解释1

其中第一个和第二个参数联合起来组成目标路径,与此路径符合的目标才能收信。

第一个参数必须是一个uvm_component实例的指针

第二个参数是相对此实例的路径

第三个参数表示一个记号,用以说明这个值是传给目标中的哪个成员的

第四个参数是要设置的值,是一个具体的数据或者存储数据的变量成员

在driver中的build_phase使用如下方式收信:

uvm_config_db#(int)::get(this, "", "pre_num", pre_num);

get函数中的第一个参数和第二个参数联合起来组成路径。

详细解释2

第一个参数也必须是一个uvm_component实例的指针

第二个参数是相对此实例的路径。一般的,如果第一个参数被设置为this,那么第二个参数可以是一个空的字符串。

第三个参数就是set函数中的第三个参数,这两个参数必须严格匹配

第四个参数则是要设置的变量。

三种等价写法

null == uvm_root::get() == 

initial begin
  uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", input_if);
end
initial begin
  uvm_config_db#(virtual my_if)::set(uvm_root::get(), "uvm_test_top.env.i_ag t. drv", "vif", input_if
end
initial begin
  uvm_config_db#(virtual my_if)::set(uvm_top, "uvm_test_top.env.i_ag t. drv", "vif", input_if
end

跨层次指针使用

uvm_config_db#(int)::get(this.parent, "drv", "pre_num_max", pre_num_max);
或者:
uvm_config_db#(int)::get(null, "uvm_test_top.env.i_agt.drv", "pre_num_max", p re_num_max);

 

拓展疑问

1. uvm_object 继承类之间可以使用 config_db 吗?

2. uvm_object 继承类和 uvm_component继承类之间,可以使用 config_db 机制吗?

3. interface 和  uvm_object/uvm_component 之间可以config_db 吗 ? 

4. sequence 和 uvm_component 之间可以config_db 吗 ? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那么菜

你的鼓励和批评是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值