Parameter array in Verilog
是否可以在verilog中创建参数数组? 例如,如下所示:
1 | parameter[TOTAL-1 : 0] PARAM_ARRAY = {1, 0, 0, 2} |
如果不可能,替代解决方案是什么?
提前致谢
给定的示例将未打包的值分配给打包的参数数组。 Verilog不允许这样做。
Verilog仅支持基于简单矢量的参数。它不支持解压缩的数组。替代了Verilog的SystemVerilog确实支持参数数组。几乎所有现代Verilog模拟器实际上都是SystemVerilog模拟器(至少对于商业模拟器而言;开源模拟器没有完全支持)。要将文件读取为SystemVerilog,请将.v的文件扩展名更改为.sv。然后,您可以将解压缩后的数据分配给二维参数数组:
1 | parameter [7:0] PARAM_ARRAY [TOTAL-1 : 0] = {8'd1, 8'd0, 8'd0, 8'd2}; |
类型名称也被允许。例如,使用
1 | parameter integer PARAM_ARRAY [TOTAL-1 : 0] = {1, 0, 0, 2}; |
记录在:
- IEEE Std 1364-2001 3.11参数
- IEEE Std 1364-2005 4.10参数
- (SystemVerilog)IEEE Std 1800-2012 6.20常量
作为纯Verilog解决方案,您将需要创建一个长向量:
1 | parameter [8*TOTAL-1:0] PARAM_ARRAY = {8'd1, 8'd0, 8'd0, 8'd2}; |
然后使用硬编码为
Verilog没有参数数组,也没有C样式的数组初始化,因此您基本上陷入了困境。两种传统的解决方案是将所有内容组合为一个大的(宽)参数(并使用"源"和"目标"中的循环来打包和拆包宽参数,就像您通过一个数组传递一个数组一样)。模块端口),或者重新考虑您的问题以避免使用阵列。
您可以在SystemVerilog中完成此操作,但是您没有对此提出疑问。