是否可以用变量模块的名称,然后通过一些参数来选择?我正在寻找 if...else
内的宏定义。
module test;
`define NAME(x) if (x == 0) mod_e else mod_w
generate
for (genvar i = 0; i < 2; i++) begin
`NAME(i) inst_name (.a(a),.b(b),...);
end
endgenerate
endmodule
一种方法是像下面这样做,但需要把所有端口都连接2次,这对于有几百个IO的模块来说很不方便,而且容易出错。
module test;
generate
if (SOME_PARAM == 0) begin
mod_e inst_name (.a(a),.b(b),...);
end else begin
mod_w inst_name (.a(a),.b(b),...);
end
endgenerate
endmodule
作为一个可能的解决方案,你的 数百个港口 问题, 假设所有实例都有相同的端口集, 您可以通过定义一个实例宏来解决这个问题。
`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);
if(SOME_PARAM == 0)
`INST(mod_e)
else
`INST(mod_w)
你不能用宏来做特定的实例映射。宏会在生成块被解析之前的预处理步骤中被展开。
唯一与此接近的是 config
块,可以让你从不同的库中为特定的实例选择一个同名的模块。但是没有条件操作符。