




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、專業(yè): 電子科學(xué)與技術(shù) 姓名: 李增一 學(xué)號: 3090101793 日期: 地點(diǎn):_東一B415_實(shí)驗(yàn)報(bào)告課程名稱:_ _數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)2_ _ _指導(dǎo)老師:_唐奕等_成績:_實(shí)驗(yàn)名稱: _流水線MIPS微處理器設(shè)計(jì)_ _實(shí)驗(yàn)類型:_ 設(shè)計(jì)型_ _同組學(xué)生姓名: 一、實(shí)驗(yàn)?zāi)康暮鸵螅ū靥睿┒?、?shí)驗(yàn)內(nèi)容和原理(必填)三、主要儀器設(shè)備(必填)四、操作方法和實(shí)驗(yàn)步驟五、實(shí)驗(yàn)數(shù)據(jù)記錄和處理六、實(shí)驗(yàn)結(jié)果與分析(必填)七、討論、心得裝 訂 線一、實(shí)驗(yàn)?zāi)康暮鸵?、了解提高CPU性能的方法2、掌握流水線MIPS微處理器的工作原理3、離結(jié)數(shù)據(jù)冒險(xiǎn),控制冒險(xiǎn)的概念以及流水線沖突的解決辦法4、掌握流水線MIP
2、S微處理器的測試方法二、實(shí)驗(yàn)內(nèi)容和原理實(shí)驗(yàn)內(nèi)容:設(shè)計(jì)一個(gè)32位流水線MIPS微處理器,具體要求如下:1、 至少運(yùn)行下列MIPS32指令:算術(shù)運(yùn)算指令(ADD、ADDU、SUB、SUBU、ADDI、ADDIU)邏輯運(yùn)算指令(AND、OR、NOR、XOR、ANDI、ORI、XORI、SLT、SLTU、SLTI、SLTIU)移位指令(SLL、SLLV、SRL、SRLV、SRA)條件分支指令(BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ)無條件跳轉(zhuǎn)指令(J、JR)數(shù)據(jù)傳送指令(LW、SW)空指令(NOP)2、 采用5級流水線技術(shù),對數(shù)據(jù)冒險(xiǎn)實(shí)現(xiàn)轉(zhuǎn)發(fā)或阻塞功能3、 在XUP Virtex-Pr
3、o開發(fā)系統(tǒng)中實(shí)現(xiàn)MIPS微處理器,要求CPU的運(yùn)行速度大于25MHz。實(shí)驗(yàn)原理:1總體設(shè)計(jì):IF、ID、EX、MEM、WB,對應(yīng)CPU的實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793五個(gè)處理階段。如下圖:宏觀來講如下:2、流水線冒險(xiǎn)在流水線CPU中,多條指令同時(shí)執(zhí)行,由于各種各樣的原因,在下一個(gè)時(shí)鐘周期中下一條指令不能執(zhí)行,這種情況稱為冒險(xiǎn)。冒險(xiǎn)分為三類:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793(1) 結(jié)構(gòu)冒險(xiǎn):硬件不支持多條指令在同一個(gè)時(shí)鐘周期內(nèi)執(zhí)行。MIPS指令集專為流水線設(shè)計(jì),因此在MIPS CPU中不存在
4、此類冒險(xiǎn)。 (2)數(shù)據(jù)冒險(xiǎn):在一個(gè)操作必須等待另一操作完成后才能進(jìn)行時(shí),流水線必須停頓,這種情況稱為數(shù)據(jù)冒險(xiǎn)。數(shù)據(jù)冒險(xiǎn)又分為兩類: a.數(shù)據(jù)相關(guān):流水線內(nèi)部其中任何一條指令要用到任何其它指令的計(jì)算結(jié)果時(shí),將導(dǎo)致數(shù)據(jù)冒險(xiǎn)。通??梢杂脭?shù)據(jù)轉(zhuǎn)發(fā)(數(shù)據(jù)定向)來解決此類冒險(xiǎn)。解決方法:(1)三階數(shù)據(jù)相關(guān): 這兩條指令在第5時(shí)鐘周期內(nèi)同時(shí)讀寫同一個(gè)寄存器。這類數(shù)據(jù)相關(guān)稱之為三階數(shù)據(jù)相關(guān)。 假設(shè)寄存器的寫操作發(fā)生在時(shí)鐘周期的上升沿,而讀操作發(fā)生在時(shí)鐘周期的下降沿,那么讀操作將讀取到最新寫入的內(nèi)容。在這種假設(shè)條件下將不會發(fā)生數(shù)據(jù)冒險(xiǎn)。這就要求流水線中的寄存器具有“ 先寫后讀(Read After Write)
5、”的特性。 這類“ 寫操作發(fā)生在時(shí)鐘周期的上升沿,讀操作發(fā)生在時(shí)鐘周期的下降沿” 的寄存器雖然在理論上是可實(shí)現(xiàn)的,但是不適合應(yīng)用于同步系統(tǒng),因?yàn)樗坏绊懴到y(tǒng)的運(yùn)行速度,而且影響系統(tǒng)的穩(wěn)定性,是不可取的。 因此,我們采用“ 轉(zhuǎn)發(fā)” 機(jī)制來解決三階數(shù)據(jù)相關(guān)冒險(xiǎn)。該部分轉(zhuǎn)發(fā)電路我們放在寄存器堆的設(shè)計(jì)中完成。 數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn) 轉(zhuǎn)發(fā)條件: WB級的指令需要 寫回寄存器,即 RegWrite_wb=1 實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793在WB級的指令在寫回時(shí) 目標(biāo)寄存器不能是寄存 器$0,即 RegWriteAddr_wb0在WB級的指令寫回時(shí)的目標(biāo)寄
6、存 器與在ID級的指令的源寄存器是 同一寄存器,即 RegWriteAddr_wb=RsAddr_id 或RegWriteAddr_wb=RtAddr_id (2)二階數(shù)據(jù)相關(guān)(MEM冒險(xiǎn)): sub指令在第5時(shí)鐘周期寫回寄存器,而or指令也在第5時(shí)鐘周期對sub指令的結(jié)果提出了請求,很顯然or指令讀取的數(shù)據(jù)是未被更新的錯(cuò)誤內(nèi)容。這類數(shù)據(jù)相關(guān)稱之為二階數(shù)據(jù)相關(guān)。 如前所述,or指令在第5時(shí)鐘周期向sub指令結(jié)果發(fā)出請求時(shí),sub指令的結(jié)果已經(jīng)產(chǎn)生。所以,我們同樣采用“ 轉(zhuǎn)發(fā)” ,即通過MEM/WB流水線寄存器,將sub指令結(jié)果“ 轉(zhuǎn)發(fā)” 給or指令,而不需要先寫回寄存器堆。 轉(zhuǎn)發(fā)條件: WB級
7、的指令需要 寫回寄存器,即 RegWrite_wb=1 在WB級的指令在寫回時(shí),目標(biāo)寄存器不能是寄存 器$0,即 RegWriteAddr_wb0 在WB級的指令寫回時(shí)的目標(biāo)寄存器 與在EX級的指令的源寄存器是同一 寄存器,即 RegWriteAddr_wb=RsAddr_ex 或RegWriteAddr_wb=RtAddr_ex實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793EX冒險(xiǎn)不成立,即 RegWriteAddr_mem RsAddr_ex 或RegWriteAddr_mem RtAddr_ex(3)一階數(shù)據(jù)相關(guān)(EX冒險(xiǎn)) 在這段代碼中,與sub指
8、令相關(guān)的指令有三條,我 們先來討論sub指令和and指令之間的相關(guān)問題。 sub指令在第5時(shí)鐘周期寫回寄存器,而and指令在第4時(shí)鐘周期就對sub指令的結(jié)果提出了請求,很顯然and指令讀取的數(shù)據(jù)是未被更新的錯(cuò)誤內(nèi)容。這類數(shù)據(jù)相關(guān)稱之為一階數(shù)據(jù)相關(guān)。 仔細(xì)觀察sub指令,可以發(fā)現(xiàn),sub指令的結(jié)果其實(shí)在EX級結(jié)尾,即第3時(shí)鐘周期末就產(chǎn)生了。而and指令在第4時(shí)鐘周期向sub指令結(jié)果發(fā)出請求。請求時(shí)間晚于結(jié)果產(chǎn)生時(shí)間。所以,只要sub指令結(jié)果產(chǎn)生之后,就可以直接將它“ 轉(zhuǎn)發(fā)” 給and指令,而不需要先寫回寄存器堆,再由and指令將其讀取出來。 數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn) 轉(zhuǎn)發(fā)條件: 1 MEM級的指令需 要
9、寫回寄存器,即 RegWrite_mem=1 2 在MEM級的指令在寫回時(shí),目標(biāo)寄存器不能是寄存 器$0,即 RegWriteAddr_mem03 在MEM級的指令寫回時(shí)的目標(biāo)寄存 器與在EX級的指令的源寄存器是同 一寄存器,即 RegWriteAddr_mem=RsAddr_ex 或 RegWriteAddr_mem=RtAddr_ex b.數(shù)據(jù)冒險(xiǎn):此類冒險(xiǎn)發(fā)生在當(dāng)定向的目標(biāo)階段在時(shí)序上早于定向的源階實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793段時(shí),數(shù)據(jù)轉(zhuǎn)發(fā)無效。常是引入流水線阻塞,即氣泡(bubble)來解決。 當(dāng)一條指令試圖讀取一個(gè)寄存器,而它前
10、一條指 令是lw指令,并且該lw指令寫入的是同一個(gè)寄存器時(shí),定向轉(zhuǎn)發(fā)的方法就無法解決問題。這類冒險(xiǎn)不同于數(shù)據(jù)相關(guān)冒險(xiǎn),需要單獨(dú)一個(gè)“冒險(xiǎn)檢測單元(Hazard Detector)”。它在ID級完成。冒險(xiǎn)成立的條件為: 上一條指令是lw指令,即MemRead_ex =1在EX級的lw指令與在ID級的指令讀寫的是同一個(gè)寄存器,即 RegWriteAddr_ex = RsAddr_id 或 RegWriteAddr_ex = RtAddr_id 冒險(xiǎn)的解決:引入流水線阻塞。 當(dāng)Hazard Detecto檢測到冒險(xiǎn)條件成立時(shí),在lw指令和下一條指令之間插入阻塞,即流水線氣泡(bubble), 使后一
11、條指令延遲一個(gè)時(shí)鐘周期執(zhí)行,這樣就將該冒險(xiǎn)轉(zhuǎn) 化為二階數(shù)據(jù)相關(guān),可用轉(zhuǎn)發(fā)解決。 需要注意的是,如果處于ID級的指令被阻塞,那 么處于IF級的指令也必須阻塞,否則,處于ID級的指令就會丟失。防止這兩條指令繼續(xù)執(zhí)行的方法是: 保持PC寄存器和IF/ID流水線寄存器不變,同時(shí)插入一個(gè)流水線氣泡。 數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn) 保持PC寄存器和IF/ID流水線寄存器不變: 在ID級檢測到冒險(xiǎn)條件時(shí), Hazard Detector輸出一 個(gè)信號:PC_IFWrite,作為使能信號同時(shí)送給PC寄存器 和IF/ID流水線寄存器。冒險(xiǎn)成立時(shí),該信號為低電平, 禁止PC寄存器和IF/ID流水線寄存器接收新實(shí)驗(yàn)名稱: 流水
12、線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793數(shù)據(jù)。 流水線氣泡的插入: 在ID級檢測到冒險(xiǎn)條件時(shí),Hazard Detector輸出一個(gè)信號: stall,將ID/EX流水線 寄存器中的EX、MEM和WB級控制信號全部 清零。這些信號傳遞 到流水線后面的各 級,由于控制信號均 為零,所以不會對任 何寄存器和存儲器進(jìn)行寫操作。(3)控制冒險(xiǎn):CPU需要根據(jù)分支指令的結(jié)果做出決策,而此時(shí)其它指令可能還在執(zhí)行中,這時(shí)會出現(xiàn)控制冒險(xiǎn),也稱分支冒險(xiǎn)。解決此類冒險(xiǎn)的常用方法為延遲分支。 流水線每個(gè)時(shí)鐘周期都得取指令才能維持運(yùn)行,但分支指令必須等到MEM級才能確定是否執(zhí)行分支。這種為
13、了確定預(yù)取正確的指令而導(dǎo)致的延遲叫做控制冒險(xiǎn)或分支冒險(xiǎn)。 分支冒險(xiǎn)的解決方法:提前分支指令一種比較普遍的提高分支阻塞速度的方法是假設(shè)分支不發(fā)生,并繼續(xù)執(zhí)行順序的指令流。如果分支發(fā)生的話,就丟棄已經(jīng)預(yù)取并譯碼的指令,指令的執(zhí)行沿著分支目標(biāo)繼續(xù)。由于分支指令直到MEM級才能確定下一條指令的PC,這就意味著為了丟棄指令必須將流水線中的IF、ID和EX級的指令都清除掉(flush)。這種優(yōu)化方法的代價(jià)較大,效率較低。 假如我們能在流水線中提前分支指令的執(zhí)行過程,那么就能減少需要清除的指令數(shù)。這是一種提高分支效率的方法,降低了執(zhí)行分支的代價(jià)。 提前分支指令需要提前完成兩個(gè)操作: 實(shí)驗(yàn)名稱: 流水線MIP
14、S微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 30901017931、算分支的目的地址 2、判斷分支指令的跳轉(zhuǎn)條件。提前計(jì)算分支的目的地址:由于已經(jīng)有了PC值和IF/ID流水線寄存器中的指令值,所以可以很方便地將EX級的分支地址計(jì)算電路移到ID級。我們針對所有指令都執(zhí)行分支地址的計(jì)算過程,但只有在需要它的時(shí)候才會用到。 提前判斷分支指令的跳轉(zhuǎn)條件:我們將用于判斷分支指令成立的Zero信號檢測電路(Z test )從ALU中獨(dú)立出來,并將它從EX級提前至ID級。具體的設(shè)計(jì)將在ID級設(shè)計(jì)中介紹。 在提前完成以上兩個(gè)操作之外,我們還需丟棄IF級的指令。具體做法是:加入一個(gè)控制信號IF_flush,做為IF
15、/ID流水線寄存器的清零信號。當(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í)也必須要對IF/ID流水線寄存器進(jìn)行清空,因此, IF_flush的表達(dá)式應(yīng)表示為: IF_flush = Z | J | JR由此可得,無冒險(xiǎn)的流水線MIPS原理框圖如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793三、主要儀器設(shè)備裝有Modelsim四、實(shí)驗(yàn)過程和數(shù)據(jù)記錄因?yàn)樽铋_始做的就是ALU的設(shè)計(jì)故先從ALU開始EX:ALU子模塊的設(shè)計(jì):ALU具體
16、執(zhí)行何種運(yùn)算,由控制單元中的ALU控制器輸出的ALUCode信號決定。ALU的功能表見下: 實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793加法器完成的功能,增加一個(gè)Binvert即可: sum=A+BBinvert+Binvert 當(dāng)Binvert=0時(shí),sum=A+B0+0=A+B即完成加法運(yùn)算。 當(dāng)Binvert=1時(shí),sum=A+B1+1=A-B即完成減法運(yùn)算。32位加法器代碼如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793其中adder4bit_conditional加法器代碼如下:比較電路中要注意有符號數(shù)
17、和無符號數(shù)比較運(yùn)算的區(qū)別 在有符號數(shù)比較SLT運(yùn)算中,判斷A<B的方法有: 對有符號數(shù)A、B,滿足下列兩種情況之一即可判斷A<B: A為負(fù)數(shù)、B為0或正數(shù):A31&&(B31) A、B符號相同,A-B為負(fù):(A31B31) && sum31 因此,SLTResult=(A31&&(B31) |( (A31B31) && sum31) 在無符號比較運(yùn)算中,同理可得: 實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793SLTResult=(A31)&&B31) |( (A3
18、1B31) && sum31);ALU模塊代碼如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793調(diào)用case語句來選擇Result的輸出實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793ALU仿真如下:將所得仿真波形與書本上要求對比,仿真正確。2、數(shù)據(jù)前推電路的設(shè)計(jì) 操作數(shù)A和B由數(shù)據(jù)選擇器決定,數(shù)據(jù)選擇器的地址信號即為ForwardA和ForwardB。數(shù)據(jù)選擇器地址信號ForwardA、ForwardB的含義如下表所示:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 309010179
19、3且有綜合前面給出的原理框圖EX的代碼如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793直接用case語句來敘述選擇器,以免調(diào)用MUX函數(shù)這么麻煩實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793IF: 1.指令存儲器ROM 用Xilinx CORE Generator實(shí)現(xiàn)產(chǎn)生的ROM無法滿足流水線CPU的指令要求,我們需用Verilog HDL 設(shè)計(jì)一個(gè)ROM陣列??紤]到FPGA的資源,指令存儲器可設(shè)計(jì)為容量各為26×32bi
20、t的ROM。老師已經(jīng)提供了該ROM的代碼,文件名為。2.指令指針選擇器 該8選1數(shù)據(jù)選擇器的選擇信號PCSource=JR,J,Z。實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 30901017933、PC寄存器 當(dāng)發(fā)生數(shù)據(jù)冒險(xiǎn)時(shí),需要保持PC寄存器不變,因此PC寄存器是一個(gè)帶使能端的D型寄存器,使能信號為PC_IFWrite。IF的代碼如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793IF的仿真波形如下:實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793通過分析上面的前中后三段仿真波形,與實(shí)驗(yàn)要求完全
21、符合。前幾個(gè)周期,此時(shí)Z=J=JR=0,經(jīng)過一個(gè)reset后 PC被賦予了00000000的初值,因?yàn)樘D(zhuǎn)分支指令都等于0,所以下一條指令地址總是等于上一條指令+4,波形正確。中間幾個(gè)波形 Z,J,JR=001時(shí) PC=JrAddr 而不是上一周期的NextPC_if Z,J,JR=010時(shí) PC=JumpAddr 而不是上一周期的NextPC_if Z,J,JR=100時(shí) PC=BranchAddr 而不是上一周期的NextPC_if 說明 跳轉(zhuǎn)和分支指令起了作用,且PC地址符合設(shè)計(jì)要求。末尾幾個(gè)周期 此時(shí)PC_IFWite=0,則寄存器使能端為0,PC值保持不變,由圖形可知幾個(gè)信號都保持不
22、變,說明PC_IFWite是起作用ID:模塊設(shè)計(jì) 控制單元的主要任務(wù)是,根據(jù)指令存儲器讀出的指令,確定各個(gè)控制信號的值。它是一個(gè)組 合電路。實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 30901017939組控制信號: 1.RegWrite 決定是否對寄存器(registers)進(jìn)行寫操作。 RegWrite有效時(shí),將數(shù)據(jù)寫入指定的寄存器中。 需要寫回寄存器的指令類型有:LW、R_type1、 R_type2和I_type,所以:RegWrite_id= LW | R_type1 | R_type2 | I_type 2、RegDst 決定目標(biāo)寄存器是rt還是rd。 Reg
23、Dst=0時(shí),rt為目標(biāo)寄存器。 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)寄存實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793器是rt。所以:RegDst_id= R_type1 | R_type2 3、MemWrite 決定是否對數(shù)據(jù)存儲器進(jìn)行寫操作。 MemWrite有效時(shí),將數(shù)據(jù)寫入數(shù)據(jù)存儲器指定的位置。 需要對寫存儲器的指令只有SW,所以:MemWrite_id= SW 4、MemRead
24、決定是否對數(shù)據(jù)存儲器進(jìn)行讀操作。 MemRead有效時(shí),讀取數(shù)據(jù)存儲器指定位置的數(shù)據(jù)。 需要對讀存儲器的指令只有LW,所以:MemRead_id= LW 5、MemtoReg 決定寫入寄存器(registers)的數(shù)據(jù)來自ALU還是數(shù)據(jù)存儲器。 MemtoReg=0時(shí),數(shù)據(jù)來自ALU。 MemtoReg=1時(shí),數(shù)據(jù)來自數(shù)據(jù)存儲器。 需要寫回寄存器的指令類型有:LW、R_type1、R_type2和I_type,其中,只有LW寫回寄存器的數(shù)據(jù)取自存儲器,所以:MemtoReg_id= LW6、ALUSrcA 決定ALU第一操作數(shù)來源。 ALUSrcA=0時(shí),ALU第一操作數(shù)A。.ALUSrcA=
25、1時(shí),ALU第一操作數(shù)來源于0擴(kuò)展的5位sa。 J_tpye、JR_tpye及Branch類型指令沒有使用ALU。使用ALU的指令類型中LW、SW、R_type1和I_type均采用的rs作為ALU第一操作數(shù),只有實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793R_type2的第一操作數(shù)采用的是0擴(kuò)展的sa段,所以: ALUSrcA_id= R_type2 7、ALUSrcB 決定ALU第二操作數(shù)來源。 ALUSrcB=0時(shí), ALU第二操作數(shù)B。 ALUSrcB=1時(shí), ALU第二操作數(shù)來源于符號擴(kuò)展的16位Imm。 J_tpye、JR_tpye及Bran
26、ch類型指令沒有使用ALU。 使用ALU的指令類型中R_type1和R_type2 采用rt作為ALU第二操作數(shù),而LW、SW、I_type的第二操作數(shù)采用的是符號擴(kuò)展的立即數(shù)Imm段,所以:ALUSrcB_id= LW | SW | I_type即IR15:0,用于I型指令。以上7組控制信號均為1位信號,而以下2組信號為多位信號。 8、PCSource(3位信號) 決定寫入PC寄存器的來源。 PCSource由JR_tpye 、J_tpye及Z決定:即: PCSource=JR, J, Z 在IF級已經(jīng)對PCsource的作用經(jīng)過介紹。 9、ALUCode(5位信號) 決定ALU的操作。 由
27、指令中的op段、rt段及funct段決定。ALUCode的設(shè)計(jì)參照書本的功能表。decode的verilog的代碼如下:定義輸入輸出實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793定義各線以運(yùn)算代碼實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793ALUCode定義各個(gè)運(yùn)算5位2進(jìn)制碼直接用case語句選擇出各個(gè)代碼所對應(yīng)的操作實(shí)驗(yàn)名稱: 流水線MIPS微處理
28、器設(shè)計(jì) 姓名: 李增一 學(xué)號: 30901017932. Zero 檢測電路的設(shè)計(jì)3、寄存器堆的設(shè)計(jì) 流水線型CPU中的寄存器堆要求具有“先寫后讀(Read After Write)”實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793特性. 老師已經(jīng)給出寄存器堆的大部分程序, RsSel=RegWrite_wb&&(RegWriteAddr_wb=0)&&(RegWriteAddr_wb=RsAddr_id); RtSel=RegWrite_wb&&(RegWriteAddr_wb=0)&&(Re
29、gWriteAddr_wb=RtAddr_id);4、冒險(xiǎn)檢測電路的設(shè)計(jì) 冒險(xiǎn)成立的條件為: 上一條指令是lw指令,即MemRead_ex =1 在EX級的lw指令與在ID級的指令讀寫的是同一個(gè)寄存器,即 RegWriteAddr_ex = RsAddr_id或RegWriteAddr_ex = RtAddr_id 解決冒險(xiǎn)的方法為: 插入一個(gè)流水線氣泡: stall = MemRead_ex &&( (RegWriteAddr_ex = RsAddr_id)|(RegWriteAddr_ex = RtAddr_id) 保持PC寄存器和IF/ID流水線寄存器不變:PC_IFWr
30、ite = stall5、其它單元電路的設(shè)計(jì) 1、Branch指令分支地址的計(jì)算電路: BranchAddr= NextPC_id+(sign-extend(Imm_id)<<2) 2、JR指令跳轉(zhuǎn)地址的計(jì)算電路: JRAddr = RsData_id 3、J指令跳轉(zhuǎn)地址的計(jì)算電路: 實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793JAddr = NextPC_id31:28,IR_id25:0,2b00結(jié)合原理框圖,得到ID級代碼如下:定義輸入輸出實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793Zero檢測實(shí)驗(yàn)名稱: 流水線MIPS微處理器設(shè)計(jì) 姓名: 李增一 學(xué)號: 3090101793RsSel與RtSel信號直接用case寫出了選擇器對RtData RsDatad的選擇MultiRegisters代碼:DataRam:數(shù)據(jù)存儲器利用Xilinx Core Generator實(shí)現(xiàn)。考慮到FPGA的資源,數(shù)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供應(yīng)鏈管理數(shù)據(jù)治理組織架構(gòu)和崗位職責(zé)
- 五年級上學(xué)期班主任育人工作具體計(jì)劃
- 家政服務(wù)職業(yè)健康保證體系與措施
- 九年級上學(xué)期語文課程教學(xué)計(jì)劃
- 八年級年級組社會實(shí)踐調(diào)研計(jì)劃
- 2025年教師國際教育讀書計(jì)劃
- 醫(yī)療機(jī)構(gòu)勞務(wù)派遣服務(wù)方案及流程
- 學(xué)校施工期間師生交通秩序安全防范措施
- 北師大版五年級數(shù)學(xué)上冊家校共育教學(xué)計(jì)劃
- 招標(biāo)代理部門工作職責(zé)詳解
- DB44-T 2410-2023紅樹林生態(tài)修復(fù)工程評價(jià)技術(shù)規(guī)程
- 高中英語3500單詞(表格)只有中文
- 公司理財(cái)-羅斯(完整版)
- 改變觀念提高效率課件
- 立責(zé)于心履責(zé)于行全面落實(shí)企業(yè)安全生產(chǎn)主體責(zé)任課件
- 建筑工程模板施工工藝技術(shù)要點(diǎn)講義豐富課件
- 醫(yī)療垃圾廢物處理課件
- 《煤的發(fā)熱量測定方法》ppt課件
- 三寶、四口、五臨邊安全培訓(xùn)PPT課件
- 護(hù)理崗位管理與績效考核-PPT課件
- 李墨林按摩療法(李墨林)237頁
評論
0/150
提交評論