版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 題 目:EDA嵌入式實(shí)驗(yàn)開(kāi)發(fā)板案例設(shè)計(jì)---綜合模塊</p><p> 專(zhuān) 業(yè): 電子信息工程 </p><p> EDA嵌入式實(shí)驗(yàn)開(kāi)發(fā)板案例設(shè)計(jì)---綜合模塊</p><p><b> 摘 要&
2、lt;/b></p><p> 基于自主設(shè)計(jì)的FPGA---SP6開(kāi)發(fā)板的綜合模塊設(shè)計(jì)。本論文主要介紹一款采用自定義指令集的16位RISC MCU的設(shè)計(jì)與實(shí)現(xiàn)。采用硬件描述語(yǔ)言VHDL進(jìn)行RTL級(jí)描述,自頂向下流程和模塊化的方法進(jìn)行設(shè)計(jì)。整體上分為5級(jí)流水:取指、譯碼、執(zhí)行、存儲(chǔ)、回寫(xiě)??梢詧?zhí)行算術(shù)運(yùn)算、邏輯運(yùn)算、讀寫(xiě)存儲(chǔ)器、IO口操作。設(shè)計(jì)了16級(jí)堆棧,可實(shí)現(xiàn)函數(shù)多級(jí)調(diào)用。該RISC CPU采用哈佛結(jié)構(gòu)
3、,有效的避免了流水線中的結(jié)構(gòu)冒險(xiǎn)。分析了該設(shè)計(jì)中的流水線所遇到的冒險(xiǎn)問(wèn)題,采取了一定的解決方案。并使用仿真工具M(jìn)odelsim對(duì)個(gè)別模塊進(jìn)行了前、后仿真,ISE軟件綜合布局布線,并在Xilinx Spartan6 LX9芯片上經(jīng)過(guò)驗(yàn)證。實(shí)現(xiàn)簡(jiǎn)易計(jì)算器效果。</p><p> 關(guān)鍵詞:FPGA,spartan6,綜合模塊,RISC,流水線,VHDL,EDA案例設(shè)計(jì)</p><p> Th
4、e case design Based on embedded experimental board of EDA---Integrated design</p><p><b> Abstract</b></p><p> The Integrated design based on the FPGA experimental board which desi
5、- gned by ourself. This paper mainly introduces the principle and implementation</p><p> of a 16 bit RISC MCU with self-defined instruction set. Using a hardware des
6、cription language VHDL to RTL description, top-down flow and modular de-sign. On the whole the CPU is divided into five levels pipeline : Instruction Fetch, Instruction Decode,execution,Memory A
7、ccess, Write Back.You can perform arithmetic, logic, read and write memory,IO operation. The design have 16 level stack which can realize the function of Nested functio
8、ns.The RISC CPU adop-te the Harvard structure, effec</p><p> Keywords: FPGA,spartan6,integrated modules,RISC,pipeline,VHDL</p><p><b> 目錄</b></p><p><
9、;b> 摘 要III</b></p><p> AbstractIV</p><p><b> 目錄V</b></p><p><b> 1 緒論7</b></p><p> 1.1課題的來(lái)源7</p><p> 1.2課題的意義7
10、</p><p> 1.3 FPG案例開(kāi)發(fā)國(guó)內(nèi)外發(fā)展現(xiàn)狀8</p><p> 1.4 RISC CPU國(guó)內(nèi)外發(fā)展現(xiàn)狀9</p><p> 1.5課題研究的主要內(nèi)容9</p><p> 2方案設(shè)計(jì)與總體設(shè)計(jì)10</p><p> 2.1 RISC CPU的方案設(shè)計(jì)10</p><
11、p> 2.2方案評(píng)價(jià)10</p><p> 2.3 流水線11</p><p> 2.3.1 流水線的簡(jiǎn)單介紹11</p><p> 2.3.1 流水線的冒險(xiǎn)分析及處理12</p><p> 2.4 RISC CPU的總體設(shè)計(jì)14</p><p> 3 FPGA設(shè)計(jì)17</p>
12、;<p> 3.1 頂層模塊的設(shè)計(jì)17</p><p> 3.1.1 分頻模塊18</p><p> 3.1.2 程序存儲(chǔ)器18</p><p> 3.1.3 IF/ID流水線寄存器18</p><p> 3.1.4 DEC解碼器19</p><p> 3.1.7 ID/EXE流水線
13、寄存器22</p><p> 3.1.8 ALU算術(shù)邏輯單元:22</p><p> 3.1.9 EXM/MEM流水線寄存器23</p><p> 3.1.10 RAM數(shù)據(jù)存儲(chǔ)器23</p><p> 3.1.12 多路選擇器23</p><p> 3.1.13 MEM/WB流水線寄存器24<
14、;/p><p> 3.1.14 堆棧的設(shè)計(jì):24</p><p> 3.1.15 控制器25</p><p> 3.2 整體測(cè)試25</p><p><b> 結(jié)論26</b></p><p><b> 參考文獻(xiàn)27</b></p><p&
15、gt;<b> 致謝28</b></p><p><b> 附錄29</b></p><p><b> 1 緒論</b></p><p><b> 1.1課題的來(lái)源</b></p><p> 隨著計(jì)算機(jī)科技的發(fā)展,在計(jì)算機(jī)指令系統(tǒng)的發(fā)展與優(yōu)化
16、過(guò)程中,出現(xiàn)了兩種不同的優(yōu)化方向,一個(gè)方向?yàn)镃ISC,另一個(gè)方向?yàn)镽ISC。CISC(復(fù)雜指令系統(tǒng)計(jì)算機(jī))是早期大多數(shù)微處理器所采用的體系,如摩托羅拉公司的68k系列和Intel公司的80x86等。早期的電腦所使用的是組合語(yǔ)言編程,價(jià)格昂貴記憶體速度又慢,這也是CISC得以發(fā)展的一個(gè)重要原因。</p><p> 自20世紀(jì)70年代中期就職于IBM公司的John Cocke(約翰·科克,IBM的資深研究
17、員,為IBM計(jì)算機(jī)市場(chǎng)的開(kāi)拓和計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展起到至關(guān)重要的作用)首先提出著名的28定律之后,這一理論得到了加州大學(xué)伯克利分校的D Patterson和斯坦福大學(xué)的J Hennessy關(guān)注,他們對(duì)此定律、想法作了進(jìn)一步研究,提出了一種有別于傳統(tǒng)CISC構(gòu)架的新型計(jì)算機(jī)體系結(jié)構(gòu),即RISC構(gòu)架。RISC是一種新的芯片體系,目的是為了提高處理器運(yùn)行的速度。并且它的關(guān)鍵在于流水線的操作,使得一個(gè)時(shí)鐘周期內(nèi)可以完成多條指令,這是提高處理速度
18、的本質(zhì)原因。從20世紀(jì)80年初興起至今,RISC技術(shù)在計(jì)算機(jī)領(lǐng)域一直伴隨著其發(fā)展,尤其是在嵌入式微處理器方面,RISC體系結(jié)構(gòu)無(wú)論是在深度還是廣度上都得以充分的應(yīng)用。這些嵌入式微處理器在工業(yè)控制、無(wú)線網(wǎng)絡(luò)、多媒體處理等實(shí)時(shí)系統(tǒng)中被廣泛地應(yīng)用,并且扮演著重要的角色[1]。</p><p> FPGA現(xiàn)場(chǎng)可編程門(mén)陣列,憑借著其強(qiáng)大的功能和并行處理優(yōu)勢(shì)被稱為在CPU、DSP之后又一系統(tǒng)核心。FPGA直接操控邏輯門(mén)級(jí),
19、操控的層次更加深入,設(shè)計(jì)的自由度也更大,理論上只要FPGA里面的集成規(guī)模足夠大,它可以實(shí)現(xiàn)任何的數(shù)字系統(tǒng),當(dāng)然也包括單片機(jī)甚至是CPU,因此本文基于此用FPGA實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自制CPU。</p><p><b> 1.2課題的意義</b></p><p> 數(shù)字電路的發(fā)展速度已經(jīng)是其他事物所不能比擬的,大容量并輔以高速度的可編程邏輯器件不斷的推陳出新,使得SOC(
20、片上操作系統(tǒng))系統(tǒng)成為了新寵,它是將整個(gè)應(yīng)用電子系統(tǒng)集成在一塊面積相當(dāng)小的硅芯片上。另一方面,相應(yīng)公司所推出的各樣開(kāi)發(fā)平臺(tái)越來(lái)越人性化,只要掌握一種硬件描述語(yǔ)言就能夠在較短的時(shí)間內(nèi)設(shè)計(jì)出較為復(fù)雜的電子系統(tǒng),這有利于縮短設(shè)計(jì)周期,加快產(chǎn)品的上市速度,給電子市場(chǎng)帶來(lái)了巨大的變革。嵌入式系統(tǒng)由于其明顯的優(yōu)勢(shì)已經(jīng)在各行各業(yè)得到廣泛應(yīng)用,在軍事領(lǐng)域,醫(yī)療影像,數(shù)字通信,工業(yè)控制等方面都能看到嵌入式系統(tǒng)的身影。SOC模塊化設(shè)計(jì)的關(guān)鍵乃在于各類(lèi)嵌入式
21、核、IP模塊的實(shí)現(xiàn),而在這其中MCU核的設(shè)計(jì)占據(jù)了舉足輕重的地位,因?yàn)閹缀踉谒械南到y(tǒng)應(yīng)用中,都會(huì)以MCU為控制的核心[2]。RISC(Reduced Instruction Set Computer,精簡(jiǎn)指令集計(jì)算機(jī))處理機(jī)經(jīng)常作為核心部件廣泛應(yīng)用于嵌入式系統(tǒng)和SOC(System on Chip,片上系統(tǒng))等信息系統(tǒng)中,因此其設(shè)計(jì)技術(shù)也是集成電路設(shè)計(jì)領(lǐng)域的核心技術(shù)而受到廣泛重視[3]。</p><p> R
22、ISC CPU與生活密切相關(guān),它已經(jīng)進(jìn)入消費(fèi)電子的各個(gè)領(lǐng)域,ARM、MIPS、PowerPC等處理器都屬于RISC家族的一部分,在國(guó)際市場(chǎng)上RISC處理器占有巨大的份額,RISC的研發(fā)也是一個(gè)非常熱門(mén)的領(lǐng)域,只有理解RISC的原理才能更好地認(rèn)識(shí)和掌握已有的RISC架構(gòu)的處理器[4]。</p><p> 1.3 FPG案例開(kāi)發(fā)國(guó)內(nèi)外發(fā)展現(xiàn)狀 </p><p> 近年來(lái),電子設(shè)計(jì)自動(dòng)化(E
23、DA,Electronic Design Automatic)技術(shù)飛速發(fā)展,并已逐漸成為現(xiàn)代電子技術(shù)的核心。隨著EDA開(kāi)發(fā)工具功能的不斷完善,使得現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA,F(xiàn)ield Programmable Gate Array)技術(shù)得到廣泛的應(yīng)用,并成為當(dāng)今電子設(shè)計(jì)領(lǐng)域中應(yīng)用最廣泛的可編程邏輯器件之一。由于FPGA具有編程靈活、設(shè)計(jì)周期短、可靠性高、開(kāi)發(fā)費(fèi)用低、風(fēng)險(xiǎn)小等優(yōu)點(diǎn),所以非常適合在實(shí)驗(yàn)室中使用[5]。 </p>
24、<p> 由于傳統(tǒng)的電子實(shí)驗(yàn)信息量少、效率低、可靠性差、針對(duì)性強(qiáng),已經(jīng)不能適應(yīng)電子技術(shù)的高速發(fā)展要求,因此,F(xiàn)PGA教學(xué)系統(tǒng)迅速發(fā)展起來(lái)。目前,國(guó)內(nèi)外很多大學(xué)都開(kāi)始了相關(guān)的FPGA課程:加拿大多倫多大學(xué)早在80年代中期就投入到FPGA的教學(xué)研究當(dāng)中,并公開(kāi)了FPGA芯片的研究方法和相關(guān)的工具;美國(guó)斯坦福大學(xué)直接用Xilinx大學(xué)計(jì)劃提供的開(kāi)發(fā)板進(jìn)行教學(xué)研究;麻省理工大學(xué)根據(jù)自身要求,開(kāi)發(fā)出了一款基于Xilinx芯片的FP
25、GA實(shí)驗(yàn)板,供學(xué)生使用;伯克利大學(xué)的天文望遠(yuǎn)鏡系統(tǒng)采用FPGA技術(shù)分析搜集到的無(wú)線電,來(lái)判斷是否有外星人;亞利桑那大學(xué)也在硬件教學(xué)實(shí)驗(yàn)中加入了FPGA和EDA的內(nèi)容。</p><p> 在國(guó)內(nèi),由于種種原因,F(xiàn)PGA的研究仍處于起步階段,但是很多大學(xué)已經(jīng)開(kāi)設(shè)了FPGA相關(guān)課程。它們主要是和Xilinx公司組建聯(lián)合實(shí)驗(yàn)室,由Xilinx公司免費(fèi)提供大量的FPGA開(kāi)發(fā)平臺(tái)及套件,給學(xué)生進(jìn)行FPGA基礎(chǔ)教學(xué)實(shí)驗(yàn),比如
26、浙江大學(xué)、清華大學(xué)、復(fù)旦大學(xué)等知名學(xué)府。隨著FPGA知識(shí)的普及, 大多數(shù)高校開(kāi)始了從事FPGA應(yīng)用方面的研究,比如上海交通大學(xué)用FPGA做人臉識(shí)別的項(xiàng)目,西安交通大學(xué)用FPGA來(lái)做機(jī)器人,北京工業(yè)大學(xué)用FPGA給玩具做語(yǔ)音識(shí)別,天津工業(yè)大學(xué)用FPGA進(jìn)行信號(hào)傳輸與處理,等等。</p><p> 1.4 RISC CPU 國(guó)內(nèi)外發(fā)展現(xiàn)狀 </p><p> 1964年CDC公司推出的
27、CDC6600是第一個(gè)超級(jí)計(jì)算機(jī),具備了RISC的一些基本特征。1975年Cocke到IBM的Yorktown研究中心開(kāi)始研制IBM 801,801是最早開(kāi)始設(shè)計(jì)的RISC處理器,Cocke獲得了Eckert-Mauchly和Turing獎(jiǎng)。 </p><p> 經(jīng)過(guò)半個(gè)世紀(jì)的發(fā)展。目前,比較有影響的 RISC 處理器產(chǎn)品有 Compaq 公司的 Alpha,HP 公司的 PA-RISC,IBM 公司的 Pow
28、er PC,MIPS 公司的 MIPS 和 Sun 公司的 Sparc。</p><p> 隨著我國(guó)信息化進(jìn)程的不斷推進(jìn),計(jì)算機(jī)技術(shù)還將對(duì)我國(guó)的生產(chǎn)力的發(fā)展產(chǎn)生日益深遠(yuǎn)的影響。近年來(lái)我國(guó)在CPU設(shè)計(jì)領(lǐng)域取得了一些重大突破,相繼研制出龍芯系列、方舟系列高性能CPU,此外位于臺(tái)灣的威盛電子也是較大的處理器生產(chǎn)商。然而我國(guó)的CPU設(shè)計(jì)及制造技術(shù)與國(guó)外相比還有很大差距,我國(guó)信息產(chǎn)業(yè)中與 CPU 相關(guān)的許多核心技術(shù)及產(chǎn)品
29、仍然主要依賴進(jìn)口,不僅經(jīng)濟(jì)上受制于人,而且信息系統(tǒng)的安全乃至國(guó)家安全也面臨威脅。FPGA 技術(shù)自20世紀(jì)80年代中期出現(xiàn)至今,引起了電子設(shè)計(jì)技術(shù)的深刻變革,也成為現(xiàn)代電子設(shè)計(jì)技術(shù)的核心。因此,基于FPGA技術(shù)的CPU設(shè)計(jì)具有較高的研究?jī)r(jià)值[6]。</p><p> 1.5課題研究的主要內(nèi)容 </p><p> 本課題擬在FPGA開(kāi)發(fā)板上設(shè)計(jì)一個(gè)RISC CPU,一個(gè)五級(jí)流水線的RISC
30、 CPU。設(shè)計(jì)包括主體設(shè)計(jì),指令集設(shè)計(jì),流水線冒險(xiǎn)分析與解決,各功能模塊的簡(jiǎn)要說(shuō)明。最終實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器。</p><p> 1、流水線冒險(xiǎn)分析及處理。</p><p> 2、設(shè)計(jì)五級(jí)流水的RISC CPU。</p><p> 3、LCD12864顯示實(shí)驗(yàn)。簡(jiǎn)單計(jì)算器的實(shí)現(xiàn)。</p><p> 2方案設(shè)計(jì)與總體設(shè)計(jì)</p&g
31、t;<p> 2.1 RISC CPU的方案設(shè)計(jì)</p><p> 圖 2-1 總體設(shè)計(jì)方案圖</p><p> SOC包括硬件和軟件設(shè)計(jì)兩部分,在硬件設(shè)計(jì)中,一般采用Top-down的流程進(jìn)行設(shè)計(jì),將系統(tǒng)按功能進(jìn)行劃分,在確定各個(gè)模塊的功能后,開(kāi)始編寫(xiě)代碼實(shí)現(xiàn)相應(yīng)的功能,并進(jìn)行功能驗(yàn)證,當(dāng)所有模塊的功能符合要求后,依據(jù)頂層總體設(shè)計(jì)框圖,將各功能模塊連接起來(lái),最后通
32、過(guò)軟硬件的協(xié)同調(diào)試,證明系統(tǒng)功能的完備性[8]。</p><p><b> 2.2方案評(píng)價(jià)</b></p><p><b> 一、CPU的選取</b></p><p> 方案一:選用8位的字長(zhǎng),數(shù)據(jù)總線為8位。數(shù)據(jù)處理的能力較弱,性能較差,資源占有率較小。</p><p> 方案二:選用16
33、位的字長(zhǎng),數(shù)據(jù)總線為16位。數(shù)據(jù)處理的能力較強(qiáng),性能較好,資源占有率適中。</p><p> 方案三:選用32位的字長(zhǎng),數(shù)據(jù)總線為32位。數(shù)據(jù)處理的能力最強(qiáng),性能最好,資源占有率較大。</p><p> 通過(guò)比較三個(gè)方案的特點(diǎn),最終選用16位CPU。</p><p><b> 二、指令的選取</b></p><p>
34、; 方案一:選用已有的指令集,比如ARM指令集或MIPS指令集。采用已有的指令集可以直接使用現(xiàn)成的編譯環(huán)境,指令比較豐富、全面。但是部分指令較為復(fù)雜,不易實(shí)現(xiàn),或能被別的指令組合代替,有一定的局限性。</p><p> 方案二:選用自定義指令集,即選取最常用的指令。針對(duì)具體的功能,設(shè)計(jì)指令集。這種方式實(shí)現(xiàn)起來(lái)比較方便,編程能夠做到心中有數(shù)。</p><p> 通過(guò)比較兩種方案的特點(diǎn),
35、最終選用自定義指令集。</p><p><b> 三、指令長(zhǎng)度的選定</b></p><p> 方案一:選用固定的指令長(zhǎng)度。一般的CPU的指令長(zhǎng)度都是固定的,如8位、16位、32位等。這些指令長(zhǎng)度都是8的倍數(shù),這樣便于數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中,也便于地址對(duì)齊。但使用固定指令長(zhǎng)度,CPU設(shè)計(jì)中就會(huì)有一定的局限性,如果需要增加新的指令集,需要整體上進(jìn)行改動(dòng),不易操作。&
36、lt;/p><p> 方案二: 自定義指令長(zhǎng)度。由于指令長(zhǎng)度不是8的倍數(shù),不容易存放進(jìn)Block Memory Access中。但是指令容易擴(kuò)展,編寫(xiě)起來(lái)也方便。</p><p> 通過(guò)比較以上兩種方案的特點(diǎn),最終選用自定義指令長(zhǎng)度。</p><p> 四、系統(tǒng)框架的設(shè)計(jì):</p><p> 方案一:采用3級(jí)流水,取指、譯碼、執(zhí)行。<
37、;/p><p> 方案二:采用4級(jí)流水,取指、譯碼、執(zhí)行、存儲(chǔ)。</p><p> 方案三:采用5級(jí)流水,取指、譯碼、執(zhí)行、存儲(chǔ)、回寫(xiě)。</p><p> 綜上所述,流水線級(jí)數(shù),寄存器越多,組合延時(shí)造成的延時(shí)就越低,最長(zhǎng)路徑越短,主頻越高。所以本設(shè)計(jì)選用5級(jí)流水作為系統(tǒng)框架。</p><p><b> 2.3 流水線</b
38、></p><p> 2.3.1 流水線的簡(jiǎn)單介紹</p><p> 圖 2-2 五級(jí)流水線時(shí)空?qǐng)D</p><p> 流水線:流水線(pipeline)技術(shù)是指在程序執(zhí)行時(shí)多條指令重疊進(jìn)行操作的一種準(zhǔn)并行處理實(shí)現(xiàn)技術(shù)。流水線是Intel首次在486芯片中開(kāi)始使用的。流水線的工作方式就象工業(yè)生產(chǎn)上的裝配流水線。在CPU中由5—6個(gè)不同功能的電路單元組成一條
39、指令處理流水線,然后將一條X86指令分成5—6步后再由這些電路單元分別執(zhí)行,這樣就能實(shí)現(xiàn)在一個(gè)CPU時(shí)鐘周期完成一條指令,從而提高CPU的運(yùn)算速度。經(jīng)典奔騰每條整數(shù)流水線都分為四級(jí)流水,即指令預(yù)取、譯碼、執(zhí)行、寫(xiě)回結(jié)果,浮點(diǎn)流水又分為八級(jí)流水。</p><p> 2.3.1 流水線的冒險(xiǎn)分析及處理</p><p> 流水線處理中,由于各個(gè)階段的依賴關(guān)系、硬件資源的競(jìng)爭(zhēng)等原因,會(huì)出現(xiàn)操作
40、無(wú)法執(zhí)行的情況。造成流水線故障的原因成為冒險(xiǎn),冒險(xiǎn)分為結(jié)構(gòu)冒險(xiǎn)、數(shù)據(jù)冒險(xiǎn)、Load冒險(xiǎn)和控制冒險(xiǎn)4種類(lèi)型。</p><p> (一)結(jié)構(gòu)冒險(xiǎn):結(jié)構(gòu)冒險(xiǎn)是由于取址和存儲(chǔ)階段都會(huì)對(duì)存儲(chǔ)器進(jìn)行訪問(wèn),產(chǎn)生的沖突,如果使用哈佛結(jié)構(gòu)將程序和數(shù)據(jù)分開(kāi),就不會(huì)出現(xiàn)沖突。構(gòu)造冒險(xiǎn)是由于硬件資源的競(jìng)爭(zhēng),操作無(wú)法同時(shí)執(zhí)行的情況。流水線結(jié)構(gòu)中,內(nèi)存訪問(wèn)會(huì)造成構(gòu)造冒險(xiǎn)。IF階段和MEM階段都要涉及內(nèi)存訪問(wèn)。由于內(nèi)存訪問(wèn)使用的總線是共享資
41、源,無(wú)法同時(shí)進(jìn)行操作。因此,如果發(fā)生IF階段和MEM階段同時(shí)訪問(wèn)內(nèi)存的情況,一方需要等待另一方訪問(wèn)完成。這種指令和數(shù)據(jù)使用同一通道的構(gòu)造稱為馮諾依曼架構(gòu)。如果導(dǎo)致冒險(xiǎn)產(chǎn)生的硬件資源數(shù)量足夠多,也可以避免冒險(xiǎn)問(wèn)題的產(chǎn)生。因此,指令用的內(nèi)存和數(shù)據(jù)用的內(nèi)存分別設(shè)置,即可解決構(gòu)造冒險(xiǎn)的問(wèn)題。這種物理上將指令和數(shù)據(jù)用的內(nèi)存與訪問(wèn)通道分開(kāi)的構(gòu)架成為哈佛架構(gòu)。哈佛構(gòu)架的優(yōu)點(diǎn)是,就算指令訪問(wèn)和數(shù)據(jù)訪問(wèn)同時(shí)發(fā)生也不會(huì)發(fā)生冒險(xiǎn)的情況。但是,也有指令和數(shù)據(jù)地
42、址空間不同的缺點(diǎn)。在哈佛構(gòu)架中,指令的0號(hào)地址和數(shù)據(jù)的0號(hào)地址指向不同的內(nèi)容。這會(huì)引起軟件設(shè)計(jì)上的問(wèn)題。</p><p> (二)數(shù)據(jù)冒險(xiǎn):數(shù)據(jù)冒險(xiǎn)是指,由于指令執(zhí)行所需要的數(shù)據(jù)還未準(zhǔn)備好所引起的冒險(xiǎn)情況。當(dāng)即將執(zhí)行的指令依賴于還未處理完成的數(shù)據(jù)時(shí),會(huì)導(dǎo)致指令無(wú)法立刻開(kāi)始執(zhí)行,引發(fā)數(shù)據(jù)冒險(xiǎn)。為了回避數(shù)據(jù)冒險(xiǎn),我們使用一種稱為直通(Forwarding)的方法。原本回寫(xiě)運(yùn)算結(jié)果在WB階段,但實(shí)際上決定運(yùn)算結(jié)果是在
43、EXE階段。因此直通是指在運(yùn)算結(jié)果確定的EXE階段,將數(shù)據(jù)直接傳遞給下一條指令。</p><p> 直通的示例如圖2-3所示。示例中使用流水線執(zhí)行3條數(shù)據(jù)依賴關(guān)系的指令,以此說(shuō)明直通的動(dòng)作原理。第二條指令要使用第一條指令的結(jié)果。第一條指令在EX階段可以確定運(yùn)算結(jié)果后,直接將結(jié)果發(fā)送到處于ID階段的第二條指令。第三條指令同時(shí)依賴于第一和第二條指令。因此,可以直接從處于MEM階段的第一條指令和處于EX階段的第二條指
44、令獲取數(shù)據(jù)。以這種將運(yùn)算結(jié)果直通的方式,可以消除原本需要等待WB階段完成的依賴關(guān)系。</p><p> 圖 2-3 直通示例</p><p> 使用直通解決依賴關(guān)系的方法僅有一個(gè)例外,就是數(shù)據(jù)需要使用Load指令從內(nèi)存調(diào)取的情況。由于內(nèi)存的訪問(wèn)在MEM階段執(zhí)行,因此處理結(jié)果要在MEM階段才能夠確定。而當(dāng)前指令執(zhí)行到MEM結(jié)束時(shí),下一條指令已經(jīng)到達(dá)EX階段執(zhí)行了。這與直通的機(jī)制不吻合。&
45、lt;/p><p> ?。ㄈ㎜oad冒險(xiǎn):如果當(dāng)前指令需要的操作數(shù)還未取出來(lái),將產(chǎn)生Load冒險(xiǎn)。對(duì)于Load冒險(xiǎn),將IF階段阻塞一個(gè)周期,將DEC階段刷新一個(gè)周期,即可解決Load冒險(xiǎn)。這種依賴Load指令而發(fā)生的冒險(xiǎn)成為L(zhǎng)oad冒險(xiǎn)。Load冒險(xiǎn)不能從根本上避免,因此要將有依賴關(guān)系的指令進(jìn)行阻塞以解決問(wèn)題。阻塞是指讓流水線的特定階段停止一段時(shí)間。Load冒險(xiǎn)發(fā)生的流水線動(dòng)作如圖2-4所示。</p>
46、<p> 圖 2-4 Load冒險(xiǎn)發(fā)生時(shí)的流水線的動(dòng)作</p><p> 如果有Load冒險(xiǎn)發(fā)生,則將有依賴關(guān)系的指令延遲一個(gè)周期執(zhí)行。如果將指令阻塞一個(gè)周期,前一條指令在MEM階段得到的數(shù)據(jù)就可以直通到正在ID階段的下一條指令。這時(shí)候,流水線會(huì)浪費(fèi)一個(gè)周期,這一周期讓其傳遞無(wú)效的數(shù)據(jù)即可。這個(gè)操作稱為流水線冒泡。如果Load指令和其有依賴關(guān)系的指令相差一條指令以上的距離,則不會(huì)發(fā)生Load冒險(xiǎn)
47、。作為有效的處理操作的方法,在編譯器中使用適當(dāng)?shù)恼{(diào)度算法也可以有效避免Load冒險(xiǎn)。</p><p> (四)控制冒險(xiǎn):控制冒險(xiǎn)是指無(wú)法確定下一條指令而引發(fā)的冒險(xiǎn)情況。當(dāng)不知道下一條是否執(zhí)行時(shí),就會(huì)產(chǎn)生控制冒險(xiǎn)。我們可以插入延時(shí)間隙來(lái)解決,不管是否跳轉(zhuǎn),延時(shí)間隙一定會(huì)執(zhí)行,一般使用NOP。我們?cè)诔绦蛑忻恳粭l跳轉(zhuǎn)指令后面添加一條NOP指令來(lái)實(shí)現(xiàn)跳轉(zhuǎn)。</p><p> 控制冒險(xiǎn)也無(wú)法從根
48、本上避免,但是可以盡量將分支指令安排打到流水線前段,從而減少因?yàn)榭刂泼半U(xiǎn)而引起的無(wú)效指令的數(shù)量。比如在ID階段判定分支后,延遲一個(gè)周期就可以開(kāi)始執(zhí)行分支指向的下一條指令。</p><p> 因?yàn)樵谧x取下一條指令前需要確定PC寄存器的值,即使在ID階段判定分支也會(huì)產(chǎn)生一個(gè)周期的延遲。延遲期間會(huì)讓流水線傳送無(wú)效數(shù)據(jù)。流水線冒泡會(huì)浪費(fèi)硬件資源,因此可以采用延遲分支的方法,許可分支指令的下一條指令執(zhí)行。延遲分支是指將分
49、支指令執(zhí)行后并不立刻跳轉(zhuǎn)到分支結(jié)果指向的指令,在分支指令的下一條指令執(zhí)行完畢后再進(jìn)行跳轉(zhuǎn)。分支指令的下一條指令被稱為延遲間隙,不論分支是否成立都會(huì)被執(zhí)行。使用延遲分支可以避免流水線冒泡,使操作的處理更有效率。一般的分支與延遲分支和采用了延遲分支的流水線執(zhí)行過(guò)程如圖所示。</p><p> 圖 2-5 采用了延遲分支的流水線執(zhí)行過(guò)程</p><p> 2.4 RISC CPU的總體設(shè)計(jì)
50、</p><p><b> 總體設(shè)計(jì)框圖</b></p><p> 圖 2-6 總體設(shè)計(jì)方案</p><p> IF(Instruction Fetch)階段</p><p> 將PC的值發(fā)送到內(nèi)存,讀取指令。</p><p> ID(Instruction Decode)階段</
51、p><p> 將讀取到的指令解碼并決定將要進(jìn)行的操作,從寄存器堆讀取數(shù)據(jù)。</p><p> EX(Execution)階段</p><p> 使用運(yùn)算器執(zhí)行操作。</p><p> MEM(Memory Access)階段</p><p><b> 進(jìn)行內(nèi)存訪問(wèn)。</b></p>
52、;<p> WB(Write Back)</p><p> 將結(jié)果寫(xiě)回寄存器堆。 </p><p> 二、總體設(shè)計(jì)的主要內(nèi)容</p><p><b> 1指令集的選取原則</b></p><p><b> ?。ㄒ唬┚?jiǎn)指令系統(tǒng)</b></p><p>
53、 ?。ǘ┎捎眉拇嫫?-寄存器工作方式(除Load/Store指令訪問(wèn)存儲(chǔ)器外)</p><p> ?。ㄈ┲噶钤谝粋€(gè)周期完成并采用流水線技術(shù)。</p><p> ?。ㄋ模┦褂幂^多的通用寄存器</p><p> (五)大多采用硬連線控制[9]。 </p><p> 2指令集的分類(lèi)及格式</p><p><b&
54、gt; 指令集的分類(lèi)</b></p><p> ?、偎阈g(shù)邏輯運(yùn)算操作指令:空操作(NOP)、寄存器間的加(ADDR)、寄存器與立即數(shù)之間的加(ADDI)、寄存器之間的減(SUBR)、寄存器與立即數(shù)之間的減(SUBI)、寄存器之間的邏輯與(ANDR)、寄存器與立即數(shù)之間的邏輯與(ANDI)、寄存器之間邏輯或(ORR)、寄存器與立即數(shù)之間的邏輯或(ORI)、寄存器之間的邏輯異或(XORR)、寄存器與立即
55、數(shù)之間的邏輯異或(XORI)、寄存器之間的賦值(MOVR)、寄存器與立即數(shù)之間的賦值(MOVI)、算數(shù)左移(ROL)、算數(shù)右移(ROR)。</p><p> ?、诖鎯?chǔ)器和IO操作指令:加載(LOAD)和存儲(chǔ)(STORE)。加載指令是把存儲(chǔ)器或IO端口數(shù)據(jù)加載到累加器中。存儲(chǔ)指令把累加器數(shù)據(jù)寫(xiě)到存儲(chǔ)器或IO端口[10]。</p><p> ?、劭刂浦噶睿簾o(wú)條件(JMP)和非零轉(zhuǎn)移(JNE)。
56、無(wú)條件轉(zhuǎn)移指令控制程序跳轉(zhuǎn)到目的地址開(kāi)始執(zhí)行。非零條件轉(zhuǎn)移指令時(shí),先判斷累加器的值,如果不為0,則跳轉(zhuǎn)到下一條指令開(kāi)始執(zhí)行,否則順序執(zhí)行。</p><p> ?、芷渌噶睿和C(jī)指令(STOP)。 </p><p><b> 具體指令見(jiàn)表1</b></p><p> 表格 2-7 指令集
57、
58、
59、 </p><p><b> 指令格式</b></p><p> 為了能夠擴(kuò)展更多的指令,立即數(shù)能夠表達(dá)更多的范圍,不受指令長(zhǎng)度的限制,本課題中采用了26位長(zhǎng)的指令,指令格式見(jiàn)表2。</p><p> 表格 1-8 指令格式</p><p> 指令的高5位表示操作碼,
60、最多可擴(kuò)展至32條指令;RA和RB是通用寄存器地址,通過(guò)對(duì)通用寄存器堆進(jìn)行尋址,獲取數(shù)據(jù)參與算術(shù)邏輯運(yùn)算;dir、offset和imm組合用來(lái)表示立即數(shù),dir表示算術(shù)循環(huán)的方向,算數(shù)循環(huán)左移或右移,offset代表移多少位,imm代表8位位圖??偟膩?lái)說(shuō),立即數(shù)的表示范圍為8位立即數(shù)循環(huán)左移或右移0~15位。</p><p><b> 尋址模式</b></p><p&g
61、t; 在本設(shè)計(jì)中,主要用到了一下兩種尋址方式:</p><p> 寄存器尋址:其操作數(shù)是某寄存器,主要用于算術(shù)邏輯運(yùn)算指令;</p><p> 立即數(shù)尋址:其操作數(shù)是立即數(shù),主要用作跳轉(zhuǎn)指令的地址。或作為常數(shù)參與算術(shù)邏輯運(yùn)算。 </p><p><b> 3 FPGA設(shè)計(jì)</b&
62、gt;</p><p> 3.1 頂層模塊的設(shè)計(jì)</p><p> 整個(gè)系統(tǒng)劃分為兩個(gè)部分:一部分是數(shù)據(jù)單元,另一部分是控制單元。其中數(shù)據(jù)單元包含保存運(yùn)算數(shù)據(jù)和運(yùn)算結(jié)果的寄存器和用來(lái)完成數(shù)據(jù)運(yùn)算的執(zhí)行單元;控制單元是處理器系統(tǒng)的核心單元,準(zhǔn)確無(wú)誤的產(chǎn)生數(shù)據(jù)通路所需的控制信號(hào)[11],在本設(shè)計(jì)中由于沒(méi)有實(shí)現(xiàn)中斷的功能,所以控制器的作用大大降低。</p><p>
63、 譯碼器相當(dāng)于正真的控制器,產(chǎn)生各種控制信號(hào)。</p><p> 頂層模塊由分頻模塊、程序存儲(chǔ)器、取指譯碼流水線寄存器、譯碼器、通用寄存器組、譯碼寄存器、算數(shù)邏輯運(yùn)算單元、執(zhí)行存儲(chǔ)流水線寄存器、多路選擇器、數(shù)據(jù)存儲(chǔ)器、存儲(chǔ)回寫(xiě)流水線寄存器、控制器組成。 </p><p> 3.1.1 分頻模塊</p><p> 圖 3-1 分頻模塊</p>
64、<p> 作用:主要是對(duì)系統(tǒng)時(shí)鐘進(jìn)行12分頻。因?yàn)镃PU的主頻過(guò)高的話,刷新LCD12864的時(shí)候會(huì)出現(xiàn)亂碼,如果將主頻降低12倍之后,就不會(huì)出現(xiàn)亂碼。功能:主要是用于分頻,將系統(tǒng)的時(shí)間降下來(lái)。</p><p> 3.1.2 程序存儲(chǔ)器</p><p> 圖 3-2 程序存儲(chǔ)器</p><p> 作用:程序存儲(chǔ)器是存放指令的地方,地址總線位寬為
65、12位,最大尋址范圍為212=4096。指令的長(zhǎng)度為26位。這里沒(méi)有采用調(diào)用Block ROM IP核的方式進(jìn)行存儲(chǔ),而是直接使用寄存器組進(jìn)行查表的方法,二進(jìn)制代碼對(duì)于編程者可見(jiàn),這樣方便編寫(xiě)程序以及查找錯(cuò)誤。</p><p> 功能:主要是存放指令,每一個(gè)時(shí)鐘周期進(jìn)行一次取指。 </p><p> 3.1.3 IF/ID流水線寄存器</p><p> 圖
66、3-3 IF/ID流水線寄存器</p><p> 作用:將上一級(jí)產(chǎn)生指令insn進(jìn)行寄存。同時(shí)還接收來(lái)自ctrl控制器的刷新信號(hào)和來(lái)自ID譯碼器阻塞信號(hào)(刷新是讓所有的寄存器都復(fù)位,重新啟動(dòng)流水線。阻塞是讓某個(gè)寄存器保持一個(gè)周期)。PC地址更新也在這個(gè)地方。</p><p> 內(nèi)部集成了一個(gè)多路選擇器。 </p><p> PC地址的來(lái)源有三個(gè):</p
67、><p> ?、俪绦蝽樞驁?zhí)行時(shí),存放指令地址的寄存器PC;</p><p> ②譯碼器傳來(lái)的跳轉(zhuǎn)指令;</p><p> ?、壑袛嗟刂罚ūA?,待實(shí)現(xiàn))。</p><p> 功能:將上一級(jí)的信號(hào)進(jìn)行緩沖,PC地址更新。</p><p> 3.1.4 DEC譯碼器</p><p><b>
68、; 圖 3-4 譯碼器</b></p><p> 作用:譯碼器是CPU中最復(fù)雜的單元,主要是對(duì)上一級(jí)傳來(lái)的指令進(jìn)行譯碼,根據(jù)不同指令產(chǎn)生不同的控制信號(hào)。譯碼器在接收到指令后,首先對(duì)指令的各字段進(jìn)行分析,將指令的操作碼部分提供給內(nèi)部控制單元,根據(jù)源操作數(shù)和目的操作數(shù)的地址從通過(guò)寄存器組中獲取執(zhí)行單元所需的數(shù)據(jù),并根據(jù)指令確定回寫(xiě)時(shí)的目的。將立即數(shù)進(jìn)行擴(kuò)展成16位。</p><p&
69、gt; 主要是對(duì)來(lái)自IF階段的指令進(jìn)行解碼,同時(shí)還接收來(lái)自EXE階段和MEM階段的直通,在這里對(duì)跳轉(zhuǎn)指令進(jìn)行判斷,在下一個(gè)周期之前跳轉(zhuǎn)。</p><p> 分支的判定在ID階段進(jìn)行。我們采用了延遲分支機(jī)制,也就是說(shuō),分支指令的下一條被作為延遲間隙執(zhí)行,以規(guī)避控制冒險(xiǎn)。EX階段和MEM階段的處理結(jié)果也可以直通到ID階段,以規(guī)避數(shù)據(jù)冒險(xiǎn)。流水線寄存器的停滯與刷新和流水線的控制操作由控制單元負(fù)責(zé)。</p>
70、;<p> 26位的指令,高5位代表指令操作。對(duì)于運(yùn)算類(lèi)的雙操作指令來(lái)說(shuō),12~20位中包含有通用寄存器的地址,通過(guò)對(duì)通用寄存器尋址,可以得到兩個(gè)16位的數(shù)據(jù)。如果是Load指令,就是將數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)載入到寄存器中。因此,低八位中包含寄存器的地址和數(shù)據(jù)存儲(chǔ)器的地址。如果是Store指令,就是將寄存器中的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)器中。因此,低八位中高四位作為寄存器的地址,取出一個(gè)16位的數(shù)據(jù),然后將數(shù)據(jù)傳到存儲(chǔ)級(jí)。 <
71、/p><p> 包括立即數(shù)生成模塊,分支處理模塊,地址生成模塊。</p><p><b> 立即數(shù)生成模塊:</b></p><p> 使用非阻塞賦值,能夠?qū)崿F(xiàn)對(duì)立即數(shù)進(jìn)行擴(kuò)展。實(shí)現(xiàn)8位立即數(shù)循環(huán)左移或右移16位。</p><p> 圖 3-5 立即數(shù)生成模塊</p><p><b>
72、; 分支處理語(yǔ)句:</b></p><p> 當(dāng)轉(zhuǎn)移條件成立時(shí),能夠?qū)⒎种У刂贩祷氐絀F/ID流水線寄存器。</p><p> 圖 3-6 分支跳轉(zhuǎn)代碼</p><p><b> 地址生成語(yǔ)句:</b></p><p> 圖 3-7 地址生成代碼</p><p> 3.1.
73、6 通用寄存器組</p><p> 圖 3-8 通用寄存器組</p><p> 作用:用于保存源操作數(shù)和運(yùn)算結(jié)果。通用寄存器組包含16*16bit的數(shù)據(jù),具有兩組讀數(shù)據(jù)地址數(shù)據(jù)總線和一組寫(xiě)數(shù)據(jù)地址數(shù)據(jù)總線。讀數(shù)據(jù)由于使用組合邏輯,幾乎沒(méi)有延時(shí),數(shù)據(jù)能夠及時(shí)更新。對(duì)于寫(xiě)數(shù)據(jù)采用時(shí)序電路,在上升沿更新。</p><p> 主要存放臨時(shí)數(shù)據(jù),R15在函數(shù)調(diào)用時(shí),用來(lái)
74、存儲(chǔ)當(dāng)前PC的下一條指令,以供函數(shù)返回。寄存器有16個(gè),R15在函數(shù)調(diào)用時(shí),作為SP鏈接地址存放返回指針,函數(shù)返回時(shí),將R15中數(shù)據(jù)加上偏移量賦給PC,跳轉(zhuǎn)到函數(shù)調(diào)用之前的下一個(gè)地址。沒(méi)有調(diào)用函數(shù)時(shí),R15可用做通用寄存器使用,當(dāng)函數(shù)調(diào)用時(shí),R15會(huì)將函數(shù)調(diào)用前的下一條指令保存到R15寄存器中,供返回使用。由于可能會(huì)遇到多層函數(shù)調(diào)用,因此在每次進(jìn)入函數(shù)之后首先必須將R15壓棧,在返回函數(shù)執(zhí)行之前,將堆棧的中數(shù)據(jù)彈出,從而實(shí)現(xiàn)多層函數(shù)調(diào)用
75、。</p><p> 這里設(shè)計(jì)了兩個(gè)讀端口,一個(gè)寫(xiě)端口。對(duì)寄存器堆的讀寫(xiě)主要通過(guò)寄存器號(hào)來(lái)進(jìn)行,讀取寄存器是不會(huì)更改其內(nèi)容的。而對(duì)于往寄存器中寫(xiě)數(shù)據(jù),需控制何時(shí)寫(xiě)入,所以除了寄存器號(hào)以外,所寫(xiě)數(shù)據(jù)及寫(xiě)控制信號(hào)也是必不可少的。核心控制單元負(fù)責(zé)處理器中全部其他五個(gè)部件的協(xié)調(diào)工作,控制指令和數(shù)據(jù)流按照取值、譯碼、執(zhí)行、回寫(xiě)的順序正確執(zhí)行,同時(shí)負(fù)責(zé)其他外圍信號(hào)的處理。</p><p> 3.1
76、.7 ID/EXE流水線寄存器</p><p> 圖 1-9 ID/EXE流水線寄存器</p><p> 作用:主要是對(duì)上一級(jí)的數(shù)據(jù)進(jìn)行緩沖。譯碼執(zhí)行流水線寄存器。唯一特殊的部分是有一個(gè)刷新端。當(dāng)刷新端有效時(shí),所有的數(shù)據(jù)被賦初值。</p><p> 3.1.8 ALU算術(shù)邏輯單元:</p><p> 圖 3-10 ALU算術(shù)邏輯單
77、元</p><p> 作用:完成對(duì)2個(gè)操作數(shù)A和B的運(yùn)算,包括算術(shù)運(yùn)算、邏輯運(yùn)算和移位運(yùn)算,輸出運(yùn)算結(jié)果,比較運(yùn)算,并且生成n、z、c、v標(biāo)志位控制信號(hào)[12]。執(zhí)行單元是微處理器處理數(shù)據(jù)的核心部分,數(shù)據(jù)寬度為16位,具有加、減、乘邏輯運(yùn)算和移位功能。</p><p> 功能:根據(jù)來(lái)自上一級(jí)寄存器中的算數(shù)邏輯操作碼,對(duì)兩個(gè)操作數(shù)進(jìn)行不同的操作。包括直通、加法、減法、與、或、非、異或、算
78、數(shù)左移、算數(shù)右移等。</p><p> 3.1.9 EXM/MEM流水線寄存器</p><p> 圖 3-11 EXE/MEM流水線寄存器</p><p> 功能:主要是將計(jì)算得到的結(jié)果進(jìn)行緩沖,以及回寫(xiě)的地址和使能端、存儲(chǔ)的地址、數(shù)據(jù)、使能端。具有刷新端,當(dāng)刷新端有效時(shí),所有的寄存器都被清零。</p><p> 3.1.10 RA
79、M數(shù)據(jù)存儲(chǔ)器</p><p> 圖 3-12 RAM數(shù)據(jù)存儲(chǔ)器</p><p> 作用:存儲(chǔ)數(shù)據(jù),與外部進(jìn)行通信。</p><p> GPIO作為數(shù)據(jù)存儲(chǔ)器的一部分被編址,GPIO可以分為輸入端口、輸出端口、輸入輸出端口,本設(shè)計(jì)中只設(shè)計(jì)了輸入端口、輸出端口?;旧蠈?shí)現(xiàn)了與外界的通信。</p><p> 3.1.12 多路選擇器<
80、;/p><p> 圖 3-13 多路選擇器</p><p> 作用:通過(guò)存儲(chǔ)的片選端判斷當(dāng)前的指令是算數(shù)邏輯指令還是存儲(chǔ)指令。</p><p> 3.1.13 MEM/WB流水線寄存器</p><p> 圖 3-14 MEM/WB流水線寄存器</p><p> 存儲(chǔ)回寫(xiě)寄存器:主要是將要回寫(xiě)到通用寄存器中的數(shù)據(jù)
81、進(jìn)行緩沖。下一個(gè)周期將其寫(xiě)入指定的寄存器中。</p><p> 3.1.14 堆棧的設(shè)計(jì):</p><p><b> 圖 3-15 堆棧</b></p><p> 作用:堆棧是用來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù)。</p><p> 一般在對(duì)函數(shù)進(jìn)行調(diào)用時(shí),可能會(huì)存在函數(shù)嵌套的問(wèn)題,因在函數(shù)中再次調(diào)用其他函數(shù)而導(dǎo)致返回地址的丟失。如
82、果在進(jìn)行函數(shù)之前將PC的地址進(jìn)行壓棧,函數(shù)返回之前進(jìn)行出棧,可以有效的解決函數(shù)嵌套的問(wèn)題。堆棧的深度只有16級(jí),由于沒(méi)有異常處理,因此在編程的時(shí)候需注意堆棧溢出。</p><p> 這里的堆棧只是簡(jiǎn)單的采用了雙向移位寄存器。圖3-16為堆棧的仿真測(cè)試圖,</p><p> 將4個(gè)數(shù)分別依次壓入棧中,然后依次取出,從仿真結(jié)果可知,堆棧數(shù)據(jù)無(wú)異常。</p><p>
83、 圖 3-16 堆棧仿真測(cè)試圖</p><p> 3.1.15 控制器</p><p> 圖 3-17 控制器</p><p> 作用:控制器主要負(fù)責(zé)回寫(xiě)操作。產(chǎn)生Load冒險(xiǎn)信號(hào)。</p><p> 由于沒(méi)有中斷處理機(jī)制,控制器的功能有所弱化。本設(shè)計(jì)中控制器主要用于控制通用寄存器的回寫(xiě)操作。回寫(xiě)單元在設(shè)計(jì)中是不可見(jiàn)的,其功能已隱含
84、到寄存器堆中,這樣執(zhí)行單元在接收下一個(gè)運(yùn)算命令的同時(shí),寄存器堆將上一個(gè)結(jié)果保存起來(lái)。</p><p><b> 3.2 整體測(cè)試</b></p><p> 本設(shè)計(jì)采用實(shí)驗(yàn)室自主設(shè)計(jì)的SP6開(kāi)發(fā)板進(jìn)行硬件實(shí)現(xiàn),開(kāi)發(fā)板上所使用的芯片型號(hào)為Spartan6 LX9。</p><p> 通過(guò)對(duì)在程序程序存儲(chǔ)器中寫(xiě)程序,可以實(shí)現(xiàn)相應(yīng)的功能,再次編寫(xiě)
85、LCD12864驅(qū)動(dòng)。本次測(cè)試的主要功能是簡(jiǎn)單的計(jì)算器。鍵盤(pán)通過(guò)PS2協(xié)議與</p><p> CPU進(jìn)行通信。調(diào)用FPGA內(nèi)部的PS2模塊來(lái)將鍵盤(pán)對(duì)應(yīng)的鍵值進(jìn)行譯碼,然后直接傳送到RISC CPU進(jìn)行相應(yīng)的操作,最終實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能。圖3-19為初始化時(shí)的界面。</p><p> 圖 3-19 實(shí)驗(yàn)現(xiàn)象</p><p><b> 結(jié)論</
86、b></p><p> 本文主要介紹了EDA嵌入式開(kāi)發(fā)板案例設(shè)計(jì)----綜合模塊之一的RISC CPU的設(shè)計(jì)。通過(guò)對(duì)RISC CPU設(shè)計(jì)過(guò)程中出現(xiàn)的流水線冒險(xiǎn)進(jìn)行分析,并解決相應(yīng)的問(wèn)題,最終實(shí)現(xiàn)了RISC CPU的設(shè)計(jì),并在自制的FPGA開(kāi)發(fā)板SP6實(shí)現(xiàn)計(jì)算器的功能。通過(guò)對(duì)RISC CPU的了解,查閱大量書(shū)籍,終于明白了流水線的意義。先對(duì)指令集進(jìn)行了劃分,然后根據(jù)指令集將CPU劃分為5個(gè)階段,取指、譯碼、
87、執(zhí)行、存儲(chǔ)、回寫(xiě)。這5個(gè)階段。同時(shí)也對(duì)應(yīng)于5級(jí)流水。通過(guò)對(duì)RISC CPU的制作。使我對(duì)CPU有了進(jìn)一步的了解。實(shí)現(xiàn)功能:</p><p> 本文設(shè)計(jì)的RISC CPU能夠執(zhí)行簡(jiǎn)單的算術(shù)運(yùn)算(加減法運(yùn)算)、邏輯運(yùn)算(與、或、非、異或)、跳轉(zhuǎn)(直接跳轉(zhuǎn)、條件跳轉(zhuǎn))、堆棧處理,基本上實(shí)現(xiàn)了簡(jiǎn)單CPU的功能,能夠?qū)崿F(xiàn)函數(shù)的調(diào)用和堆棧的壓棧。當(dāng)然還有一些不完善處,本CPU沒(méi)有中斷機(jī)制,不能處理中斷。由于匯編器比較簡(jiǎn)單,
88、沒(méi)有使用復(fù)雜的算法,在編寫(xiě)跳轉(zhuǎn)指令時(shí),只能通過(guò)手動(dòng)添加NOP指令來(lái)實(shí)現(xiàn)無(wú)延時(shí)跳轉(zhuǎn)。期望,后期能夠?qū)⒅袛嗉舆M(jìn)去,豐富指令,擴(kuò)展功能。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 劉覽,鄭步生,施慧彬.基于FPGA的32位RISC微處理器設(shè)計(jì) [J].數(shù)據(jù)采集與處理,20011,26(3):367-373.</p><p&
89、gt; [2] 周敏,付慧生,李雪峰.基于流水線的RISC微處理器設(shè)計(jì)[J].大眾科技,</p><p> 2006,5(91):55-57.</p><p> [3] 曲英杰.RISC處理機(jī)設(shè)計(jì)方法研究 [J].科技信息,2010(33):26-26.</p><p> [4] 汪濤,徐正安.基于FPGA的RISC的設(shè)計(jì)和仿真.微機(jī)型與應(yīng)用.2012,31
90、(15).</p><p> [5] 錢(qián)彬豐,汪西川.一款RISC型流水線MCU的設(shè)計(jì)與實(shí)現(xiàn) [J].儀器儀表,2008(9):20-22.</p><p> [6] 馬軍爽.基于FPGA的16位CPU設(shè)計(jì) [J].山東工業(yè)技術(shù).2013(14):237-241.</p><p> [7] 龍慧民,吳靜.基于FPGA的RISC CPU設(shè)計(jì).兵工自動(dòng)化.2006
91、,25(12).</p><p> [8] 姚愛(ài)紅,孫孟哲,吳劍.16位嵌入式微處理器核的設(shè)計(jì)及驗(yàn)證.計(jì)算機(jī)工程.2010,36(23):234-239.</p><p> [9] 雷少波,黃民. 16位嵌入式RISC微處理器設(shè)計(jì) [J]. 微型機(jī)與應(yīng)用.2013,32(7).</p><p> [10] 王海涌,徐樹(shù).基于FPGA的RISC CPU設(shè)計(jì).大眾
92、科技.2010(1):33-34.</p><p> [11] 李麗,高明倫,張多利,程作仁.8位RISC微控制器IP軟核的設(shè)計(jì) [J].微電子學(xué)與計(jì)算機(jī).2001(3).</p><p> [12] 郭怡慧,張立朝,戴紫彬.RISC微處理器指令擴(kuò)展接口設(shè)計(jì).小型微型計(jì)算機(jī)系統(tǒng).2014,8(8):1827:1830.</p><p> [13] 曹蓓,黃海生
93、.一種基于FPGA的SOC設(shè)計(jì)與實(shí)現(xiàn) [J].電子設(shè)計(jì)工程.2014,22(2):16-19.</p><p> [14] 水頭一壽(日),米澤遼(日),藤田裕士(日).CPU自制入門(mén) [M]. 北京:人民郵電出版社,2014.</p><p> [15] 王育堅(jiān).VC++面向?qū)ο缶幊探坛蘙M].清華大學(xué)出版社,2007.</p><p><b>
94、致謝</b></p><p> 時(shí)光飛逝,轉(zhuǎn)眼大學(xué)四年學(xué)習(xí)即將結(jié)束?;厥状髮W(xué)學(xué)習(xí)期間的校園學(xué)習(xí)生活,在知識(shí)的海洋里汲取營(yíng)養(yǎng)和體味獲取知識(shí)的充實(shí)與喜悅,不禁感慨萬(wàn)千。</p><p> 大學(xué)四年轉(zhuǎn)眼間就過(guò)去了,回首大學(xué)四年時(shí)光,我是幸運(yùn)的。</p><p> 大一的時(shí)候,我還懵懵懂懂,找不到未來(lái)的方向。大三下學(xué)期的一次校電子競(jìng)賽徹底改變了我的生活。那
95、時(shí),我和另外2位同伴一起參加。至此我的大學(xué)生活就與其他同學(xué)完全不同。我的絕大部分時(shí)間都在實(shí)驗(yàn)室度過(guò)。雖然實(shí)驗(yàn)室的生活很枯燥,很單調(diào),很乏味,但那種學(xué)到手的內(nèi)心充實(shí),是普通的玩樂(lè)所無(wú)法提供的。</p><p> 由衷感謝從始至終都教育我,指導(dǎo)我的朱耀東老師,以及和我一起學(xué)習(xí),一起在實(shí)驗(yàn)室成長(zhǎng)的同學(xué)們。謝謝大家!</p><p><b> 附錄</b></p&g
96、t;<p> 附錄圖1 實(shí)驗(yàn)平臺(tái)</p><p> 附錄圖2 頂層文件結(jié)構(gòu)框圖</p><p> 附錄圖3:實(shí)際的框圖</p><p> 附錄4 部分測(cè)試代碼</p><p> architecture Behavioral of ROM is</p><p> type mem
97、_program is array(0 to 188)of std_logic_vector(25 downto 0);</p><p> signal mem : mem_program:= --地址 </p><p> (--開(kāi)始跳轉(zhuǎn)(0000000)</p><p> "10010000000000000010100000",--0
98、JMPI MAIN; "00000000000000000000000000", --1 NOP </p><p> --保留 (0000010)</p><p> "10010000000000000000000000",--2 JMPI xxx 外部中斷 </p>
99、<p> "00000000000000000000000000", -- 3 NOP </p><p> "10010000000000000000000000",-- 4JMPI xxx串口中斷 </p><p> "00000000000000000000000
100、000", -- 5 NOP </p><p> "10010000000000000000000000",--6JMPIx定時(shí)器中斷 </p><p> "00000000000000000000000000", -- 7 NOP</p><p> --
101、延時(shí)函數(shù) (0001000)</p><p> "11101111100000000000000000", -- 8 PUSH PC;</p><p> "00010000100000010110011100",--9DELAY:MOVI R1,5000; </p><p> "001100001000
102、00000000000001",--10LOOP1:SUBI R1,1; </p><p> "10100000000000000000001010",--11 JNEI LOOP1; </p><p> "00000000000000000000000000"
103、, --12 NOP; </p><p> "00110001100000000000000001",--13 SUBI R3,1; </p><p> "10100000000000000000001001",--14JNEI DELA
104、Y;</p><p> "00000000000000000000000000", --15 NOP; </p><p> "11110111100000000000000000", --16 POP PC;</p><p> "11100111100000000000000000", --17
105、RET R15; "00000000000000000000000000", --18 NOP; </p><p> --發(fā)送指令 (R7)(0010011)</p><p> "11101111100000000000000000", --19 PUSH PC;</p><p> "0001000
106、0100000000000000000", --20 COM MOVI R1,0; </p><p> "11010000100000000000000000", --21 STORE R1,M0; </p><p> "00010000100000000000000000", --22 MO
107、VI R1,0; </p><p> "11010000100010000000000000", --23 STORE R1,M1; </p><p> "00001000101110000000000000", --24 MOVR R1,R7; </p><p> "11010
108、000100110000000000000", --25 STORE R1,M3; </p><p> "00010000100000000000000001", --26 MOVI R1,1;</p><p> "11010000100100000000000000", --27 STORE R1,M2
109、; </p><p> "00010001100000000000000101", --28 MOVI R3,5; </p><p> "11011000000000000000001000", --29 CALL DELAY;</p><p> "00000000000000
110、000000000000", --30 NOP; </p><p> "00010000100000000000000000", --31 MOVI R1,0; </p><p> "11010000100100000000000000", --32 STORE R1,M2;
111、 </p><p> "11110111100000000000000000", --33 POP PC;</p><p> "11100111100000000000000000", --34 RET R15; </p><p> "000000000000000000
112、00000000", --35 NOP; </p><p> --發(fā)送數(shù)據(jù) (R7)(100100)</p><p> "11101111100000000000000000", --36 PUSH PC;</p><p> "00010000100000000000000001", --3
113、7 DAT: MOVI R1,1; </p><p> "11010000100000000000000000", --38 STORE R1,M0; </p><p> "00010000100000000000000000", --39 MOVI R1,0; </p><p>
114、 "11010000100010000000000000",--40 STORE R1,M1; </p><p> "00001000101110000000000000", --41 MOVR R1,R7; </p><p> "11010000100110000000000000", -
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文——eda嵌入式實(shí)驗(yàn)開(kāi)發(fā)板案例設(shè)計(jì)---綜合模塊
- 電子信息工程畢業(yè)設(shè)計(jì)eda嵌入式實(shí)驗(yàn)開(kāi)發(fā)板案例設(shè)計(jì)---綜合模塊
- 電子信息工程畢業(yè)論文eda嵌入式實(shí)驗(yàn)開(kāi)發(fā)板案例設(shè)計(jì)---綜合模塊
- eda開(kāi)發(fā)板經(jīng)費(fèi)
- 嵌入式開(kāi)發(fā)板測(cè)試項(xiàng)目管理模型.pdf
- eda開(kāi)發(fā)板經(jīng)費(fèi)
- 基于s3c2410x嵌入式教學(xué)實(shí)驗(yàn)開(kāi)發(fā)板的設(shè)計(jì)與制作
- CK510嵌入式軟件開(kāi)發(fā)板的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Cortex-A8架構(gòu)嵌入式開(kāi)發(fā)板的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于國(guó)產(chǎn)龍芯GS32I的開(kāi)發(fā)板的設(shè)計(jì)與嵌入式Linux的移植.pdf
- 嵌入式視頻模塊的研究與開(kāi)發(fā).pdf
- ARM9實(shí)驗(yàn)開(kāi)發(fā)板設(shè)計(jì).pdf
- 嵌入式實(shí)驗(yàn)
- 【嵌入式】android嵌入式底層開(kāi)發(fā)大綱
- 嵌入式醫(yī)用儀器測(cè)量模塊開(kāi)發(fā)平臺(tái).pdf
- 模塊式電源嵌入式監(jiān)控系統(tǒng)設(shè)計(jì).pdf
- 基于dsp2812的實(shí)驗(yàn)開(kāi)發(fā)板設(shè)計(jì)
- 嵌入式驅(qū)動(dòng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)書(shū)
- 試析飛思卡爾嵌入式教學(xué)綜合實(shí)驗(yàn)的開(kāi)發(fā)研究
- 嵌入式高速接口模塊的設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論