SystemVerilog中如何实现信号连接取决于宏的值(`if FOO==X)?
How to achieve signal connection depends on macro's value (`if FOO==X) in SystemVerilog?
我希望根据 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。
这两种解决方案都需要大量的代码维护工作。
有没有人有更好的解决方案?
如果宏能像那样工作,维护起来不是也很麻烦吗?
怎么样:
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),
...);
我希望根据 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。
这两种解决方案都需要大量的代码维护工作。
有没有人有更好的解决方案?
如果宏能像那样工作,维护起来不是也很麻烦吗?
怎么样:
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),
...);