Verilog 类方法中的静态整数显示意外行为
考虑以下代码:Verilog 类方法中的静态整数显示意外行为,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,考虑以下代码: class my_class; // *** constructor function new(string name = ""); super.new(name); endfunction // ** my_function function void my_function(); static int my_static_int = 0; my_static_int++; $display("my_static_int
class my_class;
// *** constructor
function new(string name = "");
super.new(name);
endfunction
// ** my_function
function void my_function();
static int my_static_int = 0;
my_static_int++;
$display("my_static_int = %0d", my_static_int);
endfunction
endclass
在我的代码中,假设我有一个带有body的序列-
// ** body
task body();
my_class my_class_A = new;
my_class_A.my_function();
endtask
我的问题是,如果我在测试中调用body
两次,第二次,My_static_int
的值是2,而不是我预期的值1
由于每次运行body时,my_class_A
都会被销毁(我使用%p验证这一点),因此在my_class
的完全不同对象上的后续运行不应该再次打印值1吗
也许我在这方面缺乏理解。。感谢您的帮助一个
静态
变量意味着在时间0之前只有一个变量副本和该变量的一次初始化。如果没有static
关键字,它将是一个自动变量,在每次调用函数时都会被分配和初始化
如果希望在每次构造对象时初始化变量,只需将其声明为类成员变量。a
static
变量意味着在时间0之前只有一个变量副本和该变量的一次初始化。如果没有static
关键字,它将是一个自动变量,在每次调用函数时都会被分配和初始化
如果您希望在每次构造对象时初始化一个变量,只需将其声明为类成员变量。我确实将其设置为类变量,这是我通常所做的(我想我会尝试不同的方法)。这种行为与其他OO语言不同吗?我假设类中的每个对象都有自己的静态变量副本。SV静态类变量行为与java和C++相同。我确实把它变成类变量,这是我通常做的(我想我会尝试不同的)。这种行为与其他OO语言不同吗?我假设类的每个对象都有自己的静态变量副本。SV静态类变量行为与java和C++相同。