-
我在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];