Static and Automatic

变量

内存空间

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);
    `
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值