Windows Verilog数组分配

Windows Verilog数组分配,windows,verilog,Windows,Verilog,我试图在Verilog中执行数组声明,但它显示了一个错误: 具有解包数组的函数参数需要systemverilog扩展 我的数组有什么问题?在Verilog中,您不能使用多维实体作为输入或输出,SystemVerilog允许使用多维实体 Verilog不允许I/O端口为二维阵列 在Verilog 2001中,您可以将数组展平为向量并通过端口传递,但这有点尴尬。以下是一种方法: module sobel_CI(a,result,clock); input clock; input [31:0] a

我试图在Verilog中执行数组声明,但它显示了一个错误:

具有解包数组的函数参数需要systemverilog扩展


我的数组有什么问题?

在Verilog中,您不能使用多维实体作为输入或输出,SystemVerilog允许使用多维实体

Verilog不允许I/O端口为二维阵列

在Verilog 2001中,您可以将数组展平为向量并通过端口传递,但这有点尴尬。以下是一种方法:

module sobel_CI(a,result,clock);

input clock;
input [31:0] a[0:3];

output [31:0] result;
assign result= a[0]+a[1]+a[2]+a[3];
endmodule

另外,除非你真的有理由不这么做,否则我建议你使用SystemVerilog。11年前,Verilog语言变成了SystemVerilog。这个答案中的解决方法是在Verilog中实现这一点的唯一方法,但它很尴尬,而且容易出现难以找到的由打字错误引起的bug。
module top (in, out);
input   [31:0] in; 
wire     [7:0] array [0:3];
output  [31:0] out;

assign {array[3],array[2],array[1],array[0]} = in;
assign out = {array[3],array[2],array[1],array[0]};
endmodule