


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、、實驗?zāi)康?. 了解提高CPU性能的方法。2. 掌握流水線 MIPS微處理器的工作原理。3. 理解數(shù)據(jù)冒險、控制冒險的概念以及流水線沖突的解決方法。4. 掌握流水線 MIPS微處理器的測試方法。、實驗任務(wù)設(shè)計一個32位流水線MIPS微處理器,具體要求如下:1. 至少運行以下 MIPS32指令。1算術(shù)運算指令: ADD、ADDU、SUB、SUBU、ADDI、ADDIU。2邏輯運算指令:AND、OR、NOR、XOR、ANDI、ORI、XORI、SLT、SLTU、 SLTI、SLTIU。3移位指令:SLL、SLLV、SRL、SRLV、SRA。4條件分支指令: BEQ、BNE、BGEZ、BGTZ、BL
2、EZ、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- n Pro開發(fā)系統(tǒng)中實現(xiàn) MIPS微處理器,要求 CPU的運行速度大于25MHz三、實驗原理1. 總體設(shè)計流水線是數(shù)字系統(tǒng)中一種提高系統(tǒng)穩(wěn)定性和工作速度的方法,廣泛應(yīng)用于高檔CPU的架構(gòu)中。根據(jù) MIPS處理器的特點,將整體的處理過程分為取指令I(lǐng)F、指令譯碼ID、執(zhí)行EX、存儲器訪問MEM和存放器會寫WB五級,對應(yīng)多周期的五個處理階段。 如圖3.1所示,一個指令的執(zhí)行需要 5個時鐘周期,每個時鐘周期的上升沿來臨時,此指
3、令 所代表的一系列數(shù)據(jù)和控制信息將轉(zhuǎn)移到下一級處理。O1 2345678911I 二IDEXMEMWB12IFIDEXMEMWB13IFIDEXMEMWBMIFIDEXMEMWB15IFIDEXMEMWB圖3.1流水線流水作業(yè)示意圖由于在流水線中,數(shù)據(jù)和控制信息將在時鐘周期的上升沿轉(zhuǎn)移到下一級,所以規(guī)定流水線轉(zhuǎn)移變量命名遵守如下格式:名稱_流水線級名稱例如:在ID級指令譯碼電路Decode產(chǎn)生的存放器寫允許信號RegWrite在ID級、 EX 級、MEM 級和 WB 級上的命名分別為 RegWrite_id、RegWrite_ex、RegWrite_mem 和 RegWrite_wb。在頂層文
4、件中,類似的變量名稱有近百個,這樣的命名方式起到了很好的識 別作用。1流水線中的控制信號1IF級:取指令級。從 ROM中讀取指令,并在下一個時鐘沿到來時把指令送到ID級的指令緩沖器中。該級控制信號決定下一個指令指針的PCSource信號、阻塞流水線的PC_IFwrite信號、清空流水線的IF_flush信號。2ID級:指令譯碼器。對IF級來的指令進行譯碼,并產(chǎn)生相應(yīng)的控制信號。整個CPU的控制信號根本都是在這級上產(chǎn)生。該級自身不需任何控制信號。流水線冒險檢測也在該級進行,冒險檢測電路需要上一條指令的MemRead,即在檢測到冒險條件成立時,冒險檢測電路產(chǎn)生 stalI信號清空ID/EX存放器,
5、插入一個流水線氣泡。3EX級:執(zhí)行級。該級進行算術(shù)或邏輯操作。此外LW、SW指令所用的RAM訪問地址也是在本級上實現(xiàn)??刂菩盘栍?ALUCode、ALUSrcA、ALUScrB和RegDst,根據(jù) 這些信號確定 ALU操作、選擇兩個 ALU操作數(shù)A、B,并確定目標(biāo)存放器。另外,數(shù)據(jù)轉(zhuǎn)發(fā)也在該級完成。數(shù)據(jù)轉(zhuǎn)發(fā)控制電路產(chǎn)生ForwardA和ForwardB兩組控制信號。4MEM級:存儲器訪問級。只有在執(zhí)行LW、SW指令時才對存儲器進行讀寫,對其他指令只起到一個周期的作用。該級只需存儲器寫操作允許信號MemWrite。5WB級:寫回級。該級把指令執(zhí)行的結(jié)果回寫到存放器文件中。該級設(shè)置信號 Memto
6、Reg和存放器寫操作允許信號RegWrite,其中MemtoReg決定寫入存放器的數(shù)據(jù)來自于MEM級上的緩沖值或來自于MEM級上的存儲器。2流水線冒險在流水線CPU中,多條指令通知執(zhí)行,由于各種各樣的原因,在下一個時鐘周期中下 一條指令不能執(zhí)行,這種情況稱為冒險。冒險分為三類: 結(jié)構(gòu)冒險:硬件不支持多條指令在同一個時鐘周期內(nèi)執(zhí)行。MIPS指令集專為流水線設(shè)計,因此在 MIPS CPU中不存在此類冒險。數(shù)據(jù)冒險:在一個操作必須等待另一操作完成后才能進行時,流水線必須停頓,這種情況稱為數(shù)據(jù)冒險。數(shù)據(jù)冒險分為兩類:i數(shù)據(jù)相關(guān):流水線內(nèi)部其中任何一條指令要用到任何其他指令的計算結(jié)果時,將導(dǎo)致數(shù)據(jù)冒險。
7、通常可以用數(shù)據(jù)轉(zhuǎn)發(fā)數(shù)據(jù)定向來解決此類冒險。ii數(shù)據(jù)冒險:此類冒險發(fā)生在當(dāng)定向的目標(biāo)階段在時序上早于定向的源階段時,數(shù)據(jù)轉(zhuǎn)發(fā)無效。通常是引入流水線阻塞,即氣泡bubble來解決??刂泼半U:CPU需要根據(jù)分支指令的結(jié)果做出決策,而此時其他指令可能還在執(zhí)行中,這時會出現(xiàn)控制冒險,也稱為分支冒險。解決此類冒險的常用方法是延遲分支。2.1數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)下面通過具體例子來闡述數(shù)據(jù)相關(guān)# Register $2 written by subsub$2. $1.$3and$12235# 1st operand($2) depends on subor$13.$6.$2# 2nd operandf$2) dep
8、ends on subadd$143232#& 2nd($2) depend on subSW$15.100(52)# Base ($2) depends cm subTirrw (in dock cycles)CC 1 OC2 CC3 CC4 CC 5 CCS CC 7 CCS CC9Program execution order (in instruct tons)ub $占 $1,$3and $12., $5or $13, $6, $2dd$U, S2, 52sw $15, 100i$2)圖3.2數(shù)據(jù)相關(guān)性問題實例圖可見,后4條指令都依賴于第一條指令得到存放器$2的結(jié)果,但sub
9、指令要在第五周期才寫回存放器$2,但在第三、四、五個時鐘周期$2分別要被and、or和add三個指令用到, 所以這三個指令得到的是錯誤的未更新的數(shù)據(jù),會引起錯誤的結(jié)果;而第六個時鐘周期$2要被sw指令用到,此時得到的才是正確的已更新的數(shù)據(jù)。這種數(shù)據(jù)之間的互相關(guān)聯(lián)引起的 冒險就是數(shù)據(jù)相關(guān)??梢钥闯?,當(dāng)一條依賴關(guān)系的方向與時間軸的方向相反時,就會產(chǎn)生數(shù)據(jù)冒險。1一階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)EX冒險首先討論指令sub與and之間的相關(guān)問題。sub指令在第五周期寫回存放器 $2,而and指令在第四周期就對 sub指令的結(jié)果$2提出 申請,顯然將得到錯誤的未更新的數(shù)據(jù)。像這類第I條指令的源操作存放器與第 1-1條
10、指令Time (in clock cycles) cc 1CC8CC2 CC3CC4 CC 5 CC6sub , $1,$3and $12, $:.; $5圖3.3 一階數(shù)據(jù)相關(guān)實例圖即上一條指令的目標(biāo)存放器相重,導(dǎo)致的數(shù)據(jù)相關(guān)稱為一階數(shù)據(jù)相關(guān)中實線所示??梢园l(fā)現(xiàn),sub指令的結(jié)果其實在 EX級結(jié)尾,即第三周期末就產(chǎn)生了;而 and指令在所以只需要sub指令3.3虛線所示。轉(zhuǎn)發(fā)EX/MEMID/EXMEM/WBRegistsrsData memoryMcM圖3.4轉(zhuǎn)發(fā)機制的硬件實現(xiàn)EX'MEM HerattarHd第四時鐘周期向sub指令結(jié)果發(fā)出請求, 請求時間晚于結(jié)果產(chǎn)生時間,結(jié)果產(chǎn)
11、生之后直接將其轉(zhuǎn)發(fā)給and指令就可以防止一階數(shù)據(jù)相關(guān)。如圖數(shù)據(jù)為 ALUResult_mem數(shù)據(jù)轉(zhuǎn)發(fā)由Forwarding unit單元控制,判斷轉(zhuǎn)發(fā)條件是否成立。轉(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級指令寫回的目標(biāo)存放器不是$0,即RegWriteAddr_mem豐0; MEM級指令寫回的目標(biāo)存放器與在EX級指令的源存放器是同一存放器,即RegWriteAddr_mem=RsAd
12、dr_ex 或 RegWriteAddr_mem=RtAddr_ex。2二階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)MEM冒險 接下來討論sub指令與or指令之間的相關(guān)問題。sub指令在第5時鐘周期寫回存放器,而or指令也在第5時鐘周期對sub指令的結(jié)果提 出了請求,很顯然 or指令讀取的數(shù)據(jù)是未被更新的錯誤內(nèi)容。這類中實線所示。sub ' i,r $3or $13, $6, $2Time (in clock cycles) CO 1 CC 2 CC 3 CC 4 CC 5 CC6 CC 7 CC 8圖一階數(shù)據(jù)相關(guān)實例圖sub指令的結(jié)果已經(jīng)產(chǎn)如前所述,or指令在第五時鐘周期向 sub指令結(jié)果發(fā)出請求時,生。所以
13、,我們同樣采用“轉(zhuǎn)發(fā),即通過MEM/WB流水線存放器,將 sub指令結(jié)果轉(zhuǎn)發(fā) 給or指令,而不需要先寫回存放器堆。如圖3.5中虛線所示。轉(zhuǎn)發(fā)數(shù)據(jù)為RegWriteData_wb轉(zhuǎn)發(fā)條件: WB級指令是寫操作,即RegWrite_wb=1 ; WB級指令寫回的目標(biāo)存放器不是$0,即RegWriteAddr_wb豐0; WB級指令寫回的目標(biāo)存放器與在EX級指令的源存放器是同一存放器,即RegWriteAddr_wb=RsAddr_ex 或 RegWriteAddr_wb=RtAddr_ex ; EX 冒險不成立,即 RegWriteAddr_mem 豐 RsAddr_ex 或RegWriteAdd
14、r_mem=RtAddr_ex。(3)三階數(shù)據(jù)相關(guān)與轉(zhuǎn)發(fā)最后討論sub指令與add指令之間的相關(guān)問題。sub指令與add指令在第五時鐘周期內(nèi)同時讀寫同一個存放器。這類同一周期內(nèi)同時讀 寫同一個存放器的數(shù)據(jù)相關(guān)稱之為三階數(shù)據(jù)相關(guān)。中實線所示。Tirrw (in clock cyclAd) CC 1 CC 2 CC3 CC 4 CC 5 CCS CC 7 CCS CC9圖三階數(shù)據(jù)相關(guān)實例圖假設(shè)存放器的寫操作發(fā)生在時鐘周期的上升沿,而讀操作發(fā)生在時鐘周期的下降沿,那么讀操作將讀取到最新寫入的內(nèi)容。在這種假設(shè)條件下將不會發(fā)生數(shù)據(jù)冒險。這就要求流水線中的存放器具有“先寫后讀Read After Writ
15、e的特性。這類“寫操作發(fā)生在時鐘周期的上升沿, 讀操作發(fā)生在時鐘周期的下降沿 的存放器雖 然在理論上是可實現(xiàn)的,但是不適合應(yīng)用于同步系統(tǒng),因為它不但影響系統(tǒng)的運行速度, 而 且影響系統(tǒng)的穩(wěn)定性,是不可取的。因此,我們采用“轉(zhuǎn)發(fā)機制來解決三階數(shù)據(jù)相關(guān)冒險。該局部轉(zhuǎn)發(fā)電路我們放在存放 器堆的設(shè)計中完成。如圖 3.6中虛線所示。轉(zhuǎn)發(fā)數(shù)據(jù)為RegWriteData_wb。轉(zhuǎn)發(fā)條件為: WB級指令是寫操作,即 RegWrite_wb=1 ; WB級指令寫回的目標(biāo)存放器不是 WB級指令寫回的目標(biāo)存放器與在$0,即 RegWriteAddr_wb 豐 0;ID級指令的源存放器是同一存放器,即CC注意到lw指
16、令只能在第 四時鐘周期從內(nèi)存中讀 岀數(shù)據(jù),因此它和緊隨其 后的and指令之間的依 賴關(guān)系與時序方向是相 反的,這種冒險是無法通 過轉(zhuǎn)發(fā)來實現(xiàn)的。圖3.7數(shù)據(jù)冒險與阻塞實例圖add 59,RegWriteAddr_wb=RsAddr_id或 RegWriteAddr_wb=RtAddr_id。2.2數(shù)據(jù)冒險與阻塞當(dāng)一條指令試圖讀取一個存放器,而它前一條指令是lw指令,并且該lw指令寫入的是同一個存放器時,定向轉(zhuǎn)發(fā)的方法就無法解決問題。如Tw (in cycles) oc 1 CC2 CC 3 CC d這類冒險不同于數(shù)據(jù)相關(guān)冒險,需要單獨一個“冒險檢測單元Hazard Detector它在ID級完
17、成。冒險成立的條件為: 上一條指令是lw指令,即 MemRead_ex=1 ; 在EX級的lw指令與在ID級的指令讀寫的是同一個存放器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAddr_ex=RtAddr_id。冒險的解決:為解決數(shù)據(jù)冒險,我們引入流水線阻塞。當(dāng)Hazard Detector檢測到冒險條件成立時,在lw指令和下一條指令之間插入阻塞,即流水線氣泡bubble,使后一條指令延遲一個時鐘周期執(zhí)行,這樣就將該冒險轉(zhuǎn)化為二階數(shù)據(jù)相關(guān),可用轉(zhuǎn)發(fā)解決。如圖3.8所示。or$a, $2,36GC9 C010Tirwin dock cydee) qc 1 CC2
18、 CC3 CU 斗CO 5 CCSCO 7ocaand : - nopadd S2, £5add £蟲 Mr S2I圖3.8流水線氣泡的引入需要注意的是,如果處于ID級的指令被阻塞,那么處于IF級的指令也必須阻塞, 否那么, 處于ID級的指令就會喪失。 防止這兩條指令繼續(xù)執(zhí)行的方法是: 保持PC存放器和IF/ID流 水線存放器不變,同時插入一個流水線氣泡。具體實現(xiàn)方法如下:在ID級檢測到冒險條件時,HazardDetector輸出兩個信號:Stall 與 PC_IFWrite。Stall信號將ID/EX 流水線存放器中的 EX、MEM 和WB級控制信號全部清零。這些信號傳遞
19、到流水線后 面的各級,由于控制信號均為零,所以不會對任何存放 器和存儲器進行寫操作,高電平有效。PC_IFWrite信號禁止PC存放器和IF/ID流水線寄 存器接收新數(shù)據(jù),低電平有效。圖3.9阻塞信號2.3分支冒險還有一類冒險是包含分支的流水線冒險,以下列圖。Time (in clock cycles) GC 1 CC2 CC3 CC4 CCS CC 6 GC 7 CC 8 CC 9流水線每個時鐘周期都得取指令才能維持運行,但分支指令必須等到 MEM級才能確定是否執(zhí)行分支。這種為了確定預(yù)取正確的指令而導(dǎo)致的延遲叫做控制冒險或分支冒險。一種比擬普遍的提高分支阻塞速度的方法是假設(shè)分支不發(fā)生,并繼續(xù)
20、執(zhí)行順序的指令 流。如果分支發(fā)生的話,就丟棄已經(jīng)預(yù)取并譯碼的指令,指令的執(zhí)行沿著分支目標(biāo)繼續(xù)。由于分支指令直到 MEM級才能確定下一條指令的PC,這就意味著為了丟棄指令必須將流水線中的IF、ID和EX級的指令都去除掉flush。這種優(yōu)化方法的代價較大,效率較低。如果我們能在流水線中提前分支指令的執(zhí)行過程,那么就能減少需要去除的指令數(shù)。這是一種提高分支效率的方法,降低了執(zhí)行分支的代價。因此我們采用提前分支指令的方法解決分支冒險。提前分支指令需要提前完成兩個操作: 計算分支的目的地址:由于已經(jīng)有了 PC值和IF/ID流水線存放器中的指令值,所以可以很方便地將EX級的分支地址計算電路移到ID級。我們
21、針對所有指令都執(zhí)行分支地址的計算過程,但只有在需 要它的時候才會用到。 判斷分支指令的跳轉(zhuǎn)條件:我們將用于判斷分支指令成立的Zero信號檢測電路Z test丨從ALU中獨立出來,并將它從 EX級提前 至ID級。具體的設(shè)計將在 ID級設(shè)計中介紹。在提前完成以上兩個操作之外,我們還需丟棄IF級 的指令。具體做法是:參加一個控制信號IF_flush,做為IF/ID流水線存放器的清零信號。當(dāng)分支冒險成立, 即 Z=1,貝U IF_flush=1,否那么 IF_flush=0,故 IF_flush = Z??紤]到本系統(tǒng)還要實現(xiàn)的無條件跳轉(zhuǎn)指令:J和JR,在執(zhí)行這兩個指令時也必須要對IF/ID流水線存放器
22、進行清空,因此,IF_flush的表達式應(yīng)表示為:1 3.11 控制佶"!K_flusJiIF_flush = Z | J | JR。2. MIPS指令格式1) R型指令格式3126 2521 20一I6 15117o6 50oprsrtrdsafunctop、funct:共同決定指令名稱,都為 6位;rs :指定第一操作數(shù)的存放器地址,為5位;rt :指定第二操作數(shù)的存放器地址,為5位;rd :指定目標(biāo)存放器地址,為 5位;sa :位移運算的移動位數(shù),為 5位。 本實驗要實現(xiàn)的 R型指令有: 算術(shù)邏輯運算指令: ADD ADDU SUB SUBU AND OR NOR XOR、SL
23、T、SLTU 移位指令:SLLV SRLV SRAV SLL SRL SRA 存放器跳轉(zhuǎn)指令:JR2) I型指令格式3126 2521 206 150oprsrt16-bits Immop :決定指令名稱,為 6位;rs :指定第一操作數(shù)的存放器地址,為5位;rt :儲存結(jié)果的存放器地址,為5位;Imm :立即數(shù),為16位。本實驗要實現(xiàn)的I型指令有: 存儲器訪問指令:LW SW 立即數(shù)算術(shù)邏輯運算指令:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIU 分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ注: I型指令中立即數(shù)算術(shù)邏輯運算指令對立即數(shù)Imm的處理
24、應(yīng)分為兩類情況考慮:ADDk ADDIU SLTI、SLTIU時,指令中的16位立即數(shù)Imm應(yīng)做符號擴 展為32位:sign-extend(lmm)。此符號擴展電路在 ID級完成。ANDk ORI、XORI時,Imm應(yīng)做“ 0擴展為32位。考慮到資源的限制,在 執(zhí)行ANDk ORI、XORI指令時,“ 0擴展功能放在 ALU內(nèi)部即EX級)完成。 對于條件分支指令:不執(zhí)行分支語句時, 跳轉(zhuǎn)地址應(yīng)為下一條地址;執(zhí)行分支語句時,跳轉(zhuǎn)地址應(yīng)為下一條地址加上跳轉(zhuǎn)指令數(shù),即為立即數(shù)。由于跳轉(zhuǎn)方向有兩個:向前與向后,故立即數(shù)存在正負(fù)性,應(yīng)該有符號擴展為32位:sign-extend(lmm)。如果能夠?qū)⒘⒓?/p>
25、數(shù)的位數(shù)擴充,跳轉(zhuǎn)指令的范圍將大大增加。由于CPU中指令的起始地址都是 4的倍數(shù),因此它們地址的后兩位都是0,那么跳過的指令數(shù)后兩位也應(yīng)為 2'00,故可將16為立即數(shù)左移兩位擴充為18位,尋址地址范圍也擴大4倍。因此分支地址可表示為PC+4+sign-extend(lmm)<<2. 對于取字指令 LW 操作為:rt<=Memrs+sign_extend(lmm) 對于存字指令 SW 操作為:Memrs+sign_exte nd(lmm)<=rt由于地址的變化是在內(nèi)存中進行,故立即數(shù)只需進行有符號位擴展,不能位移。3) J型指令格式尹 26 259op26-bi
26、ts addressop :決定指令名稱,為 6位;address:跳轉(zhuǎn)的地址,為 26位。本實驗要實現(xiàn)的I型指令有:無條件跳轉(zhuǎn)指令:J注:指令都是32位,因此我們要把26位跳轉(zhuǎn)地址擴展為 32位。由于CPU中指令的起 始地址都是4的倍數(shù),因此它們地址的后兩位都是0,可以把26位的address擴展為28位:26-bits address,2'00;剩下的最高 4位那么直接從PC中取,即跳轉(zhuǎn)地址擴展為: PC31:28,26-bits address,2'b00。3. 指令譯碼模塊ID的設(shè)計冒臉檜厠電路J扌旨令桃轉(zhuǎn)地控制單元扯的計算電路rr吟r葉M«nWfite er
27、:£ 7!foFl-nVri t*u >iL *eTIn singer.A*gWnit wtZe co TestHmjd cUa-EicEiar檢稠電路-Rr7j3|.*Ai-kll,*ti陽Mt* FklAddt id2計MlFdA也曲ddBrandi分支地址計算電路RsEisLajd JiAnldi:F i-3W -!L:"JlZ_A didderMeEsAetd ekHesiy pl 28|ALIX" .idVjBEaG、M lit 0 EXIEM1 碣1- W"tduiI uRDola j<9EWaii lJRjg丹込血竝*a焦 g?
28、WM_Eb ALURmJt血指令跳輯地址MM 崗-©Es£總監(jiān)盤K圖孑.12 ID級電路結(jié)枸指令譯碼模塊的主要作用是從機器碼中解析出指令,并根據(jù)解析結(jié)果輸出各種控制信 號。ID模塊主要有指令譯碼Decode、存放器堆Registers、冒險監(jiān)測、分支檢測和加 法器等組成。ID模塊的接口信息如下表所示:引腳名稱方向說明clkIn put系統(tǒng)時鐘In struction_id31:0指令機器碼NextPC id31:0指令指針RegWrite wb奇存器與允許信號,冋電平有效RegWriteAddr wb4:0存放器的寫地址RegWriteData wb31:0寫入存放器的數(shù)據(jù)
29、MemRead ex冒險檢測的輸入RegWriteAddr ex4:0MemtoRegdOutput決定回寫的數(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存放器清空信號,高電平插入一個流水線氣
30、泡Z分支指令的條件判斷結(jié)果J跳轉(zhuǎn)指令JR存放器跳轉(zhuǎn)指令PC IFWrite阻塞流水線的信號,低電平有效Bran chAddr31:0條件分支地址JumpAddr31:0跳轉(zhuǎn)地址Immd31: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_ty
31、pe1:ADD、ADDU、SUB、SUBU、AND、OR、SLTU、SLLV、SRLV、NOR、XOR、SLT、R_type2:SLL、SRL、SRAJR_type:JRSRAVR型指令J_type: JJ型指令I(lǐng)_type:ADDI、ADDIU、ANDI、ORI、XORI、SLTI、SLTIUBranch : BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZLW: LWSW: SWDecode輸出的九組控制信號: RegWrite決定是否對存放器Registers進行寫操作。當(dāng) RegWrite高電平有效時,將數(shù) 據(jù)寫入指定的存放器中。需要寫回存放器的指令有:LW、R_type1、R_
32、type2和l_type,貝URegWrite_id= LW | R_type1 | R_type2 | I_type RegDst決定目標(biāo)存放器是rt還是rd。當(dāng)RegDst=0時,rt為目標(biāo)存放器;當(dāng) RegDst=1 時,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決定是否對數(shù)據(jù)存儲器進行寫操作。當(dāng)MemWrite有效時,將數(shù)據(jù)寫入數(shù)據(jù)存儲器指定的位置。需要
33、對寫存儲器的指令只有SW,所以:MemWrite_id= SW MemRead決定是否對數(shù)據(jù)存儲器進行讀操作。當(dāng)MemRead有效時,讀取數(shù)據(jù)存儲器指定位置的數(shù)據(jù)。需要對讀存儲器的指令只有LW,所以:MemRead_id= LW MemtoReg決定寫入存放器(registers)的數(shù)據(jù)來自ALU還是數(shù)據(jù)存儲器。?當(dāng)MemtoReg=0 時,數(shù)據(jù)來自ALU ;當(dāng)MemtoReg=1時,數(shù)據(jù)來自數(shù)據(jù)存儲器。需要寫回存放器的指令類型有:LW、R_type1、R_type2和I_type。其中,只有LW寫回存放器的數(shù)據(jù)取自存儲器,所以:MemtoRegd= LW ALUSrcA決定ALU第一操作數(shù)來
34、源。當(dāng) ALUSrcA=0時,ALU第一操作數(shù)A詳見轉(zhuǎn) 發(fā)電路設(shè)計;當(dāng)ALUSrcA=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ù)來源。當(dāng) ALUSrcB=0時,ALU第二操作數(shù) B。當(dāng)ALUSrcB=1時,ALU第二操作數(shù)來源于符號擴展的16位Imm。八種指令
35、類型中J_tpye、JR_tpye及Branch類型指令沒有使用 ALU。其他使用ALU的指令類型中 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, Z?PCSource=000時,寫入值為下一條指令的地址PC+4 ;?PCSource=001時, 寫入值為 Branch指令的分支地址;?PCSource=010時,
36、寫入值為J指令的跳轉(zhuǎn)地址; ?PCSource=100時,寫入值為JR指令的跳轉(zhuǎn)地址。 ALUCode決定ALU的功能,由指令中的 op段、rt段和funct段決定。功能表如下:opfunctrt運算ALUCodeBEQ opxxxxxxxxxxxxZ=(A=B)5'd10BNE opxxxxxxxxxxxxZ=(A=B)5'd11BGEZ opxxxxxx5'd1Z=(A > 05'd12BGTZ opxxxxxx5'd0Z=(A>0)5'd13BLEZ opxxxxxx5'd0Z=(A< 0)5'd14BLT
37、Z opxxxxxx5'd0Z=(A<0)5'd15R_type_opADD fu netxxxxxx加5'd0ADDU fu netxxxxxxAND fu netxxxxxx與5'd1XOR fu netxxxxxx異或5'd2OR functxxxxxx或5'd3NOR functxxxxxx或非5'd4SUB fu netxxxxxx減5'd5SUBU fu netxxxxxxSLT fu netxxxxxxA<B?1:05'd19SLTU fu netxxxxxxA<B?1:0無符號數(shù)5'
38、;d20SLL fu netxxxxxxB«A5'd16SLLV fu netxxxxxxSRL fu netxxxxxxB»A5'd17SRLV fu netxxxxxxSRA fu netxxxxxxB>»A5'd18SRAV fu netxxxxxxopfunctrt運算ALUCodeADDI_opxxxxxxxxxxxx加5' d0ADDIU opxxxxxxxxxxxxANDI opxxxxxxxxxxxx與5' d6XORI opxxxxxxxxxxxx異或5' d7ORI opxxxxxxxxxx
39、xx或5' d8SLTI opxxxxxxxxxxxxA<B?1:05' d19SLTIU opxxxxxxxxxxxxA<B?1:0(無符號數(shù))5' d20SW opxxxxxxxxxxxx加計算地址5' d0LW opxxxxxxxxxxxx(2) 分支檢測Branch Test電路的設(shè)計Branch指令的分支條件是否成立,Zero檢測電路主要用于判斷作數(shù)為 RsData 與 RtData,而 BGEZ、BGTZ、BLEZ 較,所以輸出信號 Z的表達式為:廣 RsData31 | (| RsData31: 0) RsData31; RsData3
40、1 && (| RsData31: 0)Z= < RsData31;| ( RsData31: 0 A RtData31: 0)& ( RsData31: 0 人 RtData31: 0); <0;其中BEQ、BNE兩個操和BLTZ指令那么為RsData與常數(shù)0比ALUCode=alu _blezALUCode=alu _bltzALUCode=alu _bgtzALUCode=alu _bgezALUCode=alu_b neALUCode=alu_beqALUCode=OTHER(3) 存放器堆Registers的設(shè)計存放器堆由32個32位存放器組成,這
41、些存放器通過存放器號進行讀寫存取。存放器堆該存放器內(nèi)容。讀取端口采用數(shù)據(jù)選擇器即可實現(xiàn)讀取功能。應(yīng)注意0號寄存器為常數(shù)0.RsAddrWrircDaTRelkRsDataRtAddrWriteAddrRlDataRcgWntr穿立器怡的莊歸雪D>D RECD b> qEK的原理框圖如圖3.13所示。因為讀取存放器不會更改其內(nèi)容,故只需提供存放號即可讀出對于往存放器里寫數(shù)據(jù),需要目標(biāo)存放器號WriteRegister 、待寫入數(shù)據(jù)WriteData、寫允許信號RegWrite、三個變量。圖3.13中5位二進制譯碼器完成地址譯碼,其輸出控 制目標(biāo)存放器的寫使能信號EN決定將數(shù)據(jù)Writ
42、eData寫入哪個存放器。在流水線CPU設(shè)計中,存放器堆設(shè)計還應(yīng)解決三階數(shù)據(jù)相關(guān)的數(shù)據(jù)轉(zhuǎn)發(fā)問題。當(dāng)滿足三階數(shù)據(jù)相關(guān)條件時,存放器具有Read after Write的特性。為實現(xiàn)該功能,在存放器堆的根底上加一轉(zhuǎn)發(fā)電路。如圖 3.14所示。圖中轉(zhuǎn)發(fā)檢測電路的輸出表達式為RsSel=RegWrite_wb&&( (RegWriteAddr_wb=O)&&(RegWriteAddr_wb=RsAddr_id)RtAddiWriicAddiT 血 Watn1f RiDnm idRtAddrR* aWntiA dck_AvbRegWtitcwbRA3Mn_id三階數(shù)據(jù)相關(guān)
43、檢瀏fRtizWincl>iin vL數(shù)據(jù)轉(zhuǎn)發(fā)RtSel=RegWrite wb&&( (RegWriteAddr wb=0)&&(RegWriteAddr wb=RtAddr id)RsSe存放器堆原理見 圖3.13,代碼己 瓏供.轉(zhuǎn)發(fā)枝測S 電路需 設(shè)計RiAdct id|. 圖3, 14具有尿初after Wri 1巳特屮4青仔器:* T;l自辛框圖(4) 冒險檢測功能Hazard Deterctor 的設(shè)計由前面分析可知,冒險成立的條件為: 上一條指令是 LW指令,即 MemRead_ex=1 在EX級的LW指令與在ID級的指令讀寫的是同一個存放器
44、,即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指令分支地址的計算電路:Bran chAddr=NextPC_id+(sig n-exte n
45、d(lm md)<<2) JR指令跳轉(zhuǎn)地址的計算電路:JRAddr=RsData id J指令跳轉(zhuǎn)地址的計算電路:Jaddr=NextPC_id31:28,IR_id25:0,2' bOO 符號擴展的方法一針對有符號數(shù)如果最高位即符號位是 0,那么要擴展的高位用0補齊;如果最高位是 1,那么用1補齊。例:8位的+1,表示為二進制為 00000001,擴展成16 0擴展的方法一針對無符號數(shù)要擴展的高位用0補齊。例:16位二進制 0xFFFF無符號數(shù) 65535, 0 擴展成32位為0x0000FFFF 無符號 數(shù) 65535。4. 執(zhí)行模塊EX的設(shè)計實現(xiàn)操作教ALU A切 A
46、LU B 的 MUXr-irnS eHistTCtoln-lLcn mwInp, I-/ J出氏論riFcrsL闔點1口論五= -MJJ弘E J Re jfkt 皿五訃呂2 irtnpm L、rtiAEktkrs-*iFPC FuIpTM總嚴(yán)畐處審bFsA d± iiM nT 4 <,(_ j4E劇矗石禮1:心祐腎!<#_Ainr-n實現(xiàn)操作數(shù)A 和B的WXF山 ifcjjdjEd 倉<aremuritiPZK<£fi<1標(biāo)存放 *LORwa?w轉(zhuǎn)發(fā)包路執(zhí)行模塊主要有ALU子模塊、轉(zhuǎn)發(fā)電路Forwarding以及假設(shè)干數(shù)據(jù)選擇器組成。這行模塊的
47、接口信息如下表所示:引腳名稱方向說明RegDst ex決定Register回寫時采用的地址rt/rd ALUCode ex4:0In put決定ALU采用何種運算ALUSrcA ex決定ALU的A操作數(shù)的來源rs/SaALUSrcB ex決定ALU的B操作數(shù)的來源rt/Imm引腳名稱方向說明Imm ex31:0In put立即數(shù)Sa ex31:0移位位數(shù)RsAddr_ex4:0P Rs 存放器地址,即 In struction id25:21RtAddr ex4:0Rt 存放器地址,即 Instruction id20:16RdAddr ex4:0Rd 存放器地址,即 In struction
48、 id15:11RsData ex31:0r Rs存放器數(shù)據(jù)RtData ex31:0Rt存放器數(shù)據(jù)RegWriteData wb31:0r寫入存放器的數(shù)據(jù)ALUResult mem31:0r ALU輸出數(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子模
49、塊的設(shè)計ALU是提供CPU根本運算能力的重要電路。 ALU執(zhí)行何種運算,由控制單元中的 ALU 控制器輸出的ALUCode信號決定。ALU功能見下表:ALUCodeALUResultalu add = 5'b00000A+Balu a nd = 5'b00001A&Balu xor = 5'b00010AABalu or = 5'b00011A|Balu nor = 5'b00100(A|B)alu sub = 5'b00101A-Balu a ndi= 5'b00110A&16'b0,B15:0alu xori=
50、 5'b00111AA16'b0,B15:0alu ori = 5'b01000A|16'b0,B15:0alu sll = 5'b10000B«Aalu srl = 5'b10001B»Aalu sra = 5'b10010B>»Aalu slt = 5'b10011A<B?1:0,其中A、B為有符號數(shù)alu sltu= 5'b10100A<B?1:0,其中A、B為無符號數(shù)為了提高運算速度,可將各種運算同時執(zhí)行,得到的運算結(jié)果由ALUCode信號進行挑選。ALU的根本結(jié)構(gòu)如
51、圖 3.16所示。圖3.16 ALU的根本結(jié)構(gòu)a力口、減電路的設(shè)計考慮減法、比擬SLT、SLTI丨及局部分支指令BEQ、BNE丨均可用加法器和必要的 輔助電路來實現(xiàn)。圖 3.16中的Binvert信號控制加減運算:Bin vert=ALUCode=alu_add對ALU來說,它的兩個操作數(shù)輸入時都已經(jīng)是補碼形式,當(dāng)要完成兩個操作數(shù)的減法時,即A補-B補,可將減法轉(zhuǎn)換為加法,利用加法器來實現(xiàn):?A補-B補=A補+-B補=A補+B補補=A補+ B補反+1加法器完成的功能為:sum=A+BA32Bi nvert+Bi nvert當(dāng) Binvert=O 時,sum=A+BA0+0= A+B ;當(dāng) Bi
52、nvert=1 時,sum=A+BA32 '1+ 仁 A-B ; BA32 '1即對 B 按位取反 即可完成加減運算。由于32位加法器的運算速度影響著CPU頻率的上下,因此設(shè)計一個高速加法器尤為重要,本實驗采用Iab7中介紹的32位進位選擇加法器。b) 比擬電路的設(shè)計考慮對于比擬運算,如果最高為不同,即A31豐B31,那么根據(jù)A31、B31決定比擬結(jié)果,但應(yīng)注意有符號數(shù)和無符號數(shù)比擬運算的區(qū)別。 在有符號數(shù)比擬 SLT運算中,判斷A<B的方法為:假設(shè)A為負(fù)數(shù)、B為0或正數(shù):A31&&(B31)假設(shè) A、B 符號相同,A-B 為負(fù):(A31AB31) &am
53、p;& sum31那么SLTResult=(A31&&(B31) |( (A31AB31) && sum31) 在無符號數(shù)比擬 SLT運算中,判斷A<B的方法為:假設(shè)A最高位為0、B最高位為1: (A31 )&&B31假設(shè) A、B 最高位相同,A-B 為負(fù):(A31AB31) && sum31那么SLTResuIt=(A31 )&&B31) |( (A31AB31) && sum31)c) 算術(shù)右移運算電路的設(shè)計考慮Verilog HDL的算術(shù)右移的運算符為" <<
54、;< 。要實現(xiàn)算術(shù)右移應(yīng)注意,被移位的對 象必須定義為reg類型,但是在SRA指令,被移位的對象操作數(shù) B為輸入信號,不能定 義為reg類型,因此必須引入 reg類型中間變量 B_reg,相應(yīng)的Verilog HDL語句為:reg sig ned 31:0 B_reg;always (B) beg inB_reg = B; end弓I入reg類型的中間變量 B_reg后,就可對B_reg進行算術(shù)右移操作。d) 邏輯運算與、或、或非、異或、邏輯移位等運算較為簡單,只是要注意一點,ANDI、XORI、ORI三條指令的立即數(shù)為16位無符號數(shù),應(yīng)“ 0擴展為32位無符號數(shù),在運算的同時完成“ 0擴展。女口: A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建寧德2024~2025學(xué)年高一下冊期末質(zhì)量檢測數(shù)學(xué)試題學(xué)生卷
- 相聲中的即興表演技巧考核試卷
- 鄉(xiāng)土民俗資源在內(nèi)陸?zhàn)B殖產(chǎn)業(yè)升級中的作用考核試卷
- 農(nóng)藥廢水處理中吸附材料研究動態(tài)考核試卷
- 上海市普陀區(qū)2024-2025學(xué)年七年級(五四制)下學(xué)期期末語文試題(含答案)
- 絲印印刷品背面油墨凝固問題及處理技巧考核試卷
- 食品安全分子檢測中的免疫分析技術(shù)進展分析考核試卷
- 2025年中國PP-R粉碎下角料數(shù)據(jù)監(jiān)測報告
- 2025年中國MPEG測試儀數(shù)據(jù)監(jiān)測研究報告
- 2025年中國FD管理冊數(shù)據(jù)監(jiān)測報告
- 2025年遼寧沈陽地鐵集團有限公司招聘筆試參考題庫含答案解析
- 2025年全國水務(wù)集團招聘筆試參考題庫含答案解析
- 阿細(xì)跳月課件
- 藥品召回管理辦法
- 網(wǎng)絡(luò)物流保險行業(yè)發(fā)展概況及未來五年行業(yè)數(shù)據(jù)趨勢預(yù)測
- 2024年山東濟南初中學(xué)業(yè)水平考試物理試卷真題(含答案詳解)
- 初三九年級化學(xué)全冊導(dǎo)學(xué)案(人教新課標(biāo)版)
- 校園除草課件
- 成都市2022級(2025屆)高中畢業(yè)班摸底測試(零診)數(shù)學(xué)試卷(含答案)
- 門靜脈血栓的介入治療
- SL721-2015水利水電工程施工安全管理導(dǎo)則
評論
0/150
提交評論