首页 > 解决方案 > 系统 Verilog 参数化模块名称

问题描述

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

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

   parameter NUM_OF_MODULE_COUNTS = 10,
   parameter string MODULE_NAME[10] = {module_a,module_b,.....} 

genvar i ;

generate
 for (i==0;i<NUM_OF_MODULE_COUNTS; i++)
    MODULE_NAME[i] u_inst (.port_a(a), .port_b(b)).....);
endgenerate

标签: system-verilogsynthesizesystem-variable

解决方案


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

推荐阅读