在Verilog-2001标准中,任务或函数中的变量可以定义为动态变量。
动态变量的存储区域由软件工具动态分配,访问后在空之间释放。

动态变量主要用于描述测试程序、抽象系统级、事务级或总线功能模型中的验证程序。
动态变量也可以用来编写可重入任务。
在SV中,有两个关键字,static和automatic,用来表示声明的变量是静态的还是动态的。
在模块级别,所有变量必须是静态变量,而任务、函数、begin...结束还是分叉...join可以根据关键字显示和声明。
例如,以下代码显示静态函数中声明的动态变量:
function int count_ones ; automatic logic [31:0] count = 0; automatic logic [31:0] temp = data; for begin if count++; temp >>= 1; //等价于 temp = temp >> 1; end return count;endfunction1. 静态变量和动态变量的区别打电话时的区别
动态变量:每次调用它都会打开一个新的空房间。
静态变量:变量的值在两次调用期间保持不变。因此,如果你想知道一个变量被调用了多少次,就应该把它声明为一个静态变量。
默认声明的差异在模块中,开始...结束,分叉...join和非动态任务和函数,默认情况下它们是静态变量。

在动态任务和函数中,默认为动态变量。
模块级别的变量必须是静态变量。
2. 变量的初始化在Verilog中
在模块级声明的Verilog Only变量可以内联初始化。
在SV中
在Verilog的基础上,允许任务和函数声明的变量有嵌入式初始化。
静态变量和动态变量初始化的区别
静态变量的初始化不能合成,动态变量的初始化可以合成。
静态变量在模拟开始前初始化,动态变量在被调用时初始化。下次调用静态变量时,会保留上次调用后的值,而动态变量会开辟一个新的存储室空并在下次调用时重新初始化。
如果任务或函数是可重入的,那么它应该被设置为动态的,并且其中的变量也应该是动态的。
如果用一个任务或函数来描述一个独立的硬件部分,并且不能重入,那么就应该把它设置成静态的,它里面的变量也应该是静态的。


