我在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'。
答案 0 :(得分:1)
看起来你有一个错字。在clkwrite声明之后有一个逗号。
答案 1 :(得分:0)
在clkwrite
之后插入分号。
像这样
reg clkwrite;
reg [31:0] data [3:0];
并删除always块
中子模块的实例化答案 2 :(得分:0)
SystemVerilog .sv支持给定的数组语法 reg [31:0]数据[3:0];