Macros 如何实现信号连接取决于宏&x27;SystemVerilog中的s值(`if FOO==X)?

Macros 如何实现信号连接取决于宏&x27;SystemVerilog中的s值(`if FOO==X)?,macros,system-verilog,Macros,System Verilog,我希望连接实例信号取决于宏的值: moduleA u_MODULE_A ( ... `if FOO == 0 .a (siga), .b (sigb), .c (sigb), `elif FOO == 1 .a (sigb), .b (siga), .c (sigc), `elif FOO == 2 .a (sigc), .b (sigb), .c (siga), ... `endif ...); modul

我希望连接实例信号取决于宏的值:

moduleA u_MODULE_A (
    ...
`if FOO == 0
    .a (siga),
    .b (sigb),
    .c (sigb),
`elif FOO == 1
    .a (sigb),
    .b (siga),
    .c (sigc),
`elif FOO == 2
    .a (sigc),
    .b (sigb),
    .c (siga),
 ...
 `endif
 ...);
moduleA
有100多个端口,
FOO
宏目前有15个可能的值(将添加更多)

我目前的解决方案是: 1.为每个值创建附加宏:FOO_0,FOO_1。。。 2.使用generate多次实例化moduleA

这两种解决方案都需要大量的工作来维护代码


有谁有更好的解决方案吗?

如果宏可以像这样工作,那么维护它不是也需要很多工作吗

那么:

localparam FOO = `FOO;
generate
  case (FOO)
   0: begin
    assign a = siga;
    assign b = sigb;
    assign c = sigc;
   end 
   1: begin
    assign a = sigb;
    assign b = siga;
    assign c = sigc;
   end
   ...
  endcase
endgenerate

moduleA u_MODULE_A (
 ...
 .a (a),
 .b (b),
 .c (c),
 ...);