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

B.R*_*B.R 4 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            
Run Code Online (Sandbox Code Playgroud)

**这是错误的.

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

**这是正确的.

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

array[0]<=a;            
array[1]<=b;               
array[2]<=c;             
array[3]<=d;            
array[4]<=e;            
Run Code Online (Sandbox Code Playgroud)

sha*_*111 6

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

在第一个片段中,您将传递二维数组 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 
Run Code Online (Sandbox Code Playgroud)

您可以做的另一件事是展平数组并将其作为输入传递.在此,我已平坦化的每个8位输入的(a,b,c等每个)转换成单个向量(in)和分配的每个阵列的各元件相应.

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

有关类似问题,请参阅输入作为二维数组链接.还有类似的博客文章.