Systemverilog中static、automatic区别

一、静态变量、动态变量说明:Systemverilog绿皮书P60。补充说明如下:

  • Verilog早期版本仅有静态生命周期的概念,同一个function或者task无论你调用多少次内部的变量都是分配的同一个地址,没有调用堆栈的操作;
  • 在Verilog-2001标准中引入了动态生命周期的概念,task或func中变量可以定义为automatic;
  • automatic主要用来描述在测试程序、抽象系统级、transaction级或总线功能模型中的验证程序。automatic也可以用来编写可重入的任务;
    • 重入:当一个任务的前一次调用仍在进行时,可以再次调用,递归就是重入的一种;

二、Example1:program中默认变量都为static,如下代码中变量和函func都是static类型。其执行结果为:

  • 0 factorial=1       1 factorial=1                                                        //正确结果
  • 2 factorial=1       3 factorial=1       4 factorial=1        5 factorial=1  //error
    • 分析:以n=5为例,下面每一行A值总是和传给func的参数保持一致,是因为A是static变量,只有一个存储地址,每次传入新值会覆盖之前的旧值;
      • f(5)=f(A)               //此时A=5
      •      =f(4)*A            //此时A=4
      •      =f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值