类方法中的静态整数显示意外行为

时间:2017-09-12 20:12:01

标签: 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 = %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.

由于每次运行主体时都会销毁my_class_A(我使用%p验证这一点),因此my_class完全不同的对象的后续运行不应再次打印值

也许我的理解在这里缺乏..感谢任何帮助

1 个答案:

答案 0 :(得分:3)

static变量意味着在时间0之前只有一个变量副本和一个变量初始化。没有static关键字,它将是一个自动变量,它被分配和初始化每次调用函数时。

如果你想要一个每次构造对象时都被初始化的变量,只需将它声明为一个类成员变量。