【问题标题】:How does one initialize an integer array in Verilog?如何在 Verilog 中初始化一个整数数组?
【发布时间】:2019-10-03 01:26:36
【问题描述】:

在 Samir Palnitkar 的 Verilog HDL: A Guide to Digital Design and Synthesis 的第 36 页上,它说,数组“在 Verilog 中允许用于 reg、整数、时间和向量寄存器数据类型。 "例如,它用integer count[0:7]; 声明了一个整数数组。如何用一组值初始化数组(计数)?

我翻遍了那本书,寻找有关如何初始化(计数)的指针,但找不到任何可以帮助我的东西。

解决方案像编码一样简单吗,integer count[0:7] = { 2, 3, 5, 7, 11, 13, 17, 19 };

【问题讨论】:

    标签: verilog


    【解决方案1】:

    对于 Verilog,您可以为系统任务分配一个数组 $readmemh()/$readmemb()

    分配
    一个
    进入

    一个
    时间

    一个
    程序

    (添加额外的行以反映乏味)

    如果赋值是某种表达式,建议使用 for 循环。如果数字是完全唯一的,则需要编写许多语句。

    分配整个数组的能力(例如:integer count[0:7] = { 2, 3, 5, 7, 11, 13, 17, 19 }; amd arrayB = arrayA;)是 SystemVerilog 的一项功能。现代 Verilog 模拟器是 SystemVerilog 模拟器。通常,启用 SystemVerilog 所需要做的就是将文件扩展名从 .v 更改为 .sv

    【讨论】:

      【解决方案2】:

      是的,Verilog 中允许数组用于 reg、整数、时间和向量寄存器数据类型。

      在初始化数组时,请确保您在初始块内执行它..

      你可以使用for循环进行初始化

      `module test;
        integer i;
        integer count[0:7];
        initial
          begin
            for(i=0;i<8;i=i+1)
              count[i]=i**2;
            for(i=0;i<8;i=i+1)
              $display(count[i]);
          end
      endmodule`
      

      希望这会有所帮助!

      【讨论】:

      • 不。使用纯 Verilog,您无法分配整个数组。我刚刚在 3 个模拟器上进行了尝试,确保它们已针对 Verilog-1995 进行了配置(并再次使用 Verilog-2001 运行)。 SystemVerilog 可以分配整个数组(使用相同的模拟器验证)。还有i++是SystemVerilog,在Verilog中不存在。
      • 你说得对,格雷格。我已经在 EDA 中对此进行了编码,所以我不记得前增量和后增量。是的,这可以在 SV 中完成,但在 verilog 中我们可以像 i=i+1;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 2010-12-28
      • 2012-12-13
      相关资源
      最近更新 更多