我一直在尝试在测试的运行阶段在config db中设置队列值,并尝试按顺序使用uvm_config_db但是我没有成功(在uvm_config_db的get调用中没有获得),仅在下面提到的错误出现,请让我知道我出错了以及如何纠正它。此外,BCL的UVM_ERROR中似乎存在印刷错误,而不是“[RNFNAME] Resrouce”它应该是“[RNFNAME]资源”。
UVM_INFO ../tests/du_test_sanity.sv(116) @ 100000.0 ps: uvm_test_top [QUEUE_VAL] qu : '{3, 4, 2, 1, 7, 1, 1, -1, 0, 0}
UVM_ERROR @ 100000.0 ps: reporter [RNFNAME] Resrouce named not found in name map; cannot change its search priority
使用以下
测试run_phase `uvm_info("QUEUE_VAL",$sformatf("qu : %p",qu), UVM_NONE);
foreach(qu[i])
uvm_config_db #(bit [15:0])::set(uvm_root::get(),"*",qu[i],qu[i]);
在seqeunce中,我试图使用task body()中的get调用来读取队列值;
foreach(qu[i])
uvm_config_db #(bit [15:0])::get(uvm_root::get(), "*", qu[i], temp[i])
foreach(temp[i])
`uvm_info("COMP", $sformatf("string1 : %0h", temp[i]), UVM_LOW);
另外请告诉我是否有任何其他可行的方法将队列值从run_phase传递到序列
答案 0 :(得分:0)
uvm_config_db
的第三个参数是一个字符串。
set方法的完整签名是void uvm_config_db #( type T = int )::set( uvm_component cntxt , string inst_name , string field_name , T value );
T
是要配置的元素的类型 - 通常是虚拟接口或配置对象。cntxt
和inst_name
一起形成一个范围,用于在数据库中查找资源。范围是通过将实例名称附加到上下文的完整层次名称来形成的,例如{cntxt.get_full_name(),"。",inst_name}。 field_name
提供资源名称value
实际上将被放入数据库中。这是一个例子。
interface abc a1( clk , reset );
...
uvm_config_db #(virtual abc)::set(null, "*", "my_vir_inf", a1);
答案 1 :(得分:0)
您可以使用
在组件中设置值foreach(qu[i])
uvm_config_db#(int)::set(this,"*",$sformatf("qu[%0d]",i),qu[i]);
并使用
获取其他组件foreach(qu[i])
uvm_config_db#(int)::get(this,"*",$sformatf("qu[%0d]",i),temp[i]);