我遇到了问题,并希望得到任何意见/建议:
我是我的测试平台的代理,它有以下组件: 基类A-它定义了两个静态变量-X和Y. 两个新的类B和C,BOTH从A扩展。它们都使用在基类中声明的静态变量。 另一个D级利用B和C来做某事。
让我们说D级是我的顶级代理,我称之为bfm_agent。这个bfm_agent可以在我的测试平台上多次实例化。现在的问题是,X和Y将被共享给所有bfm_agent。我不希望这样。我只是希望X和Y是静态的,这样每个bfm_agent中的B和C类都可以使用这两个变量来做一些工作。
我怎样才能做到这一点?我只是希望这两个静态变量的范围仅在bfm_agent的每个实例中有效。
答案 0 :(得分:2)
您应该使用包含变量X和Y的配置对象。然后让基类A构造配置对象(如果它不存在),然后为每个代理实例设置它。
class A extends uvm_component;
my_config_c myconfig;
function void build_phase(uvm_phase phase);
...
if(!uvm_config_db#(myconfig)::get(get_parent(),"","myconfig",myconfig)) begin
myconfig = my_config_c::type_id::create("myconfig");
uvm_config_db#(myconfig)::set(get_parent(),"","myconfig",myconfig)
end
endfunction
现在,B和C类都可以引用myconfig.X
和myconfig.Y
。