提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
静态变量 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变量最大的区别。