《5级流水无cache-CPU实验计算机组成原理-课程设计报告.docx》由会员分享,可在线阅读,更多相关《5级流水无cache-CPU实验计算机组成原理-课程设计报告.docx(13页珍藏版)》请在三一办公上搜索。
1、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.vhdmemaccessentity
2、.vhd中均有运用。具体的运用方法如下。相关的检测都置F”执行阶段二信号WRcgEn是寄存器写使能.SA.SB是寄存静组A.B选择信号.伯号前极去示信号所处的阶段-如JSA衣示处于执行阶段的SA1.相邻指令数据相关的检祗若InjReREn=1,则表示前一指令要回写寄才器,此时,若eSA或eSB等于1.SA,则必定数据相关,这是因为我们规定,若回写寄存器,则寄存器A口选算信号所指定的即有目的寄存器.否则无关,2.中间隔1条指令的两指令数据相关的检测若URegErHJ,则表示第一条指令要回写寄存器。此时,若JSR或JSB等于_SA,则必定数据相关。否则无关.当然,上述两种状况可能会一同出现.这时,
3、我们就按状况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
4、指令寄存器其中输入信号的含义是:通过检测访存阶段的WrMem信号即可确定是否发生了结构冲突.班次取指后,若有冲突,则往IR中写入空指令(NOP),并保持PC不变使得取指延后一个节拍。除此之外.selFlag信号在此处的作用是,确定用状态寄存器输出FIag还是A1.U计算出的临时状态位IHag来推断跳转.4.2W(ID)4.2.1实现功能列表洋码模块实现的功能是:读取指令寄疗器中的指令对指令进行译码,发送限制信号MemACeeSSEnMy1.IemAccessUnitCftw.rr*ToRem_“ReeEnAresetw-atMm(1.0:EJMVefn1.OOEDen5.包EJMlKMl5.0
5、)w1.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对外只有一条地址规和数据线,因此访存和取指在事实上是有联系
6、和冲突的。当执行1.OadNIoB指令时,地址线由A1.U送入访存段的值供应;取指时.则由PC供应.当写内存时,CPU内部数据送往数据线.当须要读内存时,CPU往数据线送高阻.5系统改造5.1 新的指令系统汇编语句操作码功能描述指令类型DDDR.SR0000DRSR-DR算术逻辑指令SUBDR,SR0001DR-SR+DRCMPDR,SR0010DR-SR比较ANDDR.SROOllDRandSRDR逻辑与ORDR.SR0100DRorSR-R逻辑或XORDR.SROlOlDRxorSRDR异或SH1.DROllO龙辑左移,最低位补0,最高位移入CSHRDROlli龙料右移,最高位补0,以低位
7、移入CMOYIDR.IMM1000IMM(马上数)今DR.存马上数进寄存器数据传送指令MOVDR,SR100lSRDR1.OADDR,SRIOlOSRDRSTOREDR.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.TE
8、ST,SAR.PUSH.POP.JRNCJRNZ,I.OADH.I.OADI.,新增了,条数据传送指令MOV1.5.2 修改的代码及说明I代码段1,新增内存模块memory.vhd-内存-2015-l(-30librarjiccc;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)G
9、IC;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=r
10、am(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;wi
11、the-,selHagselectCC=Cwhentlag_hold,“由于跳转佰号中只保留了JR、JRaJRZ,因此此处只推断该3个OPs-selZ=,WHEN(op=JRZANDZZ=Ir)ORop=JRelse”;s.selCV:TWHEN(Op=JRCANDCC=)else,a:PCIrScl=IWHEN-SdZ二TOrs.sclC=,E1.SEV:此处修改rpc位数当育跳转时pc=pcoffset.否则PC=PC1WHENO.SePCIncI=PC+x01m:WITHPCIncScISE1.ECTPCneXl=s.PCInclPCP)usOffselWHEN.s_PClnclwhen
12、others;cess(,eset.clk.PCStaIl)beginifreset=UthenPC=xW;止处修改PC位故elsifF1.1.ING.EDGE(clk)and(PCS(all=,O,)(henPCA1.UResuIl-OPR*opS;tempV:=(notopR(7)and(noand(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.lJRc
13、suh:=opRandopS:whenalur=A1.URcsuIt:。PRorOPS;whenalXor=A1.UResuIi:=OPRXOrOpS:whenalShl=A1.UResuh(7dwnkI):=opR(6downto0:A1.URcsuIt(O):=,(;ex:=opR(7);whenaluShr=Al.URcsuli(OdounloO)opR(7downtoI);A1.UResult(7):=O;ex:=opRA1.UResult:=,(MXXX),opS(3downto0);whenothers=null;endease;修改了Hu选择信号以及alu功能信号的推断龙辑,以及
14、状态寄存器的推断龙耨,之所以脩曲是因为位数的修改,除此以外还增加faluM()Vl的alu功能信号及其对应的逻辑功能实现.1)代码段1,译码模块identity.vhd新增WriteBackprcess4resel.c)k)-H【可模块beginIfrcsct=V(hen-新增了初始化寄存器一步RegArray(O)=X00”;RegArrayd)=xW;RCgArray=x,X):RCgAlTay=-(K);dsifFA1.1.ING.EDGE(clk)andw_wRegEn=lthenRegAmiy(WRcgIiKlcx)修改了OP码以及限制信号的长度variableOP:std_logi
15、c_vcctort3downto0):variableCtrizstdJogic-vcctor(17downto0);beginop:=d_IR(7downto4):修改了操作码的长度“译码产生的信号6A,SB,Wrmcm.WRegEnMcmlbRegeA1.uSgA1.UOprSctHagcaseopis限制信号whenADD=clrk=dJR(3dwnlo0)&“KT&“I“&”“&“00&0000”&”001”;whenSUBB=ctrk=dJR(3downtoT&“001”&”OOol&001”;whenANDins=ctrl:=dJR(3downto0&wJ0w&wr&T&tX)r&
16、w0010*&*00r;whenCMP=cirl:=dR(3downto0)&“10&0&T&“OO&Oool&001”;新增了MOVl指令及其译码出来的限制信号whenMOVl=ctri:=dJR(3downto0)&10&”immcirl:=CM:=dR(3dWnkT&T&”OolOKXr&001”;whenSH1.Ins=ctri:=d_lR(3downto0)&-10,1tAo1,(KM)O101,(X)1m;whenSHRlns=Cut=(UR(3downto0)&H)()-&-I&1w&000w&01I0h*,001m;whenMOV=cirl:=dR(3downto0)&10&T
17、&T&0U&00002Oo0”;when1.OAD=ctrk=dJR(3dwnlo0)&”0l&T&r&,0()0()”&Oo0”:whenSTORE=ctrk=dJR(3downtoT&000”&”(XK)(r&000”;whenJRJRZJRC-Cl11:1.DnNothing;W是JR*指令、计幻ofl,sc(并向Exc插入Bubbleoffset&d_IR(3&dJR(3downto0):whenOlhCrS=ctrk三DoNothing;endcase;译码铢块主要修改r限制信号CtrI的位数.并依据“SA.SB.Wrmcm.wRcgEn.McmIoRcg.A1.USn:.AI.UO
18、pr.SctFIag的依次增加了MOVI指令的限制信号,如下所示:whenMOVI=CM=CUR(3downto0)*10&1IIOl1010A000;imm=OOO(XK)1Ad-IR(Idownto0);最终还增加了寄存器的初始化。6测试与总结6.1 规则文件(cputxt的内容)6.2 测试代码一RO的位为ADD&RO&,0.-CF=1.ZF=O跳转到15号地址-程序I一折正确性测试-RORlra11M)三MOVI&RO&ir:-30ran(I)1,:-40ram(2)=MOV&Rl&RO;-44ra113)=SBBARIA,l:-4IranM4)=SUBBR2,10;-4Ir三u!H5
19、)=ADDAR2&*I;-4Iram(6)=ORInv&RI&RO;-44ram7)(8)&RO&RI:-5Iran(9)OSH1.Ins&R1&OCT;-52n(IO=SHRInv&RO&tW;-22ranM!l)=CMPR0Rkramf3)=JRC*lll;00-20000:0;WJ(X)OOOOOi11ro(l4)=MOVI&RO&11,:ram(7)=MOVI&Rl&();ra11Ml8)三JRZAmIIII*:ram(20)V=JR&YMXW:-0号地址的内容变为(XKM)OOOl-RO=3-RI=I一RO=RO-RI-此处不趺此处跳6.3 测试结果测试环境测试程序测试结果五级流水Q
20、uartus程序1正确6.4 涌试总结试程序的结果都与预期相符,证明测试结果是正礴的,*一,I,T1i1V:ii广?fJIii片lI1mI1:1.IJ1tIIIF!a)aiHiitrrr*itiiiiiiiiiiiiiiiiilmMiiiiiiiMfii;IdJHBidHHHHiHHeaRnnnmtnnnRrnanRanain0rr*,*Cr*1.1.r/、r*l/rrr,lr-*尸1.1.1U1.I1.Jm1.J1.i1.j1.k*ukJ7j1.jkJ7本课程设计的总结7.1A同学总结由于上一学期在计算机殂成原理的综合性试验中担当了主力队员,对CIXl的加木组织结构也算是非常了解,因此该学期
21、主动担当了加长。然而事实并没有那么简洁,当第一次看到代码时发觉,由于上次综合性试验大部分通过M图连线实现.逻辑功能非常明确,一目了然然而该学期的CPU顶层实体是通过Vhdl代码实现的,因此初期花了不少时间在了解代码的语法以及逻辑功能上,完成此步以后,我们组开展了对3种相关进行具体分析,弄清谦流水CPU的实现原理后,后续的修改工作就北常简洁了。一起先我们足米纳机箱+DebugConiruIlCr的方式进行调试,后来由于试验室的机箱资源有限.便再次实行了用QUartUs的时序功能仿真来调试并添加了内存模块.7.2B同学总结在此次课程设计中.我主要:参加修订指令系统:负责数据相关模块的修改:负责译码
22、和访存模块的修改:负责MoVl指令的增加,主要是在常信定义文件UnitPaCk里增加MoVl的。P码常量以及aluMOVI的alu功能选择信号,并在译码模块埴加MOVI的限制信号及相关代码:负资扩展常业定义文件。在组长的组织下按部就班,大部分不懂得问题都能够通过探讨解决。7.3C同学总结在这次的计舞机加成原理课程设计里,我负责的是:参加修订指令系统:负或结构相关模块的修改:负责执行模块和写回模块的修改:负贲新I更层实体CPUm.bdf文件的接线,主要是在创建rCPUemiIy和memory的bsf文件后,新建cpum.txlf文件并将上述两个悦件加入,利用Quanus的接税功能将原件连接起来。