If statement 系统Verilog变量模块名称
是否可能有一个变量模块名,然后由某个参数选择?我正在宏定义中查找if…else的语法If statement 系统Verilog变量模块名称,if-statement,macros,verilog,system-verilog,substitution,If Statement,Macros,Verilog,System Verilog,Substitution,是否可能有一个变量模块名,然后由某个参数选择?我正在宏定义中查找if…else的语法 module test; `define NAME(x) if (x == 0) mod_e else mod_w generate for (genvar i = 0; i < 2; i++) begin `NAME(i) inst_name (.a(a),.b(b),...); end endgenerate endmodule 不能使用宏进行特定于实例的
module test;
`define NAME(x) if (x == 0) mod_e else mod_w
generate
for (genvar i = 0; i < 2; i++) begin
`NAME(i) inst_name (.a(a),.b(b),...);
end
endgenerate
endmodule
不能使用宏进行特定于实例的映射。在分析生成块之前,宏会在预处理步骤中展开
唯一接近这一点的是config块,它允许您为特定实例从不同的库中选择相同名称的模块。但是没有条件运算符 作为数百个端口问题的可能解决方案,假设所有实例都具有相同的端口集,您可以通过定义实例宏以不同方式解决此问题:
`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);
if(SOME_PARAM == 0)
`INST(mod_e)
else
`INST(mod_w)
端口列表中出现一些表达式求值,名称不匹配。我没有在这里展示。是的,在给定的语言限制下,这将是一个很好的解决方案。非常感谢。好的,谢谢你解释这个区别。我相信Serge下面的答案很接近,是实现我所追求的目标的好方法。
`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);
if(SOME_PARAM == 0)
`INST(mod_e)
else
`INST(mod_w)