SV包作为模块参数传递的可行性及可综合实现方案问询
SystemVerilog 模块批量参数传递的可综合实现方案探讨
我查阅了SystemVerilog LRM,认为直接传递参数包的功能可能无法实现,但希望社区能提供可行思路。
我有一个名为common_module的模块,包含数十个参数,每次实例化时都声明所有参数过于繁琐,因此希望把相关参数打包进SV包,在实例化时直接传递整个包。但不同设计目标需要为common_module实例化不同的参数包,所以无法在common_module内部固定导入某个包;如果用宏定义来区分不同的导入规则,又会导致不同设计无法进行联合仿真。伪代码示例如下:
//top_0.sv module top_0 ... ... common_module common_0(.*); //使用某一整套参数集合 endmodule //top_1.sv module top_1 .. .. common_module common_1(.*); //使用另一套和common_0不同的参数集合 endmodule //TB.sv module TB; top_0 A(.*); top_1 B(.*); ... ... endmodule
目前的可选方案有两个:
- 接受每次实例化时写冗长的参数列表(冗余且代码可读性差)
- 维护
common_module的不同版本,每个版本仅导入对应的参数包
但我希望能实现如下逻辑(当前语法无效):
common_module #( .param_bundle(my_package_0)) common_0 (.*);
对应的模块声明如下:
module common_module #( parameter package param_bundle) ... ...
注意:解决方案必须支持可综合,不能仅适用于测试代码。
内容的提问来源于stack exchange,提问作者user2864293
相关产品推荐
相关产品推荐

