Systemverilog 静态变量 (static) 与 动态变量(automatic) 区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


静态变量 Static 动态变量 Automatic

此章节主要包括静态变量与动态变量的区别,两者在verilog与systemverilog的不同,同时举3个实际例子,说明Systemverilog的内嵌初始化

一、静态变量和动态变量的定义

 自动变量:也可以动态变量,变量的存储区在需要时由软件工具动态地分配,在不需要时被释放。
  通俗上讲就是,如果数值不需要保存就可以使用动态变量。   静态变量:通常上需要保存的值需要被定义为静态变量。  相比于Verilog,Systemverilog增加了声明静态和自动变量的能力,Systemverilog增加了一个static关键字,允许任何变量被显性地声明为static或者automatic。

二、静态变量与动态变量应用举例

 函数功能如下:计算出数组里面1的个数,变量count为计算出1个数值,temp为传递的数组的存储值,分别将count、temp定义为都是静态变量、静态变量与动态变量、动态变量与动态变量的组合,观察其输出结果。
 第一种:count为static类型,temp为static类型
在这里插入图片描述
 输出结果:
在这里插入图片描述
 由此可以看出当count与temp都为automatic类型的时候,功能可以正确执行,automatic变量,每次进入任务和函数时,都会为变量动态地创建存储区,调用完毕释放,每次调用任务或函数时,内嵌初始值都会被赋值。
 所以每次count的初值都为0
 第二种:count为automatic类型,temp为static类型
在这里插入图片描述
 输出结果:
在这里插入图片描述
 查看波形
在这里插入图片描述
 观察输出结果发现:temp为不确定值,那是因为什么呢,由于static变量的内嵌初始化优先于仿真时刻0时刻之前,所以此时temp无法得到data的数值,所以是不确定的数值x

 第三种:count为static类型,temp为automatic类型
在这里插入图片描述在这里插入图片描述
 输出结果:

在这里插入图片描述
 结果出现了问题,第二次1的个数为4,第一次1的个数为3,两次相加的结果为7,但是第二次的结果为7,说明count发生了累加,那为什么会这样呢??
 这是因为count作为static变量,内嵌初始化只调用一次,第一次调用的结果会保留,这就是和automatic变量最大的区别。

总结

 所以静态变量static与动态变量automatic的区别在于内嵌初始化的区别,静态变量只初始化一次,所得的数值会保留,但是自动变量的值在函数调用的时候会初始化,所得数值不会保留,一定要注意哦!!!
  • 26
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值