在类中使用Systemverilog静态变量
我遇到了一个问题,如有任何意见/建议,我将不胜感激: 我的测试台有一个代理,它有以下组件: 基类a——它定义了两个静态变量——X和Y 两个新的类B和C,都是从A扩展而来的。它们都使用基类中声明的静态变量。 另一类D利用B和C做某事 假设D类是我的顶级代理,我称之为bfm_代理。这个bfm_代理可以在我的测试台上多次实例化。现在的问题是,X和Y将共享给所有bfm_代理。我不想那样。我只希望X和Y是静态的,这样每个bfm_代理中的B类和C类就可以使用这两个变量来做一些工作在类中使用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类就可以使用这两个变量来做一些工作 我怎样才能做到这一点?我只
我怎样才能做到这一点?我只希望这两个静态变量的作用域仅在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
@newbiestatic
方法。您需要的是实例变量。如果为了进行此类共享,您将X
和Y
变量声明为静态变量,我会说您删除static
关键字,并为每个实例指定正确的值。如果你正在使用UVM,Dave的方法效果最好。因为帖子被标记为UVM
,我假设他们已经在使用它了。如果不是,您仍然可以通过共享句柄而不是变量本身来执行类似的操作。