是否可以在 verilog 中将输入端口作为数组?

Is it possible to take input port as array in verilog?

 module median_five(out1,a[0],a[1],a[2],a[3],a[4],en,clka);             
    input [7:0] a[0:4];              
    output out1;              
    endmodule            

**报错。

 module median_five(out1,a,b,c,d,e,en,clka);             
        input [7:0] a,b,c,d,e;              
        output out1;              
        endmodule   

**没错

但我想在数组中输入 a、b、c、d、e,例如:

array[0]<=a;            
array[1]<=b;               
array[2]<=c;             
array[3]<=d;            
array[4]<=e;            

Verilog 不支持二维数组 作为模块的端口。仅 SystemVerilog 支持此功能。

first 代码段中,您正在传递 二维数组 a 作为输入,这是不受支持的。在 后者 的情况下,一个 单维向量 被传递给工作正常的模块。

不清楚您想用 array 做什么。这里有一些选项。您可以 在模块 本身内部声明二维数组。如下所示:

module median_five(out1,a,b,c,d,e,en,clka);
input [7:0] a,b,c,d,e;
output out1;

ref [7:0] array [5]; // array local to module

//always @(posedge clka)  // use non blocking assignments
always @(*)              // use blocking assignments
begin
// .. Some stuff
array[0]=a;            
array[1]=b;               
array[2]=c;             
array[3]=d;            
array[4]=e;     
//..       
end

//.. some other stuff

endmodule 

您可以做的另一件事是 展平数组 并将其作为输入传递。在这里,我已经将 each of 8 bit input (a,b,c etc. each) 扁平化为 single vector (in) 并相应地分配每个 array 的单个元素。

module top (in, out);
  input   [31:0] in; // flattened array as input
  output  [31:0] out;

  wire     [7:0] array [0:3]; // local array

  assign {array[3],array[2],array[1],array[0]} = in;
  //... some operations/procedural blocks etc.
  assign out = {array[3],array[2],array[1],array[0]};
endmodule

也参考Inputs as two dimensional array link for a similar question. There is a similar blog post