寄存器堆的设计.docx
- 文档编号:9689537
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:10
- 大小:54.53KB
寄存器堆的设计.docx
《寄存器堆的设计.docx》由会员分享,可在线阅读,更多相关《寄存器堆的设计.docx(10页珍藏版)》请在冰豆网上搜索。
寄存器堆的设计
寄存器堆的设计
寄存器堆设计
1、功能概述:
MIPS指令格式中的寄存器号是5bits,指令可以访问25=32个32位的寄存器。
这样的一堆寄存器“堆在一起”构成一个寄存器堆(RegisterFile)。
2、接口说明:
寄存器堆模块接口信号说明表
脉冲regfile_clk,
复位端regfiles_rst,
写使能端regfiles_Wen,
写地址regfile_Waddr,
写数据regfiles_Wdata,
读地址一regfiles_Raddr_1,
读地址二regfiles_Raddr_2,
读数据一regfiles_Rdata_1,
读数据二regfiles_Rdata_2;
设计思路:
1、复位处理是利用标志位flag实现的,当复位时,flag=0;利用i来计数,当i<31时,flag都等于0;直到i=32,复位完成,flag=1,这时,才可以进行写操作。
2、当复位时,需要32个脉冲才能将寄存器全部复位。
复位未完成,flag一直等于0。
若复位未完成时,进行写操作,这时,并不能写进去,便出错了。
所以,进行32分频,当寄存器可以写入时,复位已完成。
3、设计电路源代码
//----32个32位寄存器堆
moduleregfile(
inputregfile_clk,//脉冲
inputregfile_rst,//复位端
inputregfile_Wen,//写使能端
input[4:
0]regfile_Raddr_1,//读地址一
input[4:
0]regfile_Raddr_2,//读地址二
input[4:
0]regfile_Waddr,//写地址
input[31:
0]regfile_Wdata,//写数据
output[31:
0]regfile_Rdata_1,//读数据一
output[31:
0]regfile_Rdata_2//读数据二
);
//----------------------------------
reg[31:
0]regfiles[0:
31];//实现寄存功能
reg[4:
0]i;//实现flag的变换
regflag;//实现复位的标志
regregfile_clk_1;//实现写数据的脉冲
reg[4:
0]count;
//---32分频处理
always@(posedgeregfile_clkorposedgeregfile_rst)
begin
if(regfile_rst)
begin
count<=5'd0;
regfile_clk_1<=1'b0;
end
elseif(count<5'd16)
begin
count<=count+1'b1;
end
else
begin
count<=5'd0;
regfile_clk_1<=~regfile_clk_1;
end
end
//---复位处理
always@(posedgeregfile_clkorposedgeregfile_rst)
begin
if(regfile_rst)
begin
i<=5'd0;
flag<=1'b0;
end
elseif(i<5'b11111)
begin
i<=i+1'b1;
flag<=1'b0;
end
else
flag<=1'b1;
end
//---写操作
always@(posedgeregfile_clk_1)
begin
if(~flag)
regfiles[i]<=32'd0;
else
begin
if(regfile_Wen&&(regfile_Waddr!
=5'd0))//写使能端为一,写地址不为零
begin
regfiles[regfile_Waddr]<=regfile_Wdata;//写入
end
end
end
//---读操作
assignregfile_Rdata_1=(regfile_Raddr_1==5'd0)?
32'd0:
regfiles[regfile_Raddr_1];
assignregfile_Rdata_2=(regfile_Raddr_2==5'd0)?
32'd0:
regfiles[regfile_Raddr_2];//
//----------------------------------------
endmodule
4、设计电路仿真
所设计的指令存储器模块电路,采用ISE仿真器工具进行了设计仿真验证,验证结果表明存储器功能以及接口时序完全正确,如下是仿真验证的波形图。
附件1是仿真激励源代码。
图5寄存器堆电路读写仿真波形图
附件1:
moduleregfile_test;
//Inputs
regclk;
regrst;
regWen;
reg[4:
0]Raddr_1;
reg[4:
0]Raddr_2;
reg[4:
0]Waddr;
reg[31:
0]Wdata;
//Outputs
wire[31:
0]Rdata_1;
wire[31:
0]Rdata_2;
//InstantiatetheUnitUnderTest(UUT)
regfileU1(
.regfile_clk(clk),
.regfile_rst(rst),
.regfile_Wen(Wen),
.regfile_Raddr_1(Raddr_1),
.regfile_Raddr_2(Raddr_2),
.regfile_Waddr(Waddr),
.regfile_Wdata(Wdata),
.regfile_Rdata_1(Rdata_1),
.regfile_Rdata_2(Rdata_2)
);
always#0.25clk<=~clk;
reg[5:
0]j,k;
initialbegin
clk=1'b0;
rst=1'b1;
Wen=1'b0;
Raddr_1=5'd0;
Raddr_2=5'd0;
Waddr=5'd0;
Wdata=32'd0;
end
initialbegin
#16rst=1'b0;//复位
#32Wen=1'b1;Waddr=5'd5;Wdata=$random;//写操作
#16Waddr=5'd30;Wdata=$random;
#16Waddr=5'd0;Wdata=32'hffff;
#16Wen=1'b0;Raddr_1=5'd5;Raddr_2=5'd30;//无法写入无法写入
#16Raddr_1=5'd0;Raddr_2=5'd0;
//----------------------------------------
#16Wen=1'b1;//写操作
for(j=0;j<6'd32;j=j+1)
begin
@(posedgeclk)#16Waddr=j;
Wdata=31-j;
end
//----------------------------------------
#48Wen=1'b0;//读操作
for(k=0;k<6'd32;k=k+1)
begin
@(posedgeclk)#16Raddr_1=k;
Raddr_2=31-k;
end
end
endmodule
moduleregfile_test;
//Inputs
regclk;
regrst;
regWen;
reg[4:
0]Raddr_1;
reg[4:
0]Raddr_2;
reg[4:
0]Waddr;
reg[31:
0]Wdata;
//Outputs
wire[31:
0]Rdata_1;
wire[31:
0]Rdata_2;
//InstantiatetheUnitUnderTest(UUT)
regfileU1(
.regfile_clk(clk),
.regfile_rst(rst),
.regfile_Wen(Wen),
.regfile_Raddr_1(Raddr_1),
.regfile_Raddr_2(Raddr_2),
.regfile_Waddr(Waddr),
.regfile_Wdata(Wdata),
.regfile_Rdata_1(Rdata_1),
.regfile_Rdata_2(Rdata_2)
);
always#0.25clk<=~clk;
reg[5:
0]j,k;
initialbegin
clk=1'b0;
rst=1'b1;
Wen=1'b0;
Raddr_1=5'd0;
Raddr_2=5'd0;
Waddr=5'd0;
Wdata=32'd0;
end
initialbegin
#16rst=1'b0;//复位
#32Wen=1'b1;Waddr=5'd5;Wdata=$random;//写操作
#16Waddr=5'd30;Wdata=$random;
#16Waddr=5'd0;Wdata=32'hffff;
#16Wen=1'b0;Raddr_1=5'd5;Raddr_2=5'd30;//无法写入无法写入
#16Raddr_1=5'd0;Raddr_2=5'd0;
//----------------------------------------
#16Wen=1'b1;//写操作
for(j=0;j<6'd32;j=j+1)
begin
@(posedgeclk)#16Waddr=j;
Wdata=31-j;
end
//----------------------------------------
#48Wen=1'b0;//读操作
for(k=0;k<6'd32;k=k+1)
begin
@(posedgeclk)#16Raddr_1=k;
Raddr_2=31-k;
end
end
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 寄存器 设计