在verilog中定义二维线数组
Define 2-dimensional array of wire in 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".
我认为这个问题 对解决这个具体问题没有帮助。
你会得到这个错误,因为在 Verilog 中(2009 年之前,当它合并到 SystemVerilog 中)拥有二维(或更多)维数组的端口是非法的;对于端口上的数组,只允许使用简单的一维向量。
你可以有两个(或更多)维网络或变量数组,因为这个问题确实解释了 。
值得注意的是System-Verilog中没有这样的限制(或者:多维数组是允许的。
虽然 Verilog 不允许定义 2 维或更多维网络数组,但使用 '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 维或更多维数组。
下面是一些在 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".
我认为这个问题 对解决这个具体问题没有帮助。
你会得到这个错误,因为在 Verilog 中(2009 年之前,当它合并到 SystemVerilog 中)拥有二维(或更多)维数组的端口是非法的;对于端口上的数组,只允许使用简单的一维向量。
你可以有两个(或更多)维网络或变量数组,因为这个问题确实解释了 。
值得注意的是System-Verilog中没有这样的限制(或者:多维数组是允许的。
虽然 Verilog 不允许定义 2 维或更多维网络数组,但使用 '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 维或更多维数组。