1.在SV中,我们将数据的生命周期分为动态(automatic)和静态(static)
2.局部变量是动态生命周期,其生命周期同所在域共存亡,例如function/task中的临时变量,调用结束后,临时变量的生命也将终结。
3.全局变量是静态生命周期,从程序执行开始到结束一直存在,例如module中的变量默认都是全局变量。
4如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,离开后会被销毁。
而static变量从仿真开始时就被创建,在进程/方法执行过程中,自身不会别销毁,还会被多个进程/方法共享。
module cnt (); function automatic int auto_cnt(input a); int cnt = 0; cnt += a; return cnt; endfunction function static int static_cnt(input a); static int cnt = 0; cnt += a; return cnt; endfunction function int def_cnt(input a);//不声明默认为static static int cnt = 0; cnt += a; return cnt; endfunction initial begin $display("@1 auto_cnt = ",auto_cnt(1)); $display("@2 auto_cnt = ",auto_cnt(2)); $display("@1 static_cnt = ",static_cnt(1)); $display("@2 static_cnt = ",static_cnt(2)); $display("@1 def_cnt = ",def_cnt(1)); $display("@2 def_cnt = ",def_cnt(2)); end endmodule 输出结果: # @1 auto_cnt = 1 # @2 auto_cnt = 1 # @1 static_cnt = 1 # @2 static_cnt = 2 # @1 def_cnt = 1 # @2 def_cnt = 2
module中定义的都是static(静态),所以下题明显选ABCD。