流水線仿真實(shí)現(xiàn)與設(shè)計(jì)畢業(yè)論文_第1頁(yè)
流水線仿真實(shí)現(xiàn)與設(shè)計(jì)畢業(yè)論文_第2頁(yè)
流水線仿真實(shí)現(xiàn)與設(shè)計(jì)畢業(yè)論文_第3頁(yè)
流水線仿真實(shí)現(xiàn)與設(shè)計(jì)畢業(yè)論文_第4頁(yè)
流水線仿真實(shí)現(xiàn)與設(shè)計(jì)畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 流水線仿真實(shí)現(xiàn)與設(shè)計(jì)學(xué) 生:李白斌學(xué) 號(hào):20105410指導(dǎo)教師:黃仁專 業(yè):網(wǎng)絡(luò)工程重慶大學(xué)計(jì)算機(jī)學(xué)院二o一四年六月graduation design (thesis) of chongqing university design and implementation of pipeline simulationundergraduate: baibin lisupervisor: ren huangmajor: network engineering college of computer sciencechongqing universityjune

2、2014 摘 要abstract 目 錄摘 要iabstractii1緒論11.1 課題研究背景11.2 國(guó)內(nèi)外相關(guān)研究現(xiàn)狀11.3 本文研究的主要內(nèi)容21.4 論文結(jié)構(gòu)22logisim軟件32.1 logisim軟件的簡(jiǎn)介32.1.1科學(xué)研究領(lǐng)域32.1.2商業(yè)領(lǐng)域32.2 logisim元器件的使用3 2.3 logisim的注意事項(xiàng)33 指令流水線技術(shù)的總體概述53.1 指令流水線技術(shù)的起源5 3.2 指令流水線技術(shù)的原理53.3 指令流水線技術(shù)在商業(yè)上的運(yùn)用5 4 指令靜態(tài)五級(jí)流水線的總體設(shè)計(jì)74.1 指令指令集的設(shè)計(jì)74.2 指令各個(gè)部件的設(shè)計(jì)84.2.1 指令流水線指令控制器84

3、.2.2 指令流水線pc寄存器114.2.3 指令流水線指令存儲(chǔ)器114.2.4 指令流水線數(shù)據(jù)寄存器堆124.2.5 指令流水線if/id寄存器144.2.6 指令流水線id/ex寄存器154.2.7 指令流水線ex/mem寄存器164.2.8 指令流水線mem/wb寄存器174.2.9 指令流水線alu控制器184.2.10 指令流水線alu單元194.2.11 指令流水線數(shù)據(jù)存儲(chǔ)器204.2.12 指令流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器20 4.2.13 指令流水線數(shù)據(jù)冒險(xiǎn)阻塞器25 4.3 指令流水線各個(gè)部件的數(shù)據(jù)通路連接274.3.1 指令流水線的連接原理圖274.3.2 指令流水線的logisi

4、m連接圖275 指令流水線的指令測(cè)試295.1 r型指令的執(zhí)行295.2 lw和sw指令的執(zhí)行295.3分支指令的執(zhí)行326 本次畢業(yè)設(shè)計(jì)的總結(jié)和對(duì)導(dǎo)師的致謝35參考文獻(xiàn)36 1 緒論1.1 課題研究背景 對(duì)指令流水線的研究是在于人對(duì)計(jì)算機(jī)的性能需求的日益提高。隨著這些年大型軟件的不斷開發(fā),人對(duì)計(jì)算機(jī)的性能提出了越來越高的要求,這也就是為什么人對(duì)指令流水線的研究更加深入,研究只有一個(gè)目的,那就是在人日益增長(zhǎng)的海量數(shù)據(jù)下,盡可能的去讓計(jì)算機(jī)高速效率的處理數(shù)據(jù)。這也就是為什么要研究流水線化的指令處理方式。采用流水線技術(shù)后,并沒有加速單條指令的執(zhí)行,每條指令的操作步驟一個(gè)也不能少,只是多條指令的不同

5、操作步驟同時(shí)執(zhí)行,因而從總體上看加快了指令流速度,縮短了程序執(zhí)行時(shí)間。為了進(jìn)一步滿足普通流水線設(shè)計(jì)所不能適應(yīng)的更高時(shí)鐘頻率的要求,高檔位處理器中的流水線的深度(級(jí)數(shù))在逐代增多。當(dāng)流水線深度在56級(jí)以上時(shí),通常稱為超流水線結(jié)構(gòu)(super pipeline)。顯然,流水線級(jí)數(shù)越多,每級(jí)所花的時(shí)間越短,時(shí)鐘周期就可以設(shè)計(jì)的越短,指令速度越快,指令平均執(zhí)行時(shí)間也就越短。流水線技術(shù)是通過增加計(jì)算機(jī)硬件來實(shí)現(xiàn)的。它要求各功能段能互相獨(dú)立地工作,這就要增加硬件,相應(yīng)地也加大了控制的復(fù)雜性。如果沒有互相獨(dú)立的操作部件,很可能會(huì)發(fā)生各種沖突。例如要能預(yù)取指令,就需增加指令的硬件電路,并把取來的指令存放到指令

6、隊(duì)列緩沖器中,使微處理器能同時(shí)進(jìn)行取指令和分析、執(zhí)行指令的操作。1.2 國(guó)內(nèi)外相關(guān)研究現(xiàn)狀指令流水線技術(shù)自從20世紀(jì)60年代第一次在高端的大型機(jī)中采用,第一次采用指令集靜態(tài)流水線的計(jì)算機(jī)是ibm公司生產(chǎn)的ibm7030大型計(jì)算機(jī)(它又被稱為stretch計(jì)算機(jī))。在后面研制的cdc6600大型計(jì)算機(jī)也使用了指令態(tài)流水線和多功能部件技術(shù)。到了20世紀(jì)80年代,流水線技術(shù)已經(jīng)成為精簡(jiǎn)指令集處理器最為基礎(chǔ)的技術(shù)了,到了這時(shí)流水線技術(shù)開始了發(fā)展,開始有了新型的流水線技術(shù)超標(biāo)量流水線。超標(biāo)量流水線是精簡(jiǎn)指令集系統(tǒng)中采用一種并行處理的技術(shù)。它通過將流水線的每一步分別作出與之相對(duì)應(yīng)的細(xì)化,增加流水線的級(jí)數(shù),

7、和增加指令的主頻數(shù),才指令在它的一個(gè)時(shí)鐘周期內(nèi)完成一個(gè)甚至可以達(dá)到兩個(gè)浮點(diǎn)數(shù)的操作。超標(biāo)量流水線的實(shí)質(zhì)就是用更多的處理空間來?yè)Q取更少的處理時(shí)間,大規(guī)模的元器件使用流水線技術(shù)并且提供指令的工作主頻來提高指令的處理速度。超標(biāo)量流水線技術(shù)它有3種獨(dú)特的改進(jìn):1. 它的流水線條數(shù)已經(jīng)不是1條,而改進(jìn)成兩至三條,而且超標(biāo)量流水線還有十一個(gè)獨(dú)立的元器件執(zhí)行單元去并行地運(yùn)行。 2.超標(biāo)量流水線技術(shù)它采用了無序執(zhí)行技術(shù)(out-of-order processing)。這就說明當(dāng)某一條指令需要一個(gè)數(shù)據(jù)才能執(zhí)行完成時(shí),它將直接被分流出流水線以等待這條指令所需要的數(shù)據(jù)。這樣做的目的是,防止因?yàn)槟骋粭l指令沒有執(zhí)行而

8、影響整個(gè)流水線的運(yùn)行從而導(dǎo)致處理速度的下降。 3.它將指令的執(zhí)行劃分為更加細(xì)致的階段,它已經(jīng)不是采用一般流水線技術(shù)的五級(jí)流水線,而是采用更多的流水線級(jí)數(shù),比如說十四條流水線級(jí)數(shù),它會(huì)大大提高流水線的運(yùn)行效率。采用超標(biāo)量流水線處理器的不同元器件可以集成在同一天流水線上,這就表示執(zhí)行同一種功能的元器件它可以在一條流水線上,而執(zhí)行另一種功能的元器件它可以在另一條流水線上。這極大的提高了流水線的運(yùn)行效率,并且現(xiàn)代的指令都采用了動(dòng)態(tài)執(zhí)行技術(shù),它包括了分支預(yù)測(cè),數(shù)據(jù)分析,投機(jī)執(zhí)行這幾項(xiàng)技術(shù),現(xiàn)代的計(jì)算機(jī)處理器都使用的是高級(jí)指令集并行技術(shù)即每一個(gè)流水線可以啟動(dòng)多條指令。1.3 本文研究的主要內(nèi)容 了解指令流

9、水線的基本問題 logisim的基本使用方法 理解指令流水線的數(shù)據(jù)冒險(xiǎn),學(xué)習(xí)相關(guān)性判斷,和分支冒險(xiǎn) 在logisim上仿真和實(shí)現(xiàn)指令靜態(tài)流水線1.4 論文結(jié)構(gòu)本文研究了基于risc指令集下,用logisim軟件仿真與實(shí)現(xiàn)靜態(tài)流水線的方法。本文共有七章,文章的結(jié)構(gòu)安排如下:第1章 為緒論,這一章描述了這個(gè)研究項(xiàng)目所處的研究背景以及其意義,并介紹了這一研究領(lǐng)域國(guó)內(nèi)外的研究狀況,接著介紹了本文的研究目的和研究?jī)?nèi)容,最后展現(xiàn)論文的結(jié)構(gòu)安排。第2章 介紹了logisim軟件的基本用法和在設(shè)計(jì)過程時(shí)將會(huì)用到元器件主要功能。第3章 介紹了指令流水線技術(shù)的總體技術(shù)概要,以及指令流水線技術(shù)的原理,指令流水線技術(shù)

10、的起源和商業(yè)上的運(yùn)用。第4章 闡述了如何具體的設(shè)計(jì)指令流水線的每一個(gè)部件并將它連接成可以完美運(yùn)行的有機(jī)整體。第5章 描述了指令是如何具體的在指令流水線中執(zhí)行,以及可能會(huì)遇到的問題。第6章 總結(jié)了本文所闡述的研究,和感謝導(dǎo)師的指導(dǎo)。 2 logisim軟件2.1 logisim的簡(jiǎn)介每一位用戶都可以通過它來學(xué)習(xí)如何創(chuàng)建邏輯電路,方便簡(jiǎn)單。它是一款基于java的應(yīng)用程序,方便學(xué)生來學(xué)習(xí)設(shè)計(jì)和模仿數(shù)字邏輯電路,可謂一款不折不扣的學(xué)習(xí)教育工具,方便你來學(xué)習(xí)電路的相關(guān)工作原理等等。logism中的主要組成部分之一就在于設(shè)計(jì)并以圖示來顯示指令或其他中央處理器單位。當(dāng)然logism中還有其他多種組合分析模型

11、來對(duì)你進(jìn)行幫助,如轉(zhuǎn)換電路,表達(dá)式,布爾型和真值表等等。同時(shí)還可以重新利用小規(guī)模的電路來作為大型電路的一部分。 logisim的特點(diǎn)有:1. 它是一個(gè)開源的軟件而且免費(fèi)。2. 它可以用java來編程控件來組成自己設(shè)計(jì)的邏輯電路圖或者是自己設(shè)計(jì)的比較復(fù)雜的指令。3. logisim的操作比較方便,它可以勾畫出你需要設(shè)計(jì)的器件的電路圖,它有很方便的器件可以用來構(gòu)成復(fù)雜的邏輯電路。4. 而且它可以用你自己寫的真值表來自動(dòng)生成一個(gè)邏輯電路,非常的方便。5. 它可以封裝一個(gè)你自己設(shè)計(jì)好的邏輯電路圖,作為一個(gè)器件去用來組成一個(gè)更為復(fù)雜的電路設(shè)計(jì)。6. 它可以分層設(shè)計(jì)電路圖,第一次電路圖設(shè)計(jì)好后,在設(shè)計(jì)第二

12、次電路圖讓它嵌套在第一次電路圖上。7. logisim還支持打印你自己設(shè)計(jì)出來的邏輯電路圖。2.2 logisim元器件的使用首先在本次仿真過程中,使用logisim中最為重要的元器件是rom器件和ram器件,在本次仿真過程中rom將它作為指令存儲(chǔ)器,將預(yù)先編譯好的指令轉(zhuǎn)換為16進(jìn)制存儲(chǔ)到rom中,而ram它也可以載人預(yù)先設(shè)計(jì)好的數(shù)據(jù),并且還可以通過指令流水線的運(yùn)行,將alu處理過的數(shù)據(jù)和寄存器里的值存儲(chǔ)在ram里面。其次仿真過程中還會(huì)用到一個(gè)基礎(chǔ)并且重要的元器件,那就是寄存器,寄存器它是指令流水線存儲(chǔ)單位的基礎(chǔ),計(jì)算機(jī)很多需要用到的數(shù)據(jù)都會(huì)存儲(chǔ)到寄存器中。并且在logisim中可以使用多路選

13、擇器,數(shù)據(jù)分離器,與門,或門,反向電路,加法器,減法器,位擴(kuò)展器等元器件。2.3 logisim元器件的注意事項(xiàng) 在logisim中最重要的問題就是解決寄存器和ram中的時(shí)序問題。因?yàn)槟憧赡軙?huì)出現(xiàn)一種狀況,那就是邏輯設(shè)計(jì)是正確的,但是在具體的執(zhí)行過程中,寄存器的值可能會(huì)在不可控的范圍內(nèi)變化,比如說執(zhí)行一條指令并要將數(shù)據(jù)傳入寄存器時(shí),上一條指令的數(shù)據(jù)就可能同時(shí)傳入即將接收數(shù)據(jù)的寄存器中,造成數(shù)據(jù)傳輸錯(cuò)誤。解決這個(gè)問題的關(guān)鍵就是將寄存器的觸發(fā)從上升沿觸發(fā)改成高電平觸發(fā),這樣就可以讓寄存器不會(huì)造成數(shù)據(jù)不可控的改變。 3 指令流水線3.1 指令流水線技術(shù)的起源 在較早的指令處理器中,人們最先設(shè)計(jì)的單周

14、期處理器,但是單周期處理它每條指令在一個(gè)固定長(zhǎng)度的時(shí)鐘周期內(nèi)完成。它的性能不是特別完美,所以我們拓展到了多周期處理器。而在多周期處理器中,指令的每一步將占用一個(gè)時(shí)鐘周期,一個(gè)功能單元可以在一條指令的執(zhí)行過程中使用多次。多周期處理器的這種共享可以減少所需的硬件數(shù),并且提高一定的性能。但是多周期處理器依然有著一些缺點(diǎn),比如說不能流水化的執(zhí)行指令。由此人們研究出了指令流水線技術(shù)。在二十世紀(jì)的60年代,ibm公司生產(chǎn)的ibm7030大型計(jì)算機(jī)是世界上第一臺(tái)采用流水線技術(shù)的計(jì)算機(jī)。這是因?yàn)榱魉€技術(shù)可以大大的提高指令的指令執(zhí)行效率。3.2 指令流水線技術(shù)原理 最經(jīng)典的指令五級(jí)流水線技術(shù),這五個(gè)步驟分別為

15、:1. 取指令階段 執(zhí)行一次存儲(chǔ)器讀操作讀出的內(nèi)容(指令)保存到寄存器ir(指令寄存器)中,ir的內(nèi)容不是每個(gè)時(shí)鐘都更新,所以ir必須加一個(gè)“寫使能”控制。在取指令階段結(jié)束時(shí),alu的輸出為pc+4,并送到pc的輸入端,但不能在每個(gè)時(shí)鐘到來時(shí)就更新pc,所以pc也要有“寫使能”控制。2.譯碼/讀寄存器堆階段經(jīng)過控制邏輯延遲后,控制信號(hào)更新為新值。執(zhí)行一次寄存器讀操作,并同時(shí)進(jìn)行譯碼。期間alu空閑,可以考慮“投機(jī)計(jì)算”分支地址。3.alu運(yùn)算階段alu運(yùn)算,輸出結(jié)果一定要在下個(gè)時(shí)鐘到達(dá)之前穩(wěn)定。如果是分支branch指令,該階段需決定是否將分支地址寫入pc。4.讀存儲(chǔ)器階段由alu運(yùn)算結(jié)果作為

16、地址訪問存儲(chǔ)器,讀出數(shù)據(jù)。5.寫結(jié)果到寄存器 把之前的運(yùn)算結(jié)果或讀存儲(chǔ)器結(jié)果寫到寄存器堆中。 這是指令流水線最經(jīng)典的原理,它非常簡(jiǎn)潔的表現(xiàn)出了指令最為基本的過程。3.4 指令流水線的冒險(xiǎn) 3.4 指令流水線技術(shù)在商業(yè)上的運(yùn)用 近30年來指令流水線技術(shù)在不斷的發(fā)展,從最初的指令五級(jí)流水線到英特爾公司奔騰四處理器的二十級(jí)流水線?,F(xiàn)在商業(yè)上運(yùn)用的指令流水線技術(shù)它主要是挖掘指令間潛在的并行性,這種并行性被稱為指令級(jí)并行(ilp)。有兩種方法可以增加潛在的指令級(jí)并行程度。第一種是增加流水線深度一重疊更多的指令。第二種是復(fù)制處理器內(nèi)部部件的數(shù)量,使得每一個(gè)流水級(jí)可以啟動(dòng)多條指令。這個(gè)技術(shù)被稱為多發(fā)射。因特

17、爾公司在x86系列的處理器就已經(jīng)運(yùn)用了指令流水線技術(shù),并且它又在奔騰系列的處理器使用了流水化程度更高的流水線技術(shù),比如說mmx技術(shù),它是將整個(gè)流水線的處理過程多增加了一步,那就是指令從代碼的高速緩存中預(yù)先提取出來,然后將它傳送到“預(yù)處理”階段,在“預(yù)處理”階段它將進(jìn)行指令的譯碼階段。奔騰系列的處理器它都使用了比較先進(jìn)的流水線技術(shù),它采用的是動(dòng)態(tài)執(zhí)行結(jié)構(gòu),這種結(jié)構(gòu)就是將它本身的寄存器進(jìn)行重新命名并且在遇到分支指令時(shí)使用分支預(yù)測(cè)來執(zhí)行指令的結(jié)構(gòu)。它非常完美的將亂序執(zhí)行還有推測(cè)執(zhí)行結(jié)合了在一起。它的執(zhí)行過程是,指令都從一個(gè)有序執(zhí)行的流水線進(jìn)入,然后通過指令的宏指令將這些指令分解成一些簡(jiǎn)單的微操作,然

18、后再由一個(gè)專門處理這些微操作的亂序超標(biāo)量處理器內(nèi)核來分別處理。因?yàn)閬y序的超標(biāo)量流水線處理器里面有幾個(gè)流水線,這些流水線連接了整型,跳轉(zhuǎn),浮點(diǎn)和內(nèi)存執(zhí)行單元。所以幾種不同的執(zhí)行單元就可以非常好的集合在一起,同時(shí)在一條流水線里完美的進(jìn)行執(zhí)行。因特爾推出的酷睿i7處理器,它的總流水線深度為14級(jí),分支錯(cuò)誤預(yù)測(cè)成為為17個(gè)時(shí)鐘周期。它一共有48個(gè)載入緩沖區(qū)和32個(gè)存儲(chǔ)緩沖區(qū),6個(gè)獨(dú)立功能單元可以在同一時(shí)鐘周期分別開始執(zhí)行準(zhǔn)備就緒的微操作。在采取這些高端指令流水線技術(shù)后,i7處理器的性能有了質(zhì)的提升,它的cpi達(dá)到了一個(gè)最佳預(yù)測(cè)值。 4 指令靜態(tài)五級(jí)流水線的總體設(shè)計(jì) 4.1 指令指令集的設(shè)計(jì) 本次設(shè)計(jì)的

19、指令原型機(jī)為32位,所以設(shè)計(jì)的指令系統(tǒng)也是32位的,所以本次設(shè)計(jì)的指令為: r型指令-取指令,指令譯碼,alu運(yùn)算單元,寫結(jié)果到寄存器。 l型指令-取指令,指令譯碼,alu運(yùn)算單元,讀存儲(chǔ)器階段,寫結(jié)果到寄存器。 s型指令-取指令,指令譯碼,alu運(yùn)算單元,讀存儲(chǔ)器階段。分支轉(zhuǎn)移指令-取指令,指令譯碼,alu運(yùn)算單元。 它的指令格式是參照mips 32的指令格式,也是32位了的指令格式。 指令格式表 表4.1op(6)rs(5)rt(5)rd(5)shamt(5)funct(6)op(6)rs(5)rt(5)address(16) 第一個(gè)指令格式為r型指令格式,第二個(gè)指令格式為i型指令格式。

20、各個(gè)字段的意義如下所示: op:它是一條指令具體是哪一種類型指令的標(biāo)志碼,稱為操作碼。 rs:在r型指令中它為源寄存器字段,而在取指令和存儲(chǔ)指令中它作為基地址與十六位的地址字段相加得到存儲(chǔ)地址。 rt:在r型指令中它也為源寄存器字段,在取指令中,它是取出的數(shù)據(jù)的目的寄存器,而在存儲(chǔ)指令中,它是要存入存儲(chǔ)器的數(shù)據(jù)所在的寄存器。 rd:它是r型指令的目的字段。 shamt:位移量。 funct:它被稱為功能字段,這個(gè)字段主要是通過和aluop控制位組合起來從而確定alu控制位。具體來說,它就是和aluop配合來確定邏輯處理單元具體是執(zhí)行哪一個(gè)處理過程,比如說add,或者是sub指令它都會(huì)用到邏輯處

21、理單元,它指令中的funct字段就是來控制邏輯處理單元到底是執(zhí)行加還是減的步驟。本次設(shè)計(jì)的指令系統(tǒng)都是由上述所說的指令類型來編譯的,它將在指令流水線中運(yùn)行,以確定設(shè)計(jì)出的流水線是否符合邏輯。下面將給出具體執(zhí)行的八條指令: lw $1, 0($0) add $2, $0, $1 lw $3, 1($0) sub $4, $2, $3 beq $1, $2, 7 add $3,$1, $2 add $4,$2, $3 sw $4,2($0)4.2 指令流水線各個(gè)部件的設(shè)計(jì)4.2.1 指令流水線指令控制器 設(shè)計(jì)指令流水線的指令控制器就要考慮它的指令系統(tǒng)具體是有哪幾種類型的指令,下面將會(huì)列出指令流水線

22、的具體的各個(gè)控制信號(hào)的名稱以及其作用: 指令流水線控制信號(hào)表 表4.2 信號(hào)名稱 清0效果 置為1效果 regdst 寫入寄存器的目標(biāo)號(hào)來自rt字段(20-16位) 寫入寄存器的目標(biāo)號(hào)從rd字段(15-11位) regwrite 無 寫入寄存器的源寄存器的值置為輸入的寫入數(shù)據(jù) alusrc 第二個(gè)alu操作數(shù)來自第二個(gè)寄存器堆的輸出(讀數(shù)據(jù)2) 第二個(gè)alu操作數(shù)是一個(gè)符號(hào)擴(kuò)展指令的低十六位 pcsrc pc的值替換為pc+4pc的值置為分支目標(biāo)的地址 memread 無 輸入地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)器內(nèi)容置為讀入數(shù)據(jù)的輸出 memwrite 無 輸入地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)器的內(nèi)容替換為寫入數(shù)據(jù)的輸入

23、memtoreg alu提供寄存器寫數(shù)據(jù)的輸入值 數(shù)據(jù)存儲(chǔ)器提供寄存器寫數(shù)據(jù)的輸入值 因?yàn)楸敬卧O(shè)計(jì)還有邏輯處理單元的控制碼,所以下面將列出邏輯出來單元的控制位的具體控制碼: 邏輯控制單元控制碼 表4.3 指令操作碼 aluop 指令操作 功能字段 alu動(dòng)作 alu控制輸入 取字 00 取字 xxxxxx 加 010 存儲(chǔ)字 00 存儲(chǔ)字 xxxxxx 加 010 相等分支 01 相等分支 xxxxxx 減 110 r類型 10 加 100000 加 010 r類型 10 加 100010 減 110 r類型 10 與 100100 與 000 r類型 10 或 100101 或 001 al

24、u控制輸入碼 表4.4alu控制輸入 000 001 010 110 功能 與 或 加 減 下面給出流水線的步驟控制線路分布圖: 圖4.1下面將詳細(xì)介紹流水線的控制問題,可以在任何的一條流水線步驟中都加入與之相應(yīng)的控制碼。因?yàn)槊恳粭l控制線路它只會(huì)和它所控制的流水線部件相對(duì)應(yīng),所以只要在流水線的五個(gè)步驟中,把控制信號(hào)分成五組就可以很好的解決指令流水線控制的問題了。將控制信號(hào)分為1. 取指令:讀指令存儲(chǔ)器和寫pc的控制信號(hào)都置為1,因此在指令流水線的取指令階段并沒有什么一定要注意的控制部件。2. 指令譯碼/寄存器堆讀階段:與之前的一步是比較相似的,在每一個(gè)的指令時(shí)鐘周期里,指令本身所做的工作都是一

25、樣,它就是譯碼所以根本就不用控制信號(hào)來控制它。3. 指令的執(zhí)行和地址的計(jì)算階段:在這個(gè)階段里,被設(shè)置的信號(hào)有regdst,aluop還有alusrc。指令流水線將根據(jù)這些信號(hào)來選擇結(jié)構(gòu)寄存器,并且可以擴(kuò)展十六位的地址位讓它與寄存器里的值相加從而得到地址。4. 存儲(chǔ)器的訪問階段:在這個(gè)步驟中將設(shè)置的控制信號(hào)有branch,memread和memwrite這幾個(gè)信號(hào)。在branch信號(hào)和分支指令檢測(cè)單元的輸出都為零的時(shí)候,pcsrc將不會(huì)調(diào)用下一個(gè)順序地址,否則它將調(diào)用下一個(gè)順序的地址。5. 寫回階段:在這個(gè)階段中將會(huì)設(shè)置memtoreg還有regwrite信號(hào),memtoreg信號(hào)是決定是將al

26、u結(jié)果還是將存儲(chǔ)器數(shù)據(jù)傳輸?shù)郊拇嫫鞫?,而regwrite信號(hào)輔助寫入選定的數(shù)據(jù)。 下面將給出本次設(shè)計(jì)的指令流水線指令控制器在具體指令中應(yīng)該如何如何設(shè)置值的具體表格: 流水線指令控制碼 表4.5 指令regdstaluop1aluop2alusrcbranchmemreadmemwriteregwritememtoregr型110000010lw000101011swx0010010xbeqx0101000x 當(dāng)設(shè)計(jì)出指令流水線控制代碼,以及alu控制代碼時(shí),就進(jìn)行下一步的指令流水線控制器的設(shè)計(jì),在本次設(shè)計(jì)中,使用的是logisim軟件中的rom存儲(chǔ)單元,設(shè)計(jì)構(gòu)思是將設(shè)計(jì)好的alu控制碼直接存儲(chǔ)

27、到rom中,然后將op字段作為rom存儲(chǔ)單元的地址,即假如op字段為000001則rom存儲(chǔ)單元輸出的是位置在第一個(gè)的存儲(chǔ)數(shù)據(jù),如果op字段是000000則rom存儲(chǔ)單元輸出的是位置在第零位的存儲(chǔ)數(shù)據(jù)。存儲(chǔ)數(shù)據(jù)輸出后將會(huì)使用數(shù)據(jù)分離器來分了各個(gè)部分所需要的控制碼。如wb階段需要兩位控制碼,mem階段需要三位控制碼,ex執(zhí)行階段需要四位控制碼。下面將給出在logisim上設(shè)計(jì)的具體的設(shè)計(jì)圖樣: 圖4.2其中,第零號(hào)地址不會(huì)存儲(chǔ)任何的數(shù)據(jù),即它全為0;第一號(hào)地址存儲(chǔ)的是r型指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:182;第二號(hào)地址存儲(chǔ)的是lw指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:02b;第三號(hào)地

28、址存儲(chǔ)的是sw指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:024;第四號(hào)地址存儲(chǔ)的是beq指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:050。4.2.2 指令流水線pc寄存器 pc寄存器是一個(gè)專門用于存儲(chǔ)下一條指令地址的寄存器,它的主要功能就是存儲(chǔ)下一條指令的地址。但是因?yàn)樵O(shè)計(jì)的是流水線化的指令原型機(jī),則必須要考慮到相等分支指令執(zhí)行時(shí),pc寄存器的值一定會(huì)跳轉(zhuǎn)到指令所確定的地址,并且在發(fā)生指令流水線數(shù)據(jù)相關(guān)時(shí)pc寄存器必須要將自己鎖存起來,這就要求設(shè)計(jì)pc寄存器時(shí)必須有時(shí)它暫時(shí)不接收數(shù)據(jù)的pcwrite信號(hào),在pcwrite信號(hào)為零時(shí)它不接收任何的數(shù)據(jù),在pcwrite信號(hào)為一時(shí)才接收數(shù)據(jù)。pc寄存器

29、有三個(gè)部分組成:第一部分三十二位數(shù)據(jù)接收單元,第二部分寄存器存儲(chǔ)單元,第三部分三十二位數(shù)據(jù)傳出單元。下面將給出在logisim上設(shè)計(jì)的pc寄存器的設(shè)計(jì)圖: 圖4.3其中寄存器的數(shù)據(jù)位設(shè)為三十二位數(shù)據(jù)域,pc使能信號(hào)為一時(shí)當(dāng)?shù)谝粭l指令已經(jīng)進(jìn)入譯碼階段后,下一條指令的值會(huì)立刻存儲(chǔ)到pc寄存器中。4.2.3 指令流水線指令存儲(chǔ)器 指令流水線指令存儲(chǔ)器是一個(gè)專門存儲(chǔ)已經(jīng)編譯好的指令的存儲(chǔ)器,它有一個(gè)八位的地址接收單元,三十二位的數(shù)據(jù)傳出單元,和三十二位的rom存儲(chǔ)器三個(gè)部分構(gòu)成。它的原理是地址單元傳輸數(shù)據(jù)到rom存儲(chǔ)器中,則rom存儲(chǔ)器就會(huì)傳出數(shù)據(jù)到數(shù)據(jù)傳出單元以便下一步指令的執(zhí)行。下面將給出在log

30、isim上設(shè)計(jì)的指令存儲(chǔ)器的設(shè)計(jì)圖: 圖4.4 本次設(shè)計(jì)的指令流水線中,指令存儲(chǔ)器中一共存儲(chǔ)了八條指令,但是最終只會(huì)執(zhí)行七條指令,因?yàn)樵趫?zhí)行相等分支指令時(shí)會(huì)跳過一條指令轉(zhuǎn)而跳轉(zhuǎn)到相等分支指令指定的地址。 下面將列出設(shè)計(jì)的具體指令: lw $1 ,0($0) add $0, $1, $2 lw $3, 1($0) sub $2, $3, $4 beq $1, $2, 7 add $1, $2, $3 位置在第十二號(hào)地址:add $2,$3,$4 sw $4, 2($0) 這八條指令將一次在指令流水線中執(zhí)行,首先會(huì)先把它存入在指令寄存器中,因?yàn)橹噶畲鎯?chǔ)器它的數(shù)據(jù)進(jìn)制是十六位的,所以會(huì)將編譯好的二進(jìn)

31、制代碼轉(zhuǎn)換為十六進(jìn)制的,它一次分別為: 8010000,4011020,8030001,4432022,10220007,4221820,4432020,c040002 這些指令代碼全部存入指令存儲(chǔ)器中,當(dāng)指令存儲(chǔ)器的地址接收單元接收到數(shù)據(jù)然后傳給指令存儲(chǔ)器時(shí),指令存儲(chǔ)器就會(huì)將地址對(duì)應(yīng)的數(shù)據(jù)傳輸?shù)街噶畲鎯?chǔ)器傳出單元以便進(jìn)行下一步操作。4.2.4 指令流水線數(shù)據(jù)寄存器堆 指令流水線寄存器它的作用是在指令指定的寄存器中存儲(chǔ)指令的執(zhí)行數(shù)據(jù)和存儲(chǔ)邏輯計(jì)算單元的結(jié)果。由于指令在執(zhí)行指令的過程中會(huì)用到寄存器里的數(shù)據(jù),所以如何正確的將數(shù)據(jù)正確的存入由指令所確定的寄存器中和將指令所確定的寄存器里的數(shù)據(jù)取出是設(shè)

32、計(jì)指令流水線數(shù)據(jù)寄存器堆的關(guān)鍵。 下面將介紹自己設(shè)計(jì)的指令流水線數(shù)據(jù)寄存器堆的主要結(jié)構(gòu): 首先寄存器堆一共由五個(gè)寄存器組成,其次寄存器堆會(huì)有兩個(gè)五位的讀寄存器號(hào)端口,兩個(gè)三十二位的讀寄存器數(shù)據(jù)端口,以及一個(gè)五位的寫寄存器號(hào)端口,一個(gè)三十二位的寫數(shù)據(jù)端口。寄存器堆由許多寄存器組成,它這些寄存器可以通過設(shè)計(jì)的寄存器號(hào)進(jìn)行讀寫存取??梢赃\(yùn)用對(duì)于每一個(gè)寄存器的讀寫口進(jìn)行解碼,再運(yùn)用觸發(fā)器組成一個(gè)寄存器散列陣,這個(gè)就是構(gòu)造的寄存器堆。還有因?yàn)樽x取指令流水線寄存器時(shí)不能改變它的值,所以,在設(shè)計(jì)寄存器的屬性時(shí),一定要將寄存器的觸發(fā)屬性設(shè)置為高電平觸發(fā)。在確保指令流水線寄存器在讀取時(shí)值不會(huì)改變后,就只用提供寄

33、存器號(hào)就可以讀出指令流水線寄存器里面的數(shù)據(jù)了。然后在指令流水線寄存器里寫數(shù)據(jù)是,就需要三個(gè)輸入值,它分別是寄存器號(hào),寫入數(shù)據(jù)以及控制寫操作的流水線控制信號(hào)。指令流水線的寄存器堆設(shè)計(jì)主要分為兩個(gè)部分,第一部分是怎樣正確的讀出指令流水線寄存器里的內(nèi)容。在這個(gè)部分中,設(shè)計(jì)的是采用一對(duì)三十二位,數(shù)據(jù)域也為三十二位的多路復(fù)用選擇器,將五個(gè)寄存器連接到多路復(fù)用選擇器上,通過兩個(gè)五位的寄存器號(hào)端口,就可以非常準(zhǔn)確的讀出所選定的寄存器里的內(nèi)容。第二個(gè)部分就是如何準(zhǔn)確的將數(shù)據(jù)存入指定的寄存器中,在這個(gè)部分將使用一個(gè)地址位為五位的解碼器,這樣這個(gè)解碼器會(huì)有三十二個(gè)選擇,將解碼器與五個(gè)與門連接,然后再將指令流水線控

34、制信號(hào)中的寄存器寫信號(hào)與這個(gè)與門相連,將與門的輸出結(jié)果和寄存器的時(shí)鐘端相連,再將寄存器數(shù)據(jù)接收單元和寄存器的數(shù)據(jù)段相連,此結(jié)構(gòu)設(shè)計(jì)的寄存器可以很好的完成指令流水線執(zhí)行指令時(shí)所用到的關(guān)于數(shù)據(jù)的操作,這樣一個(gè)完整的寄存器堆就可以設(shè)計(jì)完成了。下面將給出在logisim上設(shè)計(jì)的指令流水線寄存器堆設(shè)計(jì)圖: 圖4.5 在這個(gè)指令流水線寄存器堆中,最為重要的問題是防止在寫入一個(gè)指定的寄存器時(shí),另一個(gè)寄存器里的值會(huì)發(fā)生一個(gè)不受控制的改變,因?yàn)檫@是由于寄存器的觸發(fā)屬性是在上升邊沿觸發(fā)造成的,必須要將它的觸發(fā)屬性改為高電平觸發(fā)才可以完美的解決這個(gè)問題。4.2.5 指令流水線if/id寄存器指令流水線if/id寄存

35、器它的作用是在指令的譯碼階段存儲(chǔ)來自指令存儲(chǔ)器中的指令并且將它譯碼并且存儲(chǔ)來自pc寄存器的數(shù)據(jù)。在設(shè)計(jì)指令流水線if/id寄存器的過程中最難解決的是指令流水線化的相關(guān)的處理,還有就是相當(dāng)分支指令的處理。首先解決指令流水線化以及其相關(guān)的處理方式是在指令流水線if/id寄存器中加入一個(gè)使能信號(hào)端,當(dāng)使能信號(hào)為一時(shí),指令流水線if/id寄存器不會(huì)接受任何的數(shù)據(jù),當(dāng)使能信號(hào)為零時(shí)指令流水線if/id寄存器才會(huì)接受數(shù)據(jù)。第二在遇到相等分支指令時(shí)如果指令確實(shí)要跳轉(zhuǎn)到其他的地址而不是下一條pc地址則必須將已經(jīng)進(jìn)入指令流水線的if/id寄存器的指令沖刷掉,這樣才能保證指令執(zhí)行的正確。解決這兩個(gè)問題所設(shè)計(jì)出的指

36、令流水線if/id寄存器將會(huì)擁有四個(gè)寄存器,一個(gè)使能信號(hào)端,一個(gè)寄存器沖刷段,兩個(gè)存儲(chǔ)來自pc寄存器的數(shù)據(jù),兩個(gè)存儲(chǔ)來自指令存儲(chǔ)器的數(shù)據(jù)。這四個(gè)寄存器都與各自的使能端和沖刷段相連,并且和時(shí)鐘控制信號(hào)相連。特別的指出,寄存器沖刷端只和前兩個(gè)寄存器相連,而使能信號(hào)與四個(gè)寄存器都相連。當(dāng)寄存器沖刷端信號(hào)為一時(shí),寄存器里面的數(shù)據(jù)將全部置為零。下面將給出在logisim上設(shè)計(jì)的指令流水線if/id寄存器的設(shè)計(jì)圖: 圖4.6 其中指令流水線if/id寄存器將指令劃分為四個(gè)部分,它分別為rd字段(1115),讀寄存器1(五位),讀寄存器2(五位),op字段(六位),符號(hào)擴(kuò)展位(十六位)。這些字段會(huì)傳送到id

37、/ex寄存器和流水線寄存器堆中以確保指令的正確執(zhí)行。4.2.6 指令流水線id/ex寄存器 指令流水線id/ex寄存器它的作用是在指令的id/ex階段傳輸和存儲(chǔ)由指令流水線控制器,流水線寄存器堆,符號(hào)擴(kuò)展單元,pc寄存器等流水線部件傳送的數(shù)據(jù)。它是整個(gè)指令流水線部件中含有寄存器最多的部件,它一共含有十一個(gè)寄存器。這十一個(gè)寄存器分別的功能是:1.存儲(chǔ)寫回階段的控制信號(hào),這個(gè)信號(hào)只有兩位二進(jìn)制數(shù)據(jù),所以將寄存器的數(shù)據(jù)域設(shè)置為兩位就可以了。2.存入的是存儲(chǔ)器訪問階段的控制信號(hào),它的控制信號(hào)一共有三位,只要將寄存器的數(shù)據(jù)域設(shè)置為三位就可以。3.存儲(chǔ)指令執(zhí)行/地址計(jì)算階段的控制信號(hào),這個(gè)階段的控制信號(hào)位

38、是四位,所以要將寄存器的數(shù)據(jù)域設(shè)置為四位。4.存儲(chǔ)pc地址,它是由pc寄存器傳來的三十二位數(shù)據(jù),所以存儲(chǔ)它的寄存器數(shù)據(jù)域?yàn)槿弧?.存儲(chǔ)由流水線寄存器堆傳送的第一個(gè)數(shù)據(jù),該數(shù)據(jù)也為三十二位,所以寄存器數(shù)據(jù)域也為三十二位。6.存儲(chǔ)由流水線寄存器堆傳送的第二個(gè)數(shù)據(jù),該數(shù)據(jù)也為三十二位,所以寄存器數(shù)據(jù)域也為三十二位。7.存儲(chǔ)由if指令譯碼階段由符號(hào)擴(kuò)展單元傳出的數(shù)據(jù),這個(gè)數(shù)據(jù)是三十二位數(shù)據(jù),則將寄存器數(shù)據(jù)域設(shè)置為三十二位的數(shù)據(jù)域。8.存儲(chǔ)在指令譯碼階段指令中1115位的數(shù)據(jù),將寄存器的數(shù)據(jù)域設(shè)置為五位。9.存儲(chǔ)在指令譯碼階段指令中1620位的數(shù)據(jù),并且將寄存器的數(shù)據(jù)域設(shè)置為五位就可以了。10.存

39、儲(chǔ)if/id寄存器中指令rs字段的內(nèi)容,字段為五位,則寄存器數(shù)據(jù)域也設(shè)置為五位。11.存儲(chǔ)if/id寄存器中指令rt字段的內(nèi)容,字段為五位,則寄存器數(shù)據(jù)域也設(shè)置為五位。下面將給出在logisim上設(shè)計(jì)的指令流水線id/ex寄存器的設(shè)計(jì)圖: 圖4.7 在設(shè)計(jì)流水線id/ex寄存器時(shí)需要注意的是,在遇到流水線相關(guān)時(shí),流水線id/ex寄存器將不會(huì)存儲(chǔ)任何來自if譯碼階段的rt字段的值,因?yàn)樵谠O(shè)計(jì)的測(cè)試中,如果不這樣做的話,會(huì)導(dǎo)致整個(gè)指令流水線的鎖死。4.2.7 指令流水線ex/mem寄存器 指令流水線ex/mem寄存器它的作用是存儲(chǔ)由pc地址加法器,邏輯處理單元,id/ex寄存器等部件傳入的數(shù)據(jù)。它

40、一共由六個(gè)寄存器組成,它分別是第一寄存器存儲(chǔ)寫回階段的控制信號(hào),這個(gè)信號(hào)是由id/ex寄存器傳來的。第二寄存器存入存儲(chǔ)器訪問階段的控制信號(hào),這個(gè)控制信號(hào)也是由id/ex寄存器傳入。第三寄存器存儲(chǔ)的是pc地址加法器傳入的數(shù)據(jù)。第四寄存器存儲(chǔ)的是由邏輯處理單元傳來的數(shù)據(jù)。第五寄存器存儲(chǔ)的是由id/ex寄存器傳來的數(shù)據(jù)。第六個(gè)寄存器存儲(chǔ)的是由多路復(fù)用選擇器傳來的數(shù)據(jù)。下面將給出在logisim上設(shè)計(jì)的指令流水線ex/mem寄存器的設(shè)計(jì)圖: 圖4.84.2.8 指令流水線mem/wb寄存器 指令流水線mem/wb寄存器它的作用是存儲(chǔ)由ex/mem寄存器,數(shù)據(jù)存儲(chǔ)器,邏輯處理單元等部件傳來的數(shù)據(jù)。mem

41、/wb寄存器一共有四個(gè)寄存器組成。第一個(gè)寄存器存儲(chǔ)的是寫回階段的控制信號(hào)。第二個(gè)寄存器存儲(chǔ)的是由數(shù)據(jù)存儲(chǔ)器傳出的數(shù)據(jù)。第三個(gè)寄存器存儲(chǔ)的是邏輯處理單元得出的結(jié)果。第四個(gè)寄存器存儲(chǔ)的是ex/mem寄存器傳出的數(shù)據(jù)。下面將給出在logisim上設(shè)計(jì)的指令流水線mem/wb寄存器的設(shè)計(jì)圖: 圖4.94.2.9 指令流水線alu控制器 指令流水線alu控制器它的主要功能就是根據(jù)aluop和功能字段來給出邏輯處理單元的輸入控制值。指令流水線alu控制器是由一個(gè)rom存儲(chǔ)器,功能字段接收器,aluop字段接收器組成。alu控制器這里需要考慮的是如何將功能字段和aluop組合起來。采用的方法就是反向使用數(shù)據(jù)

42、分離器,如果反向使用數(shù)據(jù)分離器就可以得到將幾個(gè)不同的數(shù)據(jù)組合起來從而得到新的數(shù)據(jù)。會(huì)根據(jù)表4.3里的內(nèi)容,將數(shù)據(jù)存入rom存儲(chǔ)器中。首先將功能字段作為rom存儲(chǔ)器地址的05位,aluop字段作為rom存儲(chǔ)器的67位地址。rom存儲(chǔ)器將會(huì)通過傳輸來的地址輸出相應(yīng)的二進(jìn)制值。比如說,r型指令中它的功能字段為:100000,它的aluop為:01。則它傳輸給rom存儲(chǔ)器的地址為:01100000。下面將給出在logisim上設(shè)計(jì)的指令流水線alu控制器的設(shè)計(jì)圖: 圖4.104.2.10 指令流水線alu單元 指令流水線的邏輯處理單元注意的功能是處理寄存器堆送來的數(shù)據(jù)并將它傳輸入下一個(gè)流水線器件單元。

43、在設(shè)計(jì)這個(gè)部件時(shí),所要注意的問題就是流水線alu單元如何根據(jù)alu控制器傳輸來的值來選擇到底是進(jìn)行哪一種邏輯處理。這個(gè)問題是是通過將兩個(gè)數(shù)據(jù)接收端分別與兩個(gè)多路復(fù)用選擇器相連,然后將alu控制器的輸出數(shù)據(jù)傳到多路復(fù)用選擇器的數(shù)據(jù)選擇端口上,就可以實(shí)現(xiàn)alu單元根據(jù)alu控制器的傳輸值來選擇具體的邏輯處理過程了。整個(gè)指令流水線alu單元是由兩個(gè)三十二位的數(shù)據(jù)接收端,兩個(gè)數(shù)據(jù)域?yàn)槿坏亩嗦窂?fù)用選擇器,一個(gè)三十二位的數(shù)據(jù)輸出單元,兩個(gè)或門,一個(gè)與門,一個(gè)加法器,一個(gè)減法器組成。下面將給出在logisim上設(shè)計(jì)的指令流水線alu單元的設(shè)計(jì)圖: 圖4.11其中兩個(gè)多路選擇器傳輸過來的數(shù)據(jù)會(huì)分別傳入到

44、與門,或門,加法器,減法器中。因?yàn)槎嗦窂?fù)用選擇器會(huì)通過選擇端口出入的選擇碼來確定到底是哪個(gè)輸出端口的數(shù)據(jù)傳出,所以就可以很好的解決alu單元具體的處理步驟是哪一種了。再將四個(gè)邏輯單元傳出的數(shù)據(jù)和一個(gè)四入口的或門相連,最后或門將數(shù)據(jù)傳輸至指令流水線alu單元的數(shù)據(jù)傳出單元中,以便執(zhí)行指令的下一步階段操作。4.2.11 指令流水線數(shù)據(jù)存儲(chǔ)器指令流水線的數(shù)據(jù)存儲(chǔ)器的主要功能就是在指令流水線的執(zhí)行過程中,流水線寄存器堆可以從中提取數(shù)據(jù),也可以將流水線寄存器里的數(shù)據(jù)存入指令流水線存儲(chǔ)器中。設(shè)計(jì)ram存儲(chǔ)器要最需要注意的一個(gè)問題就是它的時(shí)序問題,也就是說,什么時(shí)候指令流水線數(shù)據(jù)存儲(chǔ)器應(yīng)該是存入數(shù)據(jù),什么什

45、么它應(yīng)該讀出數(shù)據(jù)將數(shù)據(jù)傳輸?shù)较鄳?yīng)的寄存器中。那么這個(gè)指令流水線數(shù)據(jù)存儲(chǔ)器肯定需要兩個(gè)信號(hào)端口,一個(gè)是數(shù)據(jù)存儲(chǔ)器讀信號(hào)端口,另一個(gè)是數(shù)據(jù)存儲(chǔ)器寫信號(hào)端口。綜上所述指令流水線數(shù)據(jù)存儲(chǔ)器一共有六個(gè)單元組成,它依次是:數(shù)據(jù)存儲(chǔ)器地址接收端,數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)接收端,數(shù)據(jù)存儲(chǔ)器讀信號(hào)接收端,存儲(chǔ)器寫信號(hào)接收端,數(shù)據(jù)輸出單元,以及最后的ram存儲(chǔ)器單元。下面將給出在logisim上設(shè)計(jì)的指令流水線數(shù)據(jù)存儲(chǔ)器的設(shè)計(jì)圖: 圖4.12其中memwrite就是指令流水線數(shù)據(jù)存儲(chǔ)器的寫信號(hào)端,而memread就是指令流水線數(shù)據(jù)存儲(chǔ)器的讀信號(hào)端。流水線數(shù)據(jù)存儲(chǔ)器的地址接收端為五位,數(shù)據(jù)接收端和數(shù)據(jù)傳出端都的數(shù)據(jù)域都為三十

46、二位。ram存儲(chǔ)器的數(shù)據(jù)域也為三十二位,它一共可以存儲(chǔ)32個(gè)三十二位的數(shù)據(jù)。4.2.12 指令流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器指令流水線的數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器這是整個(gè)指令流水線設(shè)計(jì)中最為難設(shè)計(jì)的部件,因?yàn)樗闹饕δ芫褪谴_保整個(gè)流水線在執(zhí)行過程中,如果遇到數(shù)據(jù)冒險(xiǎn)時(shí)可以正確的處理流水線的整體運(yùn)行情況,以確保指令的正確執(zhí)行。所謂數(shù)據(jù)冒險(xiǎn)即是假如有一條指令,它正在執(zhí)行,但是它所需要的一些執(zhí)行數(shù)據(jù)卻依賴于它自己之前一條指令執(zhí)行的結(jié)果,這就是數(shù)據(jù)冒險(xiǎn)。比如說這個(gè)例子,有一條add指令,但是,它的后面一條指令也是一條add指令,而這條add指令缺要用到上一條指令的計(jì)算結(jié)果:add $0,$1,$2add $3,$0,$4

47、如果沒有數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器的話,而編譯的指令又不增加三條空操作的話(因?yàn)榈谝粭ladd指令它要到第五步才會(huì)執(zhí)行出它的結(jié)果),指令流水線指令的執(zhí)行結(jié)果肯定會(huì)出錯(cuò)。但是如果加上了指令流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器的話,它只會(huì)停頓一共時(shí)鐘周期就可以正常的執(zhí)行了。指令流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器的作用就是當(dāng)流水線處于數(shù)據(jù)冒險(xiǎn)的情況時(shí),流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器會(huì)在alu生成結(jié)果的同時(shí)馬上將其結(jié)果傳輸?shù)较鄬?duì)應(yīng)的邏輯處理單元中。而且流水線數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器還可以將數(shù)據(jù)存儲(chǔ)器里面的值也傳輸?shù)较鄬?duì)應(yīng)的邏輯處理單元中。接下來將闡述怎么樣設(shè)計(jì)數(shù)據(jù)冒險(xiǎn)轉(zhuǎn)發(fā)器這個(gè)邏輯部件才可以做到上述所說的一切。這里將給出具體的冒險(xiǎn)判別式: (1)ex冒險(xiǎn) if(e

48、x/mem.regwrite and (ex/mem.registerrd 0)and (ex/mem.registerrd=id/ex.registerrs))forwarda=10 if(ex/mem.regwrite and (ex/mem.registerrd0) and (ex/mem.registerrd=id/ex.registerrt))forwardb=10(2) mem冒險(xiǎn) if(mem/wb.regwrite and (mem/wb.registerrd0)and (ex/mem.registerrdid/ex.registerrs)and (mem/wb.registe

49、rrd=id/ex.registerrs))forwarda=01if(mem/wb.regwrite and (mem/wb.registerrd0)and (ex/mem.registerrdid/ex.registerrt)and (mem/wb.registerrd=id/ex.registerrt))forwardb=01 下面來解釋下上式中具體每一個(gè)值在指令流水線中代表的含義。 1.ex/mem.regwrite它代表的是保存在指令流水線ex/mem寄存器中的regwrite信號(hào)。 2.ex/mem.registerrd它代表的是保存在指令流水線ex/mem寄存器中的第六號(hào)寄存器中

50、的數(shù)據(jù) 3.id/ex.registerrs它代表的是保存在指令流水線id/ex寄存器中的第十號(hào)寄存器中的數(shù)據(jù)。 4.id/ex.registerrt它代表的是保存在指令流水線id/ex寄存器中的第十一號(hào)寄存器中的數(shù)據(jù)。 5.mem/wb.registerrd它代表的是保存在指令流水線mem/wb寄存器中第四號(hào)寄存器中的數(shù)據(jù) 6.mem/wb.regwrite它代表的就是保存在指令流水線mem/wb寄存器中的regwrite信號(hào)。 ex/mem.registerrd=id/ex.registerrs其實(shí)指的就是上一條指令它執(zhí)行的結(jié)果是即將要執(zhí)行指令的第一源寄存器所需要的。因?yàn)閑x/mem.re

51、gisterrd代表已經(jīng)執(zhí)行的指令目的寄存器號(hào),而id/ex.registerrs代表的是下一條指令的第一源寄存器號(hào),當(dāng)一條指令的目的寄存器號(hào)等于下一條指令的第一源寄存器號(hào)就說明,這條指令和下一條指令發(fā)生了數(shù)據(jù)相關(guān)。所以將alu中第一個(gè)端口前的多路復(fù)用選擇器的選擇號(hào)置為10。 ex/mem.registerrd=id/ex.registerrt其實(shí)指的就是上一條指令的結(jié)果是即將要執(zhí)行指令的第二源寄存器所需要的。因?yàn)閑x/mem.registerrd代表已經(jīng)執(zhí)行的指令目的寄存器號(hào),而id/ex.registerrt代表的是下一條指令的第二源寄存器號(hào),當(dāng)一條指令的目的寄存器號(hào)等于下一條指令的第二源寄存器號(hào)就說明,這條指令和下一條指令發(fā)生了數(shù)據(jù)相關(guān)。所以將alu中第二個(gè)端口前的多路復(fù)用選擇器的選擇號(hào)置為10。 mem/wb.registerrd=id/ex.registerrs其實(shí)指的就是上一條指令它執(zhí)行的結(jié)果會(huì)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)器中但是它確是將要執(zhí)行指令的第一源寄存器所需要的。因?yàn)閙em/wb.registerrd代表已經(jīng)執(zhí)行到mem階段指令目的寄存器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論