系统 Verilog 参数化模块名称

问题描述

假设在设计中,所有模块的输入/输出端口都是相同的。但是,模块名称不同,模块数量因项目而异。

是否可以有 2 个参数 -> 可以合成吗?

AVG()

解决方法

在 SystemVerilog 中无法使用字符串作为标识符名称。

与您想要做的事情相去甚远的唯一功能是配置 config,您可以在其中将实例化模块数组的每个实例映射到同名但来自不同库的模块。

>
module top;
for (genvar i==0;i<NUM_OF_MODULE_COUNTS; i++) begin : block
    MOD u_inst (.port_a(a),.port_b(b)).....);
end
endmodule

然后在您的 config 文件中您将拥有

instance top.block[0].u_inst use lib0;
instance top.block[1].u_inst use lib1;
instance top.block[2].u_inst use lib2;

然后您需要将不同版本的 MOD 编译到每个库中。

但最终,输入可能更简单

    module_a u_insta (.port_a(a),.port_b(b)).....);
    module_b u_instb (.port_a(a),.port_b(b)).....);
    module_c u_instc (.port_a(a),.port_b(b)).....);