2d数组声明的Verilog错误

时间:2014-04-21 14:41:47

标签: verilog multidimensional-array

  • 我在verilog中为寄存器文件编写了这段代码。

  • 未声明数据的二维数组声明中存在错误。

  • 我正在使用ModelSim Altera 10.1d

    model RegFile(clk,reset,ReadReg1,ReadReg2,WriteData,WriteReg,RegWrite,ReadData1,ReadData2);
    
    input clk,reset,RegWrite;
    input [1:0] ReadReg1,ReadReg2,WriteReg;
    input [31:0] WriteData;
    output [31:0] ReadData1,ReadData2;
    reg [31:0] d,q1,q2,q3,q4,q;
    reg [3:0] decoutp;
    reg clkwrite,
    reg [31:0] data [3:0];
    reg [31:0] ReadData1,ReadData2;
    
    initial
    begin
    d = 32'h00000000;
    data[0] = 32'd101;
    data[1] = 32'd234;
    data[2] = 32'd260;
    data[3] = 32'd120;
    end
    
    always@(posedge clk)
    begin
    if(reset)
    begin
    reg32bit(q1,d,clk,reset);
    reg32bit(q2,d,clk,reset);
    reg32bit(q3,d,clk,reset);
    reg32bit(q4,d,clk,reset);
    end
    
    else
    begin
    //Write
    decoder2_4(decoutp,WriteReg);
    clockgate(clkwrite,RegWrite,clk,decoutp);
    reg32bit(q,WriteData,clkwrite,reset);
    
    //Read
    if(ReadReg1 == 2'b00) ReadData1 = data[0];
    else if(ReadReg1 == 2'b01) ReadData1 = data[1];
    else if(ReadReg1 == 2'b10) ReadData1 = data[2];
    else ReadData1 = data[3];
    
    if(ReadReg2 == 2'b00) ReadData2 = data[0];
    else if(ReadReg2 == 2'b01) ReadData2 = data[1];
    else if(ReadReg2 == 2'b10) ReadData2 = data[2];
    else ReadData2 = data[3];
    
    end
    end
    
    endmodule
    
  • 错误 -

    (1)v(9):靠近“reg”:语法错误,意外注册,期待IDENTIFIER或
      TYPE_IDENTIFIER

    (2)v(15):( vlog-2730)未定义的变量:'data'。

3 个答案:

答案 0 :(得分:1)

看起来你有一个错字。在clkwrite声明之后有一个逗号。

答案 1 :(得分:0)

clkwrite之后插入分号。 像这样

 reg clkwrite; 
reg [31:0] data [3:0];

并删除always块

中子模块的实例化

答案 2 :(得分:0)

SystemVerilog .sv支持给定的数组语法 reg [31:0]数据[3:0];