如何实现信号连接取决于SystemVerilog中宏的值(如果FOO == X)?

时间:2016-09-16 00:29:02

标签: macros system-verilog

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

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。

这两种解决方案都有很多维护代码的工作。

有没有人有更好的解决方案?

1 个答案:

答案 0 :(得分:2)

如果宏可以这样工作,那么维护这项工作还有很多工作吗?

怎么样:

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),
 ...);