多級流水CPU設(shè)計單片機課程設(shè)計_第1頁
多級流水CPU設(shè)計單片機課程設(shè)計_第2頁
多級流水CPU設(shè)計單片機課程設(shè)計_第3頁
多級流水CPU設(shè)計單片機課程設(shè)計_第4頁
多級流水CPU設(shè)計單片機課程設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 (指導教師用表) 學 生 姓 名指 導 教 師 論文(設(shè)計)題目多級流水 cpu 設(shè)計 主要研究 (設(shè)計)內(nèi)容 靈活運用所學到的基礎(chǔ)知識和主要專業(yè)知識,設(shè)計、制作、調(diào)試最 終完成多級流水 cpu 的設(shè)計 研究方法 根據(jù)所學基礎(chǔ)知識和主要專業(yè)知識,設(shè)計多級流水 cpu,使用 vhdl 語言。開發(fā)平臺是fpga-cpu 設(shè)計平臺,主要開發(fā)工具: quartus7.0,debugcontroller 主要任務 及目標 1. 設(shè)計出 cpu 實現(xiàn)多級流水 2. 完成從系統(tǒng)級設(shè)計到代碼實現(xiàn)以及硬件上調(diào)試 3. 完成學年論文 主要參 考文獻 1 (美)亨尼西, (美)帕特森計算機體系結(jié)構(gòu):量化研究方法(

2、第 3 版)機械工業(yè)出版社,2003 2 湯志忠,楊春武.開放式實驗 cpu 設(shè)計.北京:清華大學出版社,2007 論文(設(shè)計)各階段名稱日期 系統(tǒng)概念設(shè)計及總體設(shè)計第 10 周 代碼實現(xiàn)階段第 1114 周 系統(tǒng)調(diào)試、試運行階段第 15 周 進度安排 論文的整理定稿第 15 周 指導教師簽字: 系主任簽字: 主管教學院長簽字: 裝 訂 線 河北大學 2007 屆本科生學年論文設(shè)計 學生姓名專業(yè) 年級 論文(設(shè)計)題目多級流水 cpu 設(shè)計 論文(設(shè)計)內(nèi)容提要 論文完成的主要工作包括: (l) 綜合運用了所學知識,完成多級流水 cpu 系統(tǒng)級設(shè)計。 (2) 通過 vhdl 語言實現(xiàn)邏輯設(shè)計。

3、 (3) 設(shè)計成果在 fpga 硬件平臺的運行 指導教師評語 成績: 指導教師(簽名): 年 月 日 摘要 河北大學 2007 屆本科生學年論文設(shè)計 本學期計算機體系課程設(shè)計題目是多級流水 cpu 設(shè)計。以計算機硬件為主, 兼顧計算機軟件和計算機應用技術(shù)。在教師指導下,靈活運用所學到的基礎(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),運

4、算器、控制器和流水線結(jié)構(gòu)等。用 vhdl 硬件語言進行邏輯設(shè)計,采用 先進的工具軟件進行模擬和測試,測試通過之后下載到 fpga 芯片中,并在測 試平臺上通過規(guī)定測試程序的測試。 關(guān)鍵字:流水線;fpga;五級流水 河北大學 2007 屆本科生學年論文設(shè)計 目目錄錄 1.1.前言前言-1 1.11.1實驗目的實驗目的-1 1.21.2實驗環(huán)境實驗環(huán)境-1 2.2.流水線工作原理流水線工作原理-3 3.3.系統(tǒng)設(shè)計系統(tǒng)設(shè)計-5 3.13.1概念設(shè)計概念設(shè)計-5 3.23.2指令系統(tǒng)指令系統(tǒng)-5 3.33.3時序設(shè)計時序設(shè)計-6 4.4.結(jié)構(gòu)設(shè)計結(jié)構(gòu)設(shè)計-9 4.14.1總體邏輯結(jié)構(gòu)設(shè)計總體邏輯結(jié)

5、構(gòu)設(shè)計-9 4.24.2分模塊結(jié)構(gòu)設(shè)計分模塊結(jié)構(gòu)設(shè)計-11 5.5.代碼實現(xiàn)及測試代碼實現(xiàn)及測試 -13 5.15.1代碼實現(xiàn)代碼實現(xiàn)-13 5.25.2程序測試程序測試-19 5.35.3測試結(jié)果測試結(jié)果-21 6.6.實驗總結(jié)實驗總結(jié) -25 河北大學 2007 屆本科生學年論文設(shè)計 1 1.1. 前言 1.1 實驗目的 1. 本實驗需要自己設(shè)計并最終用 fpga 實現(xiàn)一個 cpu 芯片。利用已有的計 算機組成原理知識,以及對計算機系統(tǒng)結(jié)構(gòu)的初步學習,設(shè)計一個包括指令系 統(tǒng)、尋址方式、寄存器組、存儲系統(tǒng)、流水線結(jié)構(gòu)等的 cpu。設(shè)計的 cpu 必須 具有復位功能,以便使用 tec-ca 實

6、驗臺上的“cpu 復位”按鈕對 cpu 復位,使 cpu 處于調(diào)試前的初始狀態(tài)。cpu 復位脈沖按負脈沖設(shè)計。 2. 熟練掌握 vhdl 硬件描述語言,對 cpu 的各個功能模塊進行代碼編寫, 并學會將各個功能部分組織連接成一個完整 cpu 體系結(jié)構(gòu)。 3. 學會利用先進的硬件設(shè)計工具軟件 quartus ii 對程序進行仿真和調(diào)試。 并熟練掌握 fpga-cpu 在“tec-ca 開放式 cpu 實驗教學系統(tǒng)”上的調(diào)試方法。 4. 在完成實驗的過程中鍛煉和提高實際動手能力、創(chuàng)新思維、團隊合作精 神等方面的能力。 1.2 實驗環(huán)境 1. 總體描述 fpga-cpu 設(shè)計平臺能夠支持下載到 fp

7、ga 中的 cpu 的單步調(diào)試和連續(xù)運行。 用戶用 vhdl 編寫的 cpu 代碼通過編譯之后,可以下載到設(shè)計平臺上的 fpga 芯 片中。fpga-cpu 的運行通過執(zhí)行預先寫到外部存儲器中的程序來實現(xiàn)。使用 debugcontroller 程序?qū)ν獠看鎯ζ鬟M行讀寫操作,并能監(jiān)控 fpga-cpu 的狀態(tài) 和通過設(shè)置斷點調(diào)試 fpga-cpu 正在執(zhí)行的程序。這套實驗環(huán)境為實驗者提供了 最大的自由度來寫出具有自己風格的 cpu 軟核,并在測試運行平臺上調(diào)試和運 行。 2. 硬件環(huán)境 整個硬件平臺主要有 pc 監(jiān)控系統(tǒng)、外部程序存儲器、fpga-cpu 及其下載 相關(guān)電路,以及控制電路組成。其

8、中 pc 監(jiān)控系統(tǒng)主要是由監(jiān)控軟件 河北大學 2007 屆本科生學年論文設(shè)計 2 debugcontroller 及相關(guān)通信接口等構(gòu)成,提供一整套的運行和調(diào)試功能。 3. 軟件環(huán)境 quartus-7.0 我們使用該軟件完成編碼工作,并在 active-hdl 功能模擬通過后,進行有 效的時序模擬。最終燒片等都用該軟件。 調(diào)試程序 debugcontroller 使用該軟件對外部存儲器進行讀寫操作,并能監(jiān)控 fpga-cpu 的狀態(tài)和通過 設(shè)置斷點調(diào)試 fpga-cpu 正在執(zhí)行的程序。 河北大學 2007 屆本科生學年論文設(shè)計 3 2.2. 流水線工作原理 流水線處理技術(shù)是在重疊、先行控制的

9、基礎(chǔ)上發(fā)展起來的,包括指令控制 功能和功能處理過程都可采用流水處理。 在先行控制方式中將一條指令的執(zhí)行分為“分析”和“執(zhí)行”兩個子過程。 這兩個子過程分別使用指令分析器和運算器兩個獨立的部件來完成。所以可以 利用多條指令執(zhí)行時,在時間上相互錯開,輪流重疊地利用這兩個獨立部件, 來加快程序的執(zhí)行速度。若實現(xiàn)“分析”與“執(zhí)行”中的每一個子過程都需要 t1=t/2 時間,則 4 條指令流水執(zhí)行只需 5t1,比起 4 條指令順序執(zhí)行所需 的 8t1 時間少了近一半。 如果將指令的“分析”子過程再進一步劃分成“指令譯碼”和“取操作數(shù)” 兩個子過程,分別由“譯碼”和“取數(shù)”兩個獨立的子部件執(zhí)行,并使所有子

10、 部件的經(jīng)過時間都改進成 t2=t/4,指令執(zhí)行順序如圖 2-1 所示。 取取指指令令譯譯碼碼取取數(shù)數(shù)執(zhí)執(zhí)行行 入入出出 圖表 2-1 指令執(zhí)行順序圖 圖 2-2 是指令流水執(zhí)行的時空圖。圖中橫坐標為時間,縱坐標為空間(即 各個子過程) ,標有數(shù)字的方格說明占用該空間與時間的任務號,在本例中表示 機器處理的第 1、第 2、第 3、第 4、第 5 條指令,最多可以有 4 條指令在不同 的部件中同時進行處理。這樣計算機每隔 t2 就能輸出一條指令的執(zhí)行結(jié)果。 圖表 2-2指令流水執(zhí)行時空圖 河北大學 2007 屆本科生學年論文設(shè)計 4 按此思路,流水線的定義可以具體描述為:將一個復雜的處理過程分成

11、 m 個復雜程度相當、處理時間大致相等的子過程,每個子過程由一個獨立的功能 部件來完成,處理對象在各子過程連成的線路上連續(xù)流動。在同一時間,m 個 獨立部件同時進行不同的操作,完成對不同子過程的處理,這種工作方式稱為 流水線。 在計算機流水線的實際應用過程中,為平滑緩沖各子部件之間的速度差異,在 子部件之間往往都要設(shè)置高速接口緩沖器或一定容量的高數(shù)緩沖器來保存中間 結(jié)果。也就是通常所說的 n 級流水處理中的級間寄存器。 河北大學 2007 屆本科生學年論文設(shè)計 5 3.3. 系統(tǒng)設(shè)計 3.1 概念設(shè)計 指令流水的基本思路是把每條指令劃分為幾個執(zhí)行步驟,這些步驟在執(zhí)行 過程中使用不同的資源從而在

12、時間上能重疊起來,提高了整體工作負載的吞吐 率。 我們將每條指令劃分為“取指” 、 “譯碼” 、 “執(zhí)行” 、 “訪存” 、 “寫回”這五 個執(zhí)行步驟。如圖 3-1 所示。 取指令 if 指令譯碼 id 指令執(zhí)行 exe 存儲器讀寫 mem 寄存器寫回 wb 圖表 3-1 多級流水 cpu 設(shè)計圖 3.2 指令系統(tǒng) 指令系統(tǒng)設(shè)計的好壞影響整個系統(tǒng)各個方面的性能。我們采用了實驗指導 書中的指令系統(tǒng)。如表 3-2 所示: 匯編語句操作碼功能描述指令類型 add dr,sr00000000dr+srdr sub dr,sr00000001dr-srdr dec dr00000010dr-1dr in

13、c dr00000011dr+1dr cmp dr,sr00000110 dr-sr 比較 and dr,sr00000111dr and srdr 邏輯與 or dr,sr00001000dr or srdr 邏輯或 xor dr,sr00001010dr xor sr dr 異或 test dr,sr00001011 dr and sr, 測試 shl dr00001100 邏輯左移,最低位補 0,最高位移入 c shr dr 00001101 邏輯右移,最高位補 0,最低位移入 c sar dr00001110 算術(shù)右移,最高位右移,同時再用自身的值填入 算術(shù)邏輯 指令 河北大學 200

14、7 屆本科生學年論文設(shè)計 6 mov dr,sr00001111sr dr load dr,sr01000001sr dr store dr,sr01000010 sr dr movi dr,imm01000011imm dr (雙字指令) pshf01000100 flag 入棧 popf01000101 flag 出棧 push sr01000110 sr 入棧 pop dr01000111 出棧 dr 數(shù)據(jù)傳送 指令 jr adr00010000 無條件跳轉(zhuǎn)到 adr , adr=原 pc 值+offset jrc adr00010001 當 c=1 時,跳轉(zhuǎn)到 adr, adr=原 p

15、c 值+offset jrnc adr00010010 當 c=0 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offset jrz adr00010011 當 z=1 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offset jrnz adr00010100 當 z=0 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offset jmpa adr01010000 無條件跳轉(zhuǎn)到 adr ret01010001 子程序返回 call adr10000000 調(diào)用首地址在 adr 的子程序(雙字指令) 控制轉(zhuǎn)移 指令 nop11000000 空操作其他 halt00010000 11111111 停

16、機 (jr 0xffff) 圖表 3-2cpu 的指令系 3.3 時序設(shè)計 本次課程設(shè)計采用的五級流水時序如圖 3-3 所示,數(shù)據(jù)通路如圖 3-4 所示。 clock number instruction number 1 2 3 4 5 6 7 8 9 instruction i if id ex mem wb instruction i+1 if id ex mem wb instruction i+2 if id exmem wb instruction i+3if idex mem wb instruction i+4 ifid ex mem wb clock number instr

17、uction number 1 2 3 4 5 6 7 8 9 instruction i if id ex mem wb instruction i if id ex mem wb instruction i+1 if id ex mem wb instruction i+1 if id ex mem wb instruction i+2 if id exmem wb instruction i+2 if id exmem wb instruction i+3if idex mem wbinstruction i+3if idex mem wb instruction i+4 ifid ex

18、 mem wb instruction i+4 ifid ex mem wb 圖表 3-3 五級流水時序圖 河北大學 2007 屆本科生學年論文設(shè)計 7 cc1cc2cc3cc4cc5cc6 immemreg alu reg immemreg alu reg immemreg alu imreg alu imreg cc1cc2cc3cc4cc5cc6cc1cc2cc3cc4cc5cc6 immemreg alu regimmemregreg alu regreg immemreg alu regimmemregreg alu regreg immemreg alu immemregreg a

19、lu imreg alu imregreg alu imregimregreg 圖表 3-4 五級流水數(shù)據(jù)通路 為保證指令的正確執(zhí)行。處理結(jié)構(gòu)相關(guān)需要做兩項工作:沖突檢測和取指 延后。 1. 沖突檢測 只有執(zhí)行訪存指令(load/store)時,才會出現(xiàn)沖突。因此,我們在譯碼時 產(chǎn)生一個標志是否訪存的信號 wmem。含義如圖 3-5: wmem意義 00寫內(nèi)存(store) 01讀內(nèi)存(load) 1 不占用內(nèi)存 圖表 3-5 wmem 控制信號 通過檢查“訪存階段”的 m_wrmem 就可確定是否沖突。 2. 取指延后 在每次取指時,若有沖突,則往 ir 中寫入空指令(nop),并保持 pc

20、 不變, 使取指延后一個節(jié)拍。 在解決了結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)后,五級流水時序圖最終設(shè)計如 圖 3-6: 河北大學 2007 屆本科生學年論文設(shè)計 8 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 pc更新 圖表 3-6 五級流水時序圖 河北大學 2007 屆本科生學年論文設(shè)計 9 4.4. 結(jié)構(gòu)設(shè)計 4.1 總體邏輯結(jié)構(gòu)設(shè)計 總體邏輯設(shè)計的 rtl 圖參考課本中的設(shè)計,如圖 4-1 所示。 圖表 4-1 各個功能部件的功能及其使用的控制信號: 1. alu:組合邏輯部件,對兩個 16 位的輸入及進位輸入 cin 可進行由

21、3 位 控制信號控制。 2. 數(shù)據(jù)選擇器 bus_mux:組合邏輯器件,其輸入包括:源寄存器數(shù)據(jù),目 標寄存器數(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ù)選擇器(進行自增運算) 。 河北大學 2007 屆本科生學年論文設(shè)計 10 4. 地址寄存器 ar 和指令寄存器 ir:都是 16 位的寄存器,地址寄

22、存器用 于存放要讀寫的內(nèi)存地址單元的地址,輸出送往地址總線,輸入可能為 pc 內(nèi)容, 也可能為 alu 的輸出(對讀寫內(nèi)存指令) ;指令寄存器存放當前執(zhí)行指令的內(nèi)容, 它的輸入來自從內(nèi)存讀取的指令和數(shù)據(jù),輸出送往控制邏輯。二者共用兩位控 制信號 rec。 寄存器組和寄存器的選擇:本實驗中的寄存器都為 16 位,帶有清零端和使 能端,實際上在寫 vhdl 程序時,通用寄存器以及 ar、ir、pc 使用的都是同一 個模板。按照我們的設(shè)計,通用寄存器共有 16 個,由指令的低 8 位的全部或其 中的高 4 位或低 4 位來從寄存器組中選擇源寄存器和目的寄存器。安排寄存器 選擇器件 reg_mux,為

23、組合邏輯器件,用于輸出選定寄存器的內(nèi)容。 5. 節(jié)拍發(fā)生器:時序邏輯器件,作用是用多位觸發(fā)器的輸出信號的不同組 合狀態(tài),來標識每條指令的執(zhí)行步驟。其功能相當于一個狀態(tài)機。前文已述, 我們設(shè)計的節(jié)拍發(fā)生器共有 3 位觸發(fā)器。在編碼方面,遵循了這樣的原則:從 一個狀態(tài)變到下一個狀態(tài)時,狀態(tài)發(fā)生變化的觸發(fā)器數(shù)目應盡量少。 6. 控制邏輯:組合邏輯器件,前面已提到,它根據(jù)指令內(nèi)容(由 ir 提供) 和指令的執(zhí)行步驟(由節(jié)拍發(fā)生器提供)及其他一些條件信號(標志寄存器輸 出) ,形成并提供出計算機各部件當前時刻要用到的控制信號。根據(jù)前面所總結(jié) 的全部控制信號的意義、作用和數(shù)值,可以比較容易地寫出控制邏輯部

24、件。 7. reg_out:對外輸出寄存器內(nèi)容的譯碼電路,組合邏輯器件,根據(jù)外部 輸入的寄存器選擇信號輸出制定的寄存器內(nèi)容(包括為了便于觀察引出的內(nèi)部 信號寄存器) 。 8. 時序設(shè)計:結(jié)構(gòu)相關(guān)的處理和數(shù)據(jù)相關(guān)的處理。 整個 cpu 由以下幾個模塊組成: 1. 取指模塊(if):給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一 級準備數(shù)據(jù)。 由于 pc 控制模塊處于取指模塊中,因此控制相關(guān)的檢測也置于取指模塊。 2. 譯碼模塊(id):讀取寄存器值和指令譯碼。我們采取一次譯碼,逐級 傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù)等) ,在每次時 鐘上升沿到來時送入下一級。實際上,結(jié)構(gòu)相

25、關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測 河北大學 2007 屆本科生學年論文設(shè)計 11 都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體 結(jié)構(gòu)的清晰性,我們將“相關(guān)檢測”獨立出來。 3. 執(zhí)行模塊(ex):完成算術(shù)邏輯運算、計算有效地址和提供數(shù)據(jù)通道。 4. 訪存模塊(ma):選擇地址線的數(shù)據(jù)來源和數(shù)據(jù)線的流向。訪存和取指 在功能上是獨立的,但 cpu 對外只有一條地址線和數(shù)據(jù)線的事實決定了訪存和 取指是相互聯(lián)系的。當執(zhí)行 load/store 指令時,地址線由 alu 送入“訪存段” 的值提供;取指時,則由 pc 提供。當寫內(nèi)存時,cpu 內(nèi)部數(shù)據(jù)送數(shù)據(jù)線;當需 要讀內(nèi)存時,cpu

26、 往數(shù)據(jù)線送高阻。 5. 回寫模塊(wb):選擇回寫數(shù)據(jù)源和根據(jù)寫使能信號 wregen 將數(shù)據(jù)回 寫到寄存器堆; 6. hazarddetectunit 模塊:檢測結(jié)構(gòu)相關(guān); 7. forwardingunit 模塊:檢測數(shù)據(jù)相關(guān)。 其中由我完成取指模塊、譯碼模塊、執(zhí)行模塊。 4.2 分模塊結(jié)構(gòu)設(shè)計 1. 取指模塊 主要完成兩個任務,一是根據(jù)程序計數(shù)器 pc 里的指令地址從指令存儲器 里讀取指。另一個任務主要完成 pc+1 計算和下一條指令地址的猜測。對下一 條指令的猜測主要是假設(shè)分支條件不成立,猜測下一條指令地址是本指令地址 的下一地址,除了對下一條指令的猜測,還完成對上一次的猜測的確認。

27、本指 令地址的確認主要是完成如果上一條指令是分支指令時,如果分支條件不成立, 本指令地址猜測是正確,指令有效,繼續(xù)執(zhí)行,否則本指令無效,重新再取指。 2. 譯碼模塊 譯碼階段,是整個系統(tǒng)中的關(guān)鍵控制階段,不但進行指令譯碼,從寄存器 堆中讀取操作數(shù),而且判斷分支指令的跳轉(zhuǎn)條件,計算跳轉(zhuǎn)地址和處理數(shù)據(jù)相 關(guān)性問題。這一階段主要器件有譯碼單元,寄存器堆,加法器,比較器和地址 選擇器等。譯碼單元,可以說是核心控制單元,根據(jù)指令代碼譯碼成各種控制 信號控制各個單元的控制,而且進行數(shù)據(jù)相關(guān)處理。 河北大學 2007 屆本科生學年論文設(shè)計 12 執(zhí)行階段主要完成指令的邏輯運算工作,alu 根據(jù)操作控制碼對所

28、提供的 操作數(shù)進行相應的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入, 是微處理器系統(tǒng)中比較復雜的功能,在這主要完成微處理器內(nèi)部數(shù)據(jù)存儲器的 讀寫。 3. 執(zhí)行模塊 執(zhí)行階段主要完成指令的邏輯運算工作,alu 根據(jù)操作控制碼對所提供的 操作數(shù)進行相應的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入, 是微處理器系統(tǒng)中比較復雜的功能,在這主要完成微處理器內(nèi)部數(shù)據(jù)存儲器的 讀寫。結(jié)構(gòu)圖如圖 4-2 所示。 mux alubin 0 alusrc extto17bitsextto17bits 或門異或與門 sarshlshrcx aluopr c,z,v,s setflag flag

29、aluout cx clk imm1 0 xffff tflag mux e_raout forwarda mux e_rbout m_aluoutw_rbdata forwardb aluain 傍傍路路模模塊塊 五五級級流流水水cpu運運算算器器結(jié)結(jié)構(gòu)構(gòu)圖圖 operation mux 圖表 4-2 五級執(zhí)行模塊結(jié)構(gòu)圖 河北大學 2007 屆本科生學年論文設(shè)計 13 5.5. 代碼實現(xiàn)及測試 5.1 代碼實現(xiàn) 使用 vhdl 語言語言編寫內(nèi)部模塊,完成程序編譯后下載到硬件平臺上, 通過元件的例化配置,將內(nèi)存模塊和已有的 cpu 模塊連接起來,構(gòu)成一個完整 的計算機系統(tǒng)。 1. 取指模塊 取

30、指模塊給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準備數(shù)據(jù)。 該模塊 rtl 圖如圖 5-1 所示: a15.0 b15.0 out15.0 adder dq pre ena clr a7.0 b7.0 out equal a7.0 b7.0 out equal a7.0 b7.0 out equal a7.0 b7.0 out equal a7.0 b7.0 out equal dq pre ena clr dq pre ena clr sel2.0 data7.0 out mux sel2.0 data7.0 out mux dq pre ena clr sel dataa datab

31、 out0 mux21 sel dataa datab out0 mux21 add0 16 h0001 - equal0 8 h13 - equal1 8 h14 - equal2 8 h10 - equal3 8 h11 - ir13.0 ir15.14 mux1 pc15.0 pcincsel0 pcnext15.0 s_selc0 s_selc1 s_selz0 s_selz1 ir15.0 16 h0003 - reset clk z c tempc pcstall ifflush e_setflag2.0 pcplusoffset15.0 outerdb15.0 pc_addr15

32、.0 d_pcinc115.0 d_ir15.0 equal4 8 h12 - d_pcinc115.0reg0 tempz mux0 圖表 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 when( op=jrz and zz=1) -判

33、斷是否跳轉(zhuǎn) or ( op=jrnz and zz=0) 河北大學 2007 屆本科生學年論文設(shè)計 14 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 other

34、s; process(reset,clk,pcstall) begin if reset = 0 then pc = x0000; elsif falling_edge(clk) and (pcstall=0) then pc = pcnext; end if; end process; 取指部分采用一個 process 來完成,關(guān)鍵代碼如下: process(reset,clk,outerdb,ifflush) begin if reset=0 then ir ir ir = nopins; end case; d_pcinc1 ctrl:=d_ir(7 downto 0) when sub

35、b = ctrl:=d_ir(7 downto 0) when dec = ctrl:=d_ir(7 downto 0) when inc = ctrl:=d_ir(7 downto 0) when andins = ctrl:=d_ir(7 downto 0) when cmp = ctrl:=d_ir(7 downto 0) when test = ctrl:=d_ir(7 downto 0) when orins= ctrl:=d_ir(7 downto 0) when xorins = ctrl:=d_ir(7 downto 0) when shlins = ctrl:=d_ir(7

36、downto 0) when shrins = ctrl:=d_ir(7 downto 0) when sar = ctrl:=d_ir(7 downto 0) when mov = ctrl:=d_ir(7 downto 0) when loadh= ctrl:=11111111 imm ctrl:=11111111 河北大學 2007 屆本科生學年論文設(shè)計 16 imm ctrl:=d_ir(7 downto 0) when store = ctrl:=d_ir(7 downto 0) when jr|jrz|jrnz|jrc|jrnc = ctrl:=donothing; -若是 jr*

37、指令,計算 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(9 downto 7); aluopr = ctrl(6 downto 3); setflag = ctrl(2 downto 0); end process; 流水控制信號的處理部分代碼如下: process

38、(reset,clk) begin if reset = 0 then e_wrmem = 10; - do nothing e_wregen = 0; elsif rising_edge(clk) then e_sa = sa; e_sb = sb; e_raout = ra; e_rbout = rb; e_imm = imm; e_alusrc = alusrc; e_aluopr = aluopr; e_setflag = setflag; e_wrmem = wrmem; e_wregen = wregen; e_destreg = sa; e_memtoreg = memtoreg

39、; end if; end process; 3. 執(zhí)行模塊 河北大學 2007 屆本科生學年論文設(shè)計 17 選擇運算器 a,b 口數(shù)據(jù)來源的部分的關(guān)鍵代碼如下: with forwarda select aluain = e_raout when 00, e_aluout when 10, w_wbdata when 01, e_raout when others; with forwardb select alubin opr := 0ops := zero17; when selab=opr := 0ops := 0 when sela1=opr := 0ops := 0 when se

40、l0b=opr := zero17;ops := 0 when selaf=opr := 0ops := 1 when selad=opr := 0ops := 0 when others = opr := zero17;ops := zero17; end case; 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

41、); when alusub = aluresult := opr - ops; tempv := ( ops(15)and(not opr(15)and (not aluresult(15) or (not ops(15)and opr(15)and aluresult(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) :=

42、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(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) 河北大學 2007 屆本科生學

43、年論文設(shè)計 18 when aluloadl = aluresult := 0 when others = null; end case; dout tempc := aluresult(16); when 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 te

44、mpz := 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)= tempflag; end case; end process; 修改狀態(tài)寄存器部分的關(guān)鍵代碼如下: writeflag:process(reset,clk) begin if reset = 0 then tempflag = 0000; elsif rising_edge(clk) then tempflag = c end if; m_flag = tempflag; end pro

45、cess; 傳遞給 mem 部分的控制信號處理關(guān)鍵代碼如下: process(reset,clk) begin if reset=0 then m_wrmem = 10; m_wregen = 0; 河北大學 2007 屆本科生學年論文設(shè)計 19 elsif rising_edge(clk) then m_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

46、 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=0 時跳轉(zhuǎn) add r2,r0 ;否則加到部分積 1: shl r0 shr r1 dec r3 ;r3 減 1 jrnz loop halt ;result:r2=0x96 2.test2 內(nèi)存讀寫測試 河北大學 2007 屆本科生學年論文設(shè)計 20 ;memory copy ;內(nèi)存讀寫測試 main: movi r0,0xff ;源地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論