Macros 双变量宏用法systemverilog

Macros 双变量宏用法systemverilog,macros,system-verilog,Macros,System Verilog,我在网上搜索了一下,但找不到我问题的答案。我试图在systemverilog中使用双变量宏 在一个文件中,我声明了以下宏: `define TX_TOP_PATH(first_idx,second_idx) aaa.F[first_idx].bbb.S[second_idx].ccc 在第二个文件(在模块中)中,我尝试将此宏与生成嵌套for循环一起使用。例如: wire if[15:0]; generate for (first_idx = 1; first_idx< 4; f

我在网上搜索了一下,但找不到我问题的答案。我试图在systemverilog中使用双变量宏

在一个文件中,我声明了以下宏:

`define TX_TOP_PATH(first_idx,second_idx)  aaa.F[first_idx].bbb.S[second_idx].ccc
在第二个文件(在模块中)中,我尝试将此宏与生成嵌套for循环一起使用。例如:

wire if[15:0];
generate
    for (first_idx = 1; first_idx< 4; first_idx++)    
    begin : first_loop
       for (second_idx = 0; second_idx < 4; second_idx++)
       begin : second_loop
          assign if[4*first_idx + second_idx].clk = `TX_TOP_PATH(first_idx,second_idx).clk;
       end
    end
endgenerate
我得到一个错误-EXPSMC:“应该是分号(';')”

有什么想法吗


Liav我想你有两个问题:

i)
如果
是保留字。如果,则不能调用
电线

ii)您需要将
first_idx
second_idx
声明为
genvar

  wire iif[15:0];    // "if" is a reserved word

  generate
    genvar first_idx, second_idx;    // these need to be declared as genvars
    for (first_idx = 1; first_idx< 4; first_idx++)    
    begin : first_loop
       for (second_idx = 0; second_idx < 4; second_idx++)
       begin : second_loop
         assign iif[4*first_idx + second_idx] = `TX_TOP_PATH(first_idx,second_idx).clk;
       end
    end
  endgenerate
导线iif[15:0];//“if”是一个保留字
生成
genvar first_idx,second_idx;//这些需要声明为genvars
for(first_idx=1;first_idx<4;first_idx++)
开始:第一个循环
for(second_idx=0;second_idx<4;second_idx++)
开始:第二个循环
分配iif[4*第一个idx+第二个idx]=`TX\U顶部路径(第一个idx,第二个idx).clk;
结束
结束
最终生成

嗯,我的例子不准确。导线名称实际上不是“if”,而是类似于“dut_if”的名称,因此这不是问题所在。关于genvar,你是对的,我实际上对两个索引都使用了genvar,但我忘了在这里复制它。但仍然不起作用:(然后我认为你需要发布一个帖子,这从一开始就是个好主意。
  wire iif[15:0];    // "if" is a reserved word

  generate
    genvar first_idx, second_idx;    // these need to be declared as genvars
    for (first_idx = 1; first_idx< 4; first_idx++)    
    begin : first_loop
       for (second_idx = 0; second_idx < 4; second_idx++)
       begin : second_loop
         assign iif[4*first_idx + second_idx] = `TX_TOP_PATH(first_idx,second_idx).clk;
       end
    end
  endgenerate