You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog不同包中静态变量初始化顺序是否有规范?

SystemVerilog静态变量初始化顺序的标准规定

初始化时机的基本要求

从IEEE 1800标准的《6.8 变量声明》章节中,仅明确了静态变量的初始化时机:

将静态变量的初始值设置为变量声明的一部分(包括静态类成员),应在任何initial或always过程启动之前完成(另请参阅关于静态和自动生命周期变量初始化的6.21和10.5章节)。

但该章节并未定义不同静态变量之间的初始化顺序。


无依赖包的静态变量初始化顺序

对于两个相互独立的包:

package p1;
  int v1 = 1;
endpackage

package p2;
  int v2 = 2;
endpackage

标准中没有规定v1和v2的初始化顺序,具体执行顺序由仿真器厂商自行实现,属于未定义行为,无法跨仿真器保证一致性。你的猜测是正确的。


存在导入关系的包的静态变量初始化顺序

当包p2导入包p1时:

package p1;
  int v1 = 1;
endpackage

package p2;
  import p1::*;

  int v2 = 2;
endpackage

IEEE 1800标准的26.6节(包初始化)明确规定:如果包B导入了包A,那么包A的静态初始化必须在包B的静态初始化之前完成。因此p1中的v1会优先于p2中的v2完成初始化,这一逻辑是有标准文档支撑的。


背景说明

我并非要编写依赖初始化顺序的代码,而是遇到了间接依赖特定初始化顺序的代码问题,想了解标准是否有相关强制规定。

内容的提问来源于stack exchange,提问作者Tudor Timi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:16:05