華科組成原理課程設(shè)計(jì)-MIPS流水線CPU_第1頁(yè)
華科組成原理課程設(shè)計(jì)-MIPS流水線CPU_第2頁(yè)
華科組成原理課程設(shè)計(jì)-MIPS流水線CPU_第3頁(yè)
華科組成原理課程設(shè)計(jì)-MIPS流水線CPU_第4頁(yè)
華科組成原理課程設(shè)計(jì)-MIPS流水線CPU_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2014計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告題 目:支持流水線的簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)專(zhuān) 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí):學(xué) 號(hào):姓 名:電 話:郵 件:實(shí) 驗(yàn) 臺(tái):完成日期:指導(dǎo)教師:目錄一、課程設(shè)計(jì)概述31 課設(shè)目的32 實(shí)驗(yàn)環(huán)境33 設(shè)計(jì)任務(wù)與要求3二、設(shè)計(jì)原理31 MIPS概述32 MIPS指令簡(jiǎn)介33 經(jīng)典5段RSIC流水線結(jié)構(gòu)4三、設(shè)計(jì)內(nèi)容51 指令選取52 非流水5段CPU模型63 流水5段CPU模型8四、實(shí)現(xiàn)內(nèi)容與測(cè)試結(jié)果121 各模塊功能122 控制信號(hào)123 指令操作流程134 指令執(zhí)行狀態(tài)轉(zhuǎn)換圖145 引腳綁定156 測(cè)試程序157 測(cè)試結(jié)果與仿真圖16五、課設(shè)

2、總結(jié)171 課設(shè)中遇到的問(wèn)題172 課設(shè)經(jīng)歷173 課設(shè)感想184 小組分工18參考文獻(xiàn)18一、 課程設(shè)計(jì)概述1. 課設(shè)目的掌握硬件描述語(yǔ)言與開(kāi)發(fā)環(huán)境,了解硬件開(kāi)發(fā)地基本過(guò)程。掌握流水線CPU設(shè)計(jì)方法。鍛煉學(xué)生簡(jiǎn)單計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)能力,并通過(guò)進(jìn)行主機(jī)系統(tǒng)低層電路的實(shí)現(xiàn)、故障分析與定位、系統(tǒng)調(diào)試等環(huán)節(jié)的鍛煉,進(jìn)一步提高了學(xué)生分析和解決問(wèn)題的能力。2. 實(shí)驗(yàn)環(huán)境Xilinx ISE 14.2Spartan3E實(shí)驗(yàn)板一塊3. 設(shè)計(jì)任務(wù)與要求課程設(shè)計(jì)的主要任務(wù)是設(shè)計(jì)一臺(tái)支持流水線的簡(jiǎn)單計(jì)算機(jī)系統(tǒng)并調(diào)試通過(guò)。要求所設(shè)計(jì)的計(jì)算機(jī)系統(tǒng)能正確地執(zhí)行存放在指令cache中的程序的功能。本設(shè)計(jì)基于MIPS的32位

3、流水線架構(gòu),設(shè)計(jì)過(guò)程中力圖盡可能的遵循原有的MIPS的功能和指令集?;咀龅脚cMIPS指令集的兼容。具體要求包括:支持算術(shù)運(yùn)算,邏輯運(yùn)算,存儲(chǔ)器讀寫(xiě),寄存器間數(shù)據(jù)傳送等幾類(lèi)指令。支持立即數(shù)尋址,直接尋址,寄存器尋址等幾種基本的數(shù)據(jù)尋址方式和順序?qū)ぶ?、跳躍尋址兩種指令的尋址方式。 支持10條或以上的指令。 能運(yùn)行由自己所設(shè)計(jì)的指令系統(tǒng)構(gòu)成的一段程序,程序執(zhí)行功能正確。 具有完整的五級(jí)流水線架構(gòu)。采用獨(dú)立的32位的數(shù)據(jù)總線和地址總線。 二、 設(shè)計(jì)原理1. MIPS概述MIPS是高效的RISC體系結(jié)構(gòu)中最優(yōu)雅的一種體系結(jié)構(gòu)。其中文意思為“無(wú)內(nèi)部互鎖流水級(jí)的微處理器”,其機(jī)制是盡量利用軟件辦法避免流水

4、線中的數(shù)據(jù)相關(guān)問(wèn)題。它最早是在80年代初期由斯坦福大學(xué)Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來(lái)的。MIPS公司的R系列就是在此基礎(chǔ)上開(kāi)發(fā)的RISC工業(yè)產(chǎn)品的微處理器。這些系列產(chǎn)品為很多計(jì)算機(jī)公司采用構(gòu)成各種工作站和計(jì)算機(jī)系統(tǒng)。本設(shè)計(jì)將參考MIPS的CPU設(shè)計(jì)以實(shí)現(xiàn)自己的五段流水線CPU設(shè)計(jì),并部分實(shí)現(xiàn)MIPS32指令集2. MIPS指令簡(jiǎn)介2.1 MIPS指令集特點(diǎn) MIPS指令集具有以下特點(diǎn): 簡(jiǎn)單的LOAD/STORE結(jié)構(gòu)。所有計(jì)算類(lèi)型指令均從寄存器組中讀取數(shù)據(jù)并把結(jié)果寫(xiě)入寄存器組中。只有LOAD和STORE指令訪問(wèn)存儲(chǔ)器(數(shù)據(jù)cache)。 易于流水線CPU的設(shè)計(jì)。MIPS指令集的指令

5、格式非常規(guī)整,所有的指令均為32位,而且指令操作碼在固定的位置上。 易于編譯器的開(kāi)發(fā)。一般情況下,編譯器在編譯高級(jí)語(yǔ)言程序時(shí),很難用到復(fù)雜的指令。MIPS指令的尋址方式與操作非常簡(jiǎn)單,便于編譯器的開(kāi)發(fā)。2.2 MIPS指令格式在本次課程設(shè)計(jì)中,在數(shù)據(jù)類(lèi)型上只支持整數(shù)類(lèi)型,在指令格式上直接R、I和J型指令。以下是對(duì)三型指令的簡(jiǎn)介1: R(register)類(lèi)型的指令從寄存器組中讀取兩個(gè)源操作數(shù),計(jì)算結(jié)果寫(xiě)回寄存器組。 I(immediate)類(lèi)型的指令使用一個(gè)16位的立即數(shù)作為一個(gè)源操作數(shù)。 J(jump)類(lèi)型的指令使用一個(gè)26位立即數(shù)作為跳轉(zhuǎn)的目標(biāo)地址。三型指令的格式如圖1所示,其中: op表

6、示指令操作碼。 rs為源操作數(shù)的寄存器號(hào)。 rd為目的寄存器號(hào),RT既可為源寄存器號(hào),也可為目的寄存器號(hào)。 funct可認(rèn)為是擴(kuò)展的操作碼。 shamte由移位指令使用,定義移位位數(shù)。 Immediate是16位立即數(shù),根據(jù)指令需求進(jìn)行無(wú)符號(hào)或有符號(hào)擴(kuò)展。 Address是26位立即數(shù),由J型指令使用,用于產(chǎn)生跳轉(zhuǎn)的目的地址。圖1. MIPS的指令格式3. 經(jīng)典5段RSIC流水線結(jié)構(gòu)經(jīng)典的5段RISC流水線如圖2。圖2. 經(jīng)典5段RISC流水線在該結(jié)構(gòu)中一條指令的執(zhí)行過(guò)程分為以下5個(gè)時(shí)鐘周期: 取指令周期(IF):以程序計(jì)數(shù)器PC中的內(nèi)容作為地址,從存儲(chǔ)器中取出指令并放入指令寄存器IR;同時(shí)P

7、C值加4(假設(shè)每條指令占4個(gè)字節(jié)),指向順序的下一條指令。 指令譯碼/讀寄存器周期(ID):對(duì)指令進(jìn)行譯碼,并用IR中的寄存器地址去訪問(wèn)通用寄存器組,讀出所需的操作數(shù)。 執(zhí)行/有效地址計(jì)算周期(EX):在這個(gè)周期,ALU對(duì)在上一個(gè)周期準(zhǔn)備好的操作數(shù)進(jìn)行運(yùn)算或處理。不同指令所進(jìn)行的操作不同。 存儲(chǔ)器訪問(wèn)/分支完成周期(MEM):load指令用上一個(gè)周期計(jì)算出的有效地址從存儲(chǔ)器中讀出相應(yīng)的數(shù)據(jù);store指令把指定的數(shù)據(jù)寫(xiě)入這個(gè)有效地址所指出的存儲(chǔ)器單元;分支指令若分支成功就把錢(qián)一個(gè)周期中計(jì)算好的轉(zhuǎn)移目標(biāo)地址送入PC,否則不進(jìn)行任何操作;其他類(lèi)型的指令在該周期不做任何操作。 寫(xiě)回周期(WB):把結(jié)

8、果寫(xiě)入通用寄存器組。本設(shè)計(jì)基于該經(jīng)典5端流水線結(jié)構(gòu)完成了MIPS的一種簡(jiǎn)單實(shí)現(xiàn),并在此基礎(chǔ)上加入了對(duì)流水線沖突(數(shù)據(jù)沖突,控制沖突)的處理,以及對(duì)中斷的處理。三、 設(shè)計(jì)內(nèi)容1. 指令選取本系統(tǒng)能執(zhí)行16條MIPS指令,指令基本情況如表1所示。MIPS指令助記符指令格式操作Bit #31.2625.2120.1615.1110.65.0R-typeoprsrtrdshamtfuncadd000000rsrtrd00000100000Rd = rs + rtSub100010Rd = rs - rtAnd100100Rd = rs & rtOr100101Rd = rs | rtXor10

9、0110Rd = rs rtSllv000100Rd = rs << rtsrlv000110Rd = rs >> rtslt101010If (rs < rt) rd=1 else rd=0;I-typeoprsrtimmdediateAddi001000rsrtimmRt = rs + immAndi001100Rt = rs & imm ori001101Rt = rs | immXori001110Rt = rs immBne000101If (rs!=rt) pc=pc+1-immLw100011Rt = memrs + immsw101011M

10、emrs + imm = rtJ-typeopaddressj000010addPc=add表1. 系統(tǒng)支持的MIPS指令集從指令類(lèi)型來(lái)講,這16條指令覆蓋了算邏運(yùn)算、訪存、無(wú)條件跳轉(zhuǎn)和有條件跳轉(zhuǎn),已基本覆蓋一個(gè)指令集所需的所有基本指令。從尋址方式來(lái)講,這16條指令覆蓋了寄存器尋址(R-TYPE指令),立即數(shù)尋址(I-TYPE指令),基址偏移量尋址(LW/SW),直接尋址(J)。16條MIPS指令并不是本設(shè)計(jì)的極限,只是受到實(shí)驗(yàn)板資源的限制,我們僅僅完成了MIPS32指令集中的16條而已。本設(shè)計(jì)通過(guò)簡(jiǎn)單的拓展可以輕松實(shí)現(xiàn)整個(gè)MIPS32指令集。2. 非流水5段CPU模型2.1 初始數(shù)據(jù)通路設(shè)計(jì)

11、往往都是從簡(jiǎn)單到復(fù)雜,循序漸進(jìn)。好高騖遠(yuǎn)則往往求之而不得。因此我們并沒(méi)有從流水線模型直接下手,而是首先設(shè)計(jì)了一個(gè)類(lèi)似經(jīng)典5段RISC流水線結(jié)構(gòu)的非流水5段CPU模型。由于不涉及流水,所以所有的指令周期均為單周期,數(shù)據(jù)通路見(jiàn)圖3。圖3. 非流水5段CPU初始數(shù)據(jù)通路2.2 5段具體操作在這個(gè)數(shù)據(jù)通路上每條指令需要花費(fèi)5個(gè)時(shí)鐘周期,這5個(gè)時(shí)鐘周期相應(yīng)的操作如下:2.2.1 取指令周期(IF)IRMemPCNPCPC+1以PC中的值從指令cache中取出一條指令,放入指令寄存器IR;同時(shí)PC值加1,然后放入NPC,這時(shí)NPC中的值為順序的下調(diào)指令的地址。2.2.2 指令譯碼/讀寄存器周期(ID)AR

12、egsrsBRegsrtimm(IR16)16#IR16.31)對(duì)指令進(jìn)行譯碼,并以指令中的rs和rt字段作為地址訪問(wèn)通用寄存器組,將讀出的數(shù)據(jù)讓如A和B寄存器中。同時(shí)IR的低16位進(jìn)行有符號(hào)或者無(wú)符號(hào)擴(kuò)展,然后存入Imm寄存器2.2.3 執(zhí)行/有效地址計(jì)算周期(EX) LW和SW指令A(yù)LUoA+ImmALU將操作數(shù)相加形成有效地址,并存入臨時(shí)寄存器ALUo R-TYPEALUoA funct BALU根據(jù)funct字段指出的操作類(lèi)型對(duì)A和B中的數(shù)據(jù)進(jìn)行運(yùn)算,并將結(jié)果存入ALUo I-TYPEALUoA op ImmALU根據(jù)操作碼op指出的操作類(lèi)型對(duì)A和Imm中的數(shù)據(jù)進(jìn)行運(yùn)算,并將結(jié)果存入A

13、LUo 分支指令A(yù)LUoNPC+ImmALU將臨時(shí)寄存器NPC和Imm中的值相加得到轉(zhuǎn)移目標(biāo)的地址,存入ALUo2.2.4 存儲(chǔ)器訪問(wèn)/分支完成周期(MEM) LW和SW指令LW:LMDMemALUo即從存儲(chǔ)器中讀出相應(yīng)數(shù)據(jù),放入臨時(shí)寄存器LMD中SW:MemALUoB即把B中數(shù)據(jù)寫(xiě)入存儲(chǔ)器 分支指令I(lǐng)f (cond) PCALUo else PCNPC若cond中的內(nèi)容為真,則將ALUo中的轉(zhuǎn)移目標(biāo)地址放入PC,否則PC+1。2.2.5 寫(xiě)回周期(WB) R-TYPERegsrdALUo I-TYPERegsrtALUo LW指令RegsrtLMD2.3 模型優(yōu)化與最終數(shù)據(jù)通路在這部分設(shè)計(jì)的

14、時(shí)候我們的跳轉(zhuǎn)指令僅僅實(shí)現(xiàn)了JNZQ,因此我們對(duì)改分支指令進(jìn)行了單獨(dú)的優(yōu)化。在圖2的設(shè)計(jì)中若分支失敗,則由于新的PC在EX段產(chǎn)生,因此會(huì)產(chǎn)生2個(gè)時(shí)鐘周期的延遲。但實(shí)際上可以對(duì)這條指令進(jìn)行單獨(dú)的改進(jìn),將對(duì)PC的修改提前到IF段,以便PC值能夠快速變化。經(jīng)過(guò)這樣優(yōu)化后,分支失敗則只會(huì)產(chǎn)生1個(gè)時(shí)鐘周期的延遲。改進(jìn)后的數(shù)據(jù)通路如圖4所示。圖4. 非流水5段CPU最終數(shù)據(jù)通路3. 5段流水CPU模型3.1 初始數(shù)據(jù)通路在實(shí)現(xiàn)了非流水的5段CPU模型后,5段流水CPU模型也就水到渠成了。只需要在各段之間加入相應(yīng)的流水寄存器即可。數(shù)據(jù)通路如圖5。圖5. 5段流水CPU初始數(shù)據(jù)通路3.2 5段具體操作這部分與

15、非流水的具體操作大致相同,這里不加贅述。3.3 流水線沖突及解決方案3.3.1 數(shù)據(jù)沖突如果上一條指令的結(jié)果還沒(méi)有寫(xiě)入到寄存器中,而下一條指令的原操作數(shù)又恰恰是此寄存器的數(shù)據(jù),那么它所獲得的將是原來(lái)的數(shù)據(jù),而不是更新后的數(shù)據(jù),這樣的相關(guān)問(wèn)題稱(chēng)為數(shù)據(jù)相關(guān)。根據(jù)在系統(tǒng)結(jié)構(gòu)中學(xué)習(xí)到的相關(guān)知識(shí),在我們的設(shè)計(jì)中,采用定向(forwarding)技術(shù)來(lái)解決此類(lèi)相關(guān)問(wèn)題。其關(guān)鍵思路是:在發(fā)生寫(xiě)后讀相關(guān)的情況下,在計(jì)算結(jié)果尚未出來(lái)之前,后面等待使用該結(jié)果的指令并不見(jiàn)得是馬上就要用該結(jié)果。如果能夠?qū)⒃撚?jì)算結(jié)果從其產(chǎn)生的地方(ALU出口)直接送到其他指令需要它的地方(ALU的入口),那么就可以避免停頓,如圖6。圖

16、6. 定向技術(shù)3.3.2 控制沖突 在流水線中,控制沖突可能會(huì)使數(shù)據(jù)沖突造成更大的性能損失。執(zhí)行分支指令的結(jié)果有兩種,一種是“成功”,PC值改變?yōu)榉种мD(zhuǎn)移的目標(biāo)地址。另一種則是“失敗”,這是PC的值保持正常遞增。本設(shè)計(jì)中采用預(yù)測(cè)分支失敗的方法解決控制沖突,即允許分支指令后的指令繼續(xù)在流水線中流動(dòng)。當(dāng)確定分支是失敗時(shí),可以將分支指令看做一條普通指令,流水線正常流動(dòng),如表2;當(dāng)確定分支是成功時(shí),流水線就把在分支指令之后取出的指令轉(zhuǎn)化為空操作,并按分支目標(biāo)地址重新取指令執(zhí)行,如表3。分支失敗分支指令iIFIDEXMEMWB指令i+1IFIDEXMEMWB指令i+2IFIDEXMEMWB指令i+3IF

17、IDEXMEMWB表2. 分支失敗的流水線時(shí)空?qǐng)D分支成功分支指令iIFIDEXMEMWB指令i+1IFIdleIdleIdleidle分支目標(biāo)指令I(lǐng)FIDEXMEMWB分支目標(biāo)指令+1IFIDEXMEMWB表3. 分支成功的流水線時(shí)空?qǐng)D3.4 模型中的問(wèn)題與修正3.4.1 指令周期數(shù)問(wèn)題若是指令周期和之前的設(shè)計(jì)一樣,使用單周期的設(shè)計(jì),那么會(huì)出現(xiàn)對(duì)流水寄存器的讀寫(xiě)沖突。例如對(duì)于通用寄存器組來(lái)說(shuō),在clk上升沿的時(shí)候需要從IF段的指令寄存器IR中取出指令,然后訪問(wèn)相應(yīng)的寄存器并將數(shù)據(jù)寫(xiě)入ID段的A,B寄存器。試想,若是從IR中取指令,和對(duì)ID段的A,B寄存器的寫(xiě)入兩個(gè)操作都是在clk上升沿觸發(fā),那

18、么由于時(shí)延的存在,很有可能導(dǎo)致寫(xiě)入的值不是預(yù)期值。因此我們將指令周期從單周期改為雙周期。在前一周期完成對(duì)流水寄存器的讀操作,并且完成各段的功能。后一周期,完成對(duì)流水寄存器的寫(xiě)操作。具體實(shí)現(xiàn)上我們舍棄了分頻的方法而是采用前半周期為clk上升沿觸發(fā),后半周期為clk下降沿觸發(fā)。3.4.2 譯碼器問(wèn)題通過(guò)3.3.1可知,各段功能需要在前一周期內(nèi)全部完成,但是ID段很特殊,因?yàn)橛凶g碼器的存在。通用寄存器組和擴(kuò)展部件都需要譯碼器提供控制信號(hào),但是由于3.3.1的限制,譯碼器也會(huì)在clk上升沿觸發(fā)。由于時(shí)延的存在,這可能會(huì)導(dǎo)致控制信號(hào)產(chǎn)生在需求之后。也即在寄存器組和擴(kuò)展部件需要控制信號(hào)的時(shí)候,控制信號(hào)還未

19、真正產(chǎn)生,導(dǎo)致這兩部件使用了錯(cuò)誤的控制信號(hào)。除了這個(gè)隱患,還有一個(gè)問(wèn)題就是若采用單獨(dú)的譯碼器,那么會(huì)在ID段產(chǎn)生大量的控制信號(hào),這些控制信號(hào)都需要通過(guò)流水線流向下一段,那么勢(shì)必需要大量的流水寄存器,大幅增加硬件成本。綜合考慮這兩個(gè)問(wèn)題之后我們撤掉了譯碼器,而采用分段譯碼的方式。即給每個(gè)功能部件都提供完整的指令,由各個(gè)功能部件自己產(chǎn)生自己所需要的控制信號(hào),這樣就可以完美的解決上述兩個(gè)問(wèn)題。3.4.3 針對(duì)JNZQ指令的優(yōu)化問(wèn)題在非流水的CPU模型中我們針對(duì)JNZQ指令進(jìn)行了專(zhuān)門(mén)的優(yōu)化,將對(duì)分支條件的判斷放在了ID段。但是這存在兩個(gè)問(wèn)題,一是我們認(rèn)為這樣影響了整體設(shè)計(jì)的一致性;二是在流水線CPU的

20、設(shè)計(jì)中我們加入了新的跳轉(zhuǎn)指令,這使得判斷變得更加復(fù)雜,ID段分擔(dān)了太多EX段的功能,會(huì)影響整體流水的性能。因此在流水CPU設(shè)計(jì)中我們將分支的條件改回在EX段判斷。3.4.4 寄存器組的讀寫(xiě)順序問(wèn)題在最初的設(shè)計(jì)中,我們將寄存器的寫(xiě)回操作放在后半周期,即和流水線寄存器的寫(xiě)操作一同完成。但是在后面的實(shí)際測(cè)試中我們發(fā)現(xiàn)若這樣處理,我們?cè)谧鲋囟ㄏ虻臅r(shí)候必須做三次重定向。因此我們對(duì)此做了調(diào)整,將寫(xiě)回操作提前到前半周期完成,即對(duì)寄存器組實(shí)現(xiàn)先寫(xiě)后讀策略。3.4.5 寫(xiě)回段的取舍在最初的設(shè)計(jì)中,由于我們將寄存器的寫(xiě)回操作放在后半周期,因此我們一度舍棄了寫(xiě)回段。因?yàn)閷?xiě)回段僅僅是前半周期讀出寫(xiě)回?cái)?shù)據(jù),后半周期將數(shù)

21、據(jù)寫(xiě)回寄存器組,這么簡(jiǎn)單的功能占據(jù)一個(gè)流水段顯示實(shí)在是“奢侈”。因而在最初的設(shè)計(jì)中我們將其和MEM段合并。但是3.3.4中對(duì)寄存器讀寫(xiě)順序做了調(diào)整,因此寫(xiě)回段中的寫(xiě)回操作和EX段的計(jì)算操作以及MEM的訪存操作在同半個(gè)周期內(nèi),由于時(shí)延的存在很有可能導(dǎo)致寫(xiě)回?cái)?shù)據(jù)錯(cuò)誤。此時(shí)若舍棄了寫(xiě)回段則可能在計(jì)算結(jié)果出來(lái)前就寫(xiě)回了,這顯然不合理。因此我們重新加入了寫(xiě)回段。在加入訪存段后,由于寫(xiě)回的結(jié)果依賴(lài)于訪存結(jié)果,因此放在訪存段之后。3.4.6 特殊指令JNZ的問(wèn)題JNZ這條指令在整個(gè)指令集中是非常特殊的存在,在之前的設(shè)計(jì)中我們完全沒(méi)有考慮到這個(gè)問(wèn)題。 雖然JNZ是I-TYPE指令,但是RT卻是源寄存器,也即J

22、NZ不會(huì)修改RT的值。即它不符合I-TYPE指令在寫(xiě)回段的數(shù)據(jù)通路RegsrtALUo。這在做定向的時(shí)候會(huì)產(chǎn)生嚴(yán)重的問(wèn)題,若不做特殊判斷,那么很可能會(huì)產(chǎn)生錯(cuò)誤的定向。 JNZ指令是整個(gè)指令集中唯一一個(gè)需要4個(gè)輸入(rega,regb,imm,pc)的指令,其他指令均最多只需要2個(gè)輸入。這使得EX段的兩個(gè)選擇器完全是多余的,可以去掉。在考慮到這兩點(diǎn)之后我們對(duì)重定向進(jìn)行了重新設(shè)計(jì),并且去掉了EX段中的兩個(gè)選擇器。3.5 硬軟中斷的實(shí)現(xiàn)3.5.1 軟中斷的實(shí)現(xiàn)對(duì)于軟中斷,我們實(shí)際上通過(guò)擴(kuò)展指令集的方式來(lái)實(shí)現(xiàn)。即在指令集中加入兩條指令,PUSH和POP,來(lái)實(shí)現(xiàn)軟中斷。具體指令表4。R-typeoprs

23、rtrdshamtfuncPop1111110000000101000000000000000J-typeopaddressPush1111100000000000000000000001110表4. Push和Pop指令當(dāng)ID段檢測(cè)到PUSH指令時(shí),將會(huì)把所有通用寄存器組的值以及當(dāng)前PC值壓入堆棧。當(dāng)EX段檢測(cè)到PUSH指令時(shí),會(huì)無(wú)條件跳轉(zhuǎn)至指令對(duì)對(duì)應(yīng)的地址。當(dāng)ID段檢測(cè)到POP指令時(shí),將會(huì)把所有的通用寄存器組的值彈出。當(dāng)EX段檢測(cè)到POP指令時(shí),會(huì)無(wú)條件跳轉(zhuǎn)至堆棧中的PC值對(duì)應(yīng)的地址。3.5.2 硬中斷的實(shí)現(xiàn)對(duì)于硬中斷我們僅實(shí)現(xiàn)了了溢出中斷。當(dāng)EX段出現(xiàn)溢出時(shí),EX段將會(huì)向IF段傳送相應(yīng)的

24、控制信號(hào)。此時(shí)IF段將會(huì)產(chǎn)生一條PUSH指令送到IR中,并且PC值維持一周期不變。這樣就相當(dāng)于向流水線中插入了一條軟中斷指令,從而實(shí)現(xiàn)了用硬件來(lái)自動(dòng)產(chǎn)生中斷指令。3.6 最終數(shù)據(jù)通路在成功修改和完善3.4中的問(wèn)題以及加入3.5中的內(nèi)容后,我們得到了最后的數(shù)據(jù)通路圖,如圖7。圖7. 5段流水CPU最終數(shù)據(jù)通路圖四、 實(shí)現(xiàn)內(nèi)容與測(cè)試結(jié)果1. 各模塊功能模塊例化名稱(chēng)模塊實(shí)現(xiàn)功能U1實(shí)現(xiàn)PC的存儲(chǔ)與更新U2實(shí)現(xiàn)指令的存取U3實(shí)現(xiàn)對(duì)通用寄存器的讀寫(xiě)U4實(shí)現(xiàn)對(duì)立即數(shù)的有符號(hào)與無(wú)符號(hào)擴(kuò)展U5實(shí)現(xiàn)ALUU6實(shí)現(xiàn)訪存功能表5. 各模塊功能表2. 控制信號(hào)流水段控制信號(hào)功能IFUpdate_Pc控制PC更新為PC

25、+1或ALUOIDReg_Sign控制通用寄存器組的壓棧與彈出Ex_Sign控制有符號(hào)擴(kuò)展和無(wú)符號(hào)擴(kuò)展EXAlu_Sign1控制MUX2的選擇Alu_Sign2控制MUX3的選擇Alu_Sign3控制ALU的計(jì)算功能Sel1控制ALUA端的定向Sel2控制ALUB端的定向MEMMem_Write控制MEM的讀寫(xiě)WBMem_Read表明MEM的讀寫(xiě)狀態(tài),控制MUX4的選擇Wb_Sign控制通用寄存器的寫(xiě)回表6. 控制信號(hào)表3. 指令操作流程由于我組實(shí)現(xiàn)的指令較多,而很多指令具有較大的相似性,因此這里取ADD, BNE, J, SW四條指令,先做出其各周期的操作及控制信號(hào)表2。 指令階段操作流程控

26、制信號(hào)IFIR(MPC)Update_Pc = 0PC(PC)+1IDA(RIR25:21)Reg_Sign = 00, Ex_Sign = 1, Wb_Sign = 0B(RIR20:16)IR2IREXALUO(A)+(B)Alu_Sign1 = 0, Alu_Sign2 = 1, Alu_Sign3 = 0000, sel1 = 0, sel2 = 0IR3IR2MEMALUO2ALUOMem_Write = 0IR4IR3WBRIR415:11(ALUO2)Mem_Read = 0, Wb_Sign = 1表7. ADD指令操作流程及控制信號(hào)指令階段操作流程控制信號(hào)IFIR(MPC)U

27、pdate_Pc = 0NPC(PC)+1PC(PC)+1IDA(RIR25:21)Reg_Sign = 00, Ex_Sign = 1B(RIR20:16)IMM(Sign-extend(IR15-0)IR2IRNPC2NPCEXif (A!=B) PCNPC2-IMMAlu_Sign1 = 1, Alu_Sign2 = 0, Alu_Sign3 = 0111, sel1 = 0, sel2 = 0if (A!=B) Update_Pc = 1 else Update_Pc = 0表8. BNE指令操作流程及控制信號(hào)指令階段操作流程控制信號(hào)IFIR(MPC)Update_Pc = 0PC(P

28、C)+1IDIMM(Sign-extend(IR15-0)Reg_Sign = 00, Ex_Sign = 1IR2IREXPC(IMM)Alu_Sign1 = 0, Alu_Sign2 = 0, Alu_Sign3 = 1000, sel1 = 0, sel2 = 0, Update_Pc = 1表9. J指令操作流程及控制信號(hào)指令階段操作流程控制信號(hào)IFIR(MPC)Update_Pc = 0PC(PC)+1IDA(RIR25:21)Reg_Sign = 00, Ex_Sign = 1B(RIR20:16)IMM(Sign-extend(IR15-0)IR2IREXALUO(A)+(IMM

29、)Alu_Sign1 = 0, Alu_Sign2 = 0, Alu_Sign3 = 0000, sel1 = 0, sel2 = 0IR3IR2B2BMEMMemoryALUO (B2)Mem_Write = 1表10. SW指令操作流程及控制信號(hào)4. 指令執(zhí)行狀態(tài)轉(zhuǎn)換圖可畫(huà)出其對(duì)應(yīng)的狀態(tài)轉(zhuǎn)移圖,如圖9所示。圖9. 狀態(tài)轉(zhuǎn)移圖5. 引腳綁定表名稱(chēng)綁定引腳功能clkBTN3-A7CPU時(shí)鐘resetSW7-N3復(fù)位信號(hào)sel_seg0SW4-G3sel_seg控制七段顯示的具體內(nèi)容。000:pc_now 001: id_rega 010:id_regb 011:ex_alua100:ex_al

30、ub 101:ex_aluo 110: if_ins 111:wb_datasel_seg1SW5-F3sel_seg2SW6-E2L1LD7(G1)clk對(duì)應(yīng)的LEDL2LD6(P4)reset對(duì)應(yīng)的LEDL3LD5(N4)of對(duì)應(yīng)的LEDL4LD4(N5)cf對(duì)應(yīng)的LEDL5LD3(P6)update_pc對(duì)應(yīng)的LEDL6LD2(P7)sel_seg0對(duì)應(yīng)的LEDL7LD1(M11)sel_seg1對(duì)應(yīng)的LEDL8LD0(M5)sel_seg2對(duì)應(yīng)的LEDa_to_g0CG(M12)控制七段碼顯示a_to_g1CF(L13)a_to_g2CE(P12)a_to_g3CD(N11)a_to_

31、g4CC(N14)a_to_g5CB(H12)a_to_g6CA(L14)an0AN0(K14)控制七段碼具體顯示位an1AN1(M13)an2AN2(J12)an3AN3(F12)clk1MCLK(B8)七段碼顯示的時(shí)鐘表11. 引腳綁定表6. 測(cè)試程序綜合考慮到我們選擇的指令集以及FPGA開(kāi)發(fā)板的硬件資源情況,我們打算用下面三個(gè)程序來(lái)測(cè)試我們的設(shè)計(jì)方案。程序1主要用來(lái)測(cè)試算邏運(yùn)算和訪存指令的正確性,程序如表12所示。主存地址指令結(jié)果描述機(jī)器指令的機(jī)器碼十六進(jìn)制二進(jìn)制00000000addi reg0, reg1, #2reg1 = reg0 + 2200100020010000000000

32、001000000000000001000000001andi reg1, reg2, #1reg2 = reg1 & 1302200010011000000100010000000000000000100000002ori reg1, reg2, #1reg2 = reg1 | 1342200010011010000100010000000000000000100000003sllv reg1, reg2, reg2reg2 = reg1 << reg2002210040000000000100010000100000000010000000004slt reg1, re

33、g2, reg2reg2 = (reg1 < reg2)0022102A0000000000100010000100000010101000000005sw reg0, reg1, #0memreg0 + 0 = reg1AC0100001010110000000001000000000000000000000006lw reg0, reg3, #0reg3 = memreg0 + 08C03000010001100000000110000000000000000表12. 測(cè)試程序1程序2主要用來(lái)測(cè)試軟中斷和硬中斷功能,程序如表13所示。主存地址指令結(jié)果描述機(jī)器指令的機(jī)器碼十六進(jìn)制二進(jìn)制

34、00000000addi reg0, reg1, #2reg1 = reg0 + 2200100020010000000000001000000000000001000000001andi reg1, reg1, #FFFFreg1 = reg1 + FFFF2021FFFF0010000000100001111111111111111100000002addi reg0, reg1, #1reg1 = reg0 + 1200100010010000000000001000000000000000100000003addi reg0, reg1, #2reg1 = reg0 + 2200100

35、020010000000000001000000000000001000000004addi reg0, reg1, #3reg1 = reg0 + 3200100030010000000000001000000000000001100000005addi reg0, reg1, #4reg1 = reg0 + 420010004001000000000000100000000000001000000000Apush壓PC、R6-1F800000E111110000000000000000000000011100000000EpopPC、R6-1出棧FC05000011111100000001010000000000000000表13. 測(cè)試程序2程序3主要用來(lái)測(cè)試跳轉(zhuǎn)指令的正確性,由于push和pop指令中已經(jīng)隱含了J指令,因此這里只對(duì)bne指令進(jìn)行測(cè)試,程序如表14所示。主存地址指令

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論