2016-09-16 92 views
1

我希望连接例如信号取决于宏的值:如何实现信号连接取决于SystemVerilog中宏的值(`如果FOO == X)?

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。

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

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

回答

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