如何在verilog中声明输出数组?

时间:2014-11-17 11:53:53

标签: arrays sum verilog

我正在尝试添加两个数组,并希望在verilog代码中输出数组。但是错误发生了。这是错误:HDLCompiler:1335:不能将端口和声明为verilog代码中的数组。任何人都可以告诉我如何在verilog代码中声明输出数组。感谢。

module array(clk,sum,reset);
            input clk,reset;
            //input [7:0] din;
            //input [7:0] A[3:0]; 
            //input [7:0] B[3:0];  
            output  sum[3:0];
            wire [7:0] sum[3:0];
            reg [7:0] A[3:0]; 
            reg [7:0] B[3:0];
            integer i;
            always@(posedge clk)
            begin 
                if(reset==1'b1)
                    begin
                    A[0]<=1;
                    A[1]<=2;
                    A[2]<=3;
                    A[3]<=4;
                    B[0]<=5;
                    B[1]<=5;
                    B[2]<=5;
                    B[3]<=5;
                    sum[0]<=0;                  
                   sum[1]<=0;   
                    sum[2]<=0;  
                    sum[3]<=0;  
                    end 
                else 
                    begin   
                        for(i=0;i<4;i=i+1)
                            begin 
                                sum[i]=(A[i] + B[i]);
                            end 
                 end 
               end 
   endmodule

1 个答案:

答案 0 :(得分:1)

只有SystemVerilog支持数组样式端口,如果你可以使用它,你可能应该停止使用Verilog-95样式的端口声明。

Verilog 2001及以上端口声明,带有SystemVerilog多维端口

module array(
  input             clk,
  input             reset,
  input       [7:0] A  [3:0],
  input       [7:0] B  [3:0], 
  output reg  [7:0] sum[3:0]
);

Verilog vs SystemVerilog文件通常由文件扩展名标识,因此保存为.sv文件通常会将编译器切换到SystemVerilog。

EDA Playground上使用免费modelsim 10.1d模拟器的组合版本。

另请注意,如果要在始终阻止中为sum分配值,则需要reg而不是连线。由于您现在使用SystemVerilog,所以可以将所有内容声明为逻辑,以获取更多信息Checkout this answer