Verilog 阵列分配


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

我正在尝试在Verilog中进行数组声明,但它显示错误:

具有解压缩数组的函数参数需要系统Verilog扩展。

我的阵列出了什么问题?

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

Verilog 不允许 I/O 端口是 2D 阵列。

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

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  

最新更新