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
相关产品推荐
相关产品推荐

