電子信息工程基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
電子信息工程基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
電子信息工程基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
電子信息工程基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
電子信息工程基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、廣東東軟學(xué)院本科設(shè)計(jì)(論文)基于FPGA的MIPS指令設(shè)計(jì)與實(shí)現(xiàn)摘 要本文將設(shè)計(jì)一個(gè)具有MIPS體系結(jié)構(gòu)的五級(jí)流水線32位CPU,并包含MIPS指令集,流水線的結(jié)構(gòu)將分為五個(gè)部分:指令、解碼、執(zhí)行、反寫和存儲(chǔ)。并盡可能對(duì)數(shù)據(jù)沖突、控制沖突和結(jié)構(gòu)沖突提出合理的解決方案,實(shí)現(xiàn)MIPS指令集中的部分指令。本次設(shè)計(jì)將使用verilog-HDL(硬件描述語(yǔ)言),該語(yǔ)言用于每個(gè)模塊實(shí)現(xiàn),簡(jiǎn)單提出并解決流水線中出現(xiàn)的一些有關(guān)數(shù)據(jù)的阻塞問(wèn)題,并使用ModelSim進(jìn)行分析仿真和驗(yàn)證以完成CPU的設(shè)計(jì)。關(guān)鍵詞: 流水線 MIPS CPU verilog-HDL 指令集 ModelSimI廣東東軟學(xué)院本科設(shè)計(jì)(論

2、文)ABSTRACTIn this paper, we will design a five level pipelined 32-bit CPU with MIPS architecture, which contains MIPS instruction set. The pipelined architecture will be divided into five parts: instruction, decoding, execution, write back and storage. At the same time, we try to put forward reasona

3、ble solutions to data conflicts, control conflicts and structure conflicts. Implement some instructions in MIPS instruction set. This design will use verilog-HDL (hardware description language), which is used to implement each module, simply put forward and solve some data blocking problems in the p

4、ipeline, and use Modelsim to analyze, simulate and verify to complete the CPU design.Key words:Assembly line MIPS verilog-HDL ModelSim Instruction set II目 錄摘 要IABSTRACTII第一章 緒論11.1 課題研究背景和意義11.2 國(guó)內(nèi)外發(fā)展現(xiàn)狀與趨勢(shì)11.3 論文研究?jī)?nèi)容和目標(biāo)2第二章 MIPS指令系統(tǒng)32.1 MIPS指令系統(tǒng)概述3第三章 MIPS流水線設(shè)計(jì)53.1 取值階段53.1.1 PC模塊63.1.2 IF_ID模塊63.2

5、譯碼階段73.2.1 Regfile模塊73.2.2 ID模塊83.2.3 ID_EX模塊93.3 執(zhí)行階段103.3.1 EX模塊103.3.2 EX_MEM模塊103.4 訪存階段113.4.1 MEM模塊113.4.2 MEM_WB模塊113.5 回寫階段123.6 流水線的驗(yàn)證與實(shí)現(xiàn)123.6.1 TOP頂層模塊建立123.6.2 指令存儲(chǔ)器ROM的實(shí)現(xiàn)153.6.3 SOPC的實(shí)現(xiàn)173.6.4 編寫測(cè)試程序173.6.5 建立SOPC的TestBench文件183.6.6 使用ModelSim驗(yàn)證流水線的實(shí)現(xiàn)193.6.7 解決流水線的阻塞問(wèn)題20第四章 MIPS指令的實(shí)現(xiàn)224.

6、1 邏輯、位移操作、空指令的實(shí)現(xiàn)224.1.1 邏輯指令224.1.1 位移操作指令224.1.1 空指令234.1.1 指令的實(shí)現(xiàn)234.1.1 指令的實(shí)現(xiàn)的驗(yàn)證274.2 算術(shù)指令的實(shí)現(xiàn)274.2.1 空指令274.2.2 指令的實(shí)現(xiàn)274.2.3 指令的實(shí)現(xiàn)的驗(yàn)證29總結(jié)31參考文獻(xiàn)32致謝33 第一章 緒論1.1 課題研究背景和意義CPU是中央進(jìn)行處理工作單元CENTRALPROCESSINGUNIT的縮寫,是一個(gè)信息系統(tǒng)的核心,就如同人的大腦,能夠時(shí)時(shí)刻刻對(duì)信息進(jìn)行處理,并且控制每個(gè)外圍模塊的工作。如今電子設(shè)備早已深入到每個(gè)人的生活中,而這些電子設(shè)備離不開(kāi)CPU的管理和控制。自世界上

7、第一臺(tái)計(jì)算機(jī)出現(xiàn),陸續(xù)通過(guò)計(jì)算機(jī)電子管,晶體管,集成電路,大規(guī)模集成電路四個(gè)時(shí)代。直至今天,計(jì)算機(jī)的無(wú)論是性能還是性價(jià)比方面日漸上升,市面上的電子產(chǎn)品無(wú)一離不開(kāi)計(jì)算機(jī)的發(fā)展。而CPU作為各類電子產(chǎn)品以及計(jì)算機(jī)的核心,其性能是衡量各類電子產(chǎn)品以及計(jì)算機(jī)的性能好壞的標(biāo)準(zhǔn)之一。如今的CPU技術(shù)廣泛地應(yīng)用了并行執(zhí)行指令的技術(shù),廣泛地取代了以往低效率的串行執(zhí)行指令的CPU技術(shù),流水線技術(shù)和超標(biāo)量技術(shù)就是并行執(zhí)行指令的體現(xiàn),分別是CPU在執(zhí)行工作指令的時(shí)候,在時(shí)間上和空間上實(shí)現(xiàn)了并行指令。MIPS(millionsinsts persecond):單位秒執(zhí)行百萬(wàn)指令的縮寫,精簡(jiǎn)指令集計(jì)算機(jī)是20世紀(jì)80年

8、代提出的一種結(jié)構(gòu)精簡(jiǎn)指令集,RISC處理器和“鎖處理器內(nèi)部沒(méi)有水的水平”,是用軟件編程盡可能解決一些相關(guān)的流水線數(shù)據(jù)的處理問(wèn)題的方法。如今的各式各樣的電子產(chǎn)品中,都看得到許許多多的具有MIPS體系進(jìn)行結(jié)構(gòu)的CPU。中國(guó)對(duì)于CPU的研發(fā)相對(duì)于國(guó)外,開(kāi)始研發(fā)晚于國(guó)外一些國(guó)家。如今在國(guó)內(nèi)有那么一群專門研究CPU技術(shù)的公司及實(shí)驗(yàn)室,如“龍芯”等由我國(guó)自主研發(fā)的CPU日漸出現(xiàn)在了國(guó)內(nèi)的一些電子產(chǎn)品中,但相比與國(guó)外的CPU研制水平還有很大的差距。在信息化時(shí)代的今天,信息化不斷飛速發(fā)展,如我國(guó)不能加大對(duì)于CPU技術(shù)的研發(fā),過(guò)于傳統(tǒng)落后CPU技術(shù)的先進(jìn)文化水平,那么我們國(guó)家的眾多行業(yè)甚至國(guó)家政府部門等的信息安

9、全問(wèn)題會(huì)面臨威脅,更有可能國(guó)家的信息安全受到威脅。本文設(shè)計(jì)的CPU結(jié)構(gòu)具有MIPSCPU架構(gòu),包含34條指令,優(yōu)勢(shì)在于指令簡(jiǎn)潔方便編程調(diào)試,在許多的需要工業(yè)控制、娛樂(lè)控制等場(chǎng)所中均可使用,并擁有很大的指令調(diào)整優(yōu)化的空間,具有很大的發(fā)展前景。1.2 國(guó)內(nèi)外發(fā)展現(xiàn)狀與趨勢(shì)早在1971年,英特爾就開(kāi)發(fā)了4004微處理器。Intel公司便處于世界通用CPU的主導(dǎo)地位,從上個(gè)世紀(jì)CPU的發(fā)展歷史來(lái)看,幾乎全都是Intel公司的產(chǎn)品的發(fā)展歷程:1978年Intel推出8086處理器、1985年推出80386、1993年推出Penitium系列的CPU等等。時(shí)至今日,Intel公司仍然不斷推出一代比一代優(yōu)質(zhì)

10、的產(chǎn)品,市場(chǎng)上的臺(tái)式計(jì)算機(jī)和筆記本電腦幾乎都被其產(chǎn)品所占據(jù)。該公司生產(chǎn)的英特爾處理器,它們的cpu架構(gòu)都是復(fù)雜指令集系統(tǒng)計(jì)算機(jī)cisc(復(fù)雜指令集計(jì)算機(jī)),復(fù)雜的指令體系主要體現(xiàn)于指令的多樣復(fù)雜,以及長(zhǎng)度不一,因此其復(fù)雜性完全不能用于需要精簡(jiǎn)編程的嵌入式設(shè)計(jì)系統(tǒng)。為了解決這一問(wèn)題,在上個(gè)世紀(jì)80年代,MIPS公司問(wèn)世,并提出了RISC的理念,其固定的指令長(zhǎng)度,和加載/存儲(chǔ)架構(gòu)大大提高了指令的執(zhí)行效率,在這發(fā)展之后R嵌入式系統(tǒng)處理器的設(shè)計(jì)都主要研究采用RISC結(jié)構(gòu)。相比國(guó)外早早的就開(kāi)始了CPU的研發(fā),我國(guó)開(kāi)始研發(fā)CPU的時(shí)間就比較晚,但至今有著很大的成果且發(fā)展迅速,日漸減小與世界先進(jìn)CPU技術(shù)的

11、先進(jìn)水平。我國(guó)的CPU研發(fā)成就巨大,其中“龍芯”就是最典型的代表之一。從2001年至今,我國(guó)陸陸續(xù)續(xù)不斷地研發(fā)出一款又一款的通用設(shè)計(jì)高性能CPU,2001年至2009年,中科院先后研發(fā)出龍芯一號(hào)、龍芯二號(hào)、龍芯2F/2G、龍芯3等優(yōu)質(zhì)芯片。之后中國(guó)“龍芯”為了進(jìn)一步擴(kuò)大市場(chǎng),購(gòu)買了MIPS的結(jié)構(gòu)授權(quán)。如今我國(guó)的各行各業(yè)的各個(gè)領(lǐng)域中,都能看見(jiàn)“龍芯”的身影,相信在今后的不斷深入研究,我國(guó)的CPU技術(shù)將不斷趕上世界先進(jìn)CPU技術(shù)水平甚至超越。1.3 論文研究?jī)?nèi)容和目標(biāo)本論文將會(huì)完成具有MIPS體系結(jié)構(gòu)的CPU設(shè)計(jì),實(shí)現(xiàn)MIPS指令以及流水線等的設(shè)計(jì)與分析,其中實(shí)現(xiàn)最典型的5級(jí)流水線,實(shí)現(xiàn)部分指令,

12、提出并解決流水線中出現(xiàn)的一些有關(guān)數(shù)據(jù)沖突導(dǎo)致阻塞的問(wèn)題。在MedelSim上驗(yàn)證并分析,通過(guò)編寫TestBench文件在MedelSim上執(zhí)行所生成的仿真過(guò)程圖,加以分析,得出結(jié)論,驗(yàn)證結(jié)果。第二章 MIPS指令系統(tǒng)本章將對(duì)于MIPS指令進(jìn)行簡(jiǎn)單的概述并分析,介紹MIPS指令應(yīng)該具備什么特征,以及MIPS指令集有哪些指令。2.1 指令應(yīng)具備的性能一個(gè)CPU功能取決于怎么樣的指令,良好的性能也離不開(kāi)成熟的指令。CPU能夠在多少時(shí)間實(shí)現(xiàn)什么功能就是由其指令系統(tǒng)決定的,而一個(gè)成熟的指令系統(tǒng)不能缺少以下性能:(1) 完備性:不應(yīng)在指令系統(tǒng)的前提下由軟件來(lái)實(shí)現(xiàn)對(duì)應(yīng)功能,具體體現(xiàn) 于指令足以滿足匯編編程。

13、(2) 規(guī)整性:指令系統(tǒng)中的指令需要有一定的對(duì)稱,指令的格式以及數(shù)據(jù)的格式需要一致。(3)高效性:要求指令能高效的高效執(zhí)行、占據(jù)少量的存儲(chǔ)空間。(4)兼容性:各個(gè)計(jì)算機(jī)可通用由該指令系統(tǒng)編寫的程序。MIPS32就是具有以上性能的流行指令集,因其成熟性以及優(yōu)秀的性能而被我國(guó)龍芯采用。本文設(shè)計(jì)的CPU基于MIPS指令系統(tǒng),實(shí)現(xiàn)其中的部分算術(shù)運(yùn)算指令和邏輯運(yùn)算指令組成簡(jiǎn)單的精簡(jiǎn)MIPS指令集。2.1.1MIPS指令的類型和格式Mips指令集可分為三種主要指令::R類型、J類型、I類型,如圖2.1。圖2.1 MIPS指令格式rs、rt、rd為32位的通用數(shù)據(jù)寄存器,sa位位移指令中的位移數(shù),func為

14、擴(kuò)展指令碼、imm為16位立即數(shù)、addr為26位的地址。R類型FUNC的不同用于每個(gè)指令的指令不同的功能之間進(jìn)行區(qū)分,其中大多數(shù)指令的rs、rt寄存器用于存放源操作數(shù),兩個(gè)操作數(shù)進(jìn)行計(jì)算之后,將結(jié)果存入rd寄存器。sa用于存放移位位數(shù)。J類型的指令的opcode位位于前6位,用于存放操作碼;后26位用于存放轉(zhuǎn)移的目標(biāo)地址。I類型的指令的后面的16位數(shù)值為立即數(shù),opcode為前6位,用于存放操作數(shù)。按照不同的功能,將31條指令劃分為具有以下幾個(gè)不同類型:(1) 邏輯運(yùn)算類:邏輯運(yùn)算類的指令:xori、or、ori、and和and指令;對(duì)源操作數(shù)進(jìn)行(與、或、非)邏輯運(yùn)算。(2) 算術(shù)運(yùn)算類:

15、算術(shù)運(yùn)算類的指令:addi、add、sub;其功能為基本的整數(shù)加減運(yùn)算,實(shí)現(xiàn)運(yùn)算整數(shù)類的源操作數(shù)。(3) 數(shù)據(jù)傳送類:對(duì)于整數(shù)數(shù)據(jù)類型進(jìn)行取存的指令有l(wèi)w、sw;對(duì)于浮點(diǎn)型數(shù)據(jù)類型進(jìn)行取存的指令有:sw.f、lw.f。(4) 位移操作類:位移操作的指令有:sra、srl、sll;其功能是對(duì)源操作數(shù)進(jìn)行邏輯位移、運(yùn)算位移。(5) 浮點(diǎn)運(yùn)算類:指令有:mul.f、sub.f、add、f;對(duì)源操作數(shù)進(jìn)行浮點(diǎn)運(yùn)算。(6) 轉(zhuǎn)移類:轉(zhuǎn)移類的指令有:jal、jr、j、bne、beq;兩種轉(zhuǎn)移類指令:無(wú)條件的和有條件的分支類型傳輸類型。(7) 其他類:進(jìn)行系統(tǒng)控制等;指令有:syscall、eret、tlb

16、wi、tlbwr、mtc0、mfc0、lui。第三章 MIPS流水線設(shè)計(jì)MIPS指令集的流水線是5級(jí)流水線,5級(jí)體現(xiàn)于:回寫(WB)、存儲(chǔ)(MEM)、執(zhí)行(EXE)、譯碼(IF)、取指(ID),而本次設(shè)計(jì)就是使用這樣字流水線結(jié)構(gòu),流水線通過(guò)這種細(xì)分,以確保完成在一個(gè)時(shí)鐘周期內(nèi)每個(gè)級(jí)別,以及使多數(shù)的指令不需要?dú)v經(jīng)MEM,確保了不會(huì)出現(xiàn)兩條或兩條以上的指令同一個(gè)時(shí)間要訪問(wèn)MEM的這種復(fù)雜的情況發(fā)生,如圖2.2所示。圖2.2 具有MIPS結(jié)構(gòu)的5級(jí)流水線最終可以實(shí)現(xiàn)OpenMIPS(開(kāi)源的MIPS五級(jí)流水線),如圖2.2.1。圖2.2.1 OpenMIPS五級(jí)流水線結(jié)構(gòu)圖3.1 取值階段取值階段是從

17、指令寄存器取出指令,通過(guò)具有加法器PC模塊的功能,使PC寄存器的值不斷地遞減,同時(shí)為下一條指令的取指做好對(duì)應(yīng)需要完成準(zhǔn)備。其中包含了PC、IF_ID兩個(gè)模塊。3.1.1 PC模塊PC模塊是為指令寄存器提供即將取出的地址。當(dāng)指令寄存器啟用時(shí),每個(gè)時(shí)鐘周期連續(xù)增加4個(gè)PC寄存器的值,以給出下一個(gè)要執(zhí)行的指令,指令寄存器取出的指令所在的地址。其接口圖3.1.1所示。圖3.1.1 PC模塊接口實(shí)施方法載于圖3.1.1-1。圖3.1.1.1-1 PC寄存器會(huì)進(jìn)行以下的操作:先判斷芯片是否使能,如果使能了,在每次時(shí)鐘上升沿加4,指向下一條指令的地址,給譯碼階段提供指令的地址;若沒(méi)有使能,則PC寄存器的值初

18、始化。同樣的,還需判斷復(fù)位信號(hào)有沒(méi)有被觸發(fā),如果沒(méi)有被觸發(fā),該模塊正常執(zhí)行工作;若被觸發(fā),則將PC寄存器中的值進(jìn)行初始化。3.1.2 IF_ID模塊IF_ID模塊的功能進(jìn)行保存自己從前從指令控制寄存器中取得的指令,和該指令所在的地址,在下一步一個(gè)工作時(shí)鐘周期時(shí)把該地址信息提供給譯碼階段。當(dāng)有復(fù)位信號(hào)時(shí),將PC寄存器的值初始化,否則進(jìn)行地址的傳遞。其接口圖3.1.2所示。圖3.1.2圖3.1.2-1該模塊的作用是在時(shí)鐘的上升沿時(shí),將取指階段的PC寄存器所指向的指令的地址,傳遞到譯碼階段,如果復(fù)位信號(hào)有效,則PC寄存器的指向初始化的地址的值。3.2 譯碼階段將從上一個(gè)取指令的階段中,獲得指令,并判

19、斷指令的類型,指令執(zhí)行需要進(jìn)行什么類型的運(yùn)算或操作。其中包含了Regflie、ID_EX、ID三個(gè)模塊。3.2.1 Regflie模塊REGFILE模塊寄存器文件,的主要實(shí)現(xiàn)讀取兩個(gè)寄存器,寄存器寫操作。其接口圖3.2.1所示。圖3.2.1 Regflie模塊接口其中具有3個(gè)操作:(1) 復(fù)位信號(hào)無(wú)效且寫接口有使能信號(hào)以及寫操作的目的寄存器的值不為0時(shí),則把寫操作的輸入端口的數(shù)據(jù)保存至目的寄存器。(2) 當(dāng)已經(jīng)實(shí)現(xiàn)了第一個(gè)讀寄存器的端口的時(shí)候,將依次判斷幾種情況:復(fù)位進(jìn)行有效,第一個(gè)讀寄存器的輸出一個(gè)端口的值始終為0;當(dāng)復(fù)位信號(hào)無(wú)效時(shí),如果讀取到的值為0,則輸出也為0;第一個(gè)要讀取的寄存器和要

20、寫的寄存器是相同的寄存器的時(shí)候,將要寫的值當(dāng)作中國(guó)第一個(gè)要讀取的寄存器的端口可以作為輸出的端口;若是我們都不能夠滿足通過(guò)以上的情況,那么就輸出我國(guó)第一個(gè)要讀的寄存器的地址以及對(duì)應(yīng)的值;若是實(shí)現(xiàn)第一個(gè)讀端口之間沒(méi)有進(jìn)行使能,則輸出0。(3) 和(2)的操作類似,對(duì)第二個(gè)讀寄存器的端口進(jìn)行操作。其具體實(shí)現(xiàn)方法如圖3.2.1-1所示。圖3.2.1-13.2.2 ID模塊ID模塊解碼模塊,所述指令以獲得各種信息進(jìn)行解碼:子類型,該源操作數(shù),操作的類型,所述地址將被寫入到目的寄存器等。其接口圖3.2.2-1和圖3.2.2-2所示。圖3.2.2-1 ID模塊接口圖3.2.2-2 ID模塊的接口其中有3大操

21、作:(1) 判斷指令的類型。(2) 給執(zhí)行階段提供一個(gè)即將執(zhí)行操作的第一個(gè)操作數(shù)的值,且在下一個(gè)時(shí)鐘周期開(kāi)始時(shí)提供。(3) 給執(zhí)行階段提供一個(gè)即將執(zhí)行操作的第二個(gè)操作數(shù)的值,且在下一個(gè)時(shí)鐘周期開(kāi)始時(shí)提供。3.2.3 ID_EX模塊該模塊主要是用于傳遞數(shù)據(jù),在下一個(gè)時(shí)鐘周期,將ID模塊中的數(shù)據(jù)傳遞到EX模塊。其接口圖3.2.3所示。圖3.2.3 ID_EX模塊接口具體實(shí)現(xiàn)方法如圖3.2.3-1.圖3.2.3-13.3 執(zhí)行階段此階段會(huì)依據(jù)從譯碼階段可以得到的各個(gè)通過(guò)譯碼所得到的結(jié)果,依據(jù)得到的結(jié)果對(duì)于兩個(gè)操作數(shù)進(jìn)行對(duì)應(yīng)的運(yùn)算操作,并將結(jié)果送至訪存的階段。其中包含了EX、EX_MEM、MEM三個(gè)模

22、塊。3.3.1 EX模塊EX模塊會(huì)依據(jù)ID_EX模塊傳遞傳遞過(guò)來(lái)的數(shù)據(jù)進(jìn)行判斷數(shù)據(jù)類型,以及依據(jù)數(shù)據(jù)類型進(jìn)行計(jì)算,其接口如圖3.3.1所示。圖3.3.1EX模塊接口其操作分為兩部分:(1) 首先確定要被執(zhí)行運(yùn)算操作的操作的類型。(2) 運(yùn)算出結(jié)果,判斷是否要寫入要寫入的目的寄存器。3.3.2 EX_MEM模塊在下進(jìn)行一個(gè)系統(tǒng)時(shí)鐘工作周期,將EX模塊的運(yùn)算分析結(jié)果,傳遞至MEM模塊則傳遞至流水線的訪存階段,其接口如圖3.3.2所示。圖3.3.2 EX_MEM模塊接口3.4 訪存階段3.4.1 MEM模塊該模塊為組合邏輯電路,直接將輸入作為輸入結(jié)果,如果復(fù)位有效則輸出初始化。其接口如圖3.4.1。

23、圖3.4.1 MEM模塊接口3.4.2 MEM/WB模塊該模塊是在下一個(gè)時(shí)鐘周期將內(nèi)存訪問(wèn)階段獲得的數(shù)據(jù)傳遞給寫回階段。其接口如圖3.4.2。圖3.2.4 MEM/WB模塊接口其具體實(shí)現(xiàn)方法為:在時(shí)鐘處于上升沿的時(shí)候進(jìn)行判斷復(fù)位信號(hào),如果無(wú)效,則將數(shù)據(jù)傳遞至回寫階段,否則數(shù)據(jù)初始化。3.5 回寫階段回寫階段主要在Regfile模塊中實(shí)現(xiàn),數(shù)據(jù)的獲取階段寫回,寫回解碼階段。再部分階段實(shí)現(xiàn)數(shù)據(jù)的回寫。3.6 流水線的實(shí)現(xiàn)并驗(yàn)證3.6.1 TOP頂層模塊建立上述已經(jīng)完成了流水線各個(gè)模塊,現(xiàn)在建立TOP頂層模塊,將上述的各個(gè)模塊連接建立成流水線,TOP模塊的接口如下:圖3.6.1 TOP模塊接口將各個(gè)

24、模塊例化如下:圖3.6.1-1 MIPS_TOP模塊建立了MIPS_TOP模塊的接口及流水線的接口,用于和指令寄存器連接,相互之間的連接,構(gòu)成流水線,如圖3.6.1-1。(1) PC模塊例化圖3.6.1-2 PC模塊例化 pc寄存例化后,pc寄存器的的值一直傳遞,給指令寄存器提供指令的地址。如圖3.6.1-2。(2) IF_ID模塊例化,如圖圖3.6.1-3。圖3.6.1-3 IF_ID模塊例化(3) ID模塊例化,如圖3.6.1-4。圖3.6.1-4 ID模塊例化(4) Regflie模塊例化,如圖3.6.1-5。圖3.6.1-5 Regflie模塊例化(5) ID_IE模塊例化,如圖3.6

25、.1-6。圖3.6.1-6 ID_IE模塊例化(6) EX模塊例化,如圖3.6.1-7。圖3.6.1-7 EX模塊例化(7) MEM模塊例化,如圖3.6.1-8。圖3.6.1-8 MEM模塊例化(8) MEM_WB模塊例化,如圖3.6.1-9。圖3.6.1-9 MEM_WB模塊例化通過(guò)例化,實(shí)現(xiàn)了簡(jiǎn)陋單周期的五級(jí)流水線途徑,但仍然不能進(jìn)行流水線的驗(yàn)證,仍需要進(jìn)行一個(gè)重要提供指令的指令寄存器提供指令,然后通過(guò)編寫測(cè)試文件進(jìn)行仿真,觀察指令所涉及的寄存器的值,才能驗(yàn)證自己設(shè)計(jì)的流水線。3.6.2 指令存儲(chǔ)器ROM的實(shí)現(xiàn)指令寄存器的的接口如圖3.6.2-1、圖3.6.2-2。圖3.6.2-1 指令寄

26、存器模塊圖3.6.2-2 指令寄存去接口其具體實(shí)現(xiàn)方法如圖3.6.2-3。圖3.6.2-3指令寄存器的作用是如果芯片使能有效,向流水線提供指令;提供的指令為流水線的取值階段的pc寄存器的值所指向的地址的指令;如果芯片使能無(wú)效的話,不向流水線的取值階段提供指令。3.6.3 SOPC的實(shí)現(xiàn)為了方便驗(yàn)證五級(jí)流水線的實(shí)現(xiàn),建立了一個(gè)SOPC模塊,其中包含了MIPS_TOP模塊和ROM指令寄存器。其實(shí)現(xiàn)方法如下:module mips_sopc( inputwireclk,input wirerst); wireInstAddrBus inst_addr; wireInstBus inst; wire

27、rom_ce; / 例化處理器MIPS_TOP MIPS_TOPMIPS_TOP0(.clk(clk),.rst(rst),.rom_addr_o(inst_addr),.rom_data_i(inst), .rom_ce(rom_ce);/ 例化指令存儲(chǔ)器ROMinst_rom inst_rom0(.ce(rom_ce),.addr(inst_addr),.inst(inst);Endmodule該模塊的功能主要是將流水線和指令寄存器連接起來(lái),通過(guò)指令寄存器不斷向流水線的譯碼階段提供指令;反之,流水線不斷向指令寄存器提供指令所在的地址,使得流水線不斷執(zhí)行。3.6.4 編寫測(cè)試程序在測(cè)試文件里

28、編寫測(cè)試程序,為了方便測(cè)試與驗(yàn)證,編寫ori指令,MIPS指令進(jìn)行集中ori$1,$0,0x1100指令數(shù)據(jù)格式設(shè)計(jì)如圖3.6.4-1。圖3.6.4-1 ori $1,$0,0x1100指令格式按照ori指令格式,在inst_rom.data文件中編寫4條ori指令,如圖3.6.4-2。圖3.6.4-2 獲得的結(jié)果示于圖3.6.4-3。圖3.6.4-33.6.5 建立SOPC的TestBench文件 其TestBench文件如圖3.6.5。圖3.6.5建立一個(gè)50MHZ的時(shí)鐘信號(hào)clk,每20ns翻轉(zhuǎn)一次,復(fù)位使能,執(zhí)行單周期流水線,在單周期流水線中執(zhí)行ori指令;建立的TestBench文件

29、將用于仿真,在ModelSim平臺(tái)上可以達(dá)成ori指令的驗(yàn)證。3.6.6 使用ModelSim驗(yàn)證流水線的實(shí)現(xiàn)前面已經(jīng)實(shí)現(xiàn)了并且驗(yàn)證了ORI指令,也編寫了SOPC的測(cè)試文件,接下來(lái)就是在ModelSim上進(jìn)行仿真與分析,一共執(zhí)行了4條ori指令,為了方便觀察與分析,仿真結(jié)果只截取了以$1寄存器為觀察的對(duì)象及第一條ori指令執(zhí)行的仿真結(jié)果,并且除去了其他的指令執(zhí)行的過(guò)程,將所獲得的模擬結(jié)果示圖3.6.6-1。圖3.6.6-1 ModelSim的仿真結(jié)果在第一個(gè)進(jìn)行復(fù)位控制信號(hào)使能之后和第二個(gè)時(shí)鐘輸入信號(hào)的上升沿,芯片使能信號(hào)有效及指令寄存器得到使能,ori指令進(jìn)入了取值階段并開(kāi)始取指,并將指令中

30、的值傳送給了IF_ID模塊的輸入端口,緊接著在下一個(gè)時(shí)鐘上升沿時(shí),第一條ori進(jìn)入了譯碼階段。在譯碼階段中:指令為第一條ori指令的值3401100,pc寄存器的值為初始,在ID模塊中得到了指令的運(yùn)算類型為邏輯運(yùn)算類型為001(參照MIPS指令集,邏輯運(yùn)算類型的判斷值為001),得到了運(yùn)算的子類型為或運(yùn)算,其值為00100101(參照MIPS指令集,或運(yùn)算運(yùn)算的判斷值為00100101),兩個(gè)源操作數(shù)分為00000000、00001100,正式$0寄存器和指令中的立即數(shù)經(jīng)過(guò)擴(kuò)展之后的值。目的寄存器的寫操作使能,寫入目標(biāo)寄存器的值$1寄存器中的值。在執(zhí)行階段中:要寫入的目的寄存器的值為00001

31、100,且目的寄存器寫操作使能,目的寄存器的寫操作使能,且要寫入目的寄存器的值時(shí)$1寄存器中的數(shù)值。在訪存階段中:寫入目的寄存器的值,是執(zhí)行階段要寫入目的寄存器的值00001100,目的寄存器的寫操作使能,寫入目標(biāo)寄存器的值$1寄存器中的值。在回寫階段中:寫入目的寄存器的值,是訪存階段要寫入目的寄存器的值00001100,目的寄存器的寫操作使能,寫入目標(biāo)寄存器的值$1寄存器中的值。所有階段結(jié)束后,按照ori指令的要求,要寫的目的寄存器$1的值正是第一條指令ori $1,$0,0x1100中$0與0x1100(1|0x1100=0x1100)的結(jié)果00001100。正確的運(yùn)算結(jié)果和數(shù)據(jù)傳送,證明

32、了五級(jí)流水的初步實(shí)現(xiàn)。此時(shí)五級(jí)流水線的實(shí)現(xiàn),但存在一些有關(guān)數(shù)據(jù)沖突等流水線的阻塞問(wèn)題,比如在譯碼和回寫階段時(shí),可能存在兩個(gè)指令之間的譯碼和回寫發(fā)生沖突,例如第一條指令回寫時(shí),某些寄存器的值,會(huì)傳遞至第二條指令的譯碼階段且被第二條指令執(zhí)行時(shí)使用,因此發(fā)生流水線的數(shù)據(jù)沖突,造成流水線的阻塞。3.6.7 解決流水線阻塞問(wèn)題在上述對(duì)流水線的驗(yàn)證的時(shí)候,拿出第一條ori指令(ori $1,$2,1100)和第二條ori指令(ori $1,$2,0020)進(jìn)行仿真,會(huì)出現(xiàn)寄存器數(shù)據(jù)錯(cuò)誤的問(wèn)題,具體錯(cuò)誤如圖3.6.7-1。圖3.6.7-1可知第一條指令和第二條指令分別在回寫階段、譯碼階段發(fā)生了在寄存器$1數(shù)

33、據(jù)的沖突,對(duì)于這種數(shù)據(jù)的沖突,主要用了兩種方式解決方法。當(dāng)檢測(cè)到有發(fā)生類似于數(shù)據(jù)沖突的情況的時(shí)候,讓指令在執(zhí)行的過(guò)程中,讓其在接下來(lái)的幾個(gè)時(shí)鐘周期不干事情,來(lái)避免數(shù)據(jù)的沖突。解決方案如圖3.6.7-2。圖3.6.7-2另外對(duì)于不想停止流水線的進(jìn)程,還有一種解決方法,就是在產(chǎn)生計(jì)算結(jié)果的時(shí)候,將其中發(fā)送所需的計(jì)算結(jié)果,如需要的地方執(zhí)行該指令。如圖3.6.7-3。圖3.6.7-3而本次設(shè)計(jì)大多是采用了后者的解決方案,那么為了解決這種問(wèn)題的發(fā)生,要在ID模塊進(jìn)行如下判斷:譯碼階段進(jìn)行執(zhí)行指令后的運(yùn)算處理結(jié)果,加以一些判斷;取指令執(zhí)行的階段的操作結(jié)果,加以一些判斷;具體可以實(shí)現(xiàn)個(gè)人的方法如圖3.6.7

34、-4。圖3.6.7-4為了方便測(cè)試驗(yàn)證解決的數(shù)據(jù)問(wèn)題,基于兩條ori指令進(jìn)行仿真:ori $1,$0,1100ori $1,$1,0020如圖3.6.8-5。圖3.6.8-5 兩條ori指令的仿真可見(jiàn),兩條ori指令沒(méi)有在此發(fā)生數(shù)據(jù)上的沖突,因此解決了流水線上數(shù)據(jù)沖突的一些問(wèn)題,較為成功的解決了流水線中指令與指令之間因?yàn)閿?shù)據(jù)沖突所導(dǎo)致的阻塞問(wèn)題,使得指令與指令之間較為成功互不影響的執(zhí)行。第四章 MIPS指令的實(shí)現(xiàn)4.1 邏輯、位移操作、空指令的實(shí)現(xiàn)4.1.1 邏輯指令MIPS指令集中的邏輯操作指令分為兩大類:R類型指令和I類型指令,通過(guò)R類型和I類型這樣劃分,邏輯操作指令有:(1) nor、o

35、r、xor、and,如圖4.1-1所示。圖4.1-1這四個(gè)指令的用法:指令名稱+rd,rs,rt;這四個(gè)指令的作用:rd - rs與rt對(duì)應(yīng)的邏輯運(yùn)算;將rs和rt所指向的地址所在的寄存器的值,通過(guò)對(duì)指令的低五位進(jìn)行功能的判斷,進(jìn)行對(duì)應(yīng)指令要執(zhí)行的邏輯運(yùn)算,將結(jié)果放入rd所指向的地址的寄存器里面。(2) xori、andi,如圖4.1-2所示。圖4.1-2這兩個(gè)指令的用法:指令的名稱+rt,rs,立即數(shù)這兩個(gè)指令的作用:rt - rs與立即數(shù)進(jìn)行對(duì)應(yīng)的邏輯運(yùn)算;將rs所指向的地址所在的寄存器的值,通過(guò)對(duì)指令的低五位進(jìn)行功能的判斷,進(jìn)行對(duì)應(yīng)指令要執(zhí)行的邏輯運(yùn)算,將結(jié)果放入rd所指向的地址的寄存器

36、里面。4.1.2 位移操作指令MIPS指令集中的位移操作指令中屬于I類型的指令只有l(wèi)ui指令,屬于R類型的指令有:srl、srav、sra、sllv、sll、srlv。(1) lui指令的指令格式如圖4.1.2-1所示。圖4.1.2-1這個(gè)指令的用法:指令的名稱+rt,立即數(shù)該指令的作用就是進(jìn)行低16位的0擴(kuò)展,將得到的32位的值,放入rt所指向的地址所在的寄存器里。(2) 余下的指令如圖4.1.2-2所示。圖4.1.2-2其中圖中前3個(gè)指令的用法是:指令名稱+rd,rt,sa作用分別是,rt所在的地址指向的寄存器的值,分別邏輯左移、邏輯右移、算術(shù)右移sa位;其中通過(guò)邏輯位移空出來(lái)的位,使用0

37、來(lái)填充;而邏輯位移空出來(lái)的位,使用rt中最高位的值來(lái)填充。其中圖中的后3個(gè)指令的用法是:指令名稱+rd,rt,rs作用分別是,rt所在的地址指向的寄存器的值,分別進(jìn)行邏輯左移、邏輯右移、算術(shù)右移,通過(guò)位移導(dǎo)致空出來(lái)的位,均用0填充;且位移量均由rs寄存器的值來(lái)確定。4.1.3 空指令nop指令屬于R類型指令,如圖4.1.2-3所示。圖4.1.2-3nop指令表示不做任何操作。4.1.4 指令的實(shí)現(xiàn)在流水線的取值階段,需要定義4個(gè)寄存器,用于判斷指令類型,如圖4.1.4-1。圖4.1.4-1其中op用于區(qū)分指令,為指令碼判斷位;op3用于區(qū)分指令的功能,為功能碼判斷位。在譯碼階段對(duì)指令進(jìn)行判斷時(shí)

38、,需要3個(gè)步驟:(1) 先進(jìn)行指令的類型則是判斷op寄存器(2) 判斷出指令的類型后,還需要判斷一些指令中的部分位,這些位的值則放入op2寄存器,然后對(duì)op2進(jìn)行判斷。(3) 然后要判斷指令的功能,則是將指令的功能碼放入op3,判斷op3判斷指令的功能是什么。那么在流水線的譯碼階段的ID模塊,要進(jìn)行一些補(bǔ)充,如圖4.1.4-2。圖4.1.4-2在流水線的執(zhí)行階段,也要進(jìn)行一些填充,如圖4.1.4-3。圖4.1.4-34.1.5 指令的實(shí)現(xiàn)的驗(yàn)證為了驗(yàn)證實(shí)現(xiàn)的指令,通過(guò)編寫測(cè)試文件,進(jìn)行仿真。對(duì)于邏輯操作指令,編寫的測(cè)試文件代碼如圖4.1.5。 圖4.1.5通過(guò)運(yùn)算可知寄存器會(huì)發(fā)生如圖4.1.5

39、-1的變化。圖4.1.5-1通過(guò)modelsim進(jìn)行仿真,其中regfile1/regsx分別代表了寄存器$1234。如圖4.1.5-2。圖4.1.5-2通過(guò)仿真圖里寄存器的變化,基本符合預(yù)期的寄存器的變化,所以邏輯指令正確的實(shí)現(xiàn)了。對(duì)于位移和操作指令通過(guò)類似上文在流水線的譯碼階段和執(zhí)行階段進(jìn)行一些添加,通過(guò)編寫測(cè)試文件如圖4.1.5-3所示,進(jìn)行仿真。圖4.1.5-3預(yù)期達(dá)成的效果為圖4.1.5-4。圖4.1.5-4把測(cè)試文件進(jìn)行仿真,結(jié)果如圖4.1.5-5。圖4.1.5-5通過(guò)觀察寄存器2的值,可知結(jié)果和預(yù)期的一致,寄存器2的變化可以得知基本實(shí)現(xiàn)了位移操作指令、空指令。4.2 算術(shù)指令的實(shí)現(xiàn)4.2.1 算術(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論