一、静态变量、动态变量说明: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
- 分析:以n=5为例,下面每一行A值总是和传给func的参数保持一致,是因为A是static变量,只有一个存储地址,每次传入新值会覆盖之前的旧值;