Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类中使用Systemverilog静态变量_Verilog_System Verilog_Uvm - Fatal编程技术网

在类中使用Systemverilog静态变量

在类中使用Systemverilog静态变量,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,我遇到了一个问题,如有任何意见/建议,我将不胜感激: 我的测试台有一个代理,它有以下组件: 基类a——它定义了两个静态变量——X和Y 两个新的类B和C,都是从A扩展而来的。它们都使用基类中声明的静态变量。 另一类D利用B和C做某事 假设D类是我的顶级代理,我称之为bfm_代理。这个bfm_代理可以在我的测试台上多次实例化。现在的问题是,X和Y将共享给所有bfm_代理。我不想那样。我只希望X和Y是静态的,这样每个bfm_代理中的B类和C类就可以使用这两个变量来做一些工作 我怎样才能做到这一点?我只

我遇到了一个问题,如有任何意见/建议,我将不胜感激:

我的测试台有一个代理,它有以下组件: 基类a——它定义了两个静态变量——X和Y 两个新的类B和C,都是从A扩展而来的。它们都使用基类中声明的静态变量。 另一类D利用B和C做某事

假设D类是我的顶级代理,我称之为bfm_代理。这个bfm_代理可以在我的测试台上多次实例化。现在的问题是,X和Y将共享给所有bfm_代理。我不想那样。我只希望X和Y是静态的,这样每个bfm_代理中的B类和C类就可以使用这两个变量来做一些工作


我怎样才能做到这一点?我只希望这两个静态变量的作用域仅在bfm_代理的每个实例中有效

您应该使用包含变量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

@newbie
static
方法。您需要的是实例变量。如果为了进行此类共享,您将
X
Y
变量声明为静态变量,我会说您删除
static
关键字,并为每个实例指定正确的值。如果你正在使用UVM,Dave的方法效果最好。因为帖子被标记为
UVM
,我假设他们已经在使用它了。如果不是,您仍然可以通过共享句柄而不是变量本身来执行类似的操作。