2016-09-16 27 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), 
...);