SystemVerilog静态变量和动态变量

【system verilog】静态/动态变量/方法的理解 system verilog 静态变量、静态方法、动态变量、动态方法概念区分。 阅读详情

在Verilog-2001标准中任务或函数中的变量可以定义为动态变量

动态变量的存储区是由软件工具动态分配的(每次调用都会建立新的存储区),访问结束后空间被释放

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

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

在SV中,有static和automatic两个关键字,用来表示声明的变量是静态还是动态

在模块一级中,所有的变量必须是静态变量,而在任务、函数、begin…end或fork…join中的变量可以根据关键字进行显示声明

例如下面的代码,在静态函数中显示声明动态变量:

function int count_ones (input	[31:0]	data);
    automatic	logic	[31:0]	count = 0;
    automatic	logic	[31:0]	temp = data;
    
    for(int i = 0; i <= 32; i++) begin
        if(temp[0])	
            count++;
        temp >>= 1;  //等价于 temp = temp >> 1;
    end
    
    return count;
endfunction
1. 静态变量和动态变量的区别

调用时的区别

  • 动态变量:每次调用时会重新开辟新的空间

  • 静态变量:在两次调用期间变量的值会保持

    因此,如果希望知道某个变量被调用的次数,那么这个变量应该声明为静态变量

缺省声明时的区别

  • 在模块、begin…end、fork…join以及非动态的任务和函数中,缺省时为静态变量
  • 在动态的任务和函数中,缺省时为动态变量
  • 模块一级的变量必须是静态变量
2. 变量的初始化
  • 在Verilog中

Verilog只有模块级声明的变量可以内嵌初始化

  • 在SV中

SV在Verilog的基础上,允许任务和函数声明的变量有内嵌初始化

静态变量和动态变量初始化的区别

  1. 静态变量初始化是不可综合的,动态变量的初始化可以综合

  2. 静态变量在仿真开始前便完成初始化,动态变量是在被调用时进行初始化

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

3. 静态变量和动态变量使用原则
  • 在always和initial块中,需要内嵌初始化就声明为动态变量,不需要内嵌初始化用静态变量
  • 如果任务或函数是可重入的,应设置被动态的,其内的变量也应是动态的
  • 如果任务或函数用来描述独立的硬件部分,且不可重入,应该设置为静态的,其内的变量也应为静态的

Systemverilog 静态变量 (static) 与 动态变量(automatic) 区别 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录静态变量 Static 动态变量 Automatic一、静态变量和动态变量的定义二、使用步骤1.引入库2.读入数据总结 静态变量 Static 动态变量 Automatic 此章节主要包括静态变量与动态变量的区别,两者在verilog与systemverilog的不同,同时举3个实际例子,说明Systemverilog的内嵌初始化 一、静态变量和动态变量的定义 自动变量:也可以动态变量,变量的存储区在需要时 阅读详情

相关推荐

【SV】SystemVerilog中静态方法、变量与默认方法、变量的全面解析

静态成员属于类本身,动态成员属于类的实例。静态成员在编译时初始化,动态成员在实例化时初始化。静态成员:属于类本身,所有对象共享,编译时初始化动态成员:属于对象实例,每个对象独立,实例化时初始化静态方法:通过类名调用,只能访问静态成员动态方法:通过对象调用,可以访问静态和动态成员。

m0_57945974的博客 703

System Verilog学习7——静态变量与动态变量

静态变量与动态变量的区别 在SV中,将数据的生命周期分为动态(automatic)和静态(static)。 局部变量的生命周期同其所在域共存亡,如function/task中的临时变量,在其方法调用结束后,临时变量的生命也将终结,所以它们是动态生命周期。 全局变量伴随着程序开始执行到结束一直存在,它们是静态生命周期。 如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,而在离开该进程/方法后,automatic变量会被销毁。而static变量在仿真开始时

bjc15050103的博客 1577

【system verilog】静态与动态变量/方法的生命周期解析与应用场景

本文深入解析SystemVerilog中静态变量与动态变量的生命周期特性及应用场景。通过实例代码详细说明静态变量在全局配置和跨实例通信中的优势,以及动态变量在临时数据存储和对象状态管理中的适用性。同时对比静态方法与动态方法的差异,提供数字电路设计中的最佳实践指南,帮助开发者优化代码结构和内存使用效率。

weixin_28692817的博客 357

静态变量与动态变量的区别

(3)生命周期上:全局变量在程序开始运行之前的初始化阶段就诞生了,到整个程序结束退出的时候才死亡,而局部变量在进入局部变量所在代码块时诞生,在该代码块退出的时候死亡。判断一个变量能不能使用,有没有定义,必须注意两点:第一,该变量定义的作用域是否在当前有效,是否包含当前位置。自动(动态)变量:每次调用该函数的时,系统会给它分配存储空间,该函数调用结束释放其存储空间,即动态变量每次被调用都会被赋初值。静态变量:多次调用该函数,只有第一次调用会赋初值,其余调用时,其值都是上次调用该函数执行结束后的值。

m0_70358541的博客 6792

Systemverilog中static、automatic区别

systemverilog::static、automatic说明

qq_28284627的博客 4309

SV、UVM与验证思想

文章目录1 SV基础1.2 sequence和property的比较1.3 SV数据类型1.4 fork线程1.5 任务和函数1.6 接口interface2 UVM基础2.1 UVM的优势和劣势、方法学的演变2.0 UVM树形结构2.1 UVM组件Components2.1 Components和Objects的联系与区别2.2 sequence机制2.3 interface接口和virtual interface2.4 phase机制2.5 factory工厂机制2.6 config_db机制2.7 f

IC Beginner的博客 9420

systemverilog 静态变量 vs 动态变量

《writing testbenches》 static vs. Automatic variables

qq_29362849的博客 317

草稿#systemverilog# 说说Systemverilog中《static》那些事儿(生命周期属性篇)

其实将一个任务函数或块声明成static或者automatic还是为了决定其内部数据的生命周期属性,这与静态方法的static有本质上的不同。注意第二句话"具有自动变量生命周期的静态方法",也就是说这个任务虽然是静态任务,但是其内部数据的缺省情况下的生命周期是自动的。

那么菜的博客 655

Systemverilog

Systemverilog 数据类型 l 合并数组和非合并数组 1)合并数组: 存储方式是连续的,中间没有闲置空间。 例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。 表示方法: 数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】 Bit[3:0] [7:0] bytes ; 2)二维数组和合并数组识别: 合并数组: ...

Danny321_a的博客 1460

linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

tun/tap设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。tun/tap对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。对于tun/tap设备而言,一端连接的是应用程序(通过 字符设备文件),一端连接的是网络协议栈。

糖果墙的博客 6411

数学建模灵敏性分析(一阶、二阶灵敏度)python代码+懒人专用版

对于勉强看懂了灵敏度分析的同学来说,本文给出一个方便移植、修改的python程序,可以很方便地进行灵敏度分析。

春江花朝秋月夜 1万+

SystemVerilog变量的生命周期:从入门到避坑指南

SystemVerilog作为硬件设计和验证的通用语言,变量生命周期这个看似基础的概念却藏着不少坑。今天我们就来聊聊那些让人头大的初始化顺序、多线程访问冲突,以及动态内存管理的门道。一、变量是什么?先来点历史课1.1 从寄存器到变量当年Verilog搞出wire和reg两大护法时,可能没想到后来会这么热闹。wire就是个信号传输通道,而reg才是真能存东西的主儿——虽然名字叫寄存器,但用着用着大家...

ilearn的博客 627

Maxwell中铜导体热损计算的关键步骤与技巧

本文详细介绍了在Maxwell软件中准确计算铜导体热损的关键步骤与实用技巧。重点阐述了如何正确设置涡流场求解器、启用涡流效应、根据工作频率计算并应用肌肤深度以指导网格剖分,以及准确施加激励和定义电流回路。文章还强调了使用温度相关材料属性和进行后处理验证的重要性,旨在帮助工程师获得可靠的热损计算结果,优化产品设计。

weixin_29232121的博客 498

system verilog 中的变量和方法类型

sv中的变量和方法类型

qq_43355574的博客 724

节卡Jaka Zu APP编程避坑指南:从频繁通讯错误到稳定Socket交互的调试心得

本文详细解析了节卡Jaka Zu APP编程中常见的通讯错误问题,并提供了从基础排查到高级调试的完整解决方案。通过优化网络配置、固件匹配、心跳机制和数据交互规范,开发者可实现稳定的Socket通讯,有效提升工业机器人操控的可靠性。文章特别针对v1.6.7.3版本的典型问题给出了实用调试技巧。

weixin_42639633的博客 325

激光雷达的64线,32线,16线,你弄懂了吗?

激光雷达的 64 线、32 线、16 线是指激光雷达系统中能够同时发射和接收激光脉冲的激光线的数量5。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 2637

system verilog 静态/动态 变量 方法

静态变量 动态变量: class Transaction; static int count = 0; // 静态变量 int id; // 动态变量 function new(); id = count++; // 先赋值id = count, 再count++(count等于+1后的值,count++等于count+1前的值) endfunction endclass Transaction t1,t2; // 静态变量在声明时就应该对其初始化 count = 0; init

踩坑记录 2092

UG NX二次开发(C#)--详细讲述编程模板NXOpen_CS_Wizard的代码意义,帮你轻松进入NXOpen(C#)二次开发

有几个读者私信问我,在看了“NX1957在VS2019上二次开发的环境配置”后,能完成了UG NX二次开发(C#)模板的配置,也能根据模板创建工程,但是对工程文件.cs不甚理解;并且,在UG Styler新建完成后,其也有一个dlx文件和.cs文件,也不清楚怎么使用。本文先对UG NX二次开发(C#)模板文件进行讲解,在下一个博客中,讲解Styler新建后的模板文件。以上就是对编程模板NXOpen_CS_Wizard(c#)的讲解,其实只要明白了逻辑关系,编程实现只是时间问题,祝你好运。

GimiGimmy 1786

system verilog编程题_SystemVerilog基本语法总结(上)

数据类型l 合并数组和非合并数组1)合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。表示方法:数组大小和位,必须在变量名前指定,数组大小必须是[msb:lsb] ;如 Bit [3:0] [7:0] bytes ;2)二维数组和合并数组识别:合并数组: bit [3:0] [7:0] arrys; 大小在变...

weixin_42115003的博客 2231

Palantir如何利用Ontology构建企业级数据地图

Palantir通过"本体论"(Ontology)技术构建动态数据地图,将多源异构数据转化为可操作的业务知识网络。该技术突破传统ETL模式,建立覆盖全组织的语义层,将原始数据映射为"客户""订单"等业务对象及其关联关系,形成可推理的语义网络。核心Foundry平台提供本体管理工具(OMA)和开发套件(OSDK),支持从数据连接到应用开发的全流程。虽然采用专有实现而非标准本体语言,但该架构成功解决了数据孤岛问题,赋能复杂决策分析

Learning 1797

YOLOv8【第十一章:视频追踪与流处理篇·第3节】匈牙利算法(Hungarian Algorithm)与 KM 算法匹配机制详解!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 445

【IC验证】systemverilog_静态与动态

详细介绍了systemverilog中静态和动态的概念,从变量和方法的两个角度进行介绍,给出了每个成员的特性,并寄出了实际的例子。

weixin_47730622的博客 944

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Systemverilog知识点总结

Systemverilog 数据类型 l 合并数组和非合并数组 1)合并数组: 存储方式是连续的,中间没有闲置空间。 例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。 表示方法: 数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】 Bit[3:0] [7:0] bytes ; 2)二维数组和合并数组识别: 合并数组: bit [3:0] [7:0] arrys; 大小在变量名前面放得,且降序 二维数组: int array

weixin_44857476的博客 3933

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Systemverilog的一个牛人总结

10#数据类型 合并数组和非合并数组 合并数组: 存储方式是连续的,中间没有闲置空间。 例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。 表示方法: 数组大小和位,必须在变量名前指定,数组大小必须是[msb:lsb] Bit[3:0] [7:0] bytes; 二维数组和合并数组识别: 合并数组: bit [3:0] [7:0] arrys; 大小在变量名前面放得,且降序 二维数组: int arrays[0:7] [0:3] ; 大小在变量名后面放得,可降序可

weixin_44969124的博客 1433

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Systemverilog中static、automatic在常用块中作用详解

static/automatic在systemverilog中的使用及区别

weixin_44029856的博客 1704
上一篇: Verilog 数据类型
下一篇: Verilog中的FIFO设计-同步FIFO篇
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值