




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-作者xxxx-日期xxxxMIPS流水線CPU【精品文檔】本科實(shí)驗(yàn)報(bào)告課程名稱:計(jì)算機(jī)組成與設(shè)計(jì)實(shí)驗(yàn)姓 名:學(xué) 院:信息與電子工程學(xué)院專 業(yè):電子科學(xué)與技術(shù)學(xué) 號(hào):314010指導(dǎo)教師:屈民軍、唐奕2016年 1 月 7 日一、 實(shí)驗(yàn)?zāi)康?. 了解提高CPU性能的方法。2. 掌握流水線MIPS微處理器的工作原理。3. 理解數(shù)據(jù)冒險(xiǎn)、控制冒險(xiǎn)的概念以及流水線沖突的解決方法。4. 掌握流水線MIPS微處理器的測(cè)試方法。二、 實(shí)驗(yàn)任務(wù)設(shè)計(jì)一個(gè)32位流水線MIPS微處理器,具體要求如下:1. 至少運(yùn)行下列MIPS32指令。(1) 算術(shù)運(yùn)算指令:ADD、ADDU、SUB、SUBU、ADDI、ADDIU
2、。(2) 邏輯運(yùn)算指令: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級(jí)流水線技術(shù),對(duì)數(shù)據(jù)冒險(xiǎn)實(shí)現(xiàn)轉(zhuǎn)發(fā)或阻塞功能。3. 在XUP Virtex- Pro 開發(fā)系統(tǒng)中實(shí)現(xiàn)MIPS微處理器,要求CPU的運(yùn)行速度大于25MHz。三、 實(shí)驗(yàn)原理1. 總體設(shè)計(jì)流水線是數(shù)字系統(tǒng)中一種提高系統(tǒng)穩(wěn)定性和工作速度的方法,
3、廣泛應(yīng)用于高檔CPU的架構(gòu)中。根據(jù)MIPS處理器的特點(diǎn),將整體的處理過程分為取指令(IF)、指令譯碼(ID)、執(zhí)行(EX)、存儲(chǔ)器訪問(MEM)和寄存器會(huì)寫(WB)五級(jí),對(duì)應(yīng)多周期的五個(gè)處理階段。一個(gè)指令的執(zhí)行需要5個(gè)時(shí)鐘周期,每個(gè)時(shí)鐘周期的上升沿來臨時(shí),此指令所代表的一系列數(shù)據(jù)和控制信息將轉(zhuǎn)移到下一級(jí)處理。由于在流水線中,數(shù)據(jù)和控制信息將在時(shí)鐘周期的上升沿轉(zhuǎn)移到下一級(jí),所以規(guī)定流水線轉(zhuǎn)移變量命名遵守如下格式:名稱_流水線級(jí)名稱例如:在ID級(jí)指令譯碼電路(Decode)產(chǎn)生的寄存器寫允許信號(hào)RegWrite在ID級(jí)、EX級(jí)、MEM級(jí)和WB級(jí)上的命名分別為RegWrite_id、RegWrite
4、_ex、RegWrite_mem和RegWrite_wb。在頂層文件中,類似的變量名稱有近百個(gè),這樣的命名方式起到了很好的識(shí)別作用。1) 流水線中的控制信號(hào)(1)IF級(jí):取指令級(jí)。從ROM中讀取指令,并在下一個(gè)時(shí)鐘沿到來時(shí)把指令送到ID級(jí)的指令緩沖器中。該級(jí)控制信號(hào)決定下一個(gè)指令指針的PCSource信號(hào)、阻塞流水線的PC_IFwrite信號(hào)、清空流水線的IF_flush信號(hào)。(2)ID級(jí):指令譯碼器。對(duì)IF級(jí)來的指令進(jìn)行譯碼,并產(chǎn)生相應(yīng)的控制信號(hào)。整個(gè)CPU的控制信號(hào)基本都是在這級(jí)上產(chǎn)生。該級(jí)自身不需任何控制信號(hào)。流水線冒險(xiǎn)檢測(cè)也在該級(jí)進(jìn)行,冒險(xiǎn)檢測(cè)電路需要上一條指令的MemRead,即在檢
5、測(cè)到冒險(xiǎn)條件成立時(shí),冒險(xiǎn)檢測(cè)電路產(chǎn)生stall信號(hào)清空ID/EX寄存器,插入一個(gè)流水線氣泡。(3)EX級(jí):執(zhí)行級(jí)。該級(jí)進(jìn)行算術(shù)或邏輯操作。此外LW、SW指令所用的RAM訪問地址也是在本級(jí)上實(shí)現(xiàn)??刂菩盘?hào)有ALUCode、ALUSrcA、ALUScrB和RegDst,根據(jù)這些信號(hào)確定ALU操作、選擇兩個(gè)ALU操作數(shù)A、B,并確定目標(biāo)寄存器。另外,數(shù)據(jù)轉(zhuǎn)發(fā)也在該級(jí)完成。數(shù)據(jù)轉(zhuǎn)發(fā)控制電路產(chǎn)生ForwardA和ForwardB兩組控制信號(hào)。(4)MEM級(jí):存儲(chǔ)器訪問級(jí)。只有在執(zhí)行LW、SW指令時(shí)才對(duì)存儲(chǔ)器進(jìn)行讀寫,對(duì)其他指令只起到一個(gè)周期的作用。該級(jí)只需存儲(chǔ)器寫操作允許信號(hào)MemWrite。(5)WB
6、級(jí):寫回級(jí)。該級(jí)把指令執(zhí)行的結(jié)果回寫到寄存器文件中。該級(jí)設(shè)置信號(hào)MemtoReg和寄存器寫操作允許信號(hào)RegWrite,其中MemtoReg決定寫入寄存器的數(shù)據(jù)來自于MEM級(jí)上的緩沖值或來自于MEM級(jí)上的存儲(chǔ)器。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è)計(jì)中,采用數(shù)據(jù)轉(zhuǎn)發(fā)和插入流水線氣泡的方法解決此類相關(guān)問題。(1)三階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)條件為:(操作數(shù)A、B同時(shí)滿足)WB級(jí)指令是寫操作,即RegWrite_wb=1;WB級(jí)指令寫回的目標(biāo)寄存器不是
7、$0,即RegWriteAddr_wb0;WB級(jí)指令寫回的目標(biāo)寄存器與在ID級(jí)指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_id 或 RegWriteAddr_wb=RtAddr_id。(2)二階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)(MEM冒險(xiǎn))轉(zhuǎn)發(fā)條件:WB級(jí)指令是寫操作,即RegWrite_wb=1;WB級(jí)指令寫回的目標(biāo)寄存器不是$0,即RegWriteAddr_wb0;WB級(jí)指令寫回的目標(biāo)寄存器與在EX級(jí)指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_ex 或 RegWriteAddr_wb=RtAddr_ex;EX冒險(xiǎn)不成立,即RegWriteAdd
8、r_memRsAddr_ex 或 RegWriteAddr_mem=RtAddr_ex。(3)一階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)(EX冒險(xiǎn))轉(zhuǎn)發(fā)條件ForwardA、ForwardB作為數(shù)據(jù)選擇器的地址信號(hào),轉(zhuǎn)發(fā)條件不成立時(shí),ALU操作數(shù)從ID/EX流水線寄存器中讀取;轉(zhuǎn)發(fā)條件成立時(shí),ALU操作數(shù)取自數(shù)據(jù)旁路。轉(zhuǎn)發(fā)條件:MEM級(jí)指令是寫操作,即RegWrite_mem=1;MEM級(jí)指令寫回的目標(biāo)寄存器不是$0,即RegWriteAddr_mem0;MEM級(jí)指令寫回的目標(biāo)寄存器與在EX級(jí)指令的源寄存器是同一寄存器,即RegWriteAddr_mem=RsAddr_ex 或 RegWriteAddr_mem=Rt
9、Addr_ex。3)數(shù)據(jù)冒險(xiǎn)與數(shù)據(jù)轉(zhuǎn)發(fā)這類冒險(xiǎn)不同于數(shù)據(jù)相關(guān)冒險(xiǎn),需要單獨(dú)一個(gè)“冒險(xiǎn)檢測(cè)單元(Hazard Detector)”,它在ID級(jí)完成。冒險(xiǎn)成立的條件為: 上一條指令是lw指令,即MemRead_ex=1; 在EX級(jí)的lw指令與在ID級(jí)的指令讀寫的是同一個(gè)寄存器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAddr_ex=RtAddr_id。冒險(xiǎn)的解決:為解決數(shù)據(jù)冒險(xiǎn),我們引入流水線阻塞。當(dāng)Hazard Detector檢測(cè)到冒險(xiǎn)條件成立時(shí),在lw指令和下一條指令之間插入阻塞,即流水線氣泡(bubble),使后一條指令延遲一個(gè)時(shí)鐘周期執(zhí)行,這樣就將該冒險(xiǎn)
10、轉(zhuǎn)化為二階數(shù)據(jù)相關(guān),可用轉(zhuǎn)發(fā)解決。如圖所示流水線氣泡的引入需要注意的是,如果處于ID級(jí)的指令被阻塞,那么處于IF級(jí)的指令也必須阻塞,否則,處于ID級(jí)的指令就會(huì)丟失。防止這兩條指令繼續(xù)執(zhí)行的方法是:保持PC寄存器和IF/ID流水線寄存器不變,同時(shí)插入一個(gè)流水線氣泡。具體實(shí)現(xiàn)方法如下:在ID級(jí)檢測(cè)到冒險(xiǎn)條件時(shí), HazardDetector輸出兩個(gè)信號(hào):Stall與PC_IFWrite。Stall信號(hào)將ID/EX流水線寄存器中的EX、MEM和WB級(jí)控制信號(hào)全部清零。這些信號(hào)傳遞到流水線后面的各級(jí),由于控制信號(hào)均為零,所以不會(huì)對(duì)任何寄存器和存儲(chǔ)器進(jìn)行寫操作,高電平有效。PC_IFWrite信號(hào)禁止P
11、C寄存器和IF/ID流水線寄存器接收新數(shù)據(jù),低電平有效。2.3)分支冒險(xiǎn)還有一類冒險(xiǎn)是包含分支的流水線冒險(xiǎn)流水線每個(gè)時(shí)鐘周期都得取指令才能維持運(yùn)行,但分支指令必須等到MEM級(jí)才能確定是否執(zhí)行分支。這種為了確定預(yù)取正確的指令而導(dǎo)致的延遲叫做控制冒險(xiǎn)或分支冒險(xiǎn)。一種比較普遍的提高分支阻塞速度的方法是假設(shè)分支不發(fā)生,并繼續(xù)執(zhí)行順序的指令流。如果分支發(fā)生的話,就丟棄已經(jīng)預(yù)取并譯碼的指令,指令的執(zhí)行沿著分支目標(biāo)繼續(xù)。由于分支指令直到MEM級(jí)才能確定下一條指令的PC,這就意味著為了丟棄指令必須將流水線中的IF、ID和EX級(jí)的指令都清除掉(flush)。這種優(yōu)化方法的代價(jià)較大,效率較低。如果我們能在流水線中
12、提前分支指令的執(zhí)行過程,那么就能減少需要清除的指令數(shù)。這是一種提高分支效率的方法,降低了執(zhí)行分支的代價(jià)。因此我們采用提前分支指令的方法解決分支冒險(xiǎn)。提前分支指令需要提前完成兩個(gè)操作:計(jì)算分支的目的地址:判斷分支指令的跳轉(zhuǎn)條件:在提前完成以上兩個(gè)操作之外,我們還需丟棄IF級(jí)的指令。具體做法是:加入一個(gè)控制信號(hào)IF_flush,做為IF/ID流水線寄存器的清零信號(hào)。當(dāng)分支冒險(xiǎn)成立,即Z=1,則IF_flush=1,否則IF_flush=0,故IF_flush = Z??紤]到本系統(tǒng)還要實(shí)現(xiàn)的無條件跳轉(zhuǎn)指令:J和JR,在執(zhí)行這兩個(gè)指令時(shí)也必須要對(duì)IF/ID流水線寄存器進(jìn)行清空,因此, IF_flush
13、的表達(dá)式應(yīng)表示為:IF_flush = Z | J | JR。2. MIPS指令格式1) R型指令格式本實(shí)驗(yàn)要實(shí)現(xiàn)的R型指令有:算術(shù)邏輯運(yùn)算指令:ADD、ADDU、SUB、SUBU、AND、OR、NOR、XOR 、SLT、SLTU移位指令:SLLV、SRLV、SRAV、SLL、SRL、SRA寄存器跳轉(zhuǎn)指令:JR2) I型指令格式本實(shí)驗(yàn)要實(shí)現(xiàn)的I型指令有:存儲(chǔ)器訪問指令:LW、SW立即數(shù)算術(shù)邏輯運(yùn)算指令:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIU分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ3) J型指令格式本實(shí)驗(yàn)要實(shí)現(xiàn)的I型指令有:無條件跳轉(zhuǎn)指令:
14、J3. ID的設(shè)計(jì)指令譯碼模塊的主要作用是從機(jī)器碼中解析出指令,并根據(jù)解析結(jié)果輸出各種控制信號(hào)。ID模塊主要有指令譯碼(Decode)、寄存器堆(Registers)、冒險(xiǎn)監(jiān)測(cè)、分支檢測(cè)和加法器等組成。ID模塊的接口信息如下表所示:引腳名稱方向說 明clk Input系統(tǒng)時(shí)鐘Instruction_id31:0 指令機(jī)器碼NextPC_id31:0 指令指針RegWrite_wb 寄存器寫允許信號(hào),高電平有效RegWriteAddr_wb4:0 寄存器的寫地址RegWriteData_wb31:0寫入寄存器的數(shù)據(jù)MemRead_ex冒險(xiǎn)檢測(cè)的輸入RegWriteAddr_ex4:0MemtoR
15、eg_idOutput決定回寫的數(shù)據(jù)來源(0:ALU 1:存儲(chǔ)器)RegWrite_id寄存器寫允許信號(hào),高電平有效MemWrite_id存儲(chǔ)器寫允許信號(hào),高電平有效MemRead_id存儲(chǔ)器讀允許信號(hào),高電平有效ALUCode_id4:0決定ALU采用何種運(yùn)算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寄存器清空信號(hào),高電平插入一個(gè)流水線氣泡Z分支指令的條件判斷結(jié)果J跳轉(zhuǎn)指令JR寄存器跳轉(zhuǎn)指令PC_IFWrite
16、阻塞流水線的信號(hào),低電平有效BranchAddr31:0條件分支地址JumpAddr31:0跳轉(zhuǎn)地址Imm_id31:0符號(hào)擴(kuò)展成32位的立即數(shù)Sa_id31:00擴(kuò)展成32位的移位立即數(shù)RsData_id31:0Rs寄存器數(shù)據(jù)RtData_id31:0Rt寄存器數(shù)據(jù)RdAddr_id4:0Rd寄存器地址RsAddr_id4:0Rs寄存器地址RtAddr_id4:0Rt寄存器地址(1) 指令譯碼(Decode)子模塊的設(shè)計(jì)Decode控制器的主要作用是根據(jù)指令確定各個(gè)控制信號(hào)的值,是一個(gè)組合電路。我們將指令分成八類: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輸出的九組控制信號(hào): RegWrite決定是否對(duì)寄存器(Registers)進(jìn)行寫操作。當(dāng)RegWrite高電平有效時(shí),將數(shù)據(jù)寫入指定的寄存器中。需要寫回寄存器的指令有:LW、R_type1、R_type2和I_type,則RegWrite_id= LW |
18、 R_type1 | R_type2 | I_type RegDst決定目標(biāo)寄存器是rt還是rd。當(dāng)RegDst=0時(shí),rt為目標(biāo)寄存器;當(dāng)RegDst=1時(shí),rd為目標(biāo)寄存器。需要寫回寄存器的指令類型有:LW、R_type1、R_type2和I_type。其中, R_type1和R_type2的目標(biāo)寄存器是rd,而LW和I_type的目標(biāo)寄存器是rt。所以:RegDst_id= R_type1 | R_type2 MemWrite決定是否對(duì)數(shù)據(jù)存儲(chǔ)器進(jìn)行寫操作。當(dāng)MemWrite有效時(shí),將數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器指定的位置。需要對(duì)寫存儲(chǔ)器的指令只有SW,所以:MemWrite_id= SW Mem
19、Read決定是否對(duì)數(shù)據(jù)存儲(chǔ)器進(jìn)行讀操作。當(dāng)MemRead有效時(shí),讀取數(shù)據(jù)存儲(chǔ)器指定位置的數(shù)據(jù)。需要對(duì)讀存儲(chǔ)器的指令只有LW,所以:MemRead_id= LW MemtoReg決定寫入寄存器(registers)的數(shù)據(jù)來自ALU還是數(shù)據(jù)存儲(chǔ)器。當(dāng)MemtoReg=0時(shí),數(shù)據(jù)來自ALU;當(dāng)MemtoReg=1時(shí),數(shù)據(jù)來自數(shù)據(jù)存儲(chǔ)器。需要寫回寄存器的指令類型有:LW、R_type1、R_type2和I_type。其中,只有LW寫回寄存器的數(shù)據(jù)取自存儲(chǔ)器,所以:MemtoReg_id= LW ALUSrcA決定ALU第一操作數(shù)來源。當(dāng)ALUSrcA=0時(shí),ALU第一操作數(shù)A(詳見轉(zhuǎn)發(fā)電路設(shè)計(jì));當(dāng)A
20、LUSrcA=1時(shí),ALU第一操作數(shù)來源于0擴(kuò)展的用于移位指令的5位sa。八種指令類型中J_tpye、JR_tpye及Branch類型指令沒有使用ALU;其他使用ALU的指令類型中LW、SW、R_type1和I_type均采用的rs作為ALU第一操作數(shù),只有R_type2的第一操作數(shù)采用的是0擴(kuò)展的sa,所以:ALUSrcA_id= R_type2 ALUSrcB決定ALU第二操作數(shù)來源。當(dāng)ALUSrcB=0時(shí),ALU第二操作數(shù)B。當(dāng)ALUSrcB=1時(shí),ALU第二操作數(shù)來源于符號(hào)擴(kuò)展的16位Imm。八種指令類型中J_tpye、JR_tpye及Branch類型指令沒有使用ALU。其他使用ALU
21、的指令類型中R_type1和R_type2 采用rt作為ALU第二操作數(shù),而LW、SW、I_type的第二操作數(shù)采用的是符號(hào)擴(kuò)展的立即數(shù)Imm段,所以:ALUSrcB_id= LW | SW | I_type PCSource決定寫入PC寄存器的來源。PCSource由JR_tpye 、J_tpye及Z決定:即:PCSource=JR, J, ZPCSource=000時(shí), 寫入值為下一條指令的地址PC+4;PCSource=001時(shí), 寫入值為Branch指令的分支地址;PCSource=010時(shí),寫入值為J指令的跳轉(zhuǎn)地址;PCSource=100時(shí),寫入值為JR指令的跳轉(zhuǎn)地址。 ALUCo
22、de決定ALU的功能,由指令中的op段、rt段和funct段決定。功能表如下:opfunctrt運(yùn)算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(無符號(hào)數(shù))5d20SLL_functBA5d17SRLV_functSRA_functBA5d18SRAV_functopfunctrt運(yùn)算ALUCodeADDI_op加5d0ADDIU_opANDI_op與5d6XORI_op異或5d7ORI_op或5d8SLTI_opAB?1:05d19SLTIU_opAB?1:0(無符號(hào)數(shù))5d20SW_op加(計(jì)算地址)5d0LW_op(2) 分支檢測(cè)(Branch Test)電路的設(shè)計(jì)Zero檢測(cè)電路主要用于判斷Branch指令的分支條件是否成立,其中BEQ、BNE兩個(gè)操作數(shù)為RsData與RtData,而BGEZ、B
24、GTZ、BLEZ和BLTZ指令則為RsData與常數(shù)0比較,所以輸出信號(hào)Z的表達(dá)式為: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è)計(jì)(此部分已由老師給出)寄存器堆由32個(gè)32位寄存器組成,這些寄存器通過寄存器號(hào)進(jìn)行讀寫存取。因?yàn)樽x取寄存器不會(huì)更改其內(nèi)容,故只需提供寄存號(hào)即可讀出該寄存器內(nèi)容。讀取端口采用數(shù)據(jù)選擇器即可實(shí)現(xiàn)讀取功能。應(yīng)注意“0”號(hào)寄存器為常數(shù)0.對(duì)于往寄存器里寫數(shù)據(jù),需要目標(biāo)寄存器號(hào)(WriteRegister)、待寫入數(shù)據(jù)(WriteData)、寫允許信號(hào)(RegWrite)三個(gè)變量。圖3.13中5位二進(jìn)制譯碼器完成地址譯碼,其輸出控制目標(biāo)寄存器的寫使能信號(hào)EN,決定將數(shù)據(jù)WriteData寫入哪個(gè)寄存器。在流水線CPU設(shè)計(jì)中,寄存器堆設(shè)計(jì)還應(yīng)解決三階數(shù)據(jù)相關(guān)
26、的數(shù)據(jù)轉(zhuǎn)發(fā)問題。當(dāng)滿足三階數(shù)據(jù)相關(guān)條件時(shí),寄存器具有Read after Write的特性。為實(shí)現(xiàn)該功能,在寄存器堆的基礎(chǔ)上加一轉(zhuǎn)發(fā)電路。圖中轉(zhuǎn)發(fā)檢測(cè)電路的輸出表達(dá)式為RsSel=RegWrite_wb&(RegWriteAddr_wb=0)&(RegWriteAddr_wb=RsAddr_id)RtSel=RegWrite_wb&(RegWriteAddr_wb=0)&(RegWriteAddr_wb=RtAddr_id)(4) 冒險(xiǎn)檢測(cè)功能(Hazard Deterctor)的設(shè)計(jì)由前面分析可知,冒險(xiǎn)成立的條件為:上一條指令是LW指令,即MemRead_ex=1;在EX級(jí)的LW指令與在ID
27、級(jí)的指令讀寫的是同一個(gè)寄存器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAddr_ex=RtAddr_id解決冒險(xiǎn)的方法為: 插入一個(gè)流水線氣泡Stall清空ID/EX寄存器并且阻塞流水線ID級(jí)、IF級(jí)流水線,有:Stall=(RegWriteAddr_ex=RsAddr_id)|(RegWriteAddr_ex=RtAddr_id)&MemRead_ex 保持PC寄存器和IF/ID流水線寄存器不變,有:PC_IFWrite=Stall(5) 其它單元電路的設(shè)計(jì)Branch指令分支地址的計(jì)算電路:BranchAddr=NextPC_id+(sign-extend
28、(Imm_id)2)JR指令跳轉(zhuǎn)地址的計(jì)算電路:JRAddr=RsData_idJ指令跳轉(zhuǎn)地址的計(jì)算電路:Jaddr=NextPC_id31:28,IR_id25:0,2b00 符號(hào)擴(kuò)展的方法針對(duì)有符號(hào)數(shù) 如果最高位(即符號(hào)位)是0,則要擴(kuò)展的高位用0補(bǔ)齊;如果最高位是1,則用1補(bǔ)齊。 0擴(kuò)展的方法針對(duì)無符號(hào)數(shù) 要擴(kuò)展的高位用0補(bǔ)齊。 例:16位二進(jìn)制0xFFFF(無符號(hào)數(shù)65535), 0擴(kuò)展成32位為0x0000FFFF (無符號(hào)數(shù)65535) 。4. 執(zhí)行模塊EX的設(shè)計(jì)執(zhí)行模塊主要有ALU子模塊、轉(zhuǎn)發(fā)電路Forwarding以及若干數(shù)據(jù)選擇器組成。這行模塊的接口信息如下表所示:引腳名稱方
29、向說 明RegDst_exInput方向決定Register回寫時(shí)采用的地址(rt/rd)ALUCode_ex4:0決定ALU采用何種運(yùn)算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寄存器寫允許信號(hào)RegWrite_memRegWriteAddr_ex4:0Output寄存器的寫地址ALUResult_ex31:0ALU運(yùn)算結(jié)果MemWriteData_ex31:0寄存器的回寫數(shù)據(jù)ALU_A31:0ALU操作數(shù),測(cè)試時(shí)使用ALU_B31:0(1) ALU子模塊的設(shè)計(jì)ALU是提供CPU基本運(yùn)算能力的重要電路。A
31、LU執(zhí)行何種運(yùn)算,由控制單元中的ALU控制器輸出的ALUCode信號(hào)決定。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為有符號(hào)數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海洋能源市場(chǎng)前景預(yù)測(cè)考核試卷
- 森林改培與生態(tài)保護(hù)與生態(tài)移民政策研究考核試卷
- 火力發(fā)電廠節(jié)能減排技術(shù)考核試卷
- 云南高職單招面試模擬真題及答案
- 兔子繁殖方法考核試卷
- 棉麻行業(yè)質(zhì)量檢驗(yàn)標(biāo)準(zhǔn)與方法考核試卷
- 五金產(chǎn)品綠色包裝材料研發(fā)與應(yīng)用考核試卷
- 科爾沁藝術(shù)職業(yè)學(xué)院《建筑與文化》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年CPSM試題及答案定制化
- 2024年CPSM學(xué)習(xí)方案與效率提升試題及答案
- 來訪人員安全入場(chǎng)教育
- 《數(shù)據(jù)安全法》參考試題庫150題(帶答案)
- 青龍山經(jīng)營(yíng)性公墓項(xiàng)目融資策劃分析報(bào)告
- 高中家長(zhǎng)會(huì) 沖刺高考為夢(mèng)而戰(zhàn)課件-高三下學(xué)期家長(zhǎng)會(huì)
- 內(nèi)環(huán)境穩(wěn)態(tài)-課件
- 垂體瘤的MRI診斷與鑒別診斷課件
- 小學(xué)感恩教育主題班會(huì)課件
- 有限空間監(jiān)理實(shí)施細(xì)則
- 通信工程投標(biāo)專家繼續(xù)教育題庫(附答案)
- 學(xué)校三年規(guī)劃展示
- 大數(shù)據(jù)可視化知到智慧樹章節(jié)測(cè)試課后答案2024年秋浙江大學(xué)
評(píng)論
0/150
提交評(píng)論