在类中使用Systemverilog静态变量

时间:2014-12-05 02:58:31

标签: verilog system-verilog uvm

我遇到了问题,并希望得到任何意见/建议:

我是我的测试平台的代理,它有以下组件: 基类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的每个实例中有效。

1 个答案:

答案 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.Xmyconfig.Y