




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、xx大學(xué) 畢業(yè)設(shè)計(jì)論文題 目: 基于VHDL語(yǔ)言的 RISC-CPU系統(tǒng)設(shè)計(jì) 學(xué) 院:電氣與電子工程學(xué)院 專 業(yè):電子信息工程 學(xué)生姓名: 指導(dǎo)教師: 畢業(yè)設(shè)計(jì)時(shí)間:二 九 年 二 月 二十三 日 六 月 十四 共 十 七 周摘 要本課題利用CPLD做載體,借助MAX+PLUS軟件平臺(tái),完成了RISC-CPU系統(tǒng)的設(shè)計(jì)。本文主要闡述了應(yīng)用CPLD技術(shù)實(shí)現(xiàn)這一IP核的設(shè)計(jì)方法。RISC即精簡(jiǎn)指令集計(jì)算機(jī)Reduced Instruction Set Computer的縮寫,RISC-CPU與一般的CPU相比不僅只是簡(jiǎn)化了指令系統(tǒng),而且是通過簡(jiǎn)化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加合理,從而提高了運(yùn)算速度。
2、本課題采用硬件描述語(yǔ)言VHDL設(shè)計(jì)了8位RISC-CPU系統(tǒng),采用自頂向下Top-down的設(shè)計(jì)方法,根據(jù)設(shè)計(jì)流程,首先將RISC-CPU劃分成八個(gè)根本功能模塊。然后對(duì)各個(gè)模塊進(jìn)行VHDL代碼描述,再應(yīng)用開發(fā)系統(tǒng)中的各種工具進(jìn)行編譯、功能仿真、邏輯綜合、時(shí)序仿真、布局布線等,并最終給出了指令執(zhí)行的仿真波形,驗(yàn)證了CPU指令的功能。設(shè)計(jì)說明應(yīng)用CPLD技術(shù)實(shí)現(xiàn)RISC-CPU系統(tǒng)設(shè)計(jì)的方法是完全可行的。關(guān)鍵詞:復(fù)雜可編程邏輯器件,VHDL語(yǔ)言,RISC-CPUAbstractBased on MAX+PLUS and CPLD (Complex Programmable Logic Device
3、s),an IP Core Compatible with instructions of RISC-CPU was designed. This thesis mainly researches a method that uses CPLD technology to design the IP core.RISC is the acronym of Reduced Instruction Set Computer.Compared with the common CPU,RISC not only simplifies the instruction set but also makes
4、 the computer construction simpler and more reasonable.Consequently it increases the work frequency.Part of 8 bits RISC-CPU was designed with VHSIC hardware description language(VHDL). This paper uses the Top-down design method. According to the designing course, firstly, RISC-CPU was divided into e
5、ight modules that the function was single.Secondly, every module was described with VHDL. Then all programs were synthesized and simulated with Quartus II ,and the simulation waves are also provided. As a result,the mehtod that uses VHDL to form the strcture of RISC-CPU is feasible.Keywords: CPLD, V
6、HDL,RISC-CPU 目 錄摘 要IAbstractII目 錄III第一章緒論1課題的背景及意義1國(guó)內(nèi)外研究現(xiàn)狀2本設(shè)計(jì)的主要內(nèi)容2第二章RISC-CPU系統(tǒng)及設(shè)計(jì)方案32.1 RISC的特點(diǎn)32.2 RISC-CPU根本框架32.3 RISC-CPU系統(tǒng)的設(shè)計(jì)方案5第三章八位RISC-CPU各模塊設(shè)計(jì)及仿真83.1 時(shí)鐘電路83.2 累加器103.3 算術(shù)邏輯運(yùn)算單元(ALU)123.4 指令存放器163.5 狀態(tài)控制電路183.6 數(shù)據(jù)控制電路293.7 程序計(jì)數(shù)器303.8 地址多路器32第四章RISC-CPU的綜合及操作時(shí)序344.1 RISC-CPU的綜合344.2 CPU復(fù)位啟
7、動(dòng)操作時(shí)序38第五章設(shè)計(jì)結(jié)論及展望39參考文獻(xiàn)40致謝41第一章 緒論隨著信息產(chǎn)業(yè)的飛速開展,以軟硬件協(xié)同設(shè)計(jì)(Software/Hardware Co-Design ),IP核復(fù)用(Intellectual Property Core Reuse)和超深亞微米技術(shù)(Very Deep Sub-M)為支撐的SOC(系統(tǒng)級(jí)芯片System-On-a-Chip)成為集成電路開展的主流。本文以SOC關(guān)鍵技術(shù)之一嵌入式IP和設(shè)計(jì)技術(shù)為研究的出發(fā)點(diǎn),以八位RISC-CPU IP核的設(shè)計(jì)為目標(biāo),對(duì)IP核的設(shè)計(jì)技術(shù)進(jìn)行了實(shí)踐與研究。1.1 課題的背景及意義隨著可編程邏輯芯片與基于IP(知識(shí)產(chǎn)權(quán))的SOC片上
8、系統(tǒng)技術(shù)的開展,RISC軟核處理器的研究與設(shè)計(jì)越來(lái)越受到人們的重視。研究RISC軟核處理器的現(xiàn)實(shí)意義有以下幾方面:(1)對(duì)基于FPGA的嵌入式系統(tǒng)的開發(fā)具有現(xiàn)實(shí)意義。現(xiàn)在FPGA在各種嵌入式系統(tǒng)中發(fā)揮著越來(lái)越大的作用,F(xiàn)PGA的內(nèi)部邏輯也越來(lái)越復(fù)雜,導(dǎo)致了開發(fā)難度的增加。而應(yīng)用RISC軟核處理器來(lái)設(shè)計(jì)FPGA的內(nèi)部邏輯就可以大大降低設(shè)計(jì)的難度,并可以代替嵌入式系統(tǒng)中的硬處理器,從而可以把系統(tǒng)的大局部,甚至全部功能都做到一片F(xiàn)PGA中,使整個(gè)系統(tǒng)變得緊湊、小巧,并能提高系統(tǒng)的穩(wěn)定性。(2)對(duì)基于IP的SOC的設(shè)計(jì)開發(fā)具有一定的實(shí)用價(jià)值。SOC芯片的設(shè)計(jì)開發(fā)一般是基于IP模塊的復(fù)用來(lái)設(shè)計(jì)的,一個(gè)S
9、OC 芯片往往會(huì)包括一個(gè)內(nèi)嵌的RISC處理器,用來(lái)完成其核心處理功能。RISC軟核處理器的設(shè)計(jì)可以很方便的轉(zhuǎn)化成相應(yīng)的IP,從而可以用來(lái)設(shè)計(jì)SOC芯片。(3 )對(duì)商用RISC處理器的開發(fā)具有指導(dǎo)意義。RISC軟核處理器包括了所有RISC的根本技術(shù),給商用RISC處理器的開發(fā)提供了一個(gè)很好的框架。由于RISC軟核處理器在驗(yàn)證與修改上比擬方便,并且軟核處理器設(shè)計(jì)完成后,可以很方便的轉(zhuǎn)化成相應(yīng)硬處理器的前端設(shè)計(jì),因此可以用RISC軟核處理器的設(shè)計(jì)替代原來(lái)硬處理器的前端設(shè)計(jì),從而節(jié)省開發(fā)時(shí)間,并降低設(shè)計(jì)難度。由上可知,研究RISC軟核處理器是很有現(xiàn)實(shí)意義的。1.2 國(guó)內(nèi)外研究現(xiàn)狀目前國(guó)內(nèi)總體來(lái)說在IP
10、的開發(fā)和應(yīng)用方面做的不夠,但可喜的是,近年來(lái)國(guó)家己經(jīng)在IP產(chǎn)業(yè)上也有了很大的動(dòng)作??萍疾坑?000年啟動(dòng)了“十五國(guó)家在國(guó)家高技術(shù)研究開展863方案中,SOC作為微電子重大專項(xiàng)己列入了信息技術(shù)領(lǐng)域的重大專項(xiàng)啟動(dòng)工程中,在假設(shè)干關(guān)鍵IP核的開發(fā)、軟硬件協(xié)同設(shè)計(jì)、IP復(fù)用、VDSM設(shè)計(jì)、新工藝新器件等等方面都布置了預(yù)研性課題。CPU的IP核是構(gòu)成SOC技術(shù)的核心,開發(fā)出具有自主知識(shí)產(chǎn)權(quán)的CPU IP核對(duì)我國(guó)在電子設(shè)計(jì)技術(shù)方面跟上世界先進(jìn)的步伐,提高信息產(chǎn)業(yè)在世界上的核心競(jìng)爭(zhēng)力和效益具有重大意義。在國(guó)內(nèi),基于SOC的CPU設(shè)計(jì)研究很少有人涉足。雖然市場(chǎng)上應(yīng)用較為廣泛的微控制器、嵌入式處理器等都有了很成
11、熟的產(chǎn)品,但這些產(chǎn)品主要靠從國(guó)外引進(jìn),技術(shù)根底比擬薄弱。前不久,中芯微系統(tǒng)公司生產(chǎn)出我國(guó)第一個(gè)具有自主知識(shí)產(chǎn)權(quán)的實(shí)用化32位嵌入式CPU芯片“方舟一號(hào),這說明我國(guó)的RISC CPU設(shè)計(jì)在嵌入式領(lǐng)域到達(dá)了先進(jìn)水平。本設(shè)計(jì)的主要內(nèi)容本設(shè)計(jì)主要應(yīng)用VHDL語(yǔ)言實(shí)現(xiàn)八位RISC-CPU系統(tǒng)的設(shè)計(jì)。本論文詳細(xì)介紹了關(guān)于RISC-CPU的結(jié)構(gòu)以及利用硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)的的方法,通過對(duì)RISC-CPU結(jié)構(gòu)和指令執(zhí)行的分析將整個(gè)系統(tǒng)劃分為各個(gè)功能模塊,并說明各模塊間的接口信號(hào),給出了每個(gè)模塊內(nèi)部設(shè)計(jì)實(shí)現(xiàn)的詳細(xì)表達(dá),最后介紹對(duì)設(shè)計(jì)的綜合和驗(yàn)證工作,給出了仿真驗(yàn)證數(shù)據(jù)以及時(shí)序圖。第二章 RISC-CPU系統(tǒng)及設(shè)
12、計(jì)方案RISC-CPU的設(shè)計(jì),首先是架構(gòu)設(shè)計(jì)。首先要考慮:RISC指令集的特點(diǎn);RISC-CPU根本框架;然后由指令集特點(diǎn)及RISC-CPU根本框架得出RISC-CPU系統(tǒng)的設(shè)計(jì)方案。2.1 RISC的特點(diǎn)計(jì)算機(jī)體系結(jié)構(gòu)中的一個(gè)根本性的變革是RISC處理器的出現(xiàn)。RISC即精簡(jiǎn)指令集計(jì)算機(jī)(Reduced Instruction Set Computer)的縮寫。RISC-CPU與一般的CPU相比不僅只是簡(jiǎn)化了指令系統(tǒng),而且是通過簡(jiǎn)化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,RISC-CPU與一般的CPU的不同之處在于:它的時(shí)序控制信號(hào)形成部件是用硬布線邏輯實(shí)現(xiàn)的
13、而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控制序列的速度比用微程序控制方式快得多,因?yàn)檫@樣做省去了讀取微指令的時(shí)間。RISC處理器可以說既簡(jiǎn)單又復(fù)雜:簡(jiǎn)單之處在于,相比于復(fù)雜指令集CISC (Complex Instruction Set Computer,復(fù)雜指令系統(tǒng)計(jì)算機(jī)),這種處理器的指令和變量非常少,正如它的英文字母縮寫RISC所代表的“精簡(jiǎn)指令集的含義一樣;說RISC復(fù)雜,是因?yàn)樗鼈內(nèi)菀讓?shí)現(xiàn)更高的并行性,而這個(gè)特點(diǎn)只有與設(shè)計(jì)得很好的編譯器結(jié)合起來(lái),才能顯現(xiàn)出其優(yōu)越性。2.2 RISC-CPU根本框架雖然RISC-CPU采用
14、精簡(jiǎn)指令系統(tǒng)但是它具有和其它CPU一樣的根本功能,也就是其根本組成局部和一般的CPU相同由運(yùn)算器、控制器和存儲(chǔ)器組成。存儲(chǔ)器存放指令和數(shù)據(jù);數(shù)據(jù)通路包括ALU、程序計(jì)數(shù)器等,圖2-1 RISC-CPU根本結(jié)構(gòu)讀寫控制信號(hào)控制信號(hào)存儲(chǔ)器數(shù)據(jù)通路控制器指令狀態(tài)信號(hào)主要功能是對(duì)操作數(shù)進(jìn)行運(yùn)算,得到結(jié)果,并產(chǎn)生程序計(jì)數(shù)器的值,作為要執(zhí)行的下一條指令的地址;控制器內(nèi)有指令存放器,它對(duì)指令進(jìn)行譯碼,產(chǎn)生相應(yīng)的控制信號(hào),完成對(duì)存儲(chǔ)器和數(shù)據(jù)通路局部的控制。存儲(chǔ)器、數(shù)據(jù)通路和控制器這三局部的根本關(guān)系如圖2-1所示。 存儲(chǔ)器存儲(chǔ)器中存放了要執(zhí)行的指令和相應(yīng)數(shù)據(jù)。存儲(chǔ)器的讀寫信號(hào)由控制器給出。存儲(chǔ)器的地址來(lái)源有兩個(gè)
15、:程序計(jì)數(shù)器和指令存放器。在取新指令時(shí),用程序計(jì)數(shù)器的值作為存儲(chǔ)器地址:在執(zhí)行指令時(shí),用指令中的地址局部作為存儲(chǔ)器地址。 數(shù)據(jù)通路數(shù)據(jù)通路主要包括累加器、程序計(jì)數(shù)器和算術(shù)邏輯單元。累加器用于保存參加運(yùn)算的數(shù)據(jù)以及運(yùn)算的中間結(jié)果。實(shí)際上,累加器也是存放器,不過,它有特殊性,即許多指令執(zhí)行過程以累加器為中心。往往在運(yùn)算指令前,累加器中存放一個(gè)操作數(shù),指令執(zhí)行后,由累加器保存運(yùn)算結(jié)果。另外輸入輸出指令一般也通過累加器來(lái)完成。程序計(jì)數(shù)器指向下一條要執(zhí)行的指令。由于程序一般存放在內(nèi)存的一個(gè)連續(xù)區(qū)域,所以,順序執(zhí)行程序時(shí),每取一個(gè)指令字節(jié),程序計(jì)數(shù)器便加一。算術(shù)邏輯單元是專門用來(lái)處理各種運(yùn)算的數(shù)據(jù)信息的,
16、它可以進(jìn)行加、減、乘、除算術(shù)運(yùn)算和與、或、非、異或等邏輯運(yùn)算。 控制器控制器產(chǎn)生相應(yīng)的控制信號(hào)送到時(shí)序和控制邏輯電路,從而,組合成外部電路所需要的時(shí)序和控制信號(hào)。這些信號(hào)送往其他部件,以控制這些部件協(xié)調(diào)工作。實(shí)現(xiàn)RISC-CPU的設(shè)計(jì),將數(shù)據(jù)和程序指令序列統(tǒng)一存放在一個(gè)數(shù)據(jù)存儲(chǔ)器中。對(duì)圖2-1中的結(jié)構(gòu)進(jìn)行細(xì)化,可以得到一個(gè)簡(jiǎn)單CPU的構(gòu)架,如圖2-2所示該CPU采用總線結(jié)構(gòu),即控制器所需的指令,數(shù)據(jù)通路所需的數(shù)據(jù)都是從總線上得到的??刂菩盘?hào)操作碼地址信號(hào)數(shù)據(jù)輸入控制器指令存放器狀態(tài)控制器指令譯碼器地址信號(hào) 執(zhí)行部件(數(shù)據(jù)通路)數(shù)據(jù)輸出圖2-2 RISC-CPU簡(jiǎn)單構(gòu)架 RISC-CPU系統(tǒng)的設(shè)
17、計(jì)方案計(jì)算機(jī)進(jìn)行信息處理可分為兩個(gè)步驟:1)將數(shù)據(jù)和程序(即指令序列)輸入到計(jì)算機(jī)的存儲(chǔ)器中。2)從第一條指令的地址起開始執(zhí)行該程序,得到所需結(jié)果,結(jié)束運(yùn)行。CPU的作用是防調(diào)并控制計(jì)算機(jī)的各個(gè)部件執(zhí)行程序的指令序列,使其有條不紊地進(jìn)行。因此它必須具有以下根本功能:取指令:當(dāng)程序已在存儲(chǔ)器中時(shí),首先根據(jù)程序入口地址取出一條程序,為此要發(fā)出指令地址及控制信號(hào)。分析指令:即指令譯碼。是對(duì)當(dāng)前取得的指令進(jìn)行分析,指出它要求什么操作,并產(chǎn)生相應(yīng)的操作控制命令。執(zhí)行指令:根據(jù)分析指令時(shí)產(chǎn)生的“操作命令形成相應(yīng)的操作控制信號(hào)序列,通過運(yùn)算器,存儲(chǔ)器及輸入/輸出設(shè)備的執(zhí)行,實(shí)現(xiàn)每條指令的功能,其中包括對(duì)運(yùn)算
18、結(jié)果的處理以及下條指令地址的形成。本設(shè)計(jì)的RISC-CPU數(shù)據(jù)總線為8位,而每條指令為兩個(gè)字節(jié)(高3位為操作碼,低13位是地址),所以每條指令需取兩次。CPU每次取到指令后,其狀態(tài)控制器(CPU控制中心)分析操作碼后,產(chǎn)生一系列控制信號(hào),啟動(dòng)或停止某些部件。其中時(shí)鐘發(fā)生器利用外來(lái)時(shí)鐘信號(hào)進(jìn)行分頻生成一系列時(shí)鐘信號(hào),送往其他部件用作時(shí)鐘信號(hào)。由功能分析,RISC-CPU是一個(gè)復(fù)雜的數(shù)字邏輯電路,但是它的根本部件的邏輯并不復(fù)雜,可把它分成以下八個(gè)根本部件,各個(gè)模塊之間的互連關(guān)系如圖2-3所示。clkresetetet累加器地址多路器程序計(jì)數(shù)器數(shù)據(jù)控制電路狀態(tài)控制電路時(shí)鐘電路邏輯運(yùn)算單元指令存放器圖
19、2-3 RISC-CPU 結(jié)構(gòu)框圖1.時(shí)鐘電路(clock):產(chǎn)生一系列的時(shí)鐘信號(hào)送往CPU其他部件;2.狀態(tài)控制電路(state-contrl):CPU的控制核心,用于產(chǎn)生一系列的控制信號(hào),啟動(dòng)或停止某些部件;3.指令存放器(reg):存儲(chǔ)指令;4.累加器(acc):存放算術(shù)邏輯運(yùn)算單元當(dāng)前的結(jié)果,它也是算術(shù)邏輯運(yùn)算單元雙目運(yùn)算中的一個(gè)數(shù)據(jù)來(lái)源;5.算術(shù)邏輯運(yùn)算單元(alu):根據(jù)輸入的8種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、讀、寫、異或,跳轉(zhuǎn)等指令;6.數(shù)據(jù)控制電路(datactrl)控制累加器的數(shù)據(jù)輸出;7.程序計(jì)數(shù)器(pc):提供指令地址;8.地址多路器(addr-mux):選擇輸出的地址
20、是PC(程序計(jì)數(shù))地址還是跳轉(zhuǎn)的目標(biāo)地址。第三章 八位RISC-CPU各模塊設(shè)計(jì)及仿真八位RISC-CPU可以劃分為八個(gè)根本部件:時(shí)鐘電路、累加器、RISC-CPU算術(shù)邏輯運(yùn)算單元、指令存放器、狀態(tài)控制電路、數(shù)據(jù)控制電路、程序計(jì)數(shù)器、地址多路器,下面將具體闡述各子模塊的功能和設(shè)計(jì)思想。3.1 時(shí)鐘電路時(shí)鐘電路用于產(chǎn)生CPU各部件的時(shí)鐘。單片機(jī)的時(shí)鐘可以由兩種方式產(chǎn)生,一種是內(nèi)部方式,利用芯片內(nèi)部的振蕩電路;另一種方式為外部方式。在此采用外部時(shí)鐘的方式,即利用外部振蕩信號(hào)經(jīng)過分頻以后產(chǎn)生所需時(shí)鐘。綜合后的引腳圖,如圖3-1所示。3-1時(shí)鐘電路圖中clk為輸入引腳接外部振蕩信號(hào),在此設(shè)計(jì)中,外部振
21、蕩信號(hào)由4M晶振提供。clk1、clk8和alu_clk是輸出信號(hào),分別用來(lái)控制CPU的其它部件。其中clkl信號(hào)經(jīng)clk反相后到,用作指令存放器、累加器、狀態(tài)控制電路的時(shí)鐘信號(hào):clk信號(hào)8分頻后得到clk8,clk8的上升沿到來(lái)觸發(fā)CPU的狀態(tài)控制電路,控制CPU開始執(zhí)行一條指令,同時(shí)clk8信號(hào)還用于控制地址多路器:clk的2分頻信號(hào)、4分頻信號(hào)和clk8的反相信號(hào)相與得到ALU電路的時(shí)鐘信號(hào)alu_clk。clkl和alu_clk信號(hào)的邏輯算式如下: clkl=not clk; alu_clk=clk2 and clk4 and (not clk8);時(shí)鐘電路源程序及仿真波形如下:li
22、brary ieee;use ieee.std_logic_1164.all;entity clock isport(clk: in std_logic; clk1: buffer std_logic; clk8: buffer std_logic:=0; alu_clk: out std_logic);end clock;architecture behave of clock issignal clk2: std_logic:=0;signal clk4: std_logic:=1;begin alu_clk=clk2 and clk4 and (not clk8);process(clk
23、1)beginclk1=not clk; if clk1event and clk1=1then clk2=not clk2; end if;end process;process(clk2)begin if clk2event and clk2=0 then clk4=not clk4; end if;end process;process(clk4)begin if clk4event and clk4=1 then clk8=not clk8; end if;end process;end behave;圖3-2 時(shí)鐘電路各信號(hào)波形3.2 累加器累加器是一個(gè)最常用的專用存放器,大局部單操
24、作數(shù)指令的操作數(shù)取自累加器,很多雙操作數(shù)指令的一個(gè)操作數(shù)也取自累計(jì)器。同時(shí)累加器還用來(lái)存放算術(shù)運(yùn)算指令的結(jié)果,綜合后的引腳圖,如圖3-3所示。圖3-3 累加器累加器的時(shí)鐘信號(hào)由時(shí)鐘電路產(chǎn)生的clkl信號(hào)提供。累加器采用同步復(fù)位方式,當(dāng)reset信號(hào)為高電平時(shí),累加器的值為零。在reset信號(hào)變低以后,當(dāng)ena信號(hào)有效時(shí),clk上升沿到來(lái)后接收來(lái)自于數(shù)據(jù)總線的數(shù)據(jù),由d7.0端輸入:當(dāng)ena信號(hào)無(wú)效時(shí),累加器的值保持不變。累加器的ena信號(hào)由狀態(tài)控制電路產(chǎn)生。累加器的VHDL代碼主要采用PROCESS語(yǔ)句編寫。如前所述,PROCESS語(yǔ)句本身是一種并行處理語(yǔ)句,但進(jìn)程的內(nèi)部結(jié)構(gòu)由一系列順序語(yǔ)句構(gòu)
25、成,語(yǔ)句逐條執(zhí)行,順序與語(yǔ)句的書寫順序相一致。之所以采用PROCESS語(yǔ)句的原因是:進(jìn)程必須由敏感信號(hào)表中定義的任一敏感信號(hào)的變化激活。而累加器的一切操作都由時(shí)鐘信號(hào)控制進(jìn)行,因此采用PROCESS語(yǔ)句可以很方便的實(shí)現(xiàn)這一要求。其源程序如下:library ieee;ogic_1164.all;entity acc isport(clk,reset,ena:in std_logic; d:in std_logic_vector(7 downto 0); accum:out std_logic_vector(7 downto 0);end acc;architecture art of acc
26、isbeginprocess(clk, ena)beginif clkevent and clk=1then if reset=1then accum=00000000; elsif ena=1then accum=d; end if; end if;end process;end art;3-4 累加器各信號(hào)波形圖3-4為累加器各信號(hào)仿真波形圖。如下圖,當(dāng)復(fù)位信號(hào)reset=0、使能信號(hào)ena=1時(shí),在每個(gè)clk上升沿到來(lái)后,ACC接收來(lái)自于數(shù)據(jù)總線d7.0的數(shù)據(jù)(00、01、02、03、04);當(dāng)ena=0,ACC保持04不變;當(dāng)ena又變?yōu)橛行盘?hào)后,ACC繼續(xù)接受來(lái)自數(shù)據(jù)總線的數(shù)據(jù);當(dāng)
27、reset=1,ACC復(fù)位,輸出accum清零。3.3 算術(shù)邏輯運(yùn)算單元(ALU)ALU的功能十分強(qiáng)大,它不僅可以進(jìn)行邏輯“與“或“異或等邏輯運(yùn)算,還可以進(jìn)行加、減算術(shù)運(yùn)算。除此之外還可以進(jìn)行停機(jī)、跳轉(zhuǎn)等操作。邏輯運(yùn)算單元模塊引腳圖如3-5所示。圖3-5 算術(shù)邏輯運(yùn)算單元圖3-5中clk為ALU的時(shí)鐘信號(hào),由時(shí)鐘電路生成的alu_clk信號(hào)提供;opcode為操作碼輸入端,取自指令存放器的高3位,ALU根據(jù)輸入的不同操作碼進(jìn)行不同的操作;data輸入來(lái)自數(shù)據(jù)總線上的數(shù)據(jù);accum端輸入來(lái)自累加器的一個(gè)操作數(shù);alu_out端用來(lái)保存或輸出操作后的結(jié)果;zero用于標(biāo)志累加器的結(jié)果accum是
28、否為0,如果為0,那么zero為1,否那么zero為0。在程序設(shè)計(jì)時(shí),首先定義指令的編碼,然后規(guī)定各個(gè)指令所對(duì)應(yīng)的操作,編寫程序時(shí)采用CASE語(yǔ)句實(shí)現(xiàn)。CASE語(yǔ)句用來(lái)描述總線或編碼、譯碼的行為,從許多不同語(yǔ)句的序列中選擇其中之一執(zhí)行,屬于數(shù)據(jù)流描述法,是結(jié)構(gòu)體描述方法的一種。當(dāng)然此處也可以采用IF語(yǔ)句實(shí)現(xiàn)。沒有采用IF語(yǔ)句的原因有以下幾個(gè):首先CASE語(yǔ)句的可讀性比IF語(yǔ)句要強(qiáng)的多,程序的閱讀者很容易找出條件式和動(dòng)作的對(duì)應(yīng)關(guān)系。其次在CASE語(yǔ)句中,WHEN語(yǔ)句可以顛倒次序而不至于發(fā)生錯(cuò)誤:而在IF語(yǔ)句中,顛倒條件判別的次序往往會(huì)使綜合的邏輯功能發(fā)生變化。另外,在IF語(yǔ)句中,先處理最起始的條
29、件,如果不滿足,再處理下一個(gè)條件:而在CASE語(yǔ)句中,沒有值的順序號(hào),所有值是并行處理的,這樣就縮短了程序的執(zhí)行時(shí)間。算術(shù)邏輯運(yùn)算單元程序及仿真波形如下,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alu isport(clk: in std_logic; opcode: in std_logic_vector(2 downto 0); data,accum: in std_logic_vector(7 downto 0); zero: out std_logic; alu_ou
30、t: out std_logic_vector(7 downto 0);end alu;architecture behave of alu issignal alu_out_latch: std_logic_vector(7 downto 0);constant NOP: std_logic_vector(2 downto 0):=000;constant JZ: std_logic_vector(2 downto 0):=001;constant ADD: std_logic_vector(2 downto 0):=010;constant ANL: std_logic_vector(2
31、downto 0):=011;constant XRL: std_logic_vector(2 downto 0):=100;constant MOV: std_logic_vector(2 downto 0):=101;constant MEM: std_logic_vector(2 downto 0):=110;constant AJMP: std_logic_vector(2 downto 0):=111;begin zeroalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_
32、out_latchalu_out_latchalu_out_latch=XXXXXXXX; end case;end if;end process; alu_out=alu_out_latch;end behave;仿真波形如圖3-6所示:圖3-6 算術(shù)邏輯運(yùn)算單元仿真波形在此仿真波形圖中,clk為時(shí)鐘信號(hào)輸入端口,zero為判accum是否為零的輸出端口。opcode為操作碼輸入端,data為數(shù)據(jù)輸入端,accum為另一輸入端口,它接累加器的輸出端。opcode不同的值代表不同的操作,在此圖中,假設(shè)data為“1十進(jìn)制,accum為“2,兩者相與為“0,相加為“3,跳轉(zhuǎn)時(shí)那么輸出accum的
33、值“2,數(shù)據(jù)傳輸時(shí)輸出data的值“1。3.4 指令存放器指令存放器用來(lái)存放指令,其引腳圖如圖3-7所示。指令存放器的觸發(fā)時(shí)鐘是clk1。clk1的上升沿觸發(fā),存放器開始工作。每條指令為兩個(gè)字節(jié),即16位。高3位是操作碼,低13位是地址。本設(shè)計(jì)的數(shù)據(jù)總線為8位,所以每條指令需要取兩次,先取高8位,后取低8位。由狀態(tài)變量state來(lái)標(biāo)志從數(shù)據(jù)總線上取來(lái)的數(shù)據(jù)是高8位還是低8位。如果state為0表示取得的是高8位,存入高8位存放器,同時(shí)將變量state置為1。下次再存放時(shí),由于state為1,可知取得的是低8位,存入低8位存放器中,同時(shí)將state置為0。圖3-7指令存放器由于數(shù)據(jù)總線既可以傳輸
34、指令也可以傳輸數(shù)據(jù),而且只有指令需要存放到指令存放器中,因此需要一個(gè)信號(hào)指示是否進(jìn)行存放。圖中ena引腳用來(lái)控制是否存放。當(dāng)數(shù)據(jù)總線傳輸?shù)氖侵噶顣r(shí),ena端由控制電路置為1,指令存放;如果數(shù)據(jù)總線傳輸?shù)氖菙?shù)據(jù),那么ena為0,指令存放器停止工作。指令存放時(shí),分為高3位和低13位分別存放到操作碼存放器opcode和地址存放器instr_addr。指令存放器源程序如下:library ieee;use ieee.std_logic_1164.all;entity reg isport(clk, reset, ena: in std_logic; data: in std_logic_vector(
35、7 downto 0); opcode: out std_logic_vector(2 downto 0); instr_addr: out std_logic_vector(12 downto 0);end reg;architecture behave of reg issignal opc_iraddrs: std_logic_vector(15 downto 0);beginprocess(clk)variable state: std_logic:=0;begin if(clkevent and clk=1)then if reset=1then opc_iraddrs0); els
36、if ena=1 then case state is when 0 =opc_iraddrs(15 downto 8)opc_iraddrs(7 downto 0)null; end case; else state:=0; end if;end if;end process; opcode=opc_iraddrs(15 downto 13); instr_addr=opc_iraddrs(12 downto 0);end behave;仿真波形如圖3-8如下:圖3-8 指令存放器仿真波形在此仿真波形圖中,clk為時(shí)鐘輸入信號(hào),ena為使能輸入端口,reset為復(fù)位端口,這里假設(shè)data傳輸
37、的一直是“21十六進(jìn)制,那么當(dāng)state為0時(shí),傳輸高八位,當(dāng)state為1時(shí),傳輸?shù)桶宋弧F渲?3至15位存入opcode中,0至12位存入str_addr中。所以這里的opcode為“1,str_addr為“0121。3.5 狀態(tài)控制電路狀態(tài)控制電路是CPU的控制核心。用于產(chǎn)生一系列的控制信號(hào),來(lái)控制各部件的啟動(dòng)或者停止。clk1、clk8由時(shí)鐘產(chǎn)生電路產(chǎn)生;reset為高電平時(shí),復(fù)位狀態(tài)控制電路所有輸出信號(hào);opcode為操作碼輸入端,取自指令存放器的高三位;pc_clk作為程序計(jì)數(shù)器的時(shí)鐘信號(hào);acc_ena輸出到累加器的使能端;pc_ena為指令存放器的使能信號(hào),控制指令存放器的啟、
38、停;datactrl_ena作為數(shù)據(jù)控制電路的使能信號(hào);idle為停機(jī)信號(hào),輸出到片外。圖3-9 狀態(tài)控制電路如果將狀態(tài)控制電路作為一個(gè)整體進(jìn)行程序編寫,有許多語(yǔ)句需要反復(fù)描述。這樣降低了程序的可讀性,而且在硬件實(shí)現(xiàn)時(shí)也會(huì)增加不必要的重復(fù)的邏輯電路。因此將狀態(tài)控制電路又分為狀態(tài)機(jī)和狀態(tài)控制器兩局部。狀態(tài)控制器產(chǎn)生使能信號(hào)ena控制狀態(tài)機(jī)的啟、停。當(dāng)復(fù)位信號(hào)reset有效時(shí),狀態(tài)控制器將ena置零,從而使?fàn)顟B(tài)機(jī)停止工作,各輸出信號(hào)復(fù)位。狀態(tài)控制器中當(dāng)復(fù)位脈沖過后,clk8上升沿到來(lái),ena 輸出為1,否那么為0。下面重點(diǎn)說明狀態(tài)機(jī)的設(shè)計(jì)。圖3-11狀態(tài)機(jī) 圖3-10狀態(tài)控制器此設(shè)計(jì)中,指令周期由
39、8個(gè)時(shí)鐘周期組成,每個(gè)時(shí)鐘周期完成固定的工作。因此狀態(tài)控制器有8個(gè)狀態(tài),當(dāng)前狀態(tài)由某一變量記錄,此變量的值就是當(dāng)前這個(gè)指令周期中經(jīng)過的時(shí)鐘數(shù)從零開始記錄。各時(shí)鐘周期,CPU 進(jìn)行的操作如下:第0個(gè)時(shí)鐘,從ROM讀取指令。由于指令長(zhǎng)度為16位,數(shù)據(jù)總線為8位,所以讀取一條指令需要兩個(gè)時(shí)鐘周期。第0個(gè)時(shí)鐘讀取指令的高8位代碼,并存入指令存放器。此時(shí)狀態(tài)機(jī)使讀信號(hào)rd和reg_ena輸出1(表示高電平),其余全部為0(表示低電平)。第1個(gè)時(shí)鐘,從ROM讀取指令的低8位代碼并存入指令存放器。此時(shí)鐘結(jié)束后一條指令讀完,程序指針將指向下一個(gè)存儲(chǔ)單元。因此與上一時(shí)鐘相比pc_clk也從0變?yōu)?,使程序計(jì)數(shù)器
40、(PC)增1。第2個(gè)時(shí)鐘,空操作。所有的輸出信號(hào)均為0。第3個(gè)時(shí)鐘,開始分析前兩個(gè)時(shí)鐘讀取的指令。如果操作符為NOP ,那么輸出信號(hào)idle為高;如果操作符不為NOP,那么PC增1,指向下一條指令,其他各控制線輸出為零。第4個(gè)時(shí)鐘,假設(shè)取得的操作符為ANL,ADD,XRL或MOV,那么rd輸出1,讀取相應(yīng)地址的數(shù)據(jù),地址由所讀取的指令的低13位給出;假設(shè)為AJMP,那么pc_ena信號(hào)輸出為1,使程序計(jì)數(shù)器讀入目的地址;假設(shè)為MEM,那么datactrl_ena輸出1,使數(shù)據(jù)控制電路輸出累加器數(shù)據(jù);假設(shè)為其它指令,那么輸出全為0。第5個(gè)時(shí)鐘,假設(shè)取得的操作符為ANL,ADD或XRL,那么ALU
41、將從ROM讀取的數(shù)據(jù)和累加器數(shù)據(jù)進(jìn)行相應(yīng)的運(yùn)算;假設(shè)為MOV,就把從ROM讀取的數(shù)據(jù)通過ALU送給累加器;假設(shè)為JZ,先通過zero判斷累加器的值是否為0,如果為0,pc_clk輸出1,使PC增1,否那么PC保持原值不變;假設(shè)為AJMP,鎖存目的地址;假設(shè)為MEM,將數(shù)據(jù)寫入ROM中的相應(yīng)地址處;假設(shè)為其它指令,那么輸出全為0。第6個(gè)時(shí)鐘,空操作。第7個(gè)時(shí)鐘,假設(shè)操作符為JZ且累加器值為0,那么PC值再加1,跳過一條指令,否那么PC保持原值不變;如果操作符不是JZ,那么所有輸出為0。根據(jù)上述描述,畫出狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖,如圖4-12所示。其中輸入為opcode,輸出為狀態(tài)機(jī)的各個(gè)輸出信號(hào)。然后
42、根據(jù)各狀態(tài)編寫狀態(tài)機(jī)的VHDL代碼。AJMPADD,ANL,XRL,MOVMEM其他讀取高八位空操作JZ其他S0S7NOP其他S1S2S3S6S5S4讀取低八位空操作AJMPANL,ADD,XRLMOVJZMEM 其他圖3-12 狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換狀態(tài)控制器程序如下: library ieee;use ieee.std_logic_1164.all;entity mach_ctr isport(clk8,reset: in std_logic; ena: out std_logic);end mach_ctr;architecture behave of mach_ctr isbeginproce
43、ss(clk8)begin if clk8event and clk8=1 then if reset=1then ena=0; else ena=1; end if; end if;end process;end behave;狀態(tài)機(jī)程序如下:library ieee;use ieee.std_logic_1164.all;package mypack is component mach_ctr port(clk8,reset: in std_logic; ena: out std_logic); end component; component state_machine port(clk
44、, ena, zero: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk,acc_ena,pc_ena,rd,wr,reg_ena,idle,datactrl_ena:out std_logic); end component;end mypack;library ieee;use ieee.std_logic_1164.all;use work.mypack.all;entity state_contrl isport(clkl,zero,clk8,reset: in std_logic; opcode: in st
45、d_logic_vector(2 downto 0); pc_clk,acc_ena,pc_ena,rd,wr,reg_ena,idle,datactrl_ena:out std_logic);end state_contrl;architecture rt1 of state_contrl issignal ena_b: std_logic;beginUl:mach_ctr port map(clk8,reset,ena_b);U2:state_machine port map (clkl,ena_b, zero, opcode, pc_clk, acc_ena,pc_ena, rd, wr
46、, reg_ena, idle, datactrl_ena);end rt1;library ieee;use ieee.std_logic_1164.all;entity state_machine isport(clk, ena, zero: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk, acc_ena, pc_ena, rd, wr, reg_ena, idle, datactrl_ena: out std_logic);end state_machine;architecture behave of sta
47、te_machine istype state_type is (s0, s1,s2, s3, s4, s5, s6, s7);signal state: state_type;constant NOP: std_logic_vector(2 downto 0):=000;constant JZ: std_logic_vector(2 downto 0):=001;constant ADD: std_logic_vector(2 downto 0):=010;constant ANL: std_logic_vector(2 downto 0):=011;constant XRL: std_lo
48、gic_vector(2 downto 0):=100;constant MOV: std_logic_vector(2 downto 0):=101;constant MEM: std_logic_vector(2 downto 0):=110;constant AJMP: std_logic_vector(2 downto 0):=111;beginprocess(clk)begin if clkevent and clk=1then if ena=0 then state=s0; pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; reg_ena=0;
49、idle=0; datactrl_enapc_clk=0; acc_ena=0; pc_ena=0; rd=1; wr=0; reg_ena=1; datactrl_ena=0; idle=0; statepc_clk=1; acc_ena=0; pc_ena=0; rd=1; wr=0; reg_ena=1; datactrl_ena=0; idle=0; statepc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; reg_ena=0; datactrl_ena=0; idle=0; stateif (opcode=NOP) then pc_clk=1;acc_ena=0; pc_ena=0; rd=0; wr=0; reg_ena=0; da
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能導(dǎo)覽設(shè)備2025年景區(qū)智慧化運(yùn)營(yíng)效果評(píng)估報(bào)告
- 橋梁健康監(jiān)測(cè)無(wú)人機(jī)2025年技術(shù)發(fā)展趨勢(shì)報(bào)告
- 國(guó)慶節(jié)活動(dòng)方案玩具店鋪
- 安全生產(chǎn)法規(guī)定負(fù)有安全生產(chǎn)
- 作業(yè)管理制度會(huì)議內(nèi)容
- 活頁(yè)教案模板
- 庫(kù)房安全生產(chǎn)制度
- 大型節(jié)目國(guó)慶節(jié)活動(dòng)方案
- 協(xié)同創(chuàng)新模式探討-洞察及研究
- 電商創(chuàng)業(yè)孵化項(xiàng)目直播運(yùn)營(yíng)合同
- 2025年江蘇省靖江市輔警招聘考試試題題庫(kù)及答案詳解(名師系列)
- 2025年中醫(yī)三基訓(xùn)練試題及答案
- 2025浙江臺(tái)州市椒江區(qū)區(qū)屬國(guó)有企業(yè)招聘42人筆試歷年參考題庫(kù)附帶答案詳解
- 單側(cè)雙通道內(nèi)鏡技術(shù)課件
- 結(jié)腸透析健康宣教
- 勞務(wù)派遣勞務(wù)外包項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- JJG 633-2024 氣體容積式流量計(jì)
- 物流成本預(yù)算表
- 公司合作協(xié)議書合同模板
- Python基礎(chǔ)課件(共282張PPT)
評(píng)論
0/150
提交評(píng)論