5级流水无cache-CPU实验计算机组成原理-课程设计报告.docx
3.中母*2条指令饰指令故揖组关戮钥:NCRONCRlINCR2IXCRO京1第旗S条指令数据相关,有两冲处理方法方法1:在第4条指令的语码制收作0筋田5朽第I条保台的回写於握作为运Uj三B用入法人下一级,如下图所示方法2:为费到读写寄存3的酎回收运,因««写寄存通?时机改在时静下PIg这修1、,指令会营处掘相关了。由25三¾:*S4Kft!8三x*->w11msax.uk(nft三sM三-7.主要用到的关键信号是m_WRCgEn和w.wRegEn,主要运用是在数据相关检测模块foruardingenti(y.vhd中,在ideniity.vhd、exentity.vhd>memaccessentity.vhd中均有运用。具体的运用方法如下。相关的检测都置F”执行阶段二信号WRcgEn是寄存器写使能.SA.SB是寄存静组A.B选择信号.伯号前极去示信号所处的阶段-如JSA衣示处于执行阶段的SA1.相邻指令数据相关的检祗若InjReREn='1',则表示前一指令要回写寄才器,此时,若eSA或eSB等于1.SA,则必定数据相关,这是因为我们规定,若回写寄存器,则寄存器A口选算信号所指定的即有目的寄存器.否则无关,2.中间隔1条指令的两指令数据相关的检测若URegErHJ,则表示第一条指令要回写寄存器。此时,若JSR或JSB等于_SA,则必定数据相关。否则无关.当然,上述两种状况可能会一同出现.这时,我们就按状况1处理.因为状况2可以理解为接连出现状况1。dJRI指令舟右:器输出4.1.3功能实现逻辑通过分析限制信号我们可以也许了解到取指模块的功能实现逻辑是如何的.广义上来说收指模块包括结构相关冲突检测模块,因为PCStall信号(用来实现IF段对PC的更新)和IFnUSh(fi(XjIR写入空指令就来自结构相关冲突检测模块,结构相关检溺模块叫HUZamDClEEnIg其模块图如"HazardDetectEntityBDUnitm_wrMem1.0w_w(Mem(1.0dR(150IFFlushPCStallm_wrMemwrMen在访存阶段的值w_rwMemWrMem在写回阶段的侑d_lR指令寄存器其中输入信号的含义是:通过检测访存阶段的WrMem信号即可确定是否发生了结构冲突.班次取指后,若有冲突,则往IR中写入空指令(NOP),并保持PC不变使得取指延后一个节拍。除此之外.selFlag信号在此处的作用是,确定用状态寄存器输出FIag还是A1.U计算出的临时状态位IHag来推断跳转.4.2W(ID)4.2.1实现功能列表洋码模块实现的功能是:读取指令寄疗器中的指令对指令进行译码,发送限制信号MemACeeSSEnMy1.IemAccessUnitCftw.rr*ToRem_“ReeEnA'resetw-atMm(1.0:EJMVefn1.OOEDen5.包EJMlKMl5.0)w>1.UOrt|l5.Oe.RB4M>".QJ11KMHEgI30*_3130:pC15.6的f115OTFSAl3.01.sApmm-MtQeg3.0Jw.d*iR30:4.4.2输入、输出信号分析主要购入信号:njwrMem内存读写限制信号m_A1.UOut来自A1.U的输出结果m-RBdata要写回的数据PC程序计数器的伯主要输出信号:w-wMen传送到写回模块的内存读写限制信号wr读写限制信号addr要读取的内存地址OuterDB既可作为输入又可作为输出,用于传输数据4.4.3功能实现逻辑访存和取指在功能上是独立的,但是因为CPU对外只有一条地址规和数据线,因此访存和取指在事实上是有联系和冲突的。当执行1.OadNIoB指令时,地址线由A1.U送入访存段的值供应;取指时.则由PC供应.当写内存时,CPU内部数据送往数据线.当须要读内存时,CPU往数据线送高阻.5系统改造5.1 新的指令系统汇编语句操作码功能描述指令类型DDDR.SR0000DRSR->DR算术逻辑指令SUBDR,SR0001DR-SR+DRCMPDR,SR0010DR-SR比较ANDDR.SROOllDRandSR÷DR逻辑与ORDR.SR0100DRorSR->R逻辑或XORDR.SROlOlDRxorSR÷DR异或SH1.DROllO龙辑左移,最低位补0,最高位移入CSHRDROlli龙料右移,最高位补0,以低位移入CMOYIDR.IMM1000IMM(马上数)今DR.存马上数进寄存器数据传送指令MOVDR,SR100lSR÷DR1.OADDR,SRIOlOSR÷DRSTOREDR.SR1011SR-÷(PR)JRADRUOO无条件跳转到ADR,ADR=原K值-OFFSET限制转移指令JRCADRHOl当C-I时,跳转到ADR.ADR=原PC(ft*0ISETJRZADRIllO当Z=I时.跳转到ADR,ADR-原PC值eFFSBTNOPHll空操作其他5.1.1 选择改动说明包括NOP空操作指令在内指令系统共包括16条指令,在原有的25条指令的基础I册除f10条.JI条.具体地.捌除了DEC,INC.TEST,SAR.PUSH.POP.JRNCJRNZ,I.OADH.I.OADI.,新增了,条数据传送指令MOV1.5.2 修改的代码及说明I代码段1,新增内存模块memory.vhd-内存-2015-l(>-30librarj'iccc;useieee.stdjogic_l164.al);useiece.stdjogic_unsigned.all;usework.unitPack.ail:ENTITYmemoryISPORT(databus:inulSTD_1.OGIC.VECTOR(7DOWNTOO);addr:INSID_1.(XilC_VECIOR(7DOWNII)0):wr:INSTDJ)GIC;resecINSTD.1.OGIC):ENDmemory;ARCHITECTUREillOFmemoryISSIGNA1.ramzramJypc:-ramtypeunitpack.vhdUI,ZBEGINPROCESS(addr.wr.ramxla(abus.reset)BEGINIFresct=X)'THENram(O)<=MOVJ&R0&"I,;此处将程序写迸内存中,省略ram(l5)V=JR&”1110”:ENDIE:读写功能的实现IFwr=O1THENdatabus<=Z8:ram(conv_intcgcr(;iddr)<=databus;ENDIF;IFwr=TTHENdatabus<=ram(convJntcgcr(addr)KENDIF;ENDPROCESS;ENDrtI:内存模块运用Vhdl端写,内存由mm组成,读出数据线和写入数据线为同一条数据总线,因此不能同时进行读写.因为这样所以会产生结构相关,即在取指的时帔不行以访存,否则会产生冲突.内存读写功能由Wr信号进行限制,当何为0时执行写功能,当Wr为I时执行读功能,2)代码段2,取指模块ifentity.vhdop<=IR(7dow11o4);,曰<.'i.:j:4一限制相关信号JylFkg用选择当状态寄存据的值来源withJjiClHagselectZZV=Zwhenflag_hold,IemPZwhenoihers;withe-,selHagselectCC<=Cwhentlag_hold,“由于跳转佰号中只保留了JR、JRaJRZ,因此此处只推断该3个OPs-selZ<=,WHEN(op=JRZANDZZ=Ir)ORop=JRelse”;s.selCV:TWHEN(Op=JRCANDCC=)else,a:PCIrScl<='I'WHEN-SdZ二TOrs.sclC=,E1.SEV:此处修改rpc位数当育跳转时pc=pc÷offset.否则PC=PC1WHENO.SePCIncI<=PC+x01m:WITHPCIncScISE1.ECTPCneXl<=s.PCInclPCP)usOffselWHEN.s_PClnclwhenothers;cess(,eset.clk.PCStaIl)beginifreset=UthenPC<=xW;止处修改PC位故elsifF1.1.ING.EDGE(clk)and(PCS(all=,O,)(henPC<=PCnext:endif:endIXoCeSs:取指模块主要修改了与pc相关的地址信号的位数和跳转推断,由于修改指令系统时只保用了JR.JRCJRZ3条跳转指令.因此在跳转推断时只考虑该3条跳转指令,依据跳转推断来选择如何更新PC的值,1)代码段1,执行模块CXCntityAluicaseC-A1.UOpris-选择A1.U的运算,此处主要惨改了位数,逻辑功能不变whenaludd=>A1.UResuIl-OPR*opS;tempV:=(notopR(7)and(no<opS(7)andA1.UResull(7)or(opR(7)andopS(7>and(notA1.URcsult(J);whenaluSub=>Al.URcsuIi:=CPR-opS;(emV:=(opS(7)and(notopR(7)and(not1.UResuh(7)or(NOTopS(7)andopR(7)andA1.UResul(7):whenaluAnd=>A1.lJRcsuh:=opRandopS:whenalur=>A1.URcsuIt:。PRorOPS;whenalXor=>A1.UResuIi:=OPRXOrOpS:whenalShl=>A1.UResuh(7dwnk>I):=opR(6downto0>:A1.URcsuIt(O):=,(;ex:=opR(7);whenaluShr=>Al.URcsuli(OdounloO)opR(7downtoI);A1.UResult(7):='O"ex:=opR<0);-增加了alM0VI的alu功能选择信号及其处理实现whenaluMOVl=>A1.UResult:=,(MXXX),opS(3downto0);whenothers=>null;endease;修改了Hu选择信号以及alu功能信号的推断龙辑,以及状态寄存器的推断龙耨,之所以脩曲是因为位数的修改,除此以外还增加faluM()Vl的alu功能信号及其对应的逻辑功能实现.