在verilog中定义二维线阵列

时间:2016-03-21 12:54:17

标签: arrays verilog

这是一些用于在Verilog中定义二维线阵列的简单代码。

module test(a, b, c);

    input [63:0] a;
    input [63:0] b;
    output [63:0] c [63:0];

endmodule

编译代码时,我收到此错误。

Illegal reference to net array "c".

2 个答案:

答案 0 :(得分:3)

我不认为这个问题https://stackoverflow.com/questions/3011510/...有助于解决这个具体问题。

您收到此错误,因为它在Verilog(2009年之前合并到SystemVerilog中)是非法的,以便拥有两个(或更多)维数组的端口;对于端口上的数组,只允许简单的一维向量。

你可以有两个(或更多)维度的网络或变量数组,因为这个问题确实解释了https://stackoverflow.com/questions/3011510/...

值得注意的是System-Verilog中没有这样的限制(或者:允许使用多维数组。

答案 1 :(得分:0)

尽管Verilog不允许定义网络的二维或多维数组,但是使用'generate'语句有一个不错的解决方法。您可以生成一组导线,然后使用特定迭代对其进行寻址。这是一个示例:

module Example (
  input[7:0] in,
  output[7:0] out
);

  generate
    genvar i;
    for (i=0; i<=7; i=i+1) begin: stage
      wire[7:0] net;
      if (i!=0)  assign net = stage[i-1].net;
    end
  endgenerate

  assign stage[0].net = in;
  assign out = stage[7].net;
endmodule

在此示例中,创建了8 * 8的电线阵列,它们使用先前迭代的指定符顺序连接,然后将第一次和最后一次迭代连接到模块的输入和输出。

以类似的方式,您可以创建3维或更多维数组。