寄存器堆的设计.docx
- 文档编号:8715680
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:57.28KB
寄存器堆的设计.docx
《寄存器堆的设计.docx》由会员分享,可在线阅读,更多相关《寄存器堆的设计.docx(9页珍藏版)》请在冰豆网上搜索。
寄存器堆的设计
寄存器堆的设计
————————————————————————————————作者:
————————————————————————————————日期:
寄存器堆设计
1、功能概述:
MIPS指令格式中的寄存器号是5bits,指令可以访问25=32个32位的寄存器。
这样的一堆寄存器“堆在一起”构成一个寄存器堆(RegisterFile)。
2、接口说明:
寄存器堆模块接口信号说明表
脉冲reg,
复位端reg,
写使能端reg,
写地址reg,
写数据reg,
读地址一reg,
读地址二reg,
读数据一reg,
读数据二reg;
设计思路:
1、复位处理是利用标志位flag实现的,当复位时,flag=0;利用i来计数,当i<31时,flag都等于0;直到i=32,复位完成,flag=1,这时,才可以进行写操作。
2、当复位时,需要32个脉冲才能将寄存器全部复位。
复位未完成,flag一直等于0。
若复位未完成时,进行写操作,这时,并不能写进去,便出错了。
所以,进行32分频,当寄存器可以写入时,复位已完成。
3、设计电路源代码
//----32个32位寄存器堆
moduleregfile(
inputreg, //脉冲
input reg, //复位端
input reg, //写使能端
input [4:
0]reg读地址一
input [4:
0]reg读地址二
input [4:
0]reg, //写地址
input [31:
0]reg,//写数据
output [31:
0]reg读数据一
output[31:
0]reg读数据二
);
//----------------------------------
reg [31:
0]regfiles[0:
31]; //实现寄存功能
reg[4:
0]i; //实现flag的变换
reg flag; //实现复位的标志
regreg; //实现写数据的脉冲
reg[4:
0]count;
//---32分频处理
always@(posedgeregorposedgereg)
begin
if(reg)
begin
count<=5'd0;
ﻩreg<=1'b0;
ﻩend
ﻩelseif(count<5'd16)
ﻩbegin
ﻩcount<=count+1'b1;
end
else
ﻩbegin
ﻩcount<=5'd0;
ﻩreg<=~reg;
end
end
//---复位处理
always@(posedgeregorposedgereg)
begin
if(reg)
ﻩbegin
i<=5'd0;
ﻩflag<=1'b0;
ﻩendﻩ
else if(i<5'b11111)
begin
ﻩ i<=i+1'b1;
flag<=1'b0;
end
ﻩelse
flag<=1'b1;ﻩ
end
//---写操作
always@(posedge reg)
begin
if(~flag)
ﻩregfiles[i]<=32'd0;
else
begin
if(reg(reg'd0)) //写使能端为一,写地址不为零
ﻩbegin
ﻩﻩregfiles[reg]<=reg; //写入
ﻩﻩﻩend
ﻩﻩend
end
//---读操作
assignreg(reg'd0)?
32'd0:
regfiles[reg];
assignreg(reg'd0)?
32'd0:
regfiles[reg];//
//----------------------------------------
endmodule
4、设计电路仿真
所设计的指令存储器模块电路,采用ISE仿真器工具进行了设计仿真验证,验证结果表明存储器功能以及接口时序完全正确,如下是仿真验证的波形图。
附件1是仿真激励源代码。
图5 寄存器堆电路读写仿真波形图
附件1:
modulereg;
ﻩ//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;
//Instantiate theUnitUnderTest(UUT)
reg(
ﻩ.reg(clk),
ﻩ.reg(rst),
.reg(Wen),
.reg(Raddr_1),
ﻩﻩ.reg(Raddr_2),
ﻩ.reg(Waddr),
ﻩ.reg(Wdata),
ﻩ.reg(Rdata_1),
ﻩﻩ.reg(Rdata_2)
);
ﻩalways#0.25 clk<=~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
ﻩinitial begin
#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) #16 Waddr=j;
ﻩﻩWdata=31-j;
ﻩend
ﻩ//----------------------------------------
#48Wen=1'b0; //读操作
ﻩﻩfor(k=0;k<6'd32;k=k+1)
ﻩﻩbegin
ﻩ@(posedgeclk) #16 Raddr_1= k;
ﻩRaddr_2=31-k;
end
end
endmodule
modulereg;
//Inputs
ﻩregclk;
ﻩregrst;
ﻩreg Wen;
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;
//Instantiate theUnitUnderTest (UUT)
ﻩreg(
ﻩ.reg(clk),
ﻩﻩ.reg(rst),
ﻩ.reg(Wen),
ﻩ.reg(Raddr_1),
ﻩ.reg(Raddr_2),
ﻩﻩ.reg(Waddr),
ﻩ.reg(Wdata),
ﻩ.reg(Rdata_1),
.reg(Rdata_2)
);
ﻩ
ﻩalways#0.25clk<=~clk;
ﻩreg[5:
0]j,k;
ﻩ
initial begin
ﻩﻩ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; //复位
ﻩ#32 Wen=1'b1; Waddr=5'd5;Wdata=$random; //写操作
#16Waddr=5'd30;Wdata =$random;
#16 Waddr=5'd0;Wdata=32'hffff;
#16Wen=1'b0;Raddr_1=5'd5;Raddr_2=5'd30; //无法写入无法写入
#16Raddr_1=5'd0;Raddr_2 =5'd0;
ﻩ//----------------------------------------
ﻩﻩ#16 Wen=1'b1; //写操作
ﻩﻩfor(j=0;j<6'd32;j=j+1)
begin
ﻩ@(posedgeclk)#16Waddr=j;
Wdata =31-j;
ﻩﻩend
//----------------------------------------
ﻩ#48 Wen = 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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 寄存器 设计