7级流水处理器设计概述_第1页
7级流水处理器设计概述_第2页
7级流水处理器设计概述_第3页
7级流水处理器设计概述_第4页
7级流水处理器设计概述_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、概述1、1整体结构框图及模块概述本次设计的处理器结构如图1所示,采用标量7级流水设计,无乱序执行功能,Cache采用直接映射方式,有Forward总线。当一条指令出现Stall时,采用不去除气泡,直接冻结其后流水线的方式。IF1IF2DEEXMEM1MEM2WBintempflFWiWUnitFlusbcrPEg.IDIIDzrtaHklilrdstsJIIrriETaii*FleeterMgDwfllljim加LkwtMaiPnocniUnJih1uMcy<.liaiftsiagllPrrmiiUIIDCAOHE如min图1Zion处理器Oman架构图Oman架构的Zion处理器共含有

2、18个大模块,其中6个模块为两个流水级之间的寄存器模块,12个模块为逻辑处理模块。图中所示的寄存器模块均带有FF标记,蓝色的部分表示该寄存器是用于存储处理器中间数据的寄存器,绿色部分表示该寄存器是存在于cache内部的寄存器。登表示该级寄存器可以被Stall,-L表示该级寄存器可以被Stall也可以被Flush,表示该级寄存器既不会被Stall也不会被Flush。表1简述了各逻辑处理模块的功能及图1中寄存器内各缩写含义。IF1InstructionFetch1,取指务阶段。用于选择取指的PC来源,选取好PC后将地址送到IF1/IF2寄存器中的PC段,同时对应的index位送入ICache。在此

3、基础上将Valid位置“1”。IF2InstructionFetch2,取指第二阶段。根据index从ICache中取出CacheLine及对应的tag位,并根据Offset从CacheLine中取出对应指令,将该指令和tag同时送入下一级。Prefetch模块用丁处理当miss出现时,回填的CacheLine与下一条指令读取冲我的情况,当指令miss时,每个时钟周期将下一条指令的PC送入ICache,读取出有效数据,预存到Prefetch模块的预取寄存器中,当指令回填,流水线正常执行时,ICache执行指令回填操作,下一条指令的取指则在预取寄存器中进行。DEInstructionDecode

4、,指令译码。该级逻辑运算先通过tag判断ICache读取是否命中,若命中则将指令送入Decode模块进行译码,若不命中则向ImissProcessUnit发送miss处理请求,并Stall流水线,待miss请求响应后,将refill的指令送入Decode模块进行译码。经过译码后,将OP,MEM_OP和Desti送入下一级,同时将判断源操作数是否发生数据相关,若相关则等待Forward数据有效后取出源操作数,若不相关则从寄存器堆中取出源操作数,送入下一级。EX执行阶段,完整各种计算(运算指令、跳转地址计算)、分支跳转指令和CP0指令。图中DCacheController用于处理正在执行的访存指令

5、之前的访存指令需要写入DCache产生冲突时产生流水线Stall的情况。当出现多周期指令时,需要Stall流水线。MEM1Memory1,访存阶段。同IF2类似,根据访存地址访问DCache。MEM2将取出的DCache数据进行Tag判断,若命中则在MEMInsProcess模块中执行访存指令,并将需要store的数据通过DCacheWriteBus与回Dcache。右miss则向DmissProcessUnit发送miss请求,并Stall流水线,待miss请求响应后再执行访存操作。WB将数据写回寄存器。InterruptProcessUnit中断处理模块,当发生外部中断时,在EPC寄存器中

6、保存当前运行的PC,进入中断地址执行中断函数。Flusher流水线刷新控制模块,根据不同情况控制是否进行Flush操作Freezer流水线停止控制模块,根据不同情况控制是否进行Stall操作ImissProcessUnitImiss处理模块,当发生指令miss时,将Imiss_bus送到处理器外部,同时产生ImissStall信号停止流水线。当外部响应miss后,将refill数据同时送到DE级进行译码处理,和IF1进彳fICacherefill操作。DmissProcessUnitDmiss处理了模块,当发生数据miss时,将Dmiss_bus送到处理器外部,同时产生DmissStall信号

7、停止流水线。当外部响应miss后,将refill数据返回给MEM2中的MEMInsProcess模块进行处理。图中缩写含义V:valid,后效似,表示当前寄存器中后需要执行的指令。PC:programcounter,程序计数器。Ins:instruction,取出的指令。Tag:Icache中的tag位。S1,S2:sourceoperand1,sourceoperand2。操作数1,操作数2。EX_OP:executeoperation,执行阶段操作指令码。(非指令中的OP,是自定义ALUOP)Desti:destination,目的寄存备号。MEM_OP:memoryoperation,访

8、存操作码。1、2指令通路介绍(1)普通运算类指令普通指令主要包括算数指令、逻辑指令、移位指令等。此类指令执行通路如下:根据选择PC+4的结果作为PC的输入,并将其中index位送入ICacheAddr进行取指。将IF1/IF2寄存器的Valid位置一。根据index取出CacheLine,并根据Offset取出指令送入下一级。在DE级,首先判断指令的tag位(正常指令流情况下,假设其命中),指令命中,将指令送入Decode模块进行译码处理。完成译码后将取出的目的寄存器号、EX_OP及MEM_OP(非访存指令MEM_OP为0)送入下一级,同时将2个源寄存器号送入SourceOperandFetc

9、h模块取得两个源操作数,送入下一级。 在EX阶段,ALU根据EX_OP将S1、S2两个源操作数进行处理,得到运行结果,将结果写入resulto若指令为多周期指令(乘法、除法)在执行过程中产生Stall信号送入Freezer模块。冻结流水线中IF1/IF2寄存器、IF2/DE寄存器和DE/EX寄存器,待多周期计算完成后再释放流水线。 指令流经MEM1、MEM2阶段,不进行任何操作。最后在WB阶段写回目的寄存器。(2)分支跳转指令这两类指令的共同特点是在EX阶段过后,指令就已经执行完毕,不再向后一级流水线传递。该类指令在IF1、IF2及DE阶段的执行过程与普通指令相同。在EX阶段,执行分支跳转指令

10、时,算出跳转地址后,且判断发生跳转,则向IF1发送跳转信号,另处理器执行跳转后的指令。跳转后,分支跳转指令已经完成执行,下一级的Valid位置零,表示已经没有指令(在EX阶段执行完毕)。(3) CP0指令 该类指令在IF1、IF2及DE阶段的执行过程与普通指令相同。 在EX之后的流水线阶段,该类指令分为两种情况:I对于mtc0指令,在EX阶段将数据存入对应的CP0寄存器,然后将EX/MEM2寄存器的Valid置零;n对于mfc0指令,将数据从CP0寄存器读出,然后将数据继续向下一级流水线传递直至写回寄存器。(4) load指令 该类指令的IF1和IF2阶段与普通指令相同。 在DE阶段,判断ta

11、g后(假设Cache命中),译码过程中将访存地址计算源操作数放入S1、S2,令EX_OP为加法OP,设置MEM_OP。在EX阶段计算访存地址。在MEM1阶段读取DCacheLine。 在MEM2阶段将load数据取出存入result(假设DCache命中),最后进行writeback。(5) store指令该类指令在IF1、IF2、DE、EX、MEM1阶段的处理与load指令相同。在MEM2阶段,将取出的CacheLine数据按照指令要求进行写入,然后将写入后的CacheLine数据返回到EX级白DDCacheController子模块中,最终写入DCache。最后将MEM2/WB寄存器的Va

12、lid位置零,表示指令执行完成。1、3特殊运行状态处理方法介绍(1) ICachemiss处理当取指阶段发生miss时,DE级的TagCompare模块将Imiss信号(ImissBus)发送至ImissProcessUnit,该模块收到Imiss信号后,向Freezer模块发送ImissStall信号,冻结流水线中IF1/IF2寄存器、IF2/DE寄存器。同时将Imiss信号发送至处理器外总线上。当总线响应Imiss请求后,ImissProcessUnit模块将回填数据(IrefillData)同时发送至IF1及DE,并释放流水线。流水线正常执行后在IF1阶段将回填数据写入ICache,在I

13、F2阶段,利用回填数据进行译码及后续处理。由于回填数据写入时需要占用ICache一个时钟周期,导致下一条指令不能正常取指。为了解决这个问题,在ICache输出增加预取模块,当发生miss时,miss指令的下一条指令的PC已经送入IF2进行取指。在miss期间虽然流水线是Stall的,但是IF取出的数据其实是有效数据,所以每个时钟周期,都将ICache输出存入预取寄存器,当Imiss被响应,数据回头有效时,发生miss的指令的下一条指令不再从Icache中取指,而是从预取寄存器中取指。(2) DataHazard处理一条指令执行到DE阶段,若发生数据相关(与ForwardBus中的目的寄存器号相

14、同,且ForwardBus中的数据无效),则向Freezer模块发送Stall信号,冻结流水线中IF1/IF2寄存器和IF2/DE寄存器。当Forward有效后再释放流水线。(3) DCachemiss处理当一条访存指令在执行到MEM2阶段,进行TagCompare发生miss时,向DmissProcessUnit模块发出Dmiss信号。DmissProcessUnit模块收到Dmiss信号后,将Dmiss请求发送到处理器外,同时向Freezer模块发出Stall信号冻结流水线中IF1/IF2寄存器、IF2/DE寄存器、DE/EX寄存器、EX/MEM1寄存器及MEM1/MEM2寄存器。待总线响

15、应Dmiss请求后,将Drefill数据发送至MEM2中访存指令处理子模块(MEMInsProcess)。若该访存指令为store指令,则将refill数据改写后再写入DCache,若为load指令,则将数据读取至result,同时将refill数据写回DCache。(4)多访存指令处理多访存指令即出现多条访存指令同时需要访问Dcache的情况。该情况在两种状态下发生:I当MEM2阶段访存指令hit且在执行一条store指令,同时EX阶段存在另外一条访存指令时,两条指令都要进行访存操作发生冲突。II当MEM2阶段访存指令发生miss,且回填数据有效时EX阶段存在另一条访存指令时,发生多访存指令

16、冲突。发生多访存指令冲突时,DCacheController向Freezer模块发送Stall信号,冻结流水线中的IF1/IF2寄存器、IF2/DE寄存器和DE/EX寄存器。先处理从MEM2阶段返回的DCache写入请求。在响应该请求的下一个时钟周期释放流水线,执行EX阶段的访存指令。(5)外部中断处理当外部中断发生后,首先判断Imiss信号,若此时处于Imiss状态,则不响应中断,直至Imiss状态解除后,再响应中断。中断处理有四种情况:I当IF2阶段正在执行的指令非延迟槽指令(即DE阶段的指令非跳转指令)且流水线正常工作时,将IF1/IF2寄存器中的PC值保存至EPC,刷空IF2/DE寄存器,从中断地址PC开始执行。II当IF2阶段正在执行的指令为延迟槽指令(即DE阶段的指令非跳转指令)且流水线正常工作时,将IF2/DE寄存器中的PC值保存至EPC,刷空IF2/DE寄存器及DE/EX寄存器,从中断地址PC开始执行。田当IF2阶段正在执行的指令非延迟槽指令(即DE阶段的指令非跳转指令)且流水线冻结时,将IF1/IF2寄存器中的PC值保存至EPC,刷空IF1/IF2寄存器,从中断地址PC开始执行。IV当IF2阶段正在执行的指令为延迟槽指令(即DE阶段的指令非跳转

温馨提示

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

评论

0/150

提交评论