If statement 系统Verilog变量模块名称

If statement 系统Verilog变量模块名称,if-statement,macros,verilog,system-verilog,substitution,If Statement,Macros,Verilog,System Verilog,Substitution,是否可能有一个变量模块名,然后由某个参数选择?我正在宏定义中查找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 不能使用宏进行特定于实例的

是否可能有一个变量模块名,然后由某个参数选择?我正在宏定义中查找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

不能使用宏进行特定于实例的映射。在分析生成块之前,宏会在预处理步骤中展开


唯一接近这一点的是config块,它允许您为特定实例从不同的库中选择相同名称的模块。但是没有条件运算符

作为数百个端口问题的可能解决方案,假设所有实例都具有相同的端口集,您可以通过定义实例宏以不同方式解决此问题:

`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);

if(SOME_PARAM == 0)
   `INST(mod_e)
else
   `INST(mod_w)


端口列表中出现一些表达式求值,名称不匹配。我没有在这里展示。是的,在给定的语言限制下,这将是一个很好的解决方案。非常感谢。好的,谢谢你解释这个区别。我相信Serge下面的答案很接近,是实现我所追求的目标的好方法。
`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);

if(SOME_PARAM == 0)
   `INST(mod_e)
else
   `INST(mod_w)