【问题标题】:Parameter array in VerilogVerilog中的参数数组
【发布时间】:2014-06-23 19:55:16
【问题描述】:

是否可以在 Verilog 中创建 parameter 数组?例如,如下所示:

parameter[TOTAL-1 : 0] PARAM_ARRAY = {1, 0, 0, 2}

如果不可能,有什么替代解决方案?

【问题讨论】:

    标签: verilog hdl


    【解决方案1】:

    给定的示例是将解压缩的值分配给打包的参数数组。这在 Verilog 中是不允许的。

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

    parameter [7:0] PARAM_ARRAY [TOTAL-1 : 0]   = {8'd1, 8'd0, 8'd0, 8'd2};
    

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

    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 解决方案,您需要创建一个长向量:

    parameter [8*TOTAL-1:0] PARAM_ARRAY = {8'd1, 8'd0, 8'd0, 8'd2};
    

    然后使用硬编码PARAM_ARRAY[7:0] 或使用+: 的切片访问:PARAM_ARRAY[8*index +: 8]。请注意,+: 需要 Verilog-2001 或更高版本(甚至大多数开源模拟器都支持)。 Indexing vectors and arrays with +:

    【讨论】:

    • 请注意,由于连接运算符的歧义,某些工具将要求进行赋值:= '{1, 0, 0, 2};
    • 如果使用 Cadence NCVerilog 进行模拟,从命令行运行模拟器时需要包含 +sv 开关。这是为了将包含参数定义的文件视为 SystemVerilog 文件
    • @Prashant 编译参数强制将 Verilog 文件作为 SystemVerilog 读取。这种编译参数是一种不好的做法。如果您的项目使用旧版 Verilog 库,则它可能具有在 SystemVerilog 中作为关键字的变量或实例名称。更好的方法是更改​​您想要成为 SystemVerilog 的文件的文件扩展名;从 .v 到 .sv。这是一个通用的解决方案,任何现代 HDL 工具(模拟器/综合/lint/formal/等)和语法高亮器都会根据其扩展名解析单个文件。
    • @Greg 感谢您提供信息。会听从你的建议。
    • 据我所知,这个答案是不正确的。该语法似乎不适用于普通 Verilog,并且建议的 IEEE Std 1364-2005 第 4.10 节 Parameter 中没有记录数组语法。我将 Greg 建议的参数语句复制并粘贴到 Vivado 中,我得到“警告:与未调整大小的文字连接;将解释为 32 位。错误:仅在 SystemVerilog 中允许使用未打包维度的参数。错误:无法将打包类型分配给未打包类型。”向 RHS 添加撇号前缀会导致撇号出现语法错误。
    【解决方案2】:

    Verilog 没有参数数组,也没有 C 风格的数组初始化,所以你基本上被卡住了。两种传统的解决方案是将所有内容组合成一个大(宽)参数(并使用“源”和“目标”中的循环来打包和解包宽参数,就像您通过数组传递数组一样模块端口),或者重新考虑您的问题以避免使用数组。

    您可以在 SystemVerilog 中执行此操作,但您没有问过这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多