我在网上搜索但找不到问题的答案。我正在尝试在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
但是当我这样做时,我收到错误 - CUVFGS:“无效的生成索引”。
当我试图将宏定义放在括号中时,如下所示:
`define TX_TOP_PATH(first_idx,second_idx) (aaa.F[first_idx].bbb.S[second_idx].ccc)
我收到错误 - EXPSMC:“期待分号(';')”
有什么想法吗?
Liav
答案 0 :(得分:0)
我认为你有两个问题:
i)if
是保留字。您无法致电wire
if
。
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