寄存器堆的设计.docx

上传人:b****7 文档编号:8715680 上传时间:2023-02-01 格式:DOCX 页数:9 大小:57.28KB
下载 相关 举报
寄存器堆的设计.docx_第1页
第1页 / 共9页
寄存器堆的设计.docx_第2页
第2页 / 共9页
寄存器堆的设计.docx_第3页
第3页 / 共9页
寄存器堆的设计.docx_第4页
第4页 / 共9页
寄存器堆的设计.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

寄存器堆的设计.docx

《寄存器堆的设计.docx》由会员分享,可在线阅读,更多相关《寄存器堆的设计.docx(9页珍藏版)》请在冰豆网上搜索。

寄存器堆的设计.docx

寄存器堆的设计

寄存器堆的设计

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

寄存器堆设计

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1