首页 > 其他分享 >systemverilog中的静态变量static和动态变量automatic

systemverilog中的静态变量static和动态变量automatic

时间:2022-10-04 09:22:58浏览次数:78  
标签:function 变量 静态 st static 动态 automatic

本文参考:

SystemVerilog静态变量和动态变量_行走的BUG永动机的博客-CSDN博客_systemverilog静态变量和动态变量

systemverilog之Automatic - 腾讯云开发者社区-腾讯云 (tencent.com)

https://blog.csdn.net/zhajio/article/details/101429431

 

Verilog 早期版本仅有静态生命周期的概念,同一个function或者task无论你调用多少次内部的变量都是分配的同一个地址。没有调用堆栈的操作。 

在Verilog-2001 标准中引入了动态生命周期的概念,任务或者函数中的变量可以定义为动态变量。

动态变量主要用来描述在测试程序、抽象系统级、transaction级或总线功能模型中的验证程序

动态变量也可以用来编写可重入的任务(当一个任务的前一次调用仍在进行时,可以再次调用)

在systemverilog中 用static和automatic 关键字来表示声明的变量是静态还是动态。默认是静态变量。在module中声明的变量必须是静态变量。在function,task,begin...end, fork...join 中的变量可以使用automatic声明为动态变量。默认也是静态变量。在这里如果是从C++转过来写SV的尤其要注意。

静态变量和动态变量的区别:

  初始化:

    静态变量初始化不可综合,动态变量的初始化可以综合。

    静态变量的初始化实在仿真前,动态变量的初始化是在被调用时发生的。

    静态变量在下次调用时保持上次调用后的值。动态变量在下次调用时会开辟新的存储空间并重新初始化。

  使用原则:

    在always和initial块中,需要内嵌初始化就声明为动态变量,不需要内嵌初始化用静态变量

    如果任务或函数是可重入的,应设置被动态的,其内的变量也应是动态的

    如果任务或函数用来描述独立的硬件部分,且不可重入,应该设置为静态的,其内的变量也应为静态的

例子:

复制代码

//sv file

import "DPI-C" function void recurr(input int a);

initial begin
recur(1);
recurr(1);
end
function void recur(int a); int st_v=0; automatic int at_v=0; st_v++; at_v++; $display("a: %0d, st_v: %0d, at_v:%0d",a,st_v,at_v); if(a==4) return; recur(a+1); endfunction


// C++ file:

extern "C" void recurr(int a){
int st_v=0;
int at_v=0;
st_v++;
at_v++;
printf("a: %0d, st_v: %0d, at_v: %0d\n",a,st_v,at_v);
if(a==4) return;
recurr(a+1);
}

 
复制代码

运行结果:

 

 从上面结果可以看出在sv的function中声明的变量默认就是静态的,重复调用时,变量的值维持上次的结果,除非声明为automatic。或者直接将function声明为automatic,此时function内部所有变量默认都会时automatic的

 

标签:function,变量,静态,st,static,动态,automatic
From: https://www.cnblogs.com/amxiang/p/16753200.html

相关文章

  • SAS 自动变量
    当SAS在生成数据集时,会产生一些自动变量,这些变量看不见并且是临时的不会放进生成的数据集中,但是可以像调用普通变量一样正常调用。常见的自动变量有:_N_:在DATAstep......
  • 成员变量和局部变量的区别
    1.相同点:1.1定义变量的格式:1.2先声明,后使用1.3变量都有其对应的作用域2.不同点:2.1在类中声明的位置的不同属性:直接定义在类的一对{}内局部变量,声明在方法内、方法形参、代码块......
  • 【linux】查看环境变量|getenv & setenv设置获取环境变量getenv & setenv 获取&设置环
    目录​​环境变量类型​​​​查看环境变量​​​​系统的环境变量​​​​进程的环境变量​​​​初始化时载入的环境变量​​​​执行过程中设置的环境变量​​​​环境变......
  • 第一季:1自增变量【Java面试题】
    第一季:1自增变量【Java面试题】​​前言​​​​推荐​​​​第一季:1自增变量​​​​题目​​​​结果​​​​分析​​​​字节码文件​​​​小结​​​​最后​​前言20......
  • 第一季:6成员变量和局部变量【Java面试题】
    第一季:6成员变量和局部变量【Java面试题】​​前言​​​​推荐​​​​第一季:6成员变量和局部变量​​​​题目​​​​考点?​​​​局部变量与成员变量的区别:​​​​数......
  • 数据量大的数组要开到全局变量 否则会造成运行超时
    1097.池塘计数  题目  提交记录  讨论  题解  视频讲解农夫约翰有一片 <spanid="MathJax-Span-2"class="mrow"><spanid="MathJax-Span-......
  • Jmeter组件:参数化之用户定义的变量
    1、UserDefinedVariables:用户定义的变量,可以将请求路径设置为变量或者将参数值设置为变量等2、添加一个变量存储http请求的路径3、通过${变量名}取值......
  • 第八篇: go 变量、常量、基本数据类型
    变量/*###########变量的定义和使用##########*/packagemainfuncmain(){ //1方式一:基本定义 //var关键字变量名变量类型=变量值 //varageint=18//定......
  • 使用bt面板中Python项目管理部署Django项目找不到static采坑记
    工作需要,准备在用django做一个小项目,本地测试没有问题,但是使用bt的工具“python项目管理器”部署到服务器上,找不到static文件(python项目管理器应用可以参考https://www.bt.......
  • Linux小技巧丨个性化显示命令提示符,PS1变量相关知识
    内容摘要:今天偶然出现服务器SSH连接后不显示用户名主机名和目录信息的情况,查询得PS1变量设置有误,根据一篇博客的内容,解决了这个问题,顺便分享一下个性化设置的学习笔记。......