首页 > 解决方案 > 使用 $bits 时定义宏中的编译错误

问题描述

在编写以下宏时,我收到编译错误:

`define TEST1(out, in, sel)      \ \
  integer i;                      \ \
  always_comb begin                  \ \
    out = $bits(1'b0);               \\

    for(i=0; i<=$bits(sel); i=i+1)   \\
        out = out | ({$bits(out){sel[i]}} & in[i]);    \\
    end          ;

错误消息:

near "[": syntax error, unexpected '[', expecting ',' or '}'.

标签: verilogsystem-verilog

解决方案


删除空白行,每行只使用一个反斜杠。请参阅 IEEE Std 1800-2017,第 22.5.1 节“定义”

如果需要多行来指定文本,则换行符前面应加上反斜杠 (\)。前面没有反斜杠的第一个换行符应结束宏文本。

`define TEST1(out, in, sel)      \
  integer i;                      \
  always_comb begin                  \
    out = $bits(1'b0);               \
    for(i=0; i<=$bits(sel); i=i+1)   \
        out = out | ({$bits(out){sel[i]}} & in[i]);    \
    end          ;

推荐阅读