MIPS流水線CPU_第1頁
MIPS流水線CPU_第2頁
MIPS流水線CPU_第3頁
MIPS流水線CPU_第4頁
MIPS流水線CPU_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、-作者xxxx-日期xxxxMIPS流水線CPU【精品文檔】本科實驗報告課程名稱:計算機組成與設(shè)計實驗姓 名:學 院:信息與電子工程學院專 業(yè):電子科學與技術(shù)學 號:314010指導教師:屈民軍、唐奕2016年 1 月 7 日一、 實驗目的1. 了解提高CPU性能的方法。2. 掌握流水線MIPS微處理器的工作原理。3. 理解數(shù)據(jù)冒險、控制冒險的概念以及流水線沖突的解決方法。4. 掌握流水線MIPS微處理器的測試方法。二、 實驗任務設(shè)計一個32位流水線MIPS微處理器,具體要求如下:1. 至少運行下列MIPS32指令。(1) 算術(shù)運算指令:ADD、ADDU、SUB、SUBU、ADDI、ADDIU

2、。(2) 邏輯運算指令:AND、OR、NOR、XOR、ANDI、ORI、XORI、SLT、SLTU、SLTI、SLTIU。(3) 移位指令:SLL、SLLV、SRL、SRLV、SRA。(4) 條件分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ。(5) 無條件跳轉(zhuǎn)指令:J、JR。(6) 數(shù)據(jù)傳送指令:LW、SW。(7) 空指令:NOP。2. 采用5級流水線技術(shù),對數(shù)據(jù)冒險實現(xiàn)轉(zhuǎn)發(fā)或阻塞功能。3. 在XUP Virtex- Pro 開發(fā)系統(tǒng)中實現(xiàn)MIPS微處理器,要求CPU的運行速度大于25MHz。三、 實驗原理1. 總體設(shè)計流水線是數(shù)字系統(tǒng)中一種提高系統(tǒng)穩(wěn)定性和工作速度的方法,

3、廣泛應用于高檔CPU的架構(gòu)中。根據(jù)MIPS處理器的特點,將整體的處理過程分為取指令(IF)、指令譯碼(ID)、執(zhí)行(EX)、存儲器訪問(MEM)和寄存器會寫(WB)五級,對應多周期的五個處理階段。一個指令的執(zhí)行需要5個時鐘周期,每個時鐘周期的上升沿來臨時,此指令所代表的一系列數(shù)據(jù)和控制信息將轉(zhuǎn)移到下一級處理。由于在流水線中,數(shù)據(jù)和控制信息將在時鐘周期的上升沿轉(zhuǎn)移到下一級,所以規(guī)定流水線轉(zhuǎn)移變量命名遵守如下格式:名稱_流水線級名稱例如:在ID級指令譯碼電路(Decode)產(chǎn)生的寄存器寫允許信號RegWrite在ID級、EX級、MEM級和WB級上的命名分別為RegWrite_id、RegWrite

4、_ex、RegWrite_mem和RegWrite_wb。在頂層文件中,類似的變量名稱有近百個,這樣的命名方式起到了很好的識別作用。1) 流水線中的控制信號(1)IF級:取指令級。從ROM中讀取指令,并在下一個時鐘沿到來時把指令送到ID級的指令緩沖器中。該級控制信號決定下一個指令指針的PCSource信號、阻塞流水線的PC_IFwrite信號、清空流水線的IF_flush信號。(2)ID級:指令譯碼器。對IF級來的指令進行譯碼,并產(chǎn)生相應的控制信號。整個CPU的控制信號基本都是在這級上產(chǎn)生。該級自身不需任何控制信號。流水線冒險檢測也在該級進行,冒險檢測電路需要上一條指令的MemRead,即在檢

5、測到冒險條件成立時,冒險檢測電路產(chǎn)生stall信號清空ID/EX寄存器,插入一個流水線氣泡。(3)EX級:執(zhí)行級。該級進行算術(shù)或邏輯操作。此外LW、SW指令所用的RAM訪問地址也是在本級上實現(xiàn)??刂菩盘栍蠥LUCode、ALUSrcA、ALUScrB和RegDst,根據(jù)這些信號確定ALU操作、選擇兩個ALU操作數(shù)A、B,并確定目標寄存器。另外,數(shù)據(jù)轉(zhuǎn)發(fā)也在該級完成。數(shù)據(jù)轉(zhuǎn)發(fā)控制電路產(chǎn)生ForwardA和ForwardB兩組控制信號。(4)MEM級:存儲器訪問級。只有在執(zhí)行LW、SW指令時才對存儲器進行讀寫,對其他指令只起到一個周期的作用。該級只需存儲器寫操作允許信號MemWrite。(5)WB

6、級:寫回級。該級把指令執(zhí)行的結(jié)果回寫到寄存器文件中。該級設(shè)置信號MemtoReg和寄存器寫操作允許信號RegWrite,其中MemtoReg決定寫入寄存器的數(shù)據(jù)來自于MEM級上的緩沖值或來自于MEM級上的存儲器。2)數(shù)據(jù)相關(guān)與數(shù)據(jù)轉(zhuǎn)發(fā)如果上一條指令的結(jié)果還沒有寫入到寄存器中,而下一條指令的源操作數(shù)又恰恰是此寄存器的數(shù)據(jù),那么,它獲得的將是原來的數(shù)據(jù),而不是更新后的數(shù)據(jù)。這樣的相關(guān)問題稱數(shù)據(jù)相關(guān)。在設(shè)計中,采用數(shù)據(jù)轉(zhuǎn)發(fā)和插入流水線氣泡的方法解決此類相關(guān)問題。(1)三階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)條件為:(操作數(shù)A、B同時滿足)WB級指令是寫操作,即RegWrite_wb=1;WB級指令寫回的目標寄存器不是

7、$0,即RegWriteAddr_wb0;WB級指令寫回的目標寄存器與在ID級指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_id 或 RegWriteAddr_wb=RtAddr_id。(2)二階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)(MEM冒險)轉(zhuǎn)發(fā)條件:WB級指令是寫操作,即RegWrite_wb=1;WB級指令寫回的目標寄存器不是$0,即RegWriteAddr_wb0;WB級指令寫回的目標寄存器與在EX級指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_ex 或 RegWriteAddr_wb=RtAddr_ex;EX冒險不成立,即RegWriteAdd

8、r_memRsAddr_ex 或 RegWriteAddr_mem=RtAddr_ex。(3)一階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)(EX冒險)轉(zhuǎn)發(fā)條件ForwardA、ForwardB作為數(shù)據(jù)選擇器的地址信號,轉(zhuǎn)發(fā)條件不成立時,ALU操作數(shù)從ID/EX流水線寄存器中讀??;轉(zhuǎn)發(fā)條件成立時,ALU操作數(shù)取自數(shù)據(jù)旁路。轉(zhuǎn)發(fā)條件:MEM級指令是寫操作,即RegWrite_mem=1;MEM級指令寫回的目標寄存器不是$0,即RegWriteAddr_mem0;MEM級指令寫回的目標寄存器與在EX級指令的源寄存器是同一寄存器,即RegWriteAddr_mem=RsAddr_ex 或 RegWriteAddr_mem=Rt

9、Addr_ex。3)數(shù)據(jù)冒險與數(shù)據(jù)轉(zhuǎn)發(fā)這類冒險不同于數(shù)據(jù)相關(guān)冒險,需要單獨一個“冒險檢測單元(Hazard Detector)”,它在ID級完成。冒險成立的條件為: 上一條指令是lw指令,即MemRead_ex=1; 在EX級的lw指令與在ID級的指令讀寫的是同一個寄存器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAddr_ex=RtAddr_id。冒險的解決:為解決數(shù)據(jù)冒險,我們引入流水線阻塞。當Hazard Detector檢測到冒險條件成立時,在lw指令和下一條指令之間插入阻塞,即流水線氣泡(bubble),使后一條指令延遲一個時鐘周期執(zhí)行,這樣就將該冒險

10、轉(zhuǎn)化為二階數(shù)據(jù)相關(guān),可用轉(zhuǎn)發(fā)解決。如圖所示流水線氣泡的引入需要注意的是,如果處于ID級的指令被阻塞,那么處于IF級的指令也必須阻塞,否則,處于ID級的指令就會丟失。防止這兩條指令繼續(xù)執(zhí)行的方法是:保持PC寄存器和IF/ID流水線寄存器不變,同時插入一個流水線氣泡。具體實現(xiàn)方法如下:在ID級檢測到冒險條件時, HazardDetector輸出兩個信號:Stall與PC_IFWrite。Stall信號將ID/EX流水線寄存器中的EX、MEM和WB級控制信號全部清零。這些信號傳遞到流水線后面的各級,由于控制信號均為零,所以不會對任何寄存器和存儲器進行寫操作,高電平有效。PC_IFWrite信號禁止P

11、C寄存器和IF/ID流水線寄存器接收新數(shù)據(jù),低電平有效。2.3)分支冒險還有一類冒險是包含分支的流水線冒險流水線每個時鐘周期都得取指令才能維持運行,但分支指令必須等到MEM級才能確定是否執(zhí)行分支。這種為了確定預取正確的指令而導致的延遲叫做控制冒險或分支冒險。一種比較普遍的提高分支阻塞速度的方法是假設(shè)分支不發(fā)生,并繼續(xù)執(zhí)行順序的指令流。如果分支發(fā)生的話,就丟棄已經(jīng)預取并譯碼的指令,指令的執(zhí)行沿著分支目標繼續(xù)。由于分支指令直到MEM級才能確定下一條指令的PC,這就意味著為了丟棄指令必須將流水線中的IF、ID和EX級的指令都清除掉(flush)。這種優(yōu)化方法的代價較大,效率較低。如果我們能在流水線中

12、提前分支指令的執(zhí)行過程,那么就能減少需要清除的指令數(shù)。這是一種提高分支效率的方法,降低了執(zhí)行分支的代價。因此我們采用提前分支指令的方法解決分支冒險。提前分支指令需要提前完成兩個操作:計算分支的目的地址:判斷分支指令的跳轉(zhuǎn)條件:在提前完成以上兩個操作之外,我們還需丟棄IF級的指令。具體做法是:加入一個控制信號IF_flush,做為IF/ID流水線寄存器的清零信號。當分支冒險成立,即Z=1,則IF_flush=1,否則IF_flush=0,故IF_flush = Z??紤]到本系統(tǒng)還要實現(xiàn)的無條件跳轉(zhuǎn)指令:J和JR,在執(zhí)行這兩個指令時也必須要對IF/ID流水線寄存器進行清空,因此, IF_flush

13、的表達式應表示為:IF_flush = Z | J | JR。2. MIPS指令格式1) R型指令格式本實驗要實現(xiàn)的R型指令有:算術(shù)邏輯運算指令:ADD、ADDU、SUB、SUBU、AND、OR、NOR、XOR 、SLT、SLTU移位指令:SLLV、SRLV、SRAV、SLL、SRL、SRA寄存器跳轉(zhuǎn)指令:JR2) I型指令格式本實驗要實現(xiàn)的I型指令有:存儲器訪問指令:LW、SW立即數(shù)算術(shù)邏輯運算指令:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIU分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ3) J型指令格式本實驗要實現(xiàn)的I型指令有:無條件跳轉(zhuǎn)指令:

14、J3. ID的設(shè)計指令譯碼模塊的主要作用是從機器碼中解析出指令,并根據(jù)解析結(jié)果輸出各種控制信號。ID模塊主要有指令譯碼(Decode)、寄存器堆(Registers)、冒險監(jiān)測、分支檢測和加法器等組成。ID模塊的接口信息如下表所示:引腳名稱方向說 明clk Input系統(tǒng)時鐘Instruction_id31:0 指令機器碼NextPC_id31:0 指令指針RegWrite_wb 寄存器寫允許信號,高電平有效RegWriteAddr_wb4:0 寄存器的寫地址RegWriteData_wb31:0寫入寄存器的數(shù)據(jù)MemRead_ex冒險檢測的輸入RegWriteAddr_ex4:0MemtoR

15、eg_idOutput決定回寫的數(shù)據(jù)來源(0:ALU 1:存儲器)RegWrite_id寄存器寫允許信號,高電平有效MemWrite_id存儲器寫允許信號,高電平有效MemRead_id存儲器讀允許信號,高電平有效ALUCode_id4:0決定ALU采用何種運算ALUSrcA_id決定ALU的A操作數(shù)的來源(0:rs 1:Sa)ALUSrcB_id決定ALU的B操作數(shù)的來源(0:rt 1:Imm)RegDst_id決定Register回寫是采用的地址(rt/rd)StallID/EX寄存器清空信號,高電平插入一個流水線氣泡Z分支指令的條件判斷結(jié)果J跳轉(zhuǎn)指令JR寄存器跳轉(zhuǎn)指令PC_IFWrite

16、阻塞流水線的信號,低電平有效BranchAddr31:0條件分支地址JumpAddr31:0跳轉(zhuǎn)地址Imm_id31:0符號擴展成32位的立即數(shù)Sa_id31:00擴展成32位的移位立即數(shù)RsData_id31:0Rs寄存器數(shù)據(jù)RtData_id31:0Rt寄存器數(shù)據(jù)RdAddr_id4:0Rd寄存器地址RsAddr_id4:0Rs寄存器地址RtAddr_id4:0Rt寄存器地址(1) 指令譯碼(Decode)子模塊的設(shè)計Decode控制器的主要作用是根據(jù)指令確定各個控制信號的值,是一個組合電路。我們將指令分成八類:R_type1:ADD、ADDU、SUB、SUBU、AND、OR、NOR、XO

17、R 、SLT、SLTU、SLLV、SRLV、SRAV R型指令R_type2:SLL、SRL、SRA JR_type:JRJ_type:J J型指令I(lǐng)_type:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIUBranch:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ I型指令LW:LWSW:SWDecode輸出的九組控制信號: RegWrite決定是否對寄存器(Registers)進行寫操作。當RegWrite高電平有效時,將數(shù)據(jù)寫入指定的寄存器中。需要寫回寄存器的指令有:LW、R_type1、R_type2和I_type,則RegWrite_id= LW |

18、 R_type1 | R_type2 | I_type RegDst決定目標寄存器是rt還是rd。當RegDst=0時,rt為目標寄存器;當RegDst=1時,rd為目標寄存器。需要寫回寄存器的指令類型有:LW、R_type1、R_type2和I_type。其中, R_type1和R_type2的目標寄存器是rd,而LW和I_type的目標寄存器是rt。所以:RegDst_id= R_type1 | R_type2 MemWrite決定是否對數(shù)據(jù)存儲器進行寫操作。當MemWrite有效時,將數(shù)據(jù)寫入數(shù)據(jù)存儲器指定的位置。需要對寫存儲器的指令只有SW,所以:MemWrite_id= SW Mem

19、Read決定是否對數(shù)據(jù)存儲器進行讀操作。當MemRead有效時,讀取數(shù)據(jù)存儲器指定位置的數(shù)據(jù)。需要對讀存儲器的指令只有LW,所以:MemRead_id= LW MemtoReg決定寫入寄存器(registers)的數(shù)據(jù)來自ALU還是數(shù)據(jù)存儲器。當MemtoReg=0時,數(shù)據(jù)來自ALU;當MemtoReg=1時,數(shù)據(jù)來自數(shù)據(jù)存儲器。需要寫回寄存器的指令類型有:LW、R_type1、R_type2和I_type。其中,只有LW寫回寄存器的數(shù)據(jù)取自存儲器,所以:MemtoReg_id= LW ALUSrcA決定ALU第一操作數(shù)來源。當ALUSrcA=0時,ALU第一操作數(shù)A(詳見轉(zhuǎn)發(fā)電路設(shè)計);當A

20、LUSrcA=1時,ALU第一操作數(shù)來源于0擴展的用于移位指令的5位sa。八種指令類型中J_tpye、JR_tpye及Branch類型指令沒有使用ALU;其他使用ALU的指令類型中LW、SW、R_type1和I_type均采用的rs作為ALU第一操作數(shù),只有R_type2的第一操作數(shù)采用的是0擴展的sa,所以:ALUSrcA_id= R_type2 ALUSrcB決定ALU第二操作數(shù)來源。當ALUSrcB=0時,ALU第二操作數(shù)B。當ALUSrcB=1時,ALU第二操作數(shù)來源于符號擴展的16位Imm。八種指令類型中J_tpye、JR_tpye及Branch類型指令沒有使用ALU。其他使用ALU

21、的指令類型中R_type1和R_type2 采用rt作為ALU第二操作數(shù),而LW、SW、I_type的第二操作數(shù)采用的是符號擴展的立即數(shù)Imm段,所以:ALUSrcB_id= LW | SW | I_type PCSource決定寫入PC寄存器的來源。PCSource由JR_tpye 、J_tpye及Z決定:即:PCSource=JR, J, ZPCSource=000時, 寫入值為下一條指令的地址PC+4;PCSource=001時, 寫入值為Branch指令的分支地址;PCSource=010時,寫入值為J指令的跳轉(zhuǎn)地址;PCSource=100時,寫入值為JR指令的跳轉(zhuǎn)地址。 ALUCo

22、de決定ALU的功能,由指令中的op段、rt段和funct段決定。功能表如下:opfunctrt運算ALUCodeBEQ_opZ=(A=B)5d10BNE_op Z=(A=B)5d11BGEZ_op5d1Z=(A0)5d12BGTZ_op5d0Z=(A0)5d13BLEZ_op5d0Z=(A0)5d14BLTZ_op5d0Z=(A0)5d15R_type_opADD_funct加5d0ADDU_functAND_funct與5d1XOR_funct異或5d2OR_funct或5d3NOR_funct或非5d4SUB_funct減5d5SUBU_functSLT_functAB?1:05d19S

23、LTU_functAB?1:0(無符號數(shù))5d20SLL_functBA5d17SRLV_functSRA_functBA5d18SRAV_functopfunctrt運算ALUCodeADDI_op加5d0ADDIU_opANDI_op與5d6XORI_op異或5d7ORI_op或5d8SLTI_opAB?1:05d19SLTIU_opAB?1:0(無符號數(shù))5d20SW_op加(計算地址)5d0LW_op(2) 分支檢測(Branch Test)電路的設(shè)計Zero檢測電路主要用于判斷Branch指令的分支條件是否成立,其中BEQ、BNE兩個操作數(shù)為RsData與RtData,而BGEZ、B

24、GTZ、BLEZ和BLTZ指令則為RsData與常數(shù)0比較,所以輸出信號Z的表達式為:RsData31 | (| RsData31: 0) ; ALUCode=alu _blezRsData31 ; ALUCode=alu _bltz RsData31 & (| RsData31: 0) ; ALUCode=alu _bgtzZ= RsData31; ALUCode=alu _bgez| ( RsData31: 0 RtData31: 0) ; ALUCode=alu_bne& ( RsData31: 0 RtData31: 0 ); ALUCode=alu_beq0; ALUCode=OTH

25、ER(3) 寄存器堆(Registers)的設(shè)計(此部分已由老師給出)寄存器堆由32個32位寄存器組成,這些寄存器通過寄存器號進行讀寫存取。因為讀取寄存器不會更改其內(nèi)容,故只需提供寄存號即可讀出該寄存器內(nèi)容。讀取端口采用數(shù)據(jù)選擇器即可實現(xiàn)讀取功能。應注意“0”號寄存器為常數(shù)0.對于往寄存器里寫數(shù)據(jù),需要目標寄存器號(WriteRegister)、待寫入數(shù)據(jù)(WriteData)、寫允許信號(RegWrite)三個變量。圖3.13中5位二進制譯碼器完成地址譯碼,其輸出控制目標寄存器的寫使能信號EN,決定將數(shù)據(jù)WriteData寫入哪個寄存器。在流水線CPU設(shè)計中,寄存器堆設(shè)計還應解決三階數(shù)據(jù)相關(guān)

26、的數(shù)據(jù)轉(zhuǎn)發(fā)問題。當滿足三階數(shù)據(jù)相關(guān)條件時,寄存器具有Read after Write的特性。為實現(xiàn)該功能,在寄存器堆的基礎(chǔ)上加一轉(zhuǎn)發(fā)電路。圖中轉(zhuǎn)發(fā)檢測電路的輸出表達式為RsSel=RegWrite_wb&(RegWriteAddr_wb=0)&(RegWriteAddr_wb=RsAddr_id)RtSel=RegWrite_wb&(RegWriteAddr_wb=0)&(RegWriteAddr_wb=RtAddr_id)(4) 冒險檢測功能(Hazard Deterctor)的設(shè)計由前面分析可知,冒險成立的條件為:上一條指令是LW指令,即MemRead_ex=1;在EX級的LW指令與在ID

27、級的指令讀寫的是同一個寄存器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAddr_ex=RtAddr_id解決冒險的方法為: 插入一個流水線氣泡Stall清空ID/EX寄存器并且阻塞流水線ID級、IF級流水線,有:Stall=(RegWriteAddr_ex=RsAddr_id)|(RegWriteAddr_ex=RtAddr_id)&MemRead_ex 保持PC寄存器和IF/ID流水線寄存器不變,有:PC_IFWrite=Stall(5) 其它單元電路的設(shè)計Branch指令分支地址的計算電路:BranchAddr=NextPC_id+(sign-extend

28、(Imm_id)2)JR指令跳轉(zhuǎn)地址的計算電路:JRAddr=RsData_idJ指令跳轉(zhuǎn)地址的計算電路:Jaddr=NextPC_id31:28,IR_id25:0,2b00 符號擴展的方法針對有符號數(shù) 如果最高位(即符號位)是0,則要擴展的高位用0補齊;如果最高位是1,則用1補齊。 0擴展的方法針對無符號數(shù) 要擴展的高位用0補齊。 例:16位二進制0xFFFF(無符號數(shù)65535), 0擴展成32位為0x0000FFFF (無符號數(shù)65535) 。4. 執(zhí)行模塊EX的設(shè)計執(zhí)行模塊主要有ALU子模塊、轉(zhuǎn)發(fā)電路Forwarding以及若干數(shù)據(jù)選擇器組成。這行模塊的接口信息如下表所示:引腳名稱方

29、向說 明RegDst_exInput方向決定Register回寫時采用的地址(rt/rd)ALUCode_ex4:0決定ALU采用何種運算ALUSrcA_ex決定ALU的A操作數(shù)的來源(rs/Sa)ALUSrcB_ex決定ALU的B操作數(shù)的來源(rt/Imm)引腳名稱說 明Imm_ex31:0Input立即數(shù)Sa_ex31:0移位位數(shù)RsAddr_ex4:0Rs寄存器地址,即Instruction_id25:21RtAddr_ex4:0Rt寄存器地址,即Instruction_id20:16RdAddr_ex4:0Rd寄存器地址,即Instruction_id15:11RsData_ex31:

30、0Rs寄存器數(shù)據(jù)RtData_ex31:0Rt寄存器數(shù)據(jù)RegWriteData_wb31:0寫入寄存器的數(shù)據(jù)ALUResult_mem31:0ALU輸出數(shù)據(jù)RegWriteAddr_wb4:0寄存器的寫地址RegWriteAddr_mem4:0RegWrite_wb寄存器寫允許信號RegWrite_memRegWriteAddr_ex4:0Output寄存器的寫地址ALUResult_ex31:0ALU運算結(jié)果MemWriteData_ex31:0寄存器的回寫數(shù)據(jù)ALU_A31:0ALU操作數(shù),測試時使用ALU_B31:0(1) ALU子模塊的設(shè)計ALU是提供CPU基本運算能力的重要電路。A

31、LU執(zhí)行何種運算,由控制單元中的ALU控制器輸出的ALUCode信號決定。ALU功能見下表:ALUCodeALUResultalu_add = 5b00000A+Balu_and = 5b00001A&Balu_xor = 5b00010ABalu_or = 5b00011A|Balu_nor = 5b00100(A|B)alu_sub = 5b00101A-Balu_andi= 5b00110A&16b0,B15:0alu_xori= 5b00111A16b0,B15:0alu_ori = 5b01000A|16b0,B15:0alu_sll = 5b10000BAalu_sra = 5b1

32、0010BAalu_slt = 5b10011AB?1:0,其中A、B為有符號數(shù)alu_sltu= 5b10100AID Register wire31:0 NextPC_id; dffre #(.WIDTH(32) IF_ID1(.d(Instruction_if),.en(PC_IFWrite),.r(IF_flush|reset),.clk(clk),.q(Instruction_id);dffre #(.WIDTH(32) IF_ID2(.d(NextPC_if),.en(PC_IFWrite),.r(IF_flush|reset),.clk(clk),.q(NextPC_id); /

33、 ID Module wire4:0 RtAddr_id,RdAddr_id,RsAddr_id; wire RegWrite_wb,MemRead_ex,MemtoReg_id,RegWrite_id,MemWrite_id; wire MemRead_id,ALUSrcA_id,ALUSrcB_id,RegDst_id,Stall; wire4:0 RegWriteAddr_wb,RegWriteAddr_ex,ALUCode_id; wire31:0 RegWriteData_wb,Imm_id,Sa_id,RsData_id,RtData_id; ID ID ( .clk(clk),

34、.Instruction_id(Instruction_id), .NextPC_id(NextPC_id), .RegWrite_wb(RegWrite_wb), .RegWriteAddr_wb(RegWriteAddr_wb), .RegWriteData_wb(RegWriteData_wb), .MemRead_ex(MemRead_ex), .RegWriteAddr_ex(RegWriteAddr_ex), .MemtoReg_id(MemtoReg_id), .RegWrite_id(RegWrite_id), .MemWrite_id(MemWrite_id), .MemRe

35、ad_id(MemRead_id), .ALUCode_id(ALUCode_id), .ALUSrcA_id(ALUSrcA_id), .ALUSrcB_id(ALUSrcB_id), .RegDst_id(RegDst_id), .Stall(Stall), .Z(Z), .J(J), .JR(JR), .PC_IFWrite(PC_IFWrite), .BranchAddr(BranchAddr), .JumpAddr(JumpAddr), .JrAddr(JrAddr), .Imm_id(Imm_id), .Sa_id(Sa_id), .RsData_id(RsData_id), .RtData_id(RtData_id), .RtAddr_id(RtAddr_id), .RdAddr_id(RdAddr_id), .RsAddr_id(RsAddr_id);/ ID-EX Register wire MemtoReg_ex,RegWrite_ex,ALUSrcA_ex,ALUSrcB_ex,RegDst_ex; wire 4:0 ALUCode_ex,RdAddr_ex,RsAddr_ex,RtAddr_ex; wire 31:0 Sa_ex,Imm_ex,RsData_ex,RtD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論