版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 (指導(dǎo)教師用表) 學(xué) 生 姓 名指 導(dǎo) 教 師 論文(設(shè)計(jì))題目多級流水 cpu 設(shè)計(jì) 主要研究 (設(shè)計(jì))內(nèi)容 靈活運(yùn)用所學(xué)到的基礎(chǔ)知識和主要專業(yè)知識,設(shè)計(jì)、制作、調(diào)試最 終完成多級流水 cpu 的設(shè)計(jì) 研究方法 根據(jù)所學(xué)基礎(chǔ)知識和主要專業(yè)知識,設(shè)計(jì)多級流水 cpu,使用 vhdl 語言。開發(fā)平臺是fpga-cpu 設(shè)計(jì)平臺,主要開發(fā)工具: quartus7.0,debugcontroller 主要任務(wù) 及目標(biāo) 1. 設(shè)計(jì)出 cpu 實(shí)現(xiàn)多級流水 2. 完成從系統(tǒng)級設(shè)計(jì)到代碼實(shí)現(xiàn)以及硬件上調(diào)試 3. 完成學(xué)年論文 主要參 考文獻(xiàn) 1 (美)亨尼西, (美)帕特森計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法(
2、第 3 版)機(jī)械工業(yè)出版社,2003 2 湯志忠,楊春武.開放式實(shí)驗(yàn) cpu 設(shè)計(jì).北京:清華大學(xué)出版社,2007 論文(設(shè)計(jì))各階段名稱日期 系統(tǒng)概念設(shè)計(jì)及總體設(shè)計(jì)第 10 周 代碼實(shí)現(xiàn)階段第 1114 周 系統(tǒng)調(diào)試、試運(yùn)行階段第 15 周 進(jìn)度安排 論文的整理定稿第 15 周 指導(dǎo)教師簽字: 系主任簽字: 主管教學(xué)院長簽字: 裝 訂 線 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 學(xué)生姓名專業(yè) 年級 論文(設(shè)計(jì))題目多級流水 cpu 設(shè)計(jì) 論文(設(shè)計(jì))內(nèi)容提要 論文完成的主要工作包括: (l) 綜合運(yùn)用了所學(xué)知識,完成多級流水 cpu 系統(tǒng)級設(shè)計(jì)。 (2) 通過 vhdl 語言實(shí)現(xiàn)邏輯設(shè)計(jì)。
3、 (3) 設(shè)計(jì)成果在 fpga 硬件平臺的運(yùn)行 指導(dǎo)教師評語 成績: 指導(dǎo)教師(簽名): 年 月 日 摘要 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 本學(xué)期計(jì)算機(jī)體系課程設(shè)計(jì)題目是多級流水 cpu 設(shè)計(jì)。以計(jì)算機(jī)硬件為主, 兼顧計(jì)算機(jī)軟件和計(jì)算機(jī)應(yīng)用技術(shù)。在教師指導(dǎo)下,靈活運(yùn)用所學(xué)到的基礎(chǔ)知 識和主要專業(yè)知識,自己設(shè)計(jì)、制作、調(diào)試,完成 16 位五級流水 cpu 的實(shí)際。 本組設(shè)計(jì)并最終在 fpga 實(shí)驗(yàn)平臺上實(shí)現(xiàn)一個 cpu 芯片,具有五級流水。 采用流水處理技術(shù)解決了流水線技術(shù)中的結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)和控制相關(guān)。設(shè) 計(jì)了指令系統(tǒng)、指令格式、尋址方式、寄存器結(jié)構(gòu)、數(shù)據(jù)表示方式、存儲器系 統(tǒng),運(yùn)
4、算器、控制器和流水線結(jié)構(gòu)等。用 vhdl 硬件語言進(jìn)行邏輯設(shè)計(jì),采用 先進(jìn)的工具軟件進(jìn)行模擬和測試,測試通過之后下載到 fpga 芯片中,并在測 試平臺上通過規(guī)定測試程序的測試。 關(guān)鍵字:流水線;fpga;五級流水 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 目目錄錄 1.1.前言前言-1 1.11.1實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?1 1.21.2實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境-1 2.2.流水線工作原理流水線工作原理-3 3.3.系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)-5 3.13.1概念設(shè)計(jì)概念設(shè)計(jì)-5 3.23.2指令系統(tǒng)指令系統(tǒng)-5 3.33.3時序設(shè)計(jì)時序設(shè)計(jì)-6 4.4.結(jié)構(gòu)設(shè)計(jì)結(jié)構(gòu)設(shè)計(jì)-9 4.14.1總體邏輯結(jié)構(gòu)設(shè)計(jì)總體邏輯結(jié)
5、構(gòu)設(shè)計(jì)-9 4.24.2分模塊結(jié)構(gòu)設(shè)計(jì)分模塊結(jié)構(gòu)設(shè)計(jì)-11 5.5.代碼實(shí)現(xiàn)及測試代碼實(shí)現(xiàn)及測試 -13 5.15.1代碼實(shí)現(xiàn)代碼實(shí)現(xiàn)-13 5.25.2程序測試程序測試-19 5.35.3測試結(jié)果測試結(jié)果-21 6.6.實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)總結(jié) -25 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 1 1.1. 前言 1.1 實(shí)驗(yàn)?zāi)康?1. 本實(shí)驗(yàn)需要自己設(shè)計(jì)并最終用 fpga 實(shí)現(xiàn)一個 cpu 芯片。利用已有的計(jì) 算機(jī)組成原理知識,以及對計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的初步學(xué)習(xí),設(shè)計(jì)一個包括指令系 統(tǒng)、尋址方式、寄存器組、存儲系統(tǒng)、流水線結(jié)構(gòu)等的 cpu。設(shè)計(jì)的 cpu 必須 具有復(fù)位功能,以便使用 tec-ca 實(shí)
6、驗(yàn)臺上的“cpu 復(fù)位”按鈕對 cpu 復(fù)位,使 cpu 處于調(diào)試前的初始狀態(tài)。cpu 復(fù)位脈沖按負(fù)脈沖設(shè)計(jì)。 2. 熟練掌握 vhdl 硬件描述語言,對 cpu 的各個功能模塊進(jìn)行代碼編寫, 并學(xué)會將各個功能部分組織連接成一個完整 cpu 體系結(jié)構(gòu)。 3. 學(xué)會利用先進(jìn)的硬件設(shè)計(jì)工具軟件 quartus ii 對程序進(jìn)行仿真和調(diào)試。 并熟練掌握 fpga-cpu 在“tec-ca 開放式 cpu 實(shí)驗(yàn)教學(xué)系統(tǒng)”上的調(diào)試方法。 4. 在完成實(shí)驗(yàn)的過程中鍛煉和提高實(shí)際動手能力、創(chuàng)新思維、團(tuán)隊(duì)合作精 神等方面的能力。 1.2 實(shí)驗(yàn)環(huán)境 1. 總體描述 fpga-cpu 設(shè)計(jì)平臺能夠支持下載到 fp
7、ga 中的 cpu 的單步調(diào)試和連續(xù)運(yùn)行。 用戶用 vhdl 編寫的 cpu 代碼通過編譯之后,可以下載到設(shè)計(jì)平臺上的 fpga 芯 片中。fpga-cpu 的運(yùn)行通過執(zhí)行預(yù)先寫到外部存儲器中的程序來實(shí)現(xiàn)。使用 debugcontroller 程序?qū)ν獠看鎯ζ鬟M(jìn)行讀寫操作,并能監(jiān)控 fpga-cpu 的狀態(tài) 和通過設(shè)置斷點(diǎn)調(diào)試 fpga-cpu 正在執(zhí)行的程序。這套實(shí)驗(yàn)環(huán)境為實(shí)驗(yàn)者提供了 最大的自由度來寫出具有自己風(fēng)格的 cpu 軟核,并在測試運(yùn)行平臺上調(diào)試和運(yùn) 行。 2. 硬件環(huán)境 整個硬件平臺主要有 pc 監(jiān)控系統(tǒng)、外部程序存儲器、fpga-cpu 及其下載 相關(guān)電路,以及控制電路組成。其
8、中 pc 監(jiān)控系統(tǒng)主要是由監(jiān)控軟件 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 2 debugcontroller 及相關(guān)通信接口等構(gòu)成,提供一整套的運(yùn)行和調(diào)試功能。 3. 軟件環(huán)境 quartus-7.0 我們使用該軟件完成編碼工作,并在 active-hdl 功能模擬通過后,進(jìn)行有 效的時序模擬。最終燒片等都用該軟件。 調(diào)試程序 debugcontroller 使用該軟件對外部存儲器進(jìn)行讀寫操作,并能監(jiān)控 fpga-cpu 的狀態(tài)和通過 設(shè)置斷點(diǎn)調(diào)試 fpga-cpu 正在執(zhí)行的程序。 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 3 2.2. 流水線工作原理 流水線處理技術(shù)是在重疊、先行控制的
9、基礎(chǔ)上發(fā)展起來的,包括指令控制 功能和功能處理過程都可采用流水處理。 在先行控制方式中將一條指令的執(zhí)行分為“分析”和“執(zhí)行”兩個子過程。 這兩個子過程分別使用指令分析器和運(yùn)算器兩個獨(dú)立的部件來完成。所以可以 利用多條指令執(zhí)行時,在時間上相互錯開,輪流重疊地利用這兩個獨(dú)立部件, 來加快程序的執(zhí)行速度。若實(shí)現(xiàn)“分析”與“執(zhí)行”中的每一個子過程都需要 t1=t/2 時間,則 4 條指令流水執(zhí)行只需 5t1,比起 4 條指令順序執(zhí)行所需 的 8t1 時間少了近一半。 如果將指令的“分析”子過程再進(jìn)一步劃分成“指令譯碼”和“取操作數(shù)” 兩個子過程,分別由“譯碼”和“取數(shù)”兩個獨(dú)立的子部件執(zhí)行,并使所有子
10、 部件的經(jīng)過時間都改進(jìn)成 t2=t/4,指令執(zhí)行順序如圖 2-1 所示。 取取指指令令譯譯碼碼取取數(shù)數(shù)執(zhí)執(zhí)行行 入入出出 圖表 2-1 指令執(zhí)行順序圖 圖 2-2 是指令流水執(zhí)行的時空圖。圖中橫坐標(biāo)為時間,縱坐標(biāo)為空間(即 各個子過程) ,標(biāo)有數(shù)字的方格說明占用該空間與時間的任務(wù)號,在本例中表示 機(jī)器處理的第 1、第 2、第 3、第 4、第 5 條指令,最多可以有 4 條指令在不同 的部件中同時進(jìn)行處理。這樣計(jì)算機(jī)每隔 t2 就能輸出一條指令的執(zhí)行結(jié)果。 圖表 2-2指令流水執(zhí)行時空圖 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 4 按此思路,流水線的定義可以具體描述為:將一個復(fù)雜的處理過程分成
11、 m 個復(fù)雜程度相當(dāng)、處理時間大致相等的子過程,每個子過程由一個獨(dú)立的功能 部件來完成,處理對象在各子過程連成的線路上連續(xù)流動。在同一時間,m 個 獨(dú)立部件同時進(jìn)行不同的操作,完成對不同子過程的處理,這種工作方式稱為 流水線。 在計(jì)算機(jī)流水線的實(shí)際應(yīng)用過程中,為平滑緩沖各子部件之間的速度差異,在 子部件之間往往都要設(shè)置高速接口緩沖器或一定容量的高數(shù)緩沖器來保存中間 結(jié)果。也就是通常所說的 n 級流水處理中的級間寄存器。 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 5 3.3. 系統(tǒng)設(shè)計(jì) 3.1 概念設(shè)計(jì) 指令流水的基本思路是把每條指令劃分為幾個執(zhí)行步驟,這些步驟在執(zhí)行 過程中使用不同的資源從而在
12、時間上能重疊起來,提高了整體工作負(fù)載的吞吐 率。 我們將每條指令劃分為“取指” 、 “譯碼” 、 “執(zhí)行” 、 “訪存” 、 “寫回”這五 個執(zhí)行步驟。如圖 3-1 所示。 取指令 if 指令譯碼 id 指令執(zhí)行 exe 存儲器讀寫 mem 寄存器寫回 wb 圖表 3-1 多級流水 cpu 設(shè)計(jì)圖 3.2 指令系統(tǒng) 指令系統(tǒng)設(shè)計(jì)的好壞影響整個系統(tǒng)各個方面的性能。我們采用了實(shí)驗(yàn)指導(dǎo) 書中的指令系統(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 邏輯左移,最低位補(bǔ) 0,最高位移入 c shr dr 00001101 邏輯右移,最高位補(bǔ) 0,最低位移入 c sar dr00001110 算術(shù)右移,最高位右移,同時再用自身的值填入 算術(shù)邏輯 指令 河北大學(xué) 200
14、7 屆本科生學(xué)年論文設(shè)計(jì) 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 當(dāng) c=1 時,跳轉(zhuǎn)到 adr, adr=原 p
15、c 值+offset jrnc adr00010010 當(dāng) c=0 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offset jrz adr00010011 當(dāng) z=1 時,跳轉(zhuǎn)到 adr, adr=原 pc 值+offset jrnz adr00010100 當(dāng) 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、機(jī) (jr 0xffff) 圖表 3-2cpu 的指令系 3.3 時序設(shè)計(jì) 本次課程設(shè)計(jì)采用的五級流水時序如圖 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 五級流水時序圖 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 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 五級流水?dāng)?shù)據(jù)通路 為保證指令的正確執(zhí)行。處理結(jié)構(gòu)相關(guān)需要做兩項(xiàng)工作:沖突檢測和取指 延后。 1. 沖突檢測 只有執(zhí)行訪存指令(load/store)時,才會出現(xiàn)沖突。因此,我們在譯碼時 產(chǎn)生一個標(biāo)志是否訪存的信號 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è)計(jì)如 圖 3-6: 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 8 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 取指譯碼執(zhí)行訪存寫回 pc更新 圖表 3-6 五級流水時序圖 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 9 4.4. 結(jié)構(gòu)設(shè)計(jì) 4.1 總體邏輯結(jié)構(gòu)設(shè)計(jì) 總體邏輯設(shè)計(jì)的 rtl 圖參考課本中的設(shè)計(jì),如圖 4-1 所示。 圖表 4-1 各個功能部件的功能及其使用的控制信號: 1. alu:組合邏輯部件,對兩個 16 位的輸入及進(jìn)位輸入 cin 可進(jìn)行由
21、3 位 控制信號控制。 2. 數(shù)據(jù)選擇器 bus_mux:組合邏輯器件,其輸入包括:源寄存器數(shù)據(jù),目 標(biāo)寄存器數(shù)據(jù),帶符號位擴(kuò)展的偏移地址,pc,以及從內(nèi)存讀取的立即數(shù)、跳 轉(zhuǎn)地址等數(shù)據(jù)。在 3 位控制信號的控制下它進(jìn)行 alu 模塊 a、b 端輸入的選擇。 3. 程序計(jì)數(shù)器 pc:時序邏輯器件,16 位寄存器,在控制信號 pc_en 的控 制下可接收 alu 的運(yùn)算結(jié)果(高電平接收,否則保持不變) 。輸出送往地址寄存 器(讀取指令內(nèi)容)以及數(shù)據(jù)選擇器(進(jìn)行自增運(yùn)算) 。 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 10 4. 地址寄存器 ar 和指令寄存器 ir:都是 16 位的寄存器,地址寄
22、存器用 于存放要讀寫的內(nèi)存地址單元的地址,輸出送往地址總線,輸入可能為 pc 內(nèi)容, 也可能為 alu 的輸出(對讀寫內(nèi)存指令) ;指令寄存器存放當(dāng)前執(zhí)行指令的內(nèi)容, 它的輸入來自從內(nèi)存讀取的指令和數(shù)據(jù),輸出送往控制邏輯。二者共用兩位控 制信號 rec。 寄存器組和寄存器的選擇:本實(shí)驗(yàn)中的寄存器都為 16 位,帶有清零端和使 能端,實(shí)際上在寫 vhdl 程序時,通用寄存器以及 ar、ir、pc 使用的都是同一 個模板。按照我們的設(shè)計(jì),通用寄存器共有 16 個,由指令的低 8 位的全部或其 中的高 4 位或低 4 位來從寄存器組中選擇源寄存器和目的寄存器。安排寄存器 選擇器件 reg_mux,為
23、組合邏輯器件,用于輸出選定寄存器的內(nèi)容。 5. 節(jié)拍發(fā)生器:時序邏輯器件,作用是用多位觸發(fā)器的輸出信號的不同組 合狀態(tài),來標(biāo)識每條指令的執(zhí)行步驟。其功能相當(dāng)于一個狀態(tài)機(jī)。前文已述, 我們設(shè)計(jì)的節(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)志寄存器輸 出) ,形成并提供出計(jì)算機(jī)各部件當(dāng)前時刻要用到的控制信號。根據(jù)前面所總結(jié) 的全部控制信號的意義、作用和數(shù)值,可以比較容易地寫出控制邏輯部
24、件。 7. reg_out:對外輸出寄存器內(nèi)容的譯碼電路,組合邏輯器件,根據(jù)外部 輸入的寄存器選擇信號輸出制定的寄存器內(nèi)容(包括為了便于觀察引出的內(nèi)部 信號寄存器) 。 8. 時序設(shè)計(jì):結(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ù)等) ,在每次時 鐘上升沿到來時送入下一級。實(shí)際上,結(jié)構(gòu)相
25、關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 11 都可歸入譯碼部分??紤]到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體 結(jié)構(gòu)的清晰性,我們將“相關(guān)檢測”獨(dú)立出來。 3. 執(zhí)行模塊(ex):完成算術(shù)邏輯運(yùn)算、計(jì)算有效地址和提供數(shù)據(jù)通道。 4. 訪存模塊(ma):選擇地址線的數(shù)據(jù)來源和數(shù)據(jù)線的流向。訪存和取指 在功能上是獨(dú)立的,但 cpu 對外只有一條地址線和數(shù)據(jù)線的事實(shí)決定了訪存和 取指是相互聯(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
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è)計(jì) 1. 取指模塊 主要完成兩個任務(wù),一是根據(jù)程序計(jì)數(shù)器 pc 里的指令地址從指令存儲器 里讀取指。另一個任務(wù)主要完成 pc+1 計(jì)算和下一條指令地址的猜測。對下一 條指令的猜測主要是假設(shè)分支條件不成立,猜測下一條指令地址是本指令地址 的下一地址,除了對下一條指令的猜測,還完成對上一次的猜測的確認(rèn)。
27、本指 令地址的確認(rèn)主要是完成如果上一條指令是分支指令時,如果分支條件不成立, 本指令地址猜測是正確,指令有效,繼續(xù)執(zhí)行,否則本指令無效,重新再取指。 2. 譯碼模塊 譯碼階段,是整個系統(tǒng)中的關(guān)鍵控制階段,不但進(jìn)行指令譯碼,從寄存器 堆中讀取操作數(shù),而且判斷分支指令的跳轉(zhuǎn)條件,計(jì)算跳轉(zhuǎn)地址和處理數(shù)據(jù)相 關(guān)性問題。這一階段主要器件有譯碼單元,寄存器堆,加法器,比較器和地址 選擇器等。譯碼單元,可以說是核心控制單元,根據(jù)指令代碼譯碼成各種控制 信號控制各個單元的控制,而且進(jìn)行數(shù)據(jù)相關(guān)處理。 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 12 執(zhí)行階段主要完成指令的邏輯運(yùn)算工作,alu 根據(jù)操作控制碼對所
28、提供的 操作數(shù)進(jìn)行相應(yīng)的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入, 是微處理器系統(tǒng)中比較復(fù)雜的功能,在這主要完成微處理器內(nèi)部數(shù)據(jù)存儲器的 讀寫。 3. 執(zhí)行模塊 執(zhí)行階段主要完成指令的邏輯運(yùn)算工作,alu 根據(jù)操作控制碼對所提供的 操作數(shù)進(jìn)行相應(yīng)的操作。讀/寫儲存階段主要完成存儲器中數(shù)據(jù)的讀取和寫入, 是微處理器系統(tǒng)中比較復(fù)雜的功能,在這主要完成微處理器內(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運(yùn)運(yùn)算算器器結(jié)結(jié)構(gòu)構(gòu)圖圖 operation mux 圖表 4-2 五級執(zhí)行模塊結(jié)構(gòu)圖 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 13 5.5. 代碼實(shí)現(xiàn)及測試 5.1 代碼實(shí)現(xiàn) 使用 vhdl 語言語言編寫內(nèi)部模塊,完成程序編譯后下載到硬件平臺上, 通過元件的例化配置,將內(nèi)存模塊和已有的 cpu 模塊連接起來,構(gòu)成一個完整 的計(jì)算機(jī)系統(tǒng)。 1. 取指模塊 取
30、指模塊給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準(zhǔn)備數(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 作為程序計(jì)數(shù)器,程序計(jì)數(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) 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 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 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 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、指令,計(jì)算 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í)行模塊 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 17 選擇運(yùn)算器 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 的運(yùn)算 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) 河北大學(xué) 2007 屆本科生學(xué)
43、年論文設(shè)計(jì) 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; -邏輯運(yùn)算, 狀態(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; 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 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 位乘法運(yùn)算 ; 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)存讀寫測試 河北大學(xué) 2007 屆本科生學(xué)年論文設(shè)計(jì) 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)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版寧夏糧食和物資儲備局糧食儲備庫信息化系統(tǒng)升級合同3篇
- 2025年度排水工程設(shè)計(jì)咨詢合同4篇
- 2025年度綠色環(huán)保產(chǎn)業(yè)民營中小企業(yè)合作開發(fā)合同4篇
- 技術(shù)保密合同
- 承包人合同范本(2篇)
- 2025年度高品質(zhì)內(nèi)墻抹灰裝飾工程承包合同4篇
- 2025版內(nèi)蒙古生態(tài)環(huán)保產(chǎn)業(yè)投資合同范本4篇
- 二零二五年度農(nóng)產(chǎn)品質(zhì)量檢測與追溯服務(wù)合同4篇
- 2025版牛羊肉冷鏈物流配送服務(wù)合同4篇
- 二零二五年度回遷房買賣合同標(biāo)準(zhǔn)樣本(產(chǎn)權(quán)互換版)2篇
- 2025年度公務(wù)車輛私人使用管理與責(zé)任協(xié)議書3篇
- 經(jīng)濟(jì)學(xué)基礎(chǔ)試題及答案 (二)
- 售后工程師述職報(bào)告
- 綠化養(yǎng)護(hù)難點(diǎn)要點(diǎn)分析及技術(shù)措施
- 2024年河北省高考?xì)v史試卷(含答案解析)
- 車位款抵扣工程款合同
- 小學(xué)六年級數(shù)學(xué)奧數(shù)題100題附答案(完整版)
- 湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 英漢互譯單詞練習(xí)打印紙
- 2023湖北武漢華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術(shù)說明書MSDS
評論
0/150
提交評論