二维数组声明的Verilog错误


  • 我在verilog中为注册文件写了这段代码。

  • 数据的2d数组声明中存在未声明的错误。

  • 我正在使用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":语法错误,意外的reg,应为IDENTIFIER或
    类型标识符

    (2) v(15):(vlog-2730)未定义的变量:"数据"。

看起来您有一个拼写错误。clkwrite声明后面有一个逗号。

clkwrite后面插入分号。像这个

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

并删除始终块内子模块的实例化

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

最新更新