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

添加参数重写行后Verilog宏调用报右括号缺失编译错误

Verilog宏实例化报错:缺失右括号问题排查

编译错误信息

file:
../../chip1dsn/chip1x_abxclst/ababx_cluster/chip1x_aabx_cluster.sv  
`AABX_PG_TEMPLATE_CHIP1M(0);                        
.................................................................|

xmvlog: *E,EXPRPA
(../../chip1dsn/chip1x_abxclst/ababx_cluster/chip1x_aabx_cluster.sv,802|27):
expecting a right parenthesis

问题场景

报错触发于宏调用行AABX_PG_TEMPLATE_CHIP1M(0);,仅在宏定义中模块名与实例名之间新增参数重写行#( USE_XEC_CHIP1 = 0 )后出现该错误。宏定义代码如下:

`define AABX_PG_TEMPLATE_CHIP1M(num) \
CHIP1X_AXEMIS_PG                                                                              \
#( USE_XEC_CHIP1 = 0 )                                                                        \
u20_aabx_pg``num (                                                                       
    .AABX_ID                          (16'h``num                              ),          \
 ... (continued) ...

问题根源

核心问题是宏展开时的语法单元粘连:

  1. 参数重写行#( USE_XEC_CHIP1 = 0 )与实例名u20_aabx_pg``num之间没有足够的分隔,预处理器展开后会将两者解析为一个连续的非法token,破坏了实例化的语法结构。
  2. 宏拼接操作符 后的左括号(没有明确的空格分隔,进一步导致编译器无法正确识别实例名与端口列表的边界,最终误报缺失右括号。

解决方案

修改宏定义,确保语法单元之间有明确的分隔:

  • 在参数重写行与实例名之间添加空格或换行,保证两者是独立的语法单元。
  • 在宏拼接后的实例名与左括号(之间显式添加空格,避免粘连。

修改后的宏定义示例:

`define AABX_PG_TEMPLATE_CHIP1M(num) \
CHIP1X_AXEMIS_PG \
#( USE_XEC_CHIP1 = 0 ) \
u20_aabx_pg``num  ( \
    .AABX_ID                          (16'h``num                              ),          \
 ... (continued) ...

内容的提问来源于stack exchange,提问作者Chan Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:17:11