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++相同。