变量
内存空间
static
这个静态变量将会只有一份内存空间,即使这个class拥有多个instance,这个变量也只有一份,所有instance都共用这个变量。
automatic
相反,动态变量是每个instance都有自己的一份变量,有各自的内存空间,有几个instance就有几个此变量,互相之间不会相互影响。
Lifetime
static
Static变量的lifetime是整个eleboration(用于初始化)和simulation的时间。
automatic
Automatic变量的lifetime决定于其所在的call或者block。使用的时候创建,用完就回收。
例如一个function的automatic变量,只在这个function call的时候存在,call结束了就没了。
Initialization
static
静态变量的初始化,不是在仿真时段执行到某个语句进行的,是在 time 0之前就完成了初始化,无论其所在的class是否有instance, 同时初始化只会执行一次,即使多次执行到初始化语句都不会再次执行。即在仿真time 0 之前完成一次初始化。
静态变量的初始化还可以调用函数进行初始化,但函数必须也是静态函数。
class template #(string name = "");
static int me = get();
static function int get();
`uvm_info("template","init static value me",UVM_NONE)
return 2;
endfunction
endclass
module top;
initial begin
run_test("my_test");
end
endmodule
class my_test extends uvm_test;
`uvm_component_utils(my_test)
function new (string name,uvm_component parent=null);
super.new(name,parent);
endfunction
task run_phase(uvm_phase phase);
`