设计示例2寄存器堆设计_第1页
设计示例2寄存器堆设计_第2页
设计示例2寄存器堆设计_第3页
设计示例2寄存器堆设计_第4页
设计示例2寄存器堆设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计示例2:寄存器堆设计功能概述:MIPS指令格式中的寄存器号是5bits,指令可以访问25=32个32位的寄存器。这样的一堆寄存器“堆在一起”构成一个寄存器堆(Register File)。模块框图如图1所示:图1 模块框图结构框图:接口说明:表1: 寄存器堆模块接口信号说明表序号接口信号名称方向说明备注ClkI处理器工作时钟,频率为50MhzRst_nI复位信号,低有效Raddr14:0I读寄存器堆时的第1个寄存器下标Raddr24:0I读寄存器堆时的第2个寄存器下标Waddr4:0I写寄存器堆时的寄存器下标WeI寄存器堆写使能Wdata 31:0I待写入寄存器堆的数据Rdata 131:

2、0O读寄存器堆时第1个寄存器的输出Rdata 231:0O读寄存器堆时第2个寄存器的输出Vcc电源Gnd地线图2 寄存器堆写时序框图设计电路源代码/功能描述风格寄存器堆的设计module regfile(inputclk,input rst_n,/写端口input we, /写使能input4:0 waddr, /写寄存器下标input31:0wdata, /待写入寄存器堆的数据/读端口1input4:0raddr1, /读端口1寄存器下标output31:0 rdata1,/从端口1读出的寄存器堆的数据/读端口2input4:0raddr2, /读端口2寄存器下标output31:0 rda

3、ta2 /从端口2读出的寄存器堆的数据);reg31:0 regs0:31; /32个32位寄存器堆/Write operationalways (posedge clk or negedge rst_n) begin if(!rst_n) begin:reset_all_registers /将32个寄存器复位为0. integer i;for(i=0;i32;i=i+1) regsi = 32d0; end else begin /写寄存器堆有效时,更新寄存器堆中某个寄存器的数据if(we = 1b1) & (waddr != 5h0) begin regswaddr = wdata; e

4、nd endend/Read port1 operation assign rdata1 = (raddr1 = 5d0) ? 32d0 : regsraddr1;/Read port2 operation assign rdata2 = (raddr2 = 5d0) ? 32d0 : regsraddr2;endmodule/风格2module regfile2(inputclk,input rst_n,/写端口input we,input4:0waddr,input31:0wdata,/读端口1input4:0raddr1,output reg31:0 rdata1,/读端口2input4

5、:0raddr2,output reg31:0 rdata2);reg31:0 reg0,reg1,reg2,reg3;/Write operationalways (posedge clk) begin if(!rst_n) begin reg0 = 32d0; reg1 = 32d0;reg2 = 32d0;reg3 = 32d0; end else beginif(we = 1b1) begin case(waddr) 5d0: reg0 = wdata;5d1: reg1 = wdata;5d2: reg2 = wdata;5d3: reg3 = wdata; default: ; e

6、ndcase end endend/Read port1 operation always (*) begin case(raddr1) 5d0: rdata1 = 32d0; 5d1: rdata1 = reg1; 5d2: rdata1 = reg2; 5d3: rdata1 = reg3; default: rdata1 = 32d0; endcaseend/Read port2 operation always (*) begin case(raddr2) 5d0: rdata2 = 32d0; 5d1: rdata2 = reg1; 5d2: rdata2 = reg2; 5d3:

7、rdata2 = reg3; default: rdata2 = 32d0; endcaseendendmodule设计电路仿真所设计的指令存储器模块电路,采用Modelsim10.1a仿真器工具进行了设计仿真验证,验证结果表明存储器功能以及接口时序完全正确,如下是仿真验证的波形图。附件1是仿真激励源代码。图5 寄存器堆电路读写仿真波形图存在问题及解决方式方法,设计讨论等问题讨论:/-结构级与行为级描述的区别? 行为级建模包括系统级、算法级和 HYPERLINK /s?wd=RTL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9r

8、HNBrHnLuH-WuHFhP1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1mznjbzPHnv t /_blank RTL级,行为描述以过程块为基本组成单位,一个模块的行为描述由一个或多个并行运行的过程块组成。结构级也称为“门级和开关级”,包含模块实例和基本元件实例。XXXXXXXXXYYYYZZZZZZZZZZZ附件1:timescale 1ns/1nsmodule regfile_tb();reg clk;reg rst_n;reg we;

9、reg4:0 waddr,raddr1,raddr2;reg31:0 wdata;wire31:0 rdata1,rdata2;/寄存器模块实例化调用regfile regfile_inst(.clk(clk),.rst_n(rst_n),.we(we),.waddr(waddr),.wdata(wdata),.raddr1(raddr1),.rdata1(rdata1),.raddr2(raddr2),.rdata2(rdata2);/generate the clockinitial beginclk = 1b0;forever #10 clk = clk;endreg5:0 j,k;in

10、itial beginrst_n = 1b0;#20 rst_n = 1b1; / #100 we = 1b1; waddr = 5d5; wdata = $random;#20 waddr = 5d30; wdata = $random;#20 waddr = 5d0; wdata = 32hffff;/#20 raddr1 = 5d5; raddr2 = 5d30;#20 we= 1b0; raddr1 = 5d5; raddr2 = 5d30;#20 raddr1 = 5d0;raddr2 = 5d0;/write all 32 registers #100 we = 1b1; for(j=0;j6d32;j=j+1) begin(posedge clk) #20 waddr = j;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论