理论上,变量声明(reg、wire、var)可以放置在module、interface中的任意位置,但我们仍然建议将所有变量的声明放置于module、interface的头部,这是由于隐式变量声明(implicit variable declaration)的存在,即在端口声明、模块例化端口信号连接、连续赋值(assign)发生时,如果该变量未声明过,那么在编译时会隐式地为其指定一个变量(1位logic类型),并且覆盖其后用户可能声明过的同名变量。
关键词:
variable declaration 变量声明,implicit variable declaration 隐式变量声明
避坑指南:
请将变量声明尽可能放置于module、interface的头部位置(或至少记得声明这些变量),同时可使用linting工具辅助检查,或仿真器编译时添加linting选项(例如,使用VCS时可添加编译选项+lint=all)。
参考代码: sv_module_implicit_variable.sv
编译结果:
仿真结果:
阅读手记: