Macros 双变量宏用法systemverilog
我在网上搜索了一下,但找不到我问题的答案。我试图在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
`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