Systemverilog中static、automatic在常用块中作用详解

Static和automatic

static和automatic这两个概念在其他语言中也是有出现的,也有许多文章对这两个概念及其作用作出了描述,但在systemverilog中仍然存在一些比较奇怪且未提及的点,在此学习并记录。

作用范围

static和automatic,顾名思义,一个是静态,一个是动态,而静态和动态则代表这个变量或者这个方法的一个生存周期。静态则代表这个变量或者方法存在于整个仿真周期,在仿真开始时则被创建,不会被销毁和重置,多个实例共享一个变量或方法。动态则代表这个变量或者方法只存在于其被调用的过程中,在调用时创建,调用完毕时销毁,单个实例使用其所属的变量或方法。

在systemverilog中,除了在class中,变量和方法在没有特殊定义的情况下是automatic的,而在其余的块中,如module,program等中,变量和方法都默认是static的。

实例(static/automatic function/task)

一般来说staic和antomatic对于function/task来说都是放于function/task之后,不能放于之前。若放于之前,static function虽然不会出现语法报错,但此处的static并不起作用,automatic function出现这样的写法则会出现语法报错现象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是测试的一个情况以及其仿真结果,可以看到除了add3()函数因为添加了automatic使其内部未特殊声明的变量在重新调用时被销毁更新了,其余的三种情况的内部变量皆是保留了被调用的痕迹,因为这些函数均在在module内部定义,若不添加修饰符,则默认为staict,第二种static function实际上只是声明了该方法是static,但其内部的变量的属性还是得看是处于class或者其他块内,此处因为在module内部,所以也保留了被调用的痕迹。

而也可以通过直接在变量名前加上static/automatic修饰词来改变变量的属性,这是优先级最大的属性修饰。
在这里插入图片描述
在这里插入图片描述
此时可以看到,add3()的调用痕迹被保留了下来。

上一个例子是将函数放在module中定义,下个例子将函数放在class中定义看看情况如何,function函数文件并未改变,仅改变了function定义的位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以从结果看到,除了add1()的function static保留了函数被调用的痕迹,其余三种情况均没有保留痕迹,此处可以看到add2()的static function中的变量并不是static。但static function这样的声明可以在class 不实例化的情况下调用,同static 变量名在class不实例化的情况下调用一样,通过类名::方法名,其方法内部变量属性先看自身,再看上一层。
在这里插入图片描述
在这里插入图片描述

特殊情况

函数内部自定义的同名输出变量的属性这种情况,此处也区分了automatic和static,以及class和module的情况,代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种情况下,出现了全1的结果,说明在module中,不论static还是automatic函数,其自定义的同名输出变量属性都是automatic。
在这里插入图片描述
在这里插入图片描述
若将其在class中定义,则从结果来看,function static的自定义同名输出属性是static的,其余情况为automatic。

总结

除上述的特殊情况外,一个变量及方法,若没有任何的static/automatic修饰符,则其是static还是automatic取决于它所处的最内层的定义,即一个变量不处于任何的function/task内,则其除非处于class内部,否则这个变量是静态的,而function/task,若属于class,其内部的变量则是动态,其余均是静态。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值