由于某种原因,我在创建时的对象不会选择通过测试传递的配置。当我启用跟踪时,我没有看到GET,只有SET。 我的反对意见如下:
class top_env_cfg extends uvm_object;
int set_default_env = 1;
`uvm_object_utils_begin(top_env_cfg)
`uvm_field_int(set_default_env,UVM_DEFAULT);
`uvm_object_utils_end
function new(string name = "top_env_cfg");
super.new(name);
endfunction
endclass
在我的测试中,在build_phase中,我正在执行以下操作:
uvm_config_db#(int)::set(this, "*", "set_default_env" ,0);
在我的build_phase环境中,我创建了这个对象:
env_cfg = top_env_cfg::type_id::create("env_cfg", this);
创建此对象后,set_default_env仍为1。 可能有什么问题,以及我如何调试它。 提前谢谢。
答案 0 :(得分:1)
了解"自动检索config_db资源的重要事项"是不实际上是自动发生的。 This Verilab paper解释了幕后发生的事情,我在这里引用相关部分:
[...]在检索数据方面经常被问到的一个问题是: 你总是要显式调用get()函数吗?简短 答案是它取决于。在UVM中,有机制 自动从配置数据库中检索数据。在 为了让资源自动检索两件事必须 发生:
- 首先,必须使用现场自动化宏向工厂注册该资源。
- 其次,必须在build_phase()函数中调用super.build_phase(阶段)。
"自动化"当您从super.build_phase()
致电uvm_component
时,将会进行检索。如果您在问题中提及,则表示uvm_object
(您没有UVM build_phase
),因此您需要明确执行uvm_config get()
调用以从数据库中检索资源。