Verilog数组赋值

Bha*_*ola 2 windows 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
Run Code Online (Sandbox Code Playgroud)

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

带有解压缩数组的函数参数需要systemverilog扩展.

我的阵列出了什么问题?

Pra*_*rji 5

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

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

在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  
Run Code Online (Sandbox Code Playgroud)

  • 另外,除非你有充分的理由不这样做,否则我建议使用SystemVerilog.11年前,Verilog语言变成了SystemVerilog.这个答案中的解决方法是在Verilog中做到这一点的唯一方法,但是它很尴尬并容易出现错字导致的错误,很难找到. (2认同)