硅芯思见:SystemVerilog中的生命周期lifetime

本文探讨了SystemVerilog中变量的生命周期,包括static和automatic的区别。通过示例解释了静态变量在整个仿真过程中的存活期,而动态变量仅在调用过程中存在。变量的生命周期由其声明位置决定,例如module外的变量默认静态,静态方法中的变量可显式声明为动态等。文章还指出对方法或结构体的生命周期修饰符会影响其中变量的生命周期属性。
摘要由CSDN通过智能技术生成

在SystemVerilog中我们经常会用到static,用以表示一种“静态”,而这种“静态”经常用来表示变量在整个仿真过程中的“存活期”,即生命周期。关于这个所谓的生命周期我们先通过一个示例有个直观的了解。

【示例】 

【仿真结果】

示例中,任务add2x2在initial过程块中被调用了两次,两次调用的时间不同,传入的参数也不同,但是最终的仿真结果是相同的,并且从仿真波形上可以看到任务add2x2中的temp在3ns时,从1变成了2,并且正是因为这次temp的变化导致第一次调用add2x2的结果被第二次调用add2x2影响,从而导致最后的加法结果也发生了变化。我们对示例进行修改再看下仿真结果会如何。

【示例】任务标识符前增加automatic关键字 

【仿真结果】

该示例与上例不同之处仅在于add2x2声明时增加了一个关键字automatic,其他代码都一模一样,但是此时两个示例的仿真结果不同,即第一次调用add2x2的结果并没有受到第二次add2x2执行的影响,这是为什么呢?其实这主要与SystemVerilog中变量的生命周期有关,在SystemVerilog中lifetime主要是针对变量而言的,主要用于表述变量在整个仿真过程中是否一直占用空间。在SystemVerilog中,lifetime主要有两种:一种是static静态的,一种是automatic动态的,一般静态变量存在于整个仿真过程中直到仿真结束,而动态则仅存在于其被调用的过程中。变量声明时所在的代码决定了该变量具有静态的生命周期还是动态的生命周期,本文将通过示例对lifetime各种应用场景进行说明。

1 声明于module/program/interface/checker/task/function之外的变量,具有静态的生命周期

【示例】 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅芯思见

你的鼓励是我创作的最大源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值