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 = %0d",auto_cnt(1));
$display("@2 auto_cnt = %0d",auto_cnt(2));
$display("@1 static_cnt = %0d",static_cnt(1));
$display("@2 static_cnt = %0d",static_cnt(2));
$display("@1 def_cnt = %0d",def_cnt(1));
$display("@2 def_cnt = %0d",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。