Verilog中的参数数组

use*_*437 2 verilog hdl

是否可以在verilog中创建参数数组?例如,类似以下内容:

parameter[TOTAL-1 : 0] PARAM_ARRAY = {1, 0, 0, 2}
Run Code Online (Sandbox Code Playgroud)

如果不可能,那可能是替代解决方案?

提前致谢

Gre*_*reg 9

给出的示例是将解压缩的值分配给压缩参数数组.Verilog不允许这样做.

Verilog仅支持基于简单向量的参数.它不支持解压缩的数组.SystemVerilog取代了Verilog,它支持参数数组.几乎所有现代Verilog仿真器都是SystemVerilog仿真器(至少对于商业仿真器而言;开源仿真器具有不完全的支持).要将文件读取为SystemVerilog,请将.v的文件扩展名更改为.sv.然后,您可以将解压缩分配给2维参数数组:

parameter [7:0] PARAM_ARRAY [TOTAL-1 : 0]   = {8'd1, 8'd0, 8'd0, 8'd2};
Run Code Online (Sandbox Code Playgroud)

类型名称也是允许的.例如,使用integer创建32x4数组:

parameter integer PARAM_ARRAY [TOTAL-1 : 0]   = {1, 0, 0, 2};
Run Code Online (Sandbox Code Playgroud)

这记录在:

  • IEEE Std1364-2001§3.11 参数
  • IEEE Std1364-2005§4.10 参数
  • (SystemVerilog的)IEEE标准1800至2012年 §6.20 常量

作为纯Verilog解决方案,您需要创建一个长向量:

parameter [8*TOTAL-1:0] PARAM_ARRAY = {8'd1, 8'd0, 8'd0, 8'd2};
Run Code Online (Sandbox Code Playgroud)

然后使用片段进行硬编码PARAM_ARRAY[7:0]或使用+::PARAM_ARRAY[8*index +: 8].请注意,+:需要Verilog-2001或更高版本(甚至大多数开源模拟器都支持).使用+编制索引向量和数组:

  • 请注意,由于连接运算符的模糊性,某些工具将需要转换赋值:`='{1,0,0,2};` (2认同)