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

下載本文檔

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

文檔簡介

重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 摘要重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 流水線仿真實現(xiàn)與設(shè)計學(xué) 生:李白斌學(xué) 號:20105410指導(dǎo)教師:黃仁專 業(yè):網(wǎng)絡(luò)工程重慶大學(xué)計算機(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 2014 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 摘要 摘 要 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) abstractabstracti 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 目錄 目 錄摘 要iabstractii1緒論11.1 課題研究背景11.2 國內(nèi)外相關(guān)研究現(xiàn)狀11.3 本文研究的主要內(nèi)容21.4 論文結(jié)構(gòu)22logisim軟件32.1 logisim軟件的簡介32.1.1科學(xué)研究領(lǐng)域32.1.2商業(yè)領(lǐng)域32.2 logisim元器件的使用3 2.3 logisim的注意事項33 指令流水線技術(shù)的總體概述53.1 指令流水線技術(shù)的起源5 3.2 指令流水線技術(shù)的原理53.3 指令流水線技術(shù)在商業(yè)上的運用5 4 指令靜態(tài)五級流水線的總體設(shè)計74.1 指令指令集的設(shè)計74.2 指令各個部件的設(shè)計84.2.1 指令流水線指令控制器84.2.2 指令流水線pc寄存器114.2.3 指令流水線指令存儲器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ù)存儲器204.2.12 指令流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器20 4.2.13 指令流水線數(shù)據(jù)冒險阻塞器25 4.3 指令流水線各個部件的數(shù)據(jù)通路連接274.3.1 指令流水線的連接原理圖274.3.2 指令流水線的logisim連接圖275 指令流水線的指令測試295.1 r型指令的執(zhí)行295.2 lw和sw指令的執(zhí)行295.3分支指令的執(zhí)行326 本次畢業(yè)設(shè)計的總結(jié)和對導(dǎo)師的致謝35參考文獻(xiàn)36iii 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 緒論 1 緒論1.1 課題研究背景 對指令流水線的研究是在于人對計算機(jī)的性能需求的日益提高。隨著這些年大型軟件的不斷開發(fā),人對計算機(jī)的性能提出了越來越高的要求,這也就是為什么人對指令流水線的研究更加深入,研究只有一個目的,那就是在人日益增長的海量數(shù)據(jù)下,盡可能的去讓計算機(jī)高速效率的處理數(shù)據(jù)。這也就是為什么要研究流水線化的指令處理方式。采用流水線技術(shù)后,并沒有加速單條指令的執(zhí)行,每條指令的操作步驟一個也不能少,只是多條指令的不同操作步驟同時執(zhí)行,因而從總體上看加快了指令流速度,縮短了程序執(zhí)行時間。為了進(jìn)一步滿足普通流水線設(shè)計所不能適應(yīng)的更高時鐘頻率的要求,高檔位處理器中的流水線的深度(級數(shù))在逐代增多。當(dāng)流水線深度在56級以上時,通常稱為超流水線結(jié)構(gòu)(super pipeline)。顯然,流水線級數(shù)越多,每級所花的時間越短,時鐘周期就可以設(shè)計的越短,指令速度越快,指令平均執(zhí)行時間也就越短。流水線技術(shù)是通過增加計算機(jī)硬件來實現(xiàn)的。它要求各功能段能互相獨立地工作,這就要增加硬件,相應(yīng)地也加大了控制的復(fù)雜性。如果沒有互相獨立的操作部件,很可能會發(fā)生各種沖突。例如要能預(yù)取指令,就需增加指令的硬件電路,并把取來的指令存放到指令隊列緩沖器中,使微處理器能同時進(jìn)行取指令和分析、執(zhí)行指令的操作。1.2 國內(nèi)外相關(guān)研究現(xiàn)狀指令流水線技術(shù)自從20世紀(jì)60年代第一次在高端的大型機(jī)中采用,第一次采用指令集靜態(tài)流水線的計算機(jī)是ibm公司生產(chǎn)的ibm7030大型計算機(jī)(它又被稱為stretch計算機(jī))。在后面研制的cdc6600大型計算機(jī)也使用了指令態(tài)流水線和多功能部件技術(shù)。到了20世紀(jì)80年代,流水線技術(shù)已經(jīng)成為精簡指令集處理器最為基礎(chǔ)的技術(shù)了,到了這時流水線技術(shù)開始了發(fā)展,開始有了新型的流水線技術(shù)超標(biāo)量流水線。超標(biāo)量流水線是精簡指令集系統(tǒng)中采用一種并行處理的技術(shù)。它通過將流水線的每一步分別作出與之相對應(yīng)的細(xì)化,增加流水線的級數(shù),和增加指令的主頻數(shù),才指令在它的一個時鐘周期內(nèi)完成一個甚至可以達(dá)到兩個浮點數(shù)的操作。超標(biāo)量流水線的實質(zhì)就是用更多的處理空間來換取更少的處理時間,大規(guī)模的元器件使用流水線技術(shù)并且提供指令的工作主頻來提高指令的處理速度。超標(biāo)量流水線技術(shù)它有3種獨特的改進(jìn):1. 它的流水線條數(shù)已經(jīng)不是1條,而改進(jìn)成兩至三條,而且超標(biāo)量流水線還有十一個獨立的元器件執(zhí)行單元去并行地運行。 2.超標(biāo)量流水線技術(shù)它采用了無序執(zhí)行技術(shù)(out-of-order processing)。這就說明當(dāng)某一條指令需要一個數(shù)據(jù)才能執(zhí)行完成時,它將直接被分流出流水線以等待這條指令所需要的數(shù)據(jù)。這樣做的目的是,防止因為某一條指令沒有執(zhí)行而影響整個流水線的運行從而導(dǎo)致處理速度的下降。 3.它將指令的執(zhí)行劃分為更加細(xì)致的階段,它已經(jīng)不是采用一般流水線技術(shù)的五級流水線,而是采用更多的流水線級數(shù),比如說十四條流水線級數(shù),它會大大提高流水線的運行效率。采用超標(biāo)量流水線處理器的不同元器件可以集成在同一天流水線上,這就表示執(zhí)行同一種功能的元器件它可以在一條流水線上,而執(zhí)行另一種功能的元器件它可以在另一條流水線上。這極大的提高了流水線的運行效率,并且現(xiàn)代的指令都采用了動態(tài)執(zhí)行技術(shù),它包括了分支預(yù)測,數(shù)據(jù)分析,投機(jī)執(zhí)行這幾項技術(shù),現(xiàn)代的計算機(jī)處理器都使用的是高級指令集并行技術(shù)即每一個流水線可以啟動多條指令。1.3 本文研究的主要內(nèi)容 了解指令流水線的基本問題 logisim的基本使用方法 理解指令流水線的數(shù)據(jù)冒險,學(xué)習(xí)相關(guān)性判斷,和分支冒險 在logisim上仿真和實現(xiàn)指令靜態(tài)流水線1.4 論文結(jié)構(gòu)本文研究了基于risc指令集下,用logisim軟件仿真與實現(xiàn)靜態(tài)流水線的方法。本文共有七章,文章的結(jié)構(gòu)安排如下:第1章 為緒論,這一章描述了這個研究項目所處的研究背景以及其意義,并介紹了這一研究領(lǐng)域國內(nèi)外的研究狀況,接著介紹了本文的研究目的和研究內(nèi)容,最后展現(xiàn)論文的結(jié)構(gòu)安排。第2章 介紹了logisim軟件的基本用法和在設(shè)計過程時將會用到元器件主要功能。第3章 介紹了指令流水線技術(shù)的總體技術(shù)概要,以及指令流水線技術(shù)的原理,指令流水線技術(shù)的起源和商業(yè)上的運用。第4章 闡述了如何具體的設(shè)計指令流水線的每一個部件并將它連接成可以完美運行的有機(jī)整體。第5章 描述了指令是如何具體的在指令流水線中執(zhí)行,以及可能會遇到的問題。第6章 總結(jié)了本文所闡述的研究,和感謝導(dǎo)師的指導(dǎo)。4 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) logisim軟件的使用與注意事項 2 logisim軟件2.1 logisim的簡介每一位用戶都可以通過它來學(xué)習(xí)如何創(chuàng)建邏輯電路,方便簡單。它是一款基于java的應(yīng)用程序,方便學(xué)生來學(xué)習(xí)設(shè)計和模仿數(shù)字邏輯電路,可謂一款不折不扣的學(xué)習(xí)教育工具,方便你來學(xué)習(xí)電路的相關(guān)工作原理等等。logism中的主要組成部分之一就在于設(shè)計并以圖示來顯示指令或其他中央處理器單位。當(dāng)然logism中還有其他多種組合分析模型來對你進(jìn)行幫助,如轉(zhuǎn)換電路,表達(dá)式,布爾型和真值表等等。同時還可以重新利用小規(guī)模的電路來作為大型電路的一部分。 logisim的特點有:1. 它是一個開源的軟件而且免費。2. 它可以用java來編程控件來組成自己設(shè)計的邏輯電路圖或者是自己設(shè)計的比較復(fù)雜的指令。3. logisim的操作比較方便,它可以勾畫出你需要設(shè)計的器件的電路圖,它有很方便的器件可以用來構(gòu)成復(fù)雜的邏輯電路。4. 而且它可以用你自己寫的真值表來自動生成一個邏輯電路,非常的方便。5. 它可以封裝一個你自己設(shè)計好的邏輯電路圖,作為一個器件去用來組成一個更為復(fù)雜的電路設(shè)計。6. 它可以分層設(shè)計電路圖,第一次電路圖設(shè)計好后,在設(shè)計第二次電路圖讓它嵌套在第一次電路圖上。7. logisim還支持打印你自己設(shè)計出來的邏輯電路圖。2.2 logisim元器件的使用首先在本次仿真過程中,使用logisim中最為重要的元器件是rom器件和ram器件,在本次仿真過程中rom將它作為指令存儲器,將預(yù)先編譯好的指令轉(zhuǎn)換為16進(jìn)制存儲到rom中,而ram它也可以載人預(yù)先設(shè)計好的數(shù)據(jù),并且還可以通過指令流水線的運行,將alu處理過的數(shù)據(jù)和寄存器里的值存儲在ram里面。其次仿真過程中還會用到一個基礎(chǔ)并且重要的元器件,那就是寄存器,寄存器它是指令流水線存儲單位的基礎(chǔ),計算機(jī)很多需要用到的數(shù)據(jù)都會存儲到寄存器中。并且在logisim中可以使用多路選擇器,數(shù)據(jù)分離器,與門,或門,反向電路,加法器,減法器,位擴(kuò)展器等元器件。2.3 logisim元器件的注意事項 在logisim中最重要的問題就是解決寄存器和ram中的時序問題。因為你可能會出現(xiàn)一種狀況,那就是邏輯設(shè)計是正確的,但是在具體的執(zhí)行過程中,寄存器的值可能會在不可控的范圍內(nèi)變化,比如說執(zhí)行一條指令并要將數(shù)據(jù)傳入寄存器時,上一條指令的數(shù)據(jù)就可能同時傳入即將接收數(shù)據(jù)的寄存器中,造成數(shù)據(jù)傳輸錯誤。解決這個問題的關(guān)鍵就是將寄存器的觸發(fā)從上升沿觸發(fā)改成高電平觸發(fā),這樣就可以讓寄存器不會造成數(shù)據(jù)不可控的改變。重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 指令流水線技術(shù)總體概述 3 指令流水線3.1 指令流水線技術(shù)的起源 在較早的指令處理器中,人們最先設(shè)計的單周期處理器,但是單周期處理它每條指令在一個固定長度的時鐘周期內(nèi)完成。它的性能不是特別完美,所以我們拓展到了多周期處理器。而在多周期處理器中,指令的每一步將占用一個時鐘周期,一個功能單元可以在一條指令的執(zhí)行過程中使用多次。多周期處理器的這種共享可以減少所需的硬件數(shù),并且提高一定的性能。但是多周期處理器依然有著一些缺點,比如說不能流水化的執(zhí)行指令。由此人們研究出了指令流水線技術(shù)。在二十世紀(jì)的60年代,ibm公司生產(chǎn)的ibm7030大型計算機(jī)是世界上第一臺采用流水線技術(shù)的計算機(jī)。這是因為流水線技術(shù)可以大大的提高指令的指令執(zhí)行效率。3.2 指令流水線技術(shù)原理 最經(jīng)典的指令五級流水線技術(shù),這五個步驟分別為:1. 取指令階段 執(zhí)行一次存儲器讀操作讀出的內(nèi)容(指令)保存到寄存器ir(指令寄存器)中,ir的內(nèi)容不是每個時鐘都更新,所以ir必須加一個“寫使能”控制。在取指令階段結(jié)束時,alu的輸出為pc+4,并送到pc的輸入端,但不能在每個時鐘到來時就更新pc,所以pc也要有“寫使能”控制。2.譯碼/讀寄存器堆階段經(jīng)過控制邏輯延遲后,控制信號更新為新值。執(zhí)行一次寄存器讀操作,并同時進(jìn)行譯碼。期間alu空閑,可以考慮“投機(jī)計算”分支地址。3.alu運算階段alu運算,輸出結(jié)果一定要在下個時鐘到達(dá)之前穩(wěn)定。如果是分支branch指令,該階段需決定是否將分支地址寫入pc。4.讀存儲器階段由alu運算結(jié)果作為地址訪問存儲器,讀出數(shù)據(jù)。5.寫結(jié)果到寄存器 把之前的運算結(jié)果或讀存儲器結(jié)果寫到寄存器堆中。 這是指令流水線最經(jīng)典的原理,它非常簡潔的表現(xiàn)出了指令最為基本的過程。3.4 指令流水線的冒險 3.4 指令流水線技術(shù)在商業(yè)上的運用 近30年來指令流水線技術(shù)在不斷的發(fā)展,從最初的指令五級流水線到英特爾公司奔騰四處理器的二十級流水線?,F(xiàn)在商業(yè)上運用的指令流水線技術(shù)它主要是挖掘指令間潛在的并行性,這種并行性被稱為指令級并行(ilp)。有兩種方法可以增加潛在的指令級并行程度。第一種是增加流水線深度一重疊更多的指令。第二種是復(fù)制處理器內(nèi)部部件的數(shù)量,使得每一個流水級可以啟動多條指令。這個技術(shù)被稱為多發(fā)射。因特爾公司在x86系列的處理器就已經(jīng)運用了指令流水線技術(shù),并且它又在奔騰系列的處理器使用了流水化程度更高的流水線技術(shù),比如說mmx技術(shù),它是將整個流水線的處理過程多增加了一步,那就是指令從代碼的高速緩存中預(yù)先提取出來,然后將它傳送到“預(yù)處理”階段,在“預(yù)處理”階段它將進(jìn)行指令的譯碼階段。奔騰系列的處理器它都使用了比較先進(jìn)的流水線技術(shù),它采用的是動態(tài)執(zhí)行結(jié)構(gòu),這種結(jié)構(gòu)就是將它本身的寄存器進(jìn)行重新命名并且在遇到分支指令時使用分支預(yù)測來執(zhí)行指令的結(jié)構(gòu)。它非常完美的將亂序執(zhí)行還有推測執(zhí)行結(jié)合了在一起。它的執(zhí)行過程是,指令都從一個有序執(zhí)行的流水線進(jìn)入,然后通過指令的宏指令將這些指令分解成一些簡單的微操作,然后再由一個專門處理這些微操作的亂序超標(biāo)量處理器內(nèi)核來分別處理。因為亂序的超標(biāo)量流水線處理器里面有幾個流水線,這些流水線連接了整型,跳轉(zhuǎn),浮點和內(nèi)存執(zhí)行單元。所以幾種不同的執(zhí)行單元就可以非常好的集合在一起,同時在一條流水線里完美的進(jìn)行執(zhí)行。因特爾推出的酷睿i7處理器,它的總流水線深度為14級,分支錯誤預(yù)測成為為17個時鐘周期。它一共有48個載入緩沖區(qū)和32個存儲緩沖區(qū),6個獨立功能單元可以在同一時鐘周期分別開始執(zhí)行準(zhǔn)備就緒的微操作。在采取這些高端指令流水線技術(shù)后,i7處理器的性能有了質(zhì)的提升,它的cpi達(dá)到了一個最佳預(yù)測值。6 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(論文) 指令靜態(tài)五級流水線的總體設(shè)計 4 指令靜態(tài)五級流水線的總體設(shè)計 4.1 指令指令集的設(shè)計 本次設(shè)計的指令原型機(jī)為32位,所以設(shè)計的指令系統(tǒng)也是32位的,所以本次設(shè)計的指令為: r型指令-取指令,指令譯碼,alu運算單元,寫結(jié)果到寄存器。 l型指令-取指令,指令譯碼,alu運算單元,讀存儲器階段,寫結(jié)果到寄存器。 s型指令-取指令,指令譯碼,alu運算單元,讀存儲器階段。分支轉(zhuǎn)移指令-取指令,指令譯碼,alu運算單元。 它的指令格式是參照mips 32的指令格式,也是32位了的指令格式。 指令格式表 表4.1op(6)rs(5)rt(5)rd(5)shamt(5)funct(6)op(6)rs(5)rt(5)address(16) 第一個指令格式為r型指令格式,第二個指令格式為i型指令格式。 各個字段的意義如下所示: op:它是一條指令具體是哪一種類型指令的標(biāo)志碼,稱為操作碼。 rs:在r型指令中它為源寄存器字段,而在取指令和存儲指令中它作為基地址與十六位的地址字段相加得到存儲地址。 rt:在r型指令中它也為源寄存器字段,在取指令中,它是取出的數(shù)據(jù)的目的寄存器,而在存儲指令中,它是要存入存儲器的數(shù)據(jù)所在的寄存器。 rd:它是r型指令的目的字段。 shamt:位移量。 funct:它被稱為功能字段,這個字段主要是通過和aluop控制位組合起來從而確定alu控制位。具體來說,它就是和aluop配合來確定邏輯處理單元具體是執(zhí)行哪一個處理過程,比如說add,或者是sub指令它都會用到邏輯處理單元,它指令中的funct字段就是來控制邏輯處理單元到底是執(zhí)行加還是減的步驟。本次設(shè)計的指令系統(tǒng)都是由上述所說的指令類型來編譯的,它將在指令流水線中運行,以確定設(shè)計出的流水線是否符合邏輯。下面將給出具體執(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 指令流水線各個部件的設(shè)計4.2.1 指令流水線指令控制器 設(shè)計指令流水線的指令控制器就要考慮它的指令系統(tǒng)具體是有哪幾種類型的指令,下面將會列出指令流水線的具體的各個控制信號的名稱以及其作用: 指令流水線控制信號表 表4.2 信號名稱 清0效果 置為1效果 regdst 寫入寄存器的目標(biāo)號來自rt字段(20-16位) 寫入寄存器的目標(biāo)號從rd字段(15-11位) regwrite 無 寫入寄存器的源寄存器的值置為輸入的寫入數(shù)據(jù) alusrc 第二個alu操作數(shù)來自第二個寄存器堆的輸出(讀數(shù)據(jù)2) 第二個alu操作數(shù)是一個符號擴(kuò)展指令的低十六位 pcsrc pc的值替換為pc+4pc的值置為分支目標(biāo)的地址 memread 無 輸入地址對應(yīng)的數(shù)據(jù)存儲器內(nèi)容置為讀入數(shù)據(jù)的輸出 memwrite 無 輸入地址對應(yīng)的數(shù)據(jù)存儲器的內(nèi)容替換為寫入數(shù)據(jù)的輸入 memtoreg alu提供寄存器寫數(shù)據(jù)的輸入值 數(shù)據(jù)存儲器提供寄存器寫數(shù)據(jù)的輸入值 因為本次設(shè)計還有邏輯處理單元的控制碼,所以下面將列出邏輯出來單元的控制位的具體控制碼: 邏輯控制單元控制碼 表4.3 指令操作碼 aluop 指令操作 功能字段 alu動作 alu控制輸入 取字 00 取字 xxxxxx 加 010 存儲字 00 存儲字 xxxxxx 加 010 相等分支 01 相等分支 xxxxxx 減 110 r類型 10 加 100000 加 010 r類型 10 加 100010 減 110 r類型 10 與 100100 與 000 r類型 10 或 100101 或 001 alu控制輸入碼 表4.4alu控制輸入 000 001 010 110 功能 與 或 加 減 下面給出流水線的步驟控制線路分布圖: 圖4.1下面將詳細(xì)介紹流水線的控制問題,可以在任何的一條流水線步驟中都加入與之相應(yīng)的控制碼。因為每一條控制線路它只會和它所控制的流水線部件相對應(yīng),所以只要在流水線的五個步驟中,把控制信號分成五組就可以很好的解決指令流水線控制的問題了。將控制信號分為1. 取指令:讀指令存儲器和寫pc的控制信號都置為1,因此在指令流水線的取指令階段并沒有什么一定要注意的控制部件。2. 指令譯碼/寄存器堆讀階段:與之前的一步是比較相似的,在每一個的指令時鐘周期里,指令本身所做的工作都是一樣,它就是譯碼所以根本就不用控制信號來控制它。3. 指令的執(zhí)行和地址的計算階段:在這個階段里,被設(shè)置的信號有regdst,aluop還有alusrc。指令流水線將根據(jù)這些信號來選擇結(jié)構(gòu)寄存器,并且可以擴(kuò)展十六位的地址位讓它與寄存器里的值相加從而得到地址。4. 存儲器的訪問階段:在這個步驟中將設(shè)置的控制信號有branch,memread和memwrite這幾個信號。在branch信號和分支指令檢測單元的輸出都為零的時候,pcsrc將不會調(diào)用下一個順序地址,否則它將調(diào)用下一個順序的地址。5. 寫回階段:在這個階段中將會設(shè)置memtoreg還有regwrite信號,memtoreg信號是決定是將alu結(jié)果還是將存儲器數(shù)據(jù)傳輸?shù)郊拇嫫鞫?,而regwrite信號輔助寫入選定的數(shù)據(jù)。 下面將給出本次設(shè)計的指令流水線指令控制器在具體指令中應(yīng)該如何如何設(shè)置值的具體表格: 流水線指令控制碼 表4.5 指令regdstaluop1aluop2alusrcbranchmemreadmemwriteregwritememtoregr型110000010lw000101011swx0010010xbeqx0101000x 當(dāng)設(shè)計出指令流水線控制代碼,以及alu控制代碼時,就進(jìn)行下一步的指令流水線控制器的設(shè)計,在本次設(shè)計中,使用的是logisim軟件中的rom存儲單元,設(shè)計構(gòu)思是將設(shè)計好的alu控制碼直接存儲到rom中,然后將op字段作為rom存儲單元的地址,即假如op字段為000001則rom存儲單元輸出的是位置在第一個的存儲數(shù)據(jù),如果op字段是000000則rom存儲單元輸出的是位置在第零位的存儲數(shù)據(jù)。存儲數(shù)據(jù)輸出后將會使用數(shù)據(jù)分離器來分了各個部分所需要的控制碼。如wb階段需要兩位控制碼,mem階段需要三位控制碼,ex執(zhí)行階段需要四位控制碼。下面將給出在logisim上設(shè)計的具體的設(shè)計圖樣: 圖4.2其中,第零號地址不會存儲任何的數(shù)據(jù),即它全為0;第一號地址存儲的是r型指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:182;第二號地址存儲的是lw指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:02b;第三號地址存儲的是sw指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:024;第四號地址存儲的是beq指令所需要的控制碼,它轉(zhuǎn)換為十六進(jìn)制為:050。4.2.2 指令流水線pc寄存器 pc寄存器是一個專門用于存儲下一條指令地址的寄存器,它的主要功能就是存儲下一條指令的地址。但是因為設(shè)計的是流水線化的指令原型機(jī),則必須要考慮到相等分支指令執(zhí)行時,pc寄存器的值一定會跳轉(zhuǎn)到指令所確定的地址,并且在發(fā)生指令流水線數(shù)據(jù)相關(guān)時pc寄存器必須要將自己鎖存起來,這就要求設(shè)計pc寄存器時必須有時它暫時不接收數(shù)據(jù)的pcwrite信號,在pcwrite信號為零時它不接收任何的數(shù)據(jù),在pcwrite信號為一時才接收數(shù)據(jù)。pc寄存器有三個部分組成:第一部分三十二位數(shù)據(jù)接收單元,第二部分寄存器存儲單元,第三部分三十二位數(shù)據(jù)傳出單元。下面將給出在logisim上設(shè)計的pc寄存器的設(shè)計圖: 圖4.3其中寄存器的數(shù)據(jù)位設(shè)為三十二位數(shù)據(jù)域,pc使能信號為一時當(dāng)?shù)谝粭l指令已經(jīng)進(jìn)入譯碼階段后,下一條指令的值會立刻存儲到pc寄存器中。4.2.3 指令流水線指令存儲器 指令流水線指令存儲器是一個專門存儲已經(jīng)編譯好的指令的存儲器,它有一個八位的地址接收單元,三十二位的數(shù)據(jù)傳出單元,和三十二位的rom存儲器三個部分構(gòu)成。它的原理是地址單元傳輸數(shù)據(jù)到rom存儲器中,則rom存儲器就會傳出數(shù)據(jù)到數(shù)據(jù)傳出單元以便下一步指令的執(zhí)行。下面將給出在logisim上設(shè)計的指令存儲器的設(shè)計圖: 圖4.4 本次設(shè)計的指令流水線中,指令存儲器中一共存儲了八條指令,但是最終只會執(zhí)行七條指令,因為在執(zhí)行相等分支指令時會跳過一條指令轉(zhuǎn)而跳轉(zhuǎn)到相等分支指令指定的地址。 下面將列出設(shè)計的具體指令: lw $1 ,0($0) add $0, $1, $2 lw $3, 1($0) sub $2, $3, $4 beq $1, $2, 7 add $1, $2, $3 位置在第十二號地址:add $2,$3,$4 sw $4, 2($0) 這八條指令將一次在指令流水線中執(zhí)行,首先會先把它存入在指令寄存器中,因為指令存儲器它的數(shù)據(jù)進(jìn)制是十六位的,所以會將編譯好的二進(jìn)制代碼轉(zhuǎn)換為十六進(jìn)制的,它一次分別為: 8010000,4011020,8030001,4432022,10220007,4221820,4432020,c040002 這些指令代碼全部存入指令存儲器中,當(dāng)指令存儲器的地址接收單元接收到數(shù)據(jù)然后傳給指令存儲器時,指令存儲器就會將地址對應(yīng)的數(shù)據(jù)傳輸?shù)街噶畲鎯ζ鱾鞒鰡卧员氵M(jìn)行下一步操作。4.2.4 指令流水線數(shù)據(jù)寄存器堆 指令流水線寄存器它的作用是在指令指定的寄存器中存儲指令的執(zhí)行數(shù)據(jù)和存儲邏輯計算單元的結(jié)果。由于指令在執(zhí)行指令的過程中會用到寄存器里的數(shù)據(jù),所以如何正確的將數(shù)據(jù)正確的存入由指令所確定的寄存器中和將指令所確定的寄存器里的數(shù)據(jù)取出是設(shè)計指令流水線數(shù)據(jù)寄存器堆的關(guān)鍵。 下面將介紹自己設(shè)計的指令流水線數(shù)據(jù)寄存器堆的主要結(jié)構(gòu): 首先寄存器堆一共由五個寄存器組成,其次寄存器堆會有兩個五位的讀寄存器號端口,兩個三十二位的讀寄存器數(shù)據(jù)端口,以及一個五位的寫寄存器號端口,一個三十二位的寫數(shù)據(jù)端口。寄存器堆由許多寄存器組成,它這些寄存器可以通過設(shè)計的寄存器號進(jìn)行讀寫存取??梢赃\用對于每一個寄存器的讀寫口進(jìn)行解碼,再運用觸發(fā)器組成一個寄存器散列陣,這個就是構(gòu)造的寄存器堆。還有因為讀取指令流水線寄存器時不能改變它的值,所以,在設(shè)計寄存器的屬性時,一定要將寄存器的觸發(fā)屬性設(shè)置為高電平觸發(fā)。在確保指令流水線寄存器在讀取時值不會改變后,就只用提供寄存器號就可以讀出指令流水線寄存器里面的數(shù)據(jù)了。然后在指令流水線寄存器里寫數(shù)據(jù)是,就需要三個輸入值,它分別是寄存器號,寫入數(shù)據(jù)以及控制寫操作的流水線控制信號。指令流水線的寄存器堆設(shè)計主要分為兩個部分,第一部分是怎樣正確的讀出指令流水線寄存器里的內(nèi)容。在這個部分中,設(shè)計的是采用一對三十二位,數(shù)據(jù)域也為三十二位的多路復(fù)用選擇器,將五個寄存器連接到多路復(fù)用選擇器上,通過兩個五位的寄存器號端口,就可以非常準(zhǔn)確的讀出所選定的寄存器里的內(nèi)容。第二個部分就是如何準(zhǔn)確的將數(shù)據(jù)存入指定的寄存器中,在這個部分將使用一個地址位為五位的解碼器,這樣這個解碼器會有三十二個選擇,將解碼器與五個與門連接,然后再將指令流水線控制信號中的寄存器寫信號與這個與門相連,將與門的輸出結(jié)果和寄存器的時鐘端相連,再將寄存器數(shù)據(jù)接收單元和寄存器的數(shù)據(jù)段相連,此結(jié)構(gòu)設(shè)計的寄存器可以很好的完成指令流水線執(zhí)行指令時所用到的關(guān)于數(shù)據(jù)的操作,這樣一個完整的寄存器堆就可以設(shè)計完成了。下面將給出在logisim上設(shè)計的指令流水線寄存器堆設(shè)計圖: 圖4.5 在這個指令流水線寄存器堆中,最為重要的問題是防止在寫入一個指定的寄存器時,另一個寄存器里的值會發(fā)生一個不受控制的改變,因為這是由于寄存器的觸發(fā)屬性是在上升邊沿觸發(fā)造成的,必須要將它的觸發(fā)屬性改為高電平觸發(fā)才可以完美的解決這個問題。4.2.5 指令流水線if/id寄存器指令流水線if/id寄存器它的作用是在指令的譯碼階段存儲來自指令存儲器中的指令并且將它譯碼并且存儲來自pc寄存器的數(shù)據(jù)。在設(shè)計指令流水線if/id寄存器的過程中最難解決的是指令流水線化的相關(guān)的處理,還有就是相當(dāng)分支指令的處理。首先解決指令流水線化以及其相關(guān)的處理方式是在指令流水線if/id寄存器中加入一個使能信號端,當(dāng)使能信號為一時,指令流水線if/id寄存器不會接受任何的數(shù)據(jù),當(dāng)使能信號為零時指令流水線if/id寄存器才會接受數(shù)據(jù)。第二在遇到相等分支指令時如果指令確實要跳轉(zhuǎn)到其他的地址而不是下一條pc地址則必須將已經(jīng)進(jìn)入指令流水線的if/id寄存器的指令沖刷掉,這樣才能保證指令執(zhí)行的正確。解決這兩個問題所設(shè)計出的指令流水線if/id寄存器將會擁有四個寄存器,一個使能信號端,一個寄存器沖刷段,兩個存儲來自pc寄存器的數(shù)據(jù),兩個存儲來自指令存儲器的數(shù)據(jù)。這四個寄存器都與各自的使能端和沖刷段相連,并且和時鐘控制信號相連。特別的指出,寄存器沖刷端只和前兩個寄存器相連,而使能信號與四個寄存器都相連。當(dāng)寄存器沖刷端信號為一時,寄存器里面的數(shù)據(jù)將全部置為零。下面將給出在logisim上設(shè)計的指令流水線if/id寄存器的設(shè)計圖: 圖4.6 其中指令流水線if/id寄存器將指令劃分為四個部分,它分別為rd字段(1115),讀寄存器1(五位),讀寄存器2(五位),op字段(六位),符號擴(kuò)展位(十六位)。這些字段會傳送到id/ex寄存器和流水線寄存器堆中以確保指令的正確執(zhí)行。4.2.6 指令流水線id/ex寄存器 指令流水線id/ex寄存器它的作用是在指令的id/ex階段傳輸和存儲由指令流水線控制器,流水線寄存器堆,符號擴(kuò)展單元,pc寄存器等流水線部件傳送的數(shù)據(jù)。它是整個指令流水線部件中含有寄存器最多的部件,它一共含有十一個寄存器。這十一個寄存器分別的功能是:1.存儲寫回階段的控制信號,這個信號只有兩位二進(jìn)制數(shù)據(jù),所以將寄存器的數(shù)據(jù)域設(shè)置為兩位就可以了。2.存入的是存儲器訪問階段的控制信號,它的控制信號一共有三位,只要將寄存器的數(shù)據(jù)域設(shè)置為三位就可以。3.存儲指令執(zhí)行/地址計算階段的控制信號,這個階段的控制信號位是四位,所以要將寄存器的數(shù)據(jù)域設(shè)置為四位。4.存儲pc地址,它是由pc寄存器傳來的三十二位數(shù)據(jù),所以存儲它的寄存器數(shù)據(jù)域為三十二位。5.存儲由流水線寄存器堆傳送的第一個數(shù)據(jù),該數(shù)據(jù)也為三十二位,所以寄存器數(shù)據(jù)域也為三十二位。6.存儲由流水線寄存器堆傳送的第二個數(shù)據(jù),該數(shù)據(jù)也為三十二位,所以寄存器數(shù)據(jù)域也為三十二位。7.存儲由if指令譯碼階段由符號擴(kuò)展單元傳出的數(shù)據(jù),這個數(shù)據(jù)是三十二位數(shù)據(jù),則將寄存器數(shù)據(jù)域設(shè)置為三十二位的數(shù)據(jù)域。8.存儲在指令譯碼階段指令中1115位的數(shù)據(jù),將寄存器的數(shù)據(jù)域設(shè)置為五位。9.存儲在指令譯碼階段指令中1620位的數(shù)據(jù),并且將寄存器的數(shù)據(jù)域設(shè)置為五位就可以了。10.存儲if/id寄存器中指令rs字段的內(nèi)容,字段為五位,則寄存器數(shù)據(jù)域也設(shè)置為五位。11.存儲if/id寄存器中指令rt字段的內(nèi)容,字段為五位,則寄存器數(shù)據(jù)域也設(shè)置為五位。下面將給出在logisim上設(shè)計的指令流水線id/ex寄存器的設(shè)計圖: 圖4.7 在設(shè)計流水線id/ex寄存器時需要注意的是,在遇到流水線相關(guān)時,流水線id/ex寄存器將不會存儲任何來自if譯碼階段的rt字段的值,因為在設(shè)計的測試中,如果不這樣做的話,會導(dǎo)致整個指令流水線的鎖死。4.2.7 指令流水線ex/mem寄存器 指令流水線ex/mem寄存器它的作用是存儲由pc地址加法器,邏輯處理單元,id/ex寄存器等部件傳入的數(shù)據(jù)。它一共由六個寄存器組成,它分別是第一寄存器存儲寫回階段的控制信號,這個信號是由id/ex寄存器傳來的。第二寄存器存入存儲器訪問階段的控制信號,這個控制信號也是由id/ex寄存器傳入。第三寄存器存儲的是pc地址加法器傳入的數(shù)據(jù)。第四寄存器存儲的是由邏輯處理單元傳來的數(shù)據(jù)。第五寄存器存儲的是由id/ex寄存器傳來的數(shù)據(jù)。第六個寄存器存儲的是由多路復(fù)用選擇器傳來的數(shù)據(jù)。下面將給出在logisim上設(shè)計的指令流水線ex/mem寄存器的設(shè)計圖: 圖4.84.2.8 指令流水線mem/wb寄存器 指令流水線mem/wb寄存器它的作用是存儲由ex/mem寄存器,數(shù)據(jù)存儲器,邏輯處理單元等部件傳來的數(shù)據(jù)。mem/wb寄存器一共有四個寄存器組成。第一個寄存器存儲的是寫回階段的控制信號。第二個寄存器存儲的是由數(shù)據(jù)存儲器傳出的數(shù)據(jù)。第三個寄存器存儲的是邏輯處理單元得出的結(jié)果。第四個寄存器存儲的是ex/mem寄存器傳出的數(shù)據(jù)。下面將給出在logisim上設(shè)計的指令流水線mem/wb寄存器的設(shè)計圖: 圖4.94.2.9 指令流水線alu控制器 指令流水線alu控制器它的主要功能就是根據(jù)aluop和功能字段來給出邏輯處理單元的輸入控制值。指令流水線alu控制器是由一個rom存儲器,功能字段接收器,aluop字段接收器組成。alu控制器這里需要考慮的是如何將功能字段和aluop組合起來。采用的方法就是反向使用數(shù)據(jù)分離器,如果反向使用數(shù)據(jù)分離器就可以得到將幾個不同的數(shù)據(jù)組合起來從而得到新的數(shù)據(jù)。會根據(jù)表4.3里的內(nèi)容,將數(shù)據(jù)存入rom存儲器中。首先將功能字段作為rom存儲器地址的05位,aluop字段作為rom存儲器的67位地址。rom存儲器將會通過傳輸來的地址輸出相應(yīng)的二進(jìn)制值。比如說,r型指令中它的功能字段為:100000,它的aluop為:01。則它傳輸給rom存儲器的地址為:01100000。下面將給出在logisim上設(shè)計的指令流水線alu控制器的設(shè)計圖: 圖4.104.2.10 指令流水線alu單元 指令流水線的邏輯處理單元注意的功能是處理寄存器堆送來的數(shù)據(jù)并將它傳輸入下一個流水線器件單元。在設(shè)計這個部件時,所要注意的問題就是流水線alu單元如何根據(jù)alu控制器傳輸來的值來選擇到底是進(jìn)行哪一種邏輯處理。這個問題是是通過將兩個數(shù)據(jù)接收端分別與兩個多路復(fù)用選擇器相連,然后將alu控制器的輸出數(shù)據(jù)傳到多路復(fù)用選擇器的數(shù)據(jù)選擇端口上,就可以實現(xiàn)alu單元根據(jù)alu控制器的傳輸值來選擇具體的邏輯處理過程了。整個指令流水線alu單元是由兩個三十二位的數(shù)據(jù)接收端,兩個數(shù)據(jù)域為三十二位的多路復(fù)用選擇器,一個三十二位的數(shù)據(jù)輸出單元,兩個或門,一個與門,一個加法器,一個減法器組成。下面將給出在logisim上設(shè)計的指令流水線alu單元的設(shè)計圖: 圖4.11其中兩個多路選擇器傳輸過來的數(shù)據(jù)會分別傳入到與門,或門,加法器,減法器中。因為多路復(fù)用選擇器會通過選擇端口出入的選擇碼來確定到底是哪個輸出端口的數(shù)據(jù)傳出,所以就可以很好的解決alu單元具體的處理步驟是哪一種了。再將四個邏輯單元傳出的數(shù)據(jù)和一個四入口的或門相連,最后或門將數(shù)據(jù)傳輸至指令流水線alu單元的數(shù)據(jù)傳出單元中,以便執(zhí)行指令的下一步階段操作。4.2.11 指令流水線數(shù)據(jù)存儲器指令流水線的數(shù)據(jù)存儲器的主要功能就是在指令流水線的執(zhí)行過程中,流水線寄存器堆可以從中提取數(shù)據(jù),也可以將流水線寄存器里的數(shù)據(jù)存入指令流水線存儲器中。設(shè)計ram存儲器要最需要注意的一個問題就是它的時序問題,也就是說,什么時候指令流水線數(shù)據(jù)存儲器應(yīng)該是存入數(shù)據(jù),什么什么它應(yīng)該讀出數(shù)據(jù)將數(shù)據(jù)傳輸?shù)较鄳?yīng)的寄存器中。那么這個指令流水線數(shù)據(jù)存儲器肯定需要兩個信號端口,一個是數(shù)據(jù)存儲器讀信號端口,另一個是數(shù)據(jù)存儲器寫信號端口。綜上所述指令流水線數(shù)據(jù)存儲器一共有六個單元組成,它依次是:數(shù)據(jù)存儲器地址接收端,數(shù)據(jù)存儲器數(shù)據(jù)接收端,數(shù)據(jù)存儲器讀信號接收端,存儲器寫信號接收端,數(shù)據(jù)輸出單元,以及最后的ram存儲器單元。下面將給出在logisim上設(shè)計的指令流水線數(shù)據(jù)存儲器的設(shè)計圖: 圖4.12其中memwrite就是指令流水線數(shù)據(jù)存儲器的寫信號端,而memread就是指令流水線數(shù)據(jù)存儲器的讀信號端。流水線數(shù)據(jù)存儲器的地址接收端為五位,數(shù)據(jù)接收端和數(shù)據(jù)傳出端都的數(shù)據(jù)域都為三十二位。ram存儲器的數(shù)據(jù)域也為三十二位,它一共可以存儲32個三十二位的數(shù)據(jù)。4.2.12 指令流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器指令流水線的數(shù)據(jù)冒險轉(zhuǎn)發(fā)器這是整個指令流水線設(shè)計中最為難設(shè)計的部件,因為它的主要功能就是確保整個流水線在執(zhí)行過程中,如果遇到數(shù)據(jù)冒險時可以正確的處理流水線的整體運行情況,以確保指令的正確執(zhí)行。所謂數(shù)據(jù)冒險即是假如有一條指令,它正在執(zhí)行,但是它所需要的一些執(zhí)行數(shù)據(jù)卻依賴于它自己之前一條指令執(zhí)行的結(jié)果,這就是數(shù)據(jù)冒險。比如說這個例子,有一條add指令,但是,它的后面一條指令也是一條add指令,而這條add指令缺要用到上一條指令的計算結(jié)果:add $0,$1,$2add $3,$0,$4如果沒有數(shù)據(jù)冒險轉(zhuǎn)發(fā)器的話,而編譯的指令又不增加三條空操作的話(因為第一條add指令它要到第五步才會執(zhí)行出它的結(jié)果),指令流水線指令的執(zhí)行結(jié)果肯定會出錯。但是如果加上了指令流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器的話,它只會停頓一共時鐘周期就可以正常的執(zhí)行了。指令流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器的作用就是當(dāng)流水線處于數(shù)據(jù)冒險的情況時,流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器會在alu生成結(jié)果的同時馬上將其結(jié)果傳輸?shù)较鄬?yīng)的邏輯處理單元中。而且流水線數(shù)據(jù)冒險轉(zhuǎn)發(fā)器還可以將數(shù)據(jù)存儲器里面的值也傳輸?shù)较鄬?yīng)的邏輯處理單元中。接下來將闡述怎么樣設(shè)計數(shù)據(jù)冒險轉(zhuǎn)發(fā)器這個邏輯部件才可以做到上述所說的一切。這里將給出具體的冒險判別式: (1)ex冒險 if(ex/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冒險 if(mem/wb.regwrite and (mem/wb.registerrd0)and (ex/mem.registerrdid/ex.registerrs)and (mem/wb.registerrd=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 下面來解釋下上式中具體每一個值在指令流水線中代表的含義。 1.ex/mem.regwrite它代表的是保存在指令流水線ex

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論