Vivado中Verilog代码调用$size报错需切换SystemVerilog模式问题求助
错误原因
error: system call size not allowed in this dialect use system Verilog mode
$size是SystemVerilog专属的内置系统函数,不属于标准Verilog(IEEE 1364标准)的语法范围。你当前Vivado工程默认采用标准Verilog编译模式,不识别该系统函数,因此触发编译错误。
可直接落地的解决方案
方案1:启用SystemVerilog编译模式(推荐,无需修改代码)
你可以选择全局修改工程配置,或者仅修改单个文件属性:- 全局配置:打开Vivado工程后依次点击
Tools->Settings->Language Options,将Verilog dialect选项设置为SystemVerilog,保存后重新编译即可。 - 单文件配置:直接将对应
.v源文件的后缀修改为.sv,Vivado会自动对该文件启用SystemVerilog编译规则,不影响工程内其他Verilog文件。
- 全局配置:打开Vivado工程后依次点击
方案2:替换为标准Verilog兼容写法(无需修改编译配置)
如果你不想启用SystemVerilog模式,可直接替换$size(data)的调用:- 若data的位宽是固定16位,直接用数值
16替换$size(data)即可。 - 若data的位宽是参数化定义的,比如:
直接用定义位宽的参数parameter DATA_W = 16; wire [DATA_W-1:0] data;DATA_W替换$size(data)即可。
- 若data的位宽是固定16位,直接用数值
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

