版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 (指導(dǎo)教師用表)學(xué) 生 姓 名指 導(dǎo) 教 師論文(設(shè)計)題目多級流水 cpu 設(shè)計主要研究(設(shè)計)內(nèi)容靈活運用所學(xué)到的基礎(chǔ)知識和主要專業(yè)知識,設(shè)計、制作、調(diào)試最終完成多級流水 cpu 的設(shè)計研究方法根據(jù)所學(xué)基礎(chǔ)知識和主要專業(yè)知識,設(shè)計多級流水 cpu,使用vhdl 語言。開發(fā)平臺是fpga-cpu 設(shè)計平臺,主要開發(fā)工具:quartus7.0,debugcontroller主要任務(wù)及目標(biāo)1. 設(shè)計出 cpu 實現(xiàn)多級流水 2. 完成從系統(tǒng)級設(shè)計到代碼實現(xiàn)以及硬件上調(diào)試3. 完成學(xué)年論文主要參考文獻1 (美)亨尼西, (美)帕特森計算機體系結(jié)構(gòu):量化研究方法(第 3版)機械工業(yè)出版社,2003
2、2 湯志忠,楊春武.開放式實驗 cpu 設(shè)計.北京:清華大學(xué)出版社,2007論文(設(shè)計)各階段名稱日期系統(tǒng)概念設(shè)計及總體設(shè)計第 10 周代碼實現(xiàn)階段第 1114 周系統(tǒng)調(diào)試、試運行階段第 15 周進度安排論文的整理定稿第 15 周 指導(dǎo)教師簽字:系主任簽字:主管教學(xué)院長簽字:裝訂線 學(xué)生姓名專業(yè) 年級論文(設(shè)計)題目多級流水 cpu 設(shè)計論文(設(shè)計)內(nèi)容提要論文完成的主要工作包括:(l) 綜合運用了所學(xué)知識,完成多級流水 cpu 系統(tǒng)級設(shè)計。(2) 通過 vhdl 語言實現(xiàn)邏輯設(shè)計。(3) 設(shè)計成果在 fpga 硬件平臺的運行指導(dǎo)教師評語成績: 指導(dǎo)教師(簽名): 年 月 日摘要本學(xué)期計算機體
3、系課程設(shè)計題目是多級流水 cpu 設(shè)計。以計算機硬件為主,兼顧計算機軟件和計算機應(yīng)用技術(shù)。在教師指導(dǎo)下,靈活運用所學(xué)到的基礎(chǔ)知識和主要專業(yè)知識,自己設(shè)計、制作、調(diào)試,完成 16 位五級流水 cpu 的實際。本組設(shè)計并最終在 fpga 實驗平臺上實現(xiàn)一個 cpu 芯片,具有五級流水。采用流水處理技術(shù)解決了流水線技術(shù)中的結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)和控制相關(guān)。設(shè)計了指令系統(tǒng)、指令格式、尋址方式、寄存器結(jié)構(gòu)、數(shù)據(jù)表示方式、存儲器系統(tǒng),運算器、控制器和流水線結(jié)構(gòu)等。用 vhdl 硬件語言進行邏輯設(shè)計,采用先進的工具軟件進行模擬和測試,測試通過之后下載到 fpga 芯片中,并在測試平臺上通過規(guī)定測試程序的測試。關(guān)
4、鍵字:流水線;fpga;五級流水目目錄錄1.1.前言前言-11.11.1實驗?zāi)康膶嶒災(zāi)康?11.21.2實驗環(huán)境實驗環(huán)境-12.2.流水線工作原理流水線工作原理-33.3.系統(tǒng)設(shè)計系統(tǒng)設(shè)計-53.13.1概念設(shè)計概念設(shè)計-53.23.2指令系統(tǒng)指令系統(tǒng)-53.33.3時序設(shè)計時序設(shè)計-64.4.結(jié)構(gòu)設(shè)計結(jié)構(gòu)設(shè)計-94.14.1總體邏輯結(jié)構(gòu)設(shè)計總體邏輯結(jié)構(gòu)設(shè)計-94.24.2分模塊結(jié)構(gòu)設(shè)計分模塊結(jié)構(gòu)設(shè)計-115.5.代碼實現(xiàn)及測試代碼實現(xiàn)及測試 -135.15.1代碼實現(xiàn)代碼實現(xiàn)-135.25.2程序測試程序測試-195.35.3測試結(jié)果測試結(jié)果-216.6.實驗總結(jié)實驗總結(jié) -251.1. 前
5、言1.1 實驗?zāi)康?. 本實驗需要自己設(shè)計并最終用 fpga 實現(xiàn)一個 cpu 芯片。利用已有的計算機組成原理知識,以及對計算機系統(tǒng)結(jié)構(gòu)的初步學(xué)習(xí),設(shè)計一個包括指令系統(tǒng)、尋址方式、寄存器組、存儲系統(tǒng)、流水線結(jié)構(gòu)等的 cpu。設(shè)計的 cpu 必須具有復(fù)位功能,以便使用 tec-ca 實驗臺上的“cpu 復(fù)位”按鈕對 cpu 復(fù)位,使cpu 處于調(diào)試前的初始狀態(tài)。cpu 復(fù)位脈沖按負脈沖設(shè)計。2. 熟練掌握 vhdl 硬件描述語言,對 cpu 的各個功能模塊進行代碼編寫,并學(xué)會將各個功能部分組織連接成一個完整 cpu 體系結(jié)構(gòu)。3. 學(xué)會利用先進的硬件設(shè)計工具軟件 quartus ii 對程序進行
6、仿真和調(diào)試。并熟練掌握 fpga-cpu 在“tec-ca 開放式 cpu 實驗教學(xué)系統(tǒng)”上的調(diào)試方法。4. 在完成實驗的過程中鍛煉和提高實際動手能力、創(chuàng)新思維、團隊合作精神等方面的能力。1.2 實驗環(huán)境1. 總體描述fpga-cpu 設(shè)計平臺能夠支持下載到 fpga 中的 cpu 的單步調(diào)試和連續(xù)運行。用戶用 vhdl 編寫的 cpu 代碼通過編譯之后,可以下載到設(shè)計平臺上的 fpga 芯片中。fpga-cpu 的運行通過執(zhí)行預(yù)先寫到外部存儲器中的程序來實現(xiàn)。使用debugcontroller 程序?qū)ν獠看鎯ζ鬟M行讀寫操作,并能監(jiān)控 fpga-cpu 的狀態(tài)和通過設(shè)置斷點調(diào)試 fpga-cp
7、u 正在執(zhí)行的程序。這套實驗環(huán)境為實驗者提供了最大的自由度來寫出具有自己風(fēng)格的 cpu 軟核,并在測試運行平臺上調(diào)試和運行。2. 硬件環(huán)境整個硬件平臺主要有 pc 監(jiān)控系統(tǒng)、外部程序存儲器、fpga-cpu 及其下載相關(guān)電路,以及控制電路組成。其中 pc 監(jiān)控系統(tǒng)主要是由監(jiān)控軟件debugcontroller 及相關(guān)通信接口等構(gòu)成,提供一整套的運行和調(diào)試功能。3. 軟件環(huán)境quartus-7.0我們使用該軟件完成編碼工作,并在 active-hdl 功能模擬通過后,進行有效的時序模擬。最終燒片等都用該軟件。調(diào)試程序 debugcontroller使用該軟件對外部存儲器進行讀寫操作,并能監(jiān)控 f
8、pga-cpu 的狀態(tài)和通過設(shè)置斷點調(diào)試 fpga-cpu 正在執(zhí)行的程序。2.2. 流水線工作原理流水線處理技術(shù)是在重疊、先行控制的基礎(chǔ)上發(fā)展起來的,包括指令控制功能和功能處理過程都可采用流水處理。在先行控制方式中將一條指令的執(zhí)行分為“分析”和“執(zhí)行”兩個子過程。這兩個子過程分別使用指令分析器和運算器兩個獨立的部件來完成。所以可以利用多條指令執(zhí)行時,在時間上相互錯開,輪流重疊地利用這兩個獨立部件,來加快程序的執(zhí)行速度。若實現(xiàn)“分析”與“執(zhí)行”中的每一個子過程都需要t1=t/2 時間,則 4 條指令流水執(zhí)行只需 5t1,比起 4 條指令順序執(zhí)行所需的 8t1 時間少了近一半。如果將指令的“分析
9、”子過程再進一步劃分成“指令譯碼”和“取操作數(shù)”兩個子過程,分別由“譯碼”和“取數(shù)”兩個獨立的子部件執(zhí)行,并使所有子部件的經(jīng)過時間都改進成 t2=t/4,指令執(zhí)行順序如圖 2-1 所示。取取指指令令譯譯碼碼取取數(shù)數(shù)執(zhí)執(zhí)行行入入出出圖表 2-1 指令執(zhí)行順序圖圖 2-2 是指令流水執(zhí)行的時空圖。圖中橫坐標(biāo)為時間,縱坐標(biāo)為空間(即各個子過程) ,標(biāo)有數(shù)字的方格說明占用該空間與時間的任務(wù)號,在本例中表示機器處理的第 1、第 2、第 3、第 4、第 5 條指令,最多可以有 4 條指令在不同的部件中同時進行處理。這樣計算機每隔 t2 就能輸出一條指令的執(zhí)行結(jié)果。圖表 2-2指令流水執(zhí)行時空圖按此思路,流
10、水線的定義可以具體描述為:將一個復(fù)雜的處理過程分成 m個復(fù)雜程度相當(dāng)、處理時間大致相等的子過程,每個子過程由一個獨立的功能部件來完成,處理對象在各子過程連成的線路上連續(xù)流動。在同一時間,m 個獨立部件同時進行不同的操作,完成對不同子過程的處理,這種工作方式稱為流水線。在計算機流水線的實際應(yīng)用過程中,為平滑緩沖各子部件之間的速度差異,在子部件之間往往都要設(shè)置高速接口緩沖器或一定容量的高數(shù)緩沖器來保存中間結(jié)果。也就是通常所說的 n 級流水處理中的級間寄存器。3.3. 系統(tǒng)設(shè)計3.1 概念設(shè)計指令流水的基本思路是把每條指令劃分為幾個執(zhí)行步驟,這些步驟在執(zhí)行過程中使用不同的資源從而在時間上能重疊起來,
11、提高了整體工作負載的吞吐率。我們將每條指令劃分為“取指” 、 “譯碼” 、 “執(zhí)行” 、 “訪存” 、 “寫回”這五個執(zhí)行步驟。如圖 3-1 所示。取指令if指令譯碼id指令執(zhí)行exe存儲器讀寫 mem寄存器寫回wb圖表 3-1 多級流水 cpu 設(shè)計圖3.2 指令系統(tǒng)指令系統(tǒng)設(shè)計的好壞影響整個系統(tǒng)各個方面的性能。我們采用了實驗指導(dǎo)書中的指令系統(tǒng)。如表 3-2 所示:匯編語句操作碼功能描述指令類型add dr,sr00000000dr+srdrsub dr,sr00000001dr-srdrdec dr00000010dr-1drinc dr00000011dr+1drcmp dr,sr000
12、00110dr-sr 比較and dr,sr00000111dr and srdr 邏輯與or dr,sr00001000dr or srdr 邏輯或xor dr,sr00001010dr xor sr dr 異或test dr,sr00001011dr and sr, 測試shl dr00001100邏輯左移,最低位補 0,最高位移入 cshr dr 00001101邏輯右移,最高位補 0,最低位移入 csar dr00001110算術(shù)右移,最高位右移,同時再用自身的值填入算術(shù)邏輯指令mov dr,sr00001111sr drload dr,sr01000001sr drstore dr,
13、sr01000010 sr drmovi dr,imm01000011imm dr (雙字指令)pshf01000100flag 入棧popf01000101flag 出棧push sr01000110sr 入棧pop dr01000111出棧 dr數(shù)據(jù)傳送指令jr adr00010000無條件跳轉(zhuǎn)到 adr , adr=原 pc 值+offsetjrc adr00010001當(dāng) c=1 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offsetjrnc adr00010010當(dāng) c=0 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offsetjrz adr00010011當(dāng) z=1 時,跳轉(zhuǎn)到
14、 adr, adr=原 pc 值+offsetjrnz adr00010100當(dāng) z=0 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offsetjmpa adr01010000無條件跳轉(zhuǎn)到 adrret01010001子程序返回call adr10000000調(diào)用首地址在 adr 的子程序(雙字指令)控制轉(zhuǎn)移指令nop11000000空操作其他halt0001000011111111停機 (jr 0xffff)圖表 3-2cpu 的指令系3.3 時序設(shè)計本次課程設(shè)計采用的五級流水時序如圖 3-3 所示,數(shù)據(jù)通路如圖 3-4 所示。clock numberinstruction number
15、1 2 3 4 5 6 7 8 9instruction iif id ex mem wbinstruction i+1if id ex mem wbinstruction i+2if id exmem wbinstruction i+3if idex mem wbinstruction i+4ifid ex mem wbclock numberinstruction number 1 2 3 4 5 6 7 8 9instruction iif id ex mem wbinstruction iif id ex mem wbinstruction i+1if id ex mem wbinst
16、ruction i+1if id ex mem wbinstruction i+2if id exmem wbinstruction i+2if id exmem wbinstruction i+3if idex mem wbinstruction i+3if idex mem wbinstruction i+4ifid ex mem wbinstruction i+4ifid ex mem wb圖表 3-3 五級流水時序圖cc1cc2cc3cc4cc5cc6immemregaluregimmemregaluregimmemregaluimregaluimregcc1cc2cc3cc4cc5c
17、c6cc1cc2cc3cc4cc5cc6immemregaluregimmemregregaluregregimmemregaluregimmemregregaluregregimmemregaluimmemregregaluimregaluimregregaluimregimregreg圖表 3-4 五級流水?dāng)?shù)據(jù)通路為保證指令的正確執(zhí)行。處理結(jié)構(gòu)相關(guān)需要做兩項工作:沖突檢測和取指延后。1. 沖突檢測只有執(zhí)行訪存指令(load/store)時,才會出現(xiàn)沖突。因此,我們在譯碼時產(chǎn)生一個標(biāo)志是否訪存的信號 wmem。含義如圖 3-5:wmem意義00寫內(nèi)存(store)01讀內(nèi)存(load)1不占
18、用內(nèi)存圖表 3-5 wmem 控制信號通過檢查“訪存階段”的 m_wrmem 就可確定是否沖突。2. 取指延后在每次取指時,若有沖突,則往 ir 中寫入空指令(nop),并保持 pc 不變,使取指延后一個節(jié)拍。在解決了結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)后,五級流水時序圖最終設(shè)計如圖 3-6:取指譯碼執(zhí)行訪存寫回取指譯碼執(zhí)行訪存寫回取指譯碼執(zhí)行訪存寫回取指譯碼執(zhí)行訪存寫回取指譯碼執(zhí)行訪存寫回pc更新圖表 3-6 五級流水時序圖4.4. 結(jié)構(gòu)設(shè)計4.1 總體邏輯結(jié)構(gòu)設(shè)計總體邏輯設(shè)計的 rtl 圖參考課本中的設(shè)計,如圖 4-1 所示。圖表 4-1各個功能部件的功能及其使用的控制信號: 1. alu:組合邏
19、輯部件,對兩個 16 位的輸入及進位輸入 cin 可進行由 3 位控制信號控制。2. 數(shù)據(jù)選擇器 bus_mux:組合邏輯器件,其輸入包括:源寄存器數(shù)據(jù),目標(biāo)寄存器數(shù)據(jù),帶符號位擴展的偏移地址,pc,以及從內(nèi)存讀取的立即數(shù)、跳轉(zhuǎn)地址等數(shù)據(jù)。在 3 位控制信號的控制下它進行 alu 模塊 a、b 端輸入的選擇。3. 程序計數(shù)器 pc:時序邏輯器件,16 位寄存器,在控制信號 pc_en 的控制下可接收 alu 的運算結(jié)果(高電平接收,否則保持不變) 。輸出送往地址寄存器(讀取指令內(nèi)容)以及數(shù)據(jù)選擇器(進行自增運算) 。4. 地址寄存器 ar 和指令寄存器 ir:都是 16 位的寄存器,地址寄存器
20、用于存放要讀寫的內(nèi)存地址單元的地址,輸出送往地址總線,輸入可能為 pc 內(nèi)容,也可能為 alu 的輸出(對讀寫內(nèi)存指令) ;指令寄存器存放當(dāng)前執(zhí)行指令的內(nèi)容,它的輸入來自從內(nèi)存讀取的指令和數(shù)據(jù),輸出送往控制邏輯。二者共用兩位控制信號 rec。寄存器組和寄存器的選擇:本實驗中的寄存器都為 16 位,帶有清零端和使能端,實際上在寫 vhdl 程序時,通用寄存器以及 ar、ir、pc 使用的都是同一個模板。按照我們的設(shè)計,通用寄存器共有 16 個,由指令的低 8 位的全部或其中的高 4 位或低 4 位來從寄存器組中選擇源寄存器和目的寄存器。安排寄存器選擇器件 reg_mux,為組合邏輯器件,用于輸出
21、選定寄存器的內(nèi)容。5. 節(jié)拍發(fā)生器:時序邏輯器件,作用是用多位觸發(fā)器的輸出信號的不同組合狀態(tài),來標(biāo)識每條指令的執(zhí)行步驟。其功能相當(dāng)于一個狀態(tài)機。前文已述,我們設(shè)計的節(jié)拍發(fā)生器共有 3 位觸發(fā)器。在編碼方面,遵循了這樣的原則:從一個狀態(tài)變到下一個狀態(tài)時,狀態(tài)發(fā)生變化的觸發(fā)器數(shù)目應(yīng)盡量少。6. 控制邏輯:組合邏輯器件,前面已提到,它根據(jù)指令內(nèi)容(由 ir 提供)和指令的執(zhí)行步驟(由節(jié)拍發(fā)生器提供)及其他一些條件信號(標(biāo)志寄存器輸出) ,形成并提供出計算機各部件當(dāng)前時刻要用到的控制信號。根據(jù)前面所總結(jié)的全部控制信號的意義、作用和數(shù)值,可以比較容易地寫出控制邏輯部件。7. reg_out:對外輸出寄存
22、器內(nèi)容的譯碼電路,組合邏輯器件,根據(jù)外部輸入的寄存器選擇信號輸出制定的寄存器內(nèi)容(包括為了便于觀察引出的內(nèi)部信號寄存器) 。8. 時序設(shè)計:結(jié)構(gòu)相關(guān)的處理和數(shù)據(jù)相關(guān)的處理。整個 cpu 由以下幾個模塊組成:1. 取指模塊(if):給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準(zhǔn)備數(shù)據(jù)。由于 pc 控制模塊處于取指模塊中,因此控制相關(guān)的檢測也置于取指模塊。2. 譯碼模塊(id):讀取寄存器值和指令譯碼。我們采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù)等) ,在每次時鐘上升沿到來時送入下一級。實際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢
23、測”涉及到的信號分屬不同階段以及整體結(jié)構(gòu)的清晰性,我們將“相關(guān)檢測”獨立出來。3. 執(zhí)行模塊(ex):完成算術(shù)邏輯運算、計算有效地址和提供數(shù)據(jù)通道。4. 訪存模塊(ma):選擇地址線的數(shù)據(jù)來源和數(shù)據(jù)線的流向。訪存和取指在功能上是獨立的,但 cpu 對外只有一條地址線和數(shù)據(jù)線的事實決定了訪存和取指是相互聯(lián)系的。當(dāng)執(zhí)行 load/store 指令時,地址線由 alu 送入“訪存段”的值提供;取指時,則由 pc 提供。當(dāng)寫內(nèi)存時,cpu 內(nèi)部數(shù)據(jù)送數(shù)據(jù)線;當(dāng)需要讀內(nèi)存時,cpu 往數(shù)據(jù)線送高阻。5. 回寫模塊(wb):選擇回寫數(shù)據(jù)源和根據(jù)寫使能信號 wregen 將數(shù)據(jù)回寫到寄存器堆;6. haza
24、rddetectunit 模塊:檢測結(jié)構(gòu)相關(guān);7. forwardingunit 模塊:檢測數(shù)據(jù)相關(guān)。其中由我完成取指模塊、譯碼模塊、執(zhí)行模塊。4.2 分模塊結(jié)構(gòu)設(shè)計1. 取指模塊主要完成兩個任務(wù),一是根據(jù)程序計數(shù)器 pc 里的指令地址從指令存儲器里讀取指。另一個任務(wù)主要完成 pc+1 計算和下一條指令地址的猜測。對下一條指令的猜測主要是假設(shè)分支條件不成立,猜測下一條指令地址是本指令地址的下一地址,除了對下一條指令的猜測,還完成對上一次的猜測的確認。本指令地址的確認主要是完成如果上一條指令是分支指令時,如果分支條件不成立,本指令地址猜測是正確,指令有效,繼續(xù)執(zhí)行,否則本指令無效,重新再取指。2
25、. 譯碼模塊譯碼階段,是整個系統(tǒng)中的關(guān)鍵控制階段,不但進行指令譯碼,從寄存器堆中讀取操作數(shù),而且判斷分支指令的跳轉(zhuǎn)條件,計算跳轉(zhuǎn)地址和處理數(shù)據(jù)相關(guān)性問題。這一階段主要器件有譯碼單元,寄存器堆,加法器,比較器和地址選擇器等。譯碼單元,可以說是核心控制單元,根據(jù)指令代碼譯碼成各種控制信號控制各個單元的控制,而且進行數(shù)據(jù)相關(guān)處理。執(zhí)行階段主要完成指令的邏輯運算工作,alu 根據(jù)操作控制碼對所提供的操作數(shù)進行相應(yīng)的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入,是微處理器系統(tǒng)中比較復(fù)雜的功能,在這主要完成微處理器內(nèi)部數(shù)據(jù)存儲器的讀寫。3. 執(zhí)行模塊執(zhí)行階段主要完成指令的邏輯運算工作,alu 根據(jù)
26、操作控制碼對所提供的操作數(shù)進行相應(yīng)的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入,是微處理器系統(tǒng)中比較復(fù)雜的功能,在這主要完成微處理器內(nèi)部數(shù)據(jù)存儲器的讀寫。結(jié)構(gòu)圖如圖 4-2 所示。muxalubin 0alusrcextto17bitsextto17bits或門異或與門sarshlshrcxaluoprc,z,v,ssetflagflagaluoutcxclkimm1 0 xfffftflagmuxe_raoutforwardamuxe_rboutm_aluoutw_rbdataforwardbaluain傍傍路路模模塊塊五五級級流流水水cpu運運算算器器結(jié)結(jié)構(gòu)構(gòu)圖圖operatio
27、n mux圖表 4-2 五級執(zhí)行模塊結(jié)構(gòu)圖5.5. 代碼實現(xiàn)及測試5.1 代碼實現(xiàn)使用 vhdl 語言語言編寫內(nèi)部模塊,完成程序編譯后下載到硬件平臺上,通過元件的例化配置,將內(nèi)存模塊和已有的 cpu 模塊連接起來,構(gòu)成一個完整的計算機系統(tǒng)。1. 取指模塊取指模塊給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準(zhǔn)備數(shù)據(jù)。該模塊 rtl 圖如圖 5-1 所示:a15.0b15.0out15.0adderdqpreenaclra7.0b7.0outequala7.0b7.0outequala7.0b7.0outequala7.0b7.0outequala7.0b7.0outequaldqpreena
28、clrdqpreenaclrsel2.0data7.0outmuxsel2.0data7.0outmuxdqpreenaclrseldataadatabout0mux21seldataadatabout0mux21add016 h0001 -equal08 h13 -equal18 h14 -equal28 h10 -equal38 h11 -ir13.0ir15.14mux1pc15.0pcincsel0pcnext15.0s_selc0s_selc1s_selz0s_selz1ir15.016 h0003 -resetclkzctempcpcstallifflushe_setflag2.0
29、pcplusoffset15.0outerdb15.0pc_addr15.0d_pcinc115.0d_ir15.0equal48 h12 -d_pcinc115.0reg0tempzmux0圖表 5-1 取指模塊 rtl 圖pc 作為程序計數(shù)器,程序計數(shù)器控制關(guān)鍵代碼如下:op = ir(15 downto 8);-操作碼with e_setflag select zz = zwhen flag_hold, tempz when others;with e_setflag select cc = cwhen flag_hold, tempc when others;s_selz = 1 wh
30、en( op=jrz and zz=1) -判斷是否跳轉(zhuǎn) or ( op=jrnz and zz=0) or op=jr else 0; s_selc = 1 when( op=jrc and cc=1) -判斷是否跳轉(zhuǎn) or ( op=jrnc and cc=0) else 0; pcincsel = 1 when s_selz=1 or s_selc=1 else 0; s_pcinc1 = pc + x0001; with pcincsel select pcnext = s_pcinc1 when 0, pcplusoffset when 1, s_pcinc1 when others
31、; process(reset,clk,pcstall)beginif reset = 0 thenpc = x0000; elsif falling_edge(clk) and (pcstall=0) then pc = pcnext;end if;end process;取指部分采用一個 process 來完成,關(guān)鍵代碼如下:process(reset,clk,outerdb,ifflush)beginif reset=0 thenir ir ir = nopins;end case;d_pcinc1 ctrl:=d_ir(7 downto 0)&10&1&1&am
32、p;001&0000&001;when subb = ctrl:=d_ir(7 downto 0)&10&1&1&001&0001&001;when dec = ctrl:=d_ir(7 downto 0)&10&1&1&100&0000&001;when inc = ctrl:=d_ir(7 downto 0)&10&1&1&010&0000&001;when andins = ctrl:=d_ir(7 downto 0)&1
33、0&1&1&001&0010&001;when cmp = ctrl:=d_ir(7 downto 0)&10&0&1&001&0001&001;when test = ctrl:=d_ir(7 downto 0)&10&0&1&001&0010&001;when orins= ctrl:=d_ir(7 downto 0)&10&1&1&001&0011&001;when xorins = ctrl:=d_ir(
34、7 downto 0)&10&1&1&001&0100&001;when shlins = ctrl:=d_ir(7 downto 0)&10&1&1&000&0101&001;when shrins = ctrl:=d_ir(7 downto 0)&10&1&1&000&0110&001;when sar = ctrl:=d_ir(7 downto 0)&10&1&1&000&0111&001;when
35、 mov = ctrl:=d_ir(7 downto 0)&10&1&1&011&0000&000;when loadh= ctrl:=11111111&10&1&1&101&1000&000; imm ctrl:=11111111&10&1&1&101&1001&000; imm ctrl:=d_ir(7 downto 0)&01&1&0&011&0000&000;when store = ctrl:=
36、d_ir(7 downto 0)&00&0&1&000&0000&000;when jr|jrz|jrnz|jrc|jrnc = ctrl:=donothing; -若是 jr*指令,計算offset,并向 exe 插入 bubble offset ctrl:=donothing; end case;sa = ctrl(21 downto 18);sb = ctrl(17 downto 14);wrmem = ctrl(13 downto 12);wregen = ctrl(11);memtoreg= ctrl(10);alusrc = ctrl
37、(9 downto 7);aluopr = ctrl(6 downto 3);setflag = ctrl(2 downto 0);end process;流水控制信號的處理部分代碼如下:process(reset,clk)beginif reset = 0 then e_wrmem = 10; - do nothinge_wregen = 0; elsif rising_edge(clk) thene_sa = sa;e_sb = sb;e_raout = ra;e_rbout = rb;e_imm = imm;e_alusrc = alusrc;e_aluopr = aluopr;e_se
38、tflag = setflag;e_wrmem = wrmem;e_wregen = wregen;e_destreg = sa;e_memtoreg = memtoreg;end if;end process;3. 執(zhí)行模塊選擇運算器 a,b 口數(shù)據(jù)來源的部分的關(guān)鍵代碼如下:with forwarda selectaluain = e_raout when 00, e_aluout when 10, w_wbdata when 01, e_raout when others;with forwardb selectalubin opr := 0&aluain;ops := zero1
39、7;when selab=opr := 0&aluain;ops := 0&alubin;when sela1=opr := 0&aluain;ops := 0&(x0001); when sel0b=opr := zero17;ops := 0&alubin;when selaf=opr := 0&aluain;ops := 1&(xffff);when selad=opr := 0&aluain;ops := 0&e_imm;when others = opr := zero17;ops := zero17;end c
40、ase;case e_aluopr is -選擇 alu 的運算when aluadd = aluresult := opr + ops; tempv := (not opr(15)and(not ops(15)and aluresult(15) or (opr(15)and ops(15)and (not aluresult(15); when alusub = aluresult := opr - ops; tempv := ( ops(15)and(not opr(15)and (not aluresult(15) or (not ops(15)and opr(15)and alures
41、ult(15); when aluand = aluresult := opr and ops;when aluor = aluresult := opr or ops;when aluxor = aluresult := opr xor ops;when alushl = aluresult(15 downto 1) := opr(14 downto 0); aluresult(0) := 0;cx := opr(15);when alushr = aluresult(14 downto 0) := opr(15 downto 1); aluresult(15) := 0;cx := opr
42、(0); when alusar = aluresult(14 downto 0) := opr(15 downto 1); aluresult(15) := opr(15); cx := opr(0);when aluloadh = aluresult := ops(8 downto 0)&opr(7 downto 0); when aluloadl = aluresult := 0&opr(15 downto 8)&ops(7 downto 0);when others = null;end case; dout tempc := aluresult(16);whe
43、n alushl|alushr|alusar = tempc := cx;when aluand|aluor|aluxor = tempc := 0; tempv:= 0; -邏輯運算,狀態(tài)位 c,z 置零when others = null;end case;i_tempc = tempc;if aluresult = zero17 thentempz := 1;else tempz := 0;end if; i_tempz (c,z,v,s) c=tempc;z = tempz;v = tempv; s (c,z,v,s) c=0; z=0; v=0; s (c,z,v,s)= tempf
44、lag; end case;end process;修改狀態(tài)寄存器部分的關(guān)鍵代碼如下:writeflag:process(reset,clk)beginif reset = 0 thentempflag = 0000;elsif rising_edge(clk) thentempflag = c&z&v&s; end if;m_flag = tempflag;end process; 傳遞給 mem 部分的控制信號處理關(guān)鍵代碼如下:process(reset,clk)begin if reset=0 then m_wrmem = 10;m_wregen = 0;elsi
45、f rising_edge(clk) thenm_sa = e_sa;m_aluout = dout;m_rbdata = alubin;m_wregen = e_wregen; m_memtoreg = e_memtoreg;m_destreg = e_destreg;m_wrmem = e_wrmem; end if;end process;5.2 程序測試1test1 8 位8 位乘法運算; 8bit x 8bit multiplier; 測試指令:置立即數(shù),and, 條件跳轉(zhuǎn), 左移, 右移;main: movi r0,25 ;被乘數(shù) movi r1,6 ;乘數(shù) movi r2,0 ;結(jié)果 movi r3,8 ;循環(huán)次數(shù)loop: movi r4,1 and r4,r1 jrz 1f ;r4
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國度假酒店行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 2025-2030年中國車載視頻監(jiān)控行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 2025-2030年中國空調(diào)行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實施研究報告
- 2025-2030年中國按摩家電行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實施研究報告
- 自動噴淋壓力試驗方案
- 夜場家具知識培訓(xùn)課件
- 鍍鋅蛋托網(wǎng)行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 中國在線視頻網(wǎng)站行業(yè)市場發(fā)展現(xiàn)狀及投資策略咨詢報告
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
- 防溺水安全知識培訓(xùn)課件
- 《神經(jīng)發(fā)展障礙 兒童社交溝通障礙康復(fù)規(guī)范》
- 2025年中建六局二級子企業(yè)總經(jīng)理崗位公開招聘高頻重點提升(共500題)附帶答案詳解
- 2025年遼寧省大連市普通高中學(xué)業(yè)水平合格性考試模擬政治試題(一)
- 2024版戶外廣告牌安裝與維護服務(wù)合同2篇
- 云南省昆明市五華區(qū)2023-2024學(xué)年九年級上學(xué)期期末數(shù)學(xué)試卷
- 安徽省合肥市第四十中學(xué)2024~2025學(xué)年九年級上學(xué)期化學(xué)期末模擬試題(含答案)
- 安徽省淮北市(2024年-2025年小學(xué)六年級語文)部編版期末考試((上下)學(xué)期)試卷及答案
- 大學(xué)生職業(yè)生涯規(guī)劃
- 干燥綜合征的護理查房
- 2023-2024學(xué)年浙江省杭州市上城區(qū)教科版四年級上冊期末考試科學(xué)試卷
- 江蘇省徐州市2023-2024學(xué)年六年級上學(xué)期期末科學(xué)試卷(含答案)2
評論
0/150
提交評論