使用uvm_config_db设置和获取队列值

时间:2017-09-18 10:35:22

标签: uvm

我一直在尝试在测试的运行阶段在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传递到序列

2 个答案:

答案 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是要配置的元素的类型 - 通常是虚拟接口或配置对象。
  • cntxtinst_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]);