




免費(fèi)預(yù)覽已結(jié)束,剩余40頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
xx大學(xué) 畢業(yè)設(shè)計(jì)(論文)題 目: 基于VHDL語言的 RISC-CPU系統(tǒng)設(shè)計(jì) 學(xué) 院:電氣與電子工程學(xué)院 專 業(yè):電子信息工程 學(xué)生姓名: 指導(dǎo)教師: 畢業(yè)設(shè)計(jì)時間:二 九 年 二 月 二十三 日 六 月 十四 共 十 七 周中 文 摘 要摘 要本課題利用CPLD做載體,借助MAX+PLUS軟件平臺,完成了RISC-CPU系統(tǒng)的設(shè)計(jì)。本文主要闡述了應(yīng)用CPLD技術(shù)實(shí)現(xiàn)這一IP核的設(shè)計(jì)方法。RISC即精簡指令集計(jì)算機(jī)(Reduced Instruction Set Computer)的縮寫,RISC-CPU與一般的CPU相比不僅只是簡化了指令系統(tǒng),而且是通過簡化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加合理,從而提高了運(yùn)算速度。本課題采用硬件描述語言VHDL設(shè)計(jì)了8位RISC-CPU系統(tǒng),采用自頂向下(Top-down)的設(shè)計(jì)方法,根據(jù)設(shè)計(jì)流程,首先將RISC-CPU劃分成八個基本功能模塊。然后對各個模塊進(jìn)行VHDL代碼描述,再應(yīng)用開發(fā)系統(tǒng)中的各種工具進(jìn)行編譯、功能仿真、邏輯綜合、時序仿真、布局布線等,并最終給出了指令執(zhí)行的仿真波形,驗(yàn)證了CPU指令的功能。設(shè)計(jì)表明應(yīng)用CPLD技術(shù)實(shí)現(xiàn)RISC-CPU系統(tǒng)設(shè)計(jì)的方法是完全可行的。關(guān)鍵詞:復(fù)雜可編程邏輯器件,VHDL語言,RISC-CPU- II -AbstractAbstractBased on MAX+PLUS and CPLD (Complex Programmable Logic Devices),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 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 eight 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, VHDL,RISC-CPU 目 錄目 錄摘 要IAbstractII目 錄III第一章緒論11.1課題的背景及意義11.2國內(nèi)外研究現(xiàn)狀21.3本設(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 時鐘電路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的綜合及操作時序344.1 RISC-CPU的綜合344.2 CPU復(fù)位啟動操作時序38第五章設(shè)計(jì)結(jié)論及展望39參考文獻(xiàn)40致謝41- 41 -第一章 緒論第一章 緒論隨著信息產(chǎn)業(yè)的飛速發(fā)展,以軟硬件協(xié)同設(shè)計(jì)(Software/Hardware Co-Design ),IP核復(fù)用(Intellectual Property Core Reuse)和超深亞微米技術(shù)(Very Deep Sub-M)為支撐的SOC(系統(tǒng)級芯片System-On-a-Chip)成為集成電路發(fā)展的主流。本文以SOC關(guān)鍵技術(shù)之一嵌入式IP和設(shè)計(jì)技術(shù)為研究的出發(fā)點(diǎn),以八位RISC-CPU IP核的設(shè)計(jì)為目標(biāo),對IP核的設(shè)計(jì)技術(shù)進(jìn)行了實(shí)踐與研究。1.1 課題的背景及意義隨著可編程邏輯芯片與基于IP(知識產(chǎn)權(quán))的SOC片上系統(tǒng)技術(shù)的發(fā)展,RISC軟核處理器的研究與設(shè)計(jì)越來越受到人們的重視。研究RISC軟核處理器的現(xiàn)實(shí)意義有以下幾方面:(1)對基于FPGA的嵌入式系統(tǒng)的開發(fā)具有現(xiàn)實(shí)意義。現(xiàn)在FPGA在各種嵌入式系統(tǒng)中發(fā)揮著越來越大的作用,F(xiàn)PGA的內(nèi)部邏輯也越來越復(fù)雜,導(dǎo)致了開發(fā)難度的增加。而應(yīng)用RISC軟核處理器來設(shè)計(jì)FPGA的內(nèi)部邏輯就可以大大降低設(shè)計(jì)的難度,并可以代替嵌入式系統(tǒng)中的硬處理器,從而可以把系統(tǒng)的大部分,甚至全部功能都做到一片F(xiàn)PGA中,使整個系統(tǒng)變得緊湊、小巧,并能提高系統(tǒng)的穩(wěn)定性。(2)對基于IP的SOC的設(shè)計(jì)開發(fā)具有一定的實(shí)用價值。SOC芯片的設(shè)計(jì)開發(fā)一般是基于IP模塊的復(fù)用來設(shè)計(jì)的,一個SOC 芯片往往會包括一個內(nèi)嵌的RISC處理器,用來完成其核心處理功能。RISC軟核處理器的設(shè)計(jì)可以很方便的轉(zhuǎn)化成相應(yīng)的IP,從而可以用來設(shè)計(jì)SOC芯片。(3 )對商用RISC處理器的開發(fā)具有指導(dǎo)意義。RISC軟核處理器包括了所有RISC的基本技術(shù),給商用RISC處理器的開發(fā)提供了一個很好的框架。由于RISC軟核處理器在驗(yàn)證與修改上比較方便,并且軟核處理器設(shè)計(jì)完成后,可以很方便的轉(zhuǎn)化成相應(yīng)硬處理器的前端設(shè)計(jì),因此可以用RISC軟核處理器的設(shè)計(jì)替代原來硬處理器的前端設(shè)計(jì),從而節(jié)省開發(fā)時間,并降低設(shè)計(jì)難度。由上可知,研究RISC軟核處理器是很有現(xiàn)實(shí)意義的。1.2 國內(nèi)外研究現(xiàn)狀目前國內(nèi)總體來說在IP的開發(fā)和應(yīng)用方面做的不夠,但可喜的是,近年來國家己經(jīng)在IP產(chǎn)業(yè)上也有了很大的動作??萍疾坑?000年啟動了“十五”國家在國家高技術(shù)研究發(fā)展863計(jì)劃中,SOC作為微電子重大專項(xiàng)己列入了信息技術(shù)領(lǐng)域的重大專項(xiàng)啟動項(xiàng)目中,在若干關(guān)鍵IP核的開發(fā)、軟硬件協(xié)同設(shè)計(jì)、IP復(fù)用、VDSM設(shè)計(jì)、新工藝新器件等等方面都布置了預(yù)研性課題。CPU的IP核是構(gòu)成SOC技術(shù)的核心,開發(fā)出具有自主知識產(chǎn)權(quán)的CPU IP核對我國在電子設(shè)計(jì)技術(shù)方面跟上世界先進(jìn)的步伐,提高信息產(chǎn)業(yè)在世界上的核心競爭力和效益具有重大意義。在國內(nèi),基于SOC的CPU設(shè)計(jì)研究很少有人涉足。雖然市場上應(yīng)用較為廣泛的微控制器、嵌入式處理器等都有了很成熟的產(chǎn)品,但這些產(chǎn)品主要靠從國外引進(jìn),技術(shù)基礎(chǔ)比較薄弱。前不久,中芯微系統(tǒng)公司生產(chǎn)出我國第一個具有自主知識產(chǎn)權(quán)的實(shí)用化32位嵌入式CPU芯片“方舟一號”,這表明我國的RISC CPU設(shè)計(jì)在嵌入式領(lǐng)域達(dá)到了先進(jìn)水平。1.3本設(shè)計(jì)的主要內(nèi)容本設(shè)計(jì)主要應(yīng)用VHDL語言實(shí)現(xiàn)八位RISC-CPU系統(tǒng)的設(shè)計(jì)。本論文詳細(xì)介紹了關(guān)于RISC-CPU的結(jié)構(gòu)以及利用硬件描述語言進(jìn)行設(shè)計(jì)的的方法,通過對RISC-CPU結(jié)構(gòu)和指令執(zhí)行的分析將整個系統(tǒng)劃分為各個功能模塊,并闡明各模塊間的接口信號,給出了每個模塊內(nèi)部設(shè)計(jì)實(shí)現(xiàn)的詳細(xì)敘述,最后介紹對設(shè)計(jì)的綜合和驗(yàn)證工作,給出了仿真驗(yàn)證數(shù)據(jù)以及時序圖。第二章RISC-CPU系統(tǒng)及其設(shè)計(jì)方案第二章 RISC-CPU系統(tǒng)及設(shè)計(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)中的一個根本性的變革是RISC處理器的出現(xiàn)。RISC即精簡指令集計(jì)算機(jī)(Reduced Instruction Set Computer)的縮寫。RISC-CPU與一般的CPU相比不僅只是簡化了指令系統(tǒng),而且是通過簡化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,RISC-CPU與一般的CPU的不同之處在于:它的時序控制信號形成部件是用硬布線邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控制序列的速度比用微程序控制方式快得多,因?yàn)檫@樣做省去了讀取微指令的時間。RISC處理器可以說既簡單又復(fù)雜:簡單之處在于,相比于復(fù)雜指令集CISC (Complex Instruction Set Computer,復(fù)雜指令系統(tǒng)計(jì)算機(jī)),這種處理器的指令和變量非常少,正如它的英文字母縮寫RISC所代表的“精簡指令集”的含義一樣;說RISC復(fù)雜,是因?yàn)樗鼈內(nèi)菀讓?shí)現(xiàn)更高的并行性,而這個特點(diǎn)只有與設(shè)計(jì)得很好的編譯器結(jié)合起來,才能顯現(xiàn)出其優(yōu)越性。2.2 RISC-CPU基本框架雖然RISC-CPU采用精簡指令系統(tǒng)但是它具有和其它CPU一樣的基本功能,也就是其基本組成部分和一般的CPU相同由運(yùn)算器、控制器和存儲器組成。存儲器存放指令和數(shù)據(jù);數(shù)據(jù)通路包括ALU、程序計(jì)數(shù)器等,圖2-1 RISC-CPU基本結(jié)構(gòu)讀寫控制信號控制信號存儲器數(shù)據(jù)通路控制器指令狀態(tài)信號主要功能是對操作數(shù)進(jìn)行運(yùn)算,得到結(jié)果,并產(chǎn)生程序計(jì)數(shù)器的值,作為要執(zhí)行的下一條指令的地址;控制器內(nèi)有指令寄存器,它對指令進(jìn)行譯碼,產(chǎn)生相應(yīng)的控制信號,完成對存儲器和數(shù)據(jù)通路部分的控制。存儲器、數(shù)據(jù)通路和控制器這三部分的基本關(guān)系如圖2-1所示。 存儲器存儲器中存放了要執(zhí)行的指令和相應(yīng)數(shù)據(jù)。存儲器的讀寫信號由控制器給出。存儲器的地址來源有兩個:程序計(jì)數(shù)器和指令寄存器。在取新指令時,用程序計(jì)數(shù)器的值作為存儲器地址:在執(zhí)行指令時,用指令中的地址部分作為存儲器地址。 數(shù)據(jù)通路數(shù)據(jù)通路主要包括累加器、程序計(jì)數(shù)器和算術(shù)邏輯單元。累加器用于保存參加運(yùn)算的數(shù)據(jù)以及運(yùn)算的中間結(jié)果。實(shí)際上,累加器也是寄存器,不過,它有特殊性,即許多指令執(zhí)行過程以累加器為中心。往往在運(yùn)算指令前,累加器中存放一個操作數(shù),指令執(zhí)行后,由累加器保存運(yùn)算結(jié)果。另外輸入輸出指令一般也通過累加器來完成。程序計(jì)數(shù)器指向下一條要執(zhí)行的指令。由于程序一般存放在內(nèi)存的一個連續(xù)區(qū)域,所以,順序執(zhí)行程序時,每取一個指令字節(jié),程序計(jì)數(shù)器便加一。算術(shù)邏輯單元是專門用來處理各種運(yùn)算的數(shù)據(jù)信息的,它可以進(jìn)行加、減、乘、除算術(shù)運(yùn)算和與、或、非、異或等邏輯運(yùn)算。 控制器控制器產(chǎn)生相應(yīng)的控制信號送到時序和控制邏輯電路,從而,組合成外部電路所需要的時序和控制信號。這些信號送往其他部件,以控制這些部件協(xié)調(diào)工作。實(shí)現(xiàn)RISC-CPU的設(shè)計(jì),將數(shù)據(jù)和程序(指令序列)統(tǒng)一存放在一個數(shù)據(jù)存儲器中。對圖2-1中的結(jié)構(gòu)進(jìn)行細(xì)化,可以得到一個簡單CPU的構(gòu)架,如圖2-2所示該CPU采用總線結(jié)構(gòu),即控制器所需的指令,數(shù)據(jù)通路所需的數(shù)據(jù)都是從總線上得到的。控制信號操作碼地址信號數(shù)據(jù)輸入控制器指令寄存器狀態(tài)控制器指令譯碼器地址信號 執(zhí)行部件(數(shù)據(jù)通路)數(shù)據(jù)輸出圖2-2 RISC-CPU簡單構(gòu)架2.3 RISC-CPU系統(tǒng)的設(shè)計(jì)方案計(jì)算機(jī)進(jìn)行信息處理可分為兩個步驟:1)將數(shù)據(jù)和程序(即指令序列)輸入到計(jì)算機(jī)的存儲器中。2)從第一條指令的地址起開始執(zhí)行該程序,得到所需結(jié)果,結(jié)束運(yùn)行。CPU的作用是防調(diào)并控制計(jì)算機(jī)的各個部件執(zhí)行程序的指令序列,使其有條不紊地進(jìn)行。因此它必須具有以下基本功能:取指令:當(dāng)程序已在存儲器中時,首先根據(jù)程序入口地址取出一條程序,為此要發(fā)出指令地址及控制信號。分析指令:即指令譯碼。是對當(dāng)前取得的指令進(jìn)行分析,指出它要求什么操作,并產(chǎn)生相應(yīng)的操作控制命令。執(zhí)行指令:根據(jù)分析指令時產(chǎn)生的“操作命令”形成相應(yīng)的操作控制信號序列,通過運(yùn)算器,存儲器及輸入/輸出設(shè)備的執(zhí)行,實(shí)現(xiàn)每條指令的功能,其中包括對運(yùn)算結(jié)果的處理以及下條指令地址的形成。本設(shè)計(jì)的RISC-CPU數(shù)據(jù)總線為8位,而每條指令為兩個字節(jié)(高3位為操作碼,低13位是地址),所以每條指令需取兩次。CPU每次取到指令后,其狀態(tài)控制器(CPU控制中心)分析操作碼后,產(chǎn)生一系列控制信號,啟動或停止某些部件。其中時鐘發(fā)生器利用外來時鐘信號進(jìn)行分頻生成一系列時鐘信號,送往其他部件用作時鐘信號。由功能分析,RISC-CPU是一個復(fù)雜的數(shù)字邏輯電路,但是它的基本部件的邏輯并不復(fù)雜,可把它分成以下八個基本部件,各個模塊之間的互連關(guān)系如圖2-3所示。clkresetetet累加器地址多路器程序計(jì)數(shù)器數(shù)據(jù)控制電路狀態(tài)控制電路時鐘電路邏輯運(yùn)算單元指令寄存器圖2-3 RISC-CPU 結(jié)構(gòu)框圖1.時鐘電路(clock):產(chǎn)生一系列的時鐘信號送往CPU其他部件;2.狀態(tài)控制電路(state-contrl):CPU的控制核心,用于產(chǎn)生一系列的控制信號,啟動或停止某些部件;3.指令寄存器(reg):存儲指令;4.累加器(acc):存放算術(shù)邏輯運(yùn)算單元當(dāng)前的結(jié)果,它也是算術(shù)邏輯運(yùn)算單元雙目運(yùn)算中的一個數(shù)據(jù)來源;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):選擇輸出的地址是PC(程序計(jì)數(shù))地址還是跳轉(zhuǎn)的目標(biāo)地址。第三章 八位RISC-CPU各摸塊設(shè)計(jì)及仿真第三章 八位RISC-CPU各模塊設(shè)計(jì)及仿真八位RISC-CPU可以劃分為八個基本部件:時鐘電路、累加器、RISC-CPU算術(shù)邏輯運(yùn)算單元、指令寄存器、狀態(tài)控制電路、數(shù)據(jù)控制電路、程序計(jì)數(shù)器、地址多路器,下面將具體闡述各子模塊的功能和設(shè)計(jì)思想。3.1 時鐘電路時鐘電路用于產(chǎn)生CPU各部件的時鐘。單片機(jī)的時鐘可以由兩種方式產(chǎn)生,一種是內(nèi)部方式,利用芯片內(nèi)部的振蕩電路;另一種方式為外部方式。在此采用外部時鐘的方式,即利用外部振蕩信號經(jīng)過分頻以后產(chǎn)生所需時鐘。綜合后的引腳圖,如圖3-1所示。3-1時鐘電路圖中clk為輸入引腳接外部振蕩信號,在此設(shè)計(jì)中,外部振蕩信號由4M晶振提供。clk1、clk8和alu_clk是輸出信號,分別用來控制CPU的其它部件。其中clkl信號經(jīng)clk反相后到,用作指令寄存器、累加器、狀態(tài)控制電路的時鐘信號:clk信號8分頻后得到clk8,clk8的上升沿到來觸發(fā)CPU的狀態(tài)控制電路,控制CPU開始執(zhí)行一條指令,同時clk8信號還用于控制地址多路器:clk的2分頻信號、4分頻信號和clk8的反相信號相與得到ALU電路的時鐘信號alu_clk。clkl和alu_clk信號的邏輯算式如下: clkl=not clk; alu_clk=clk2 and clk4 and (not clk8);時鐘電路源程序及仿真波形如下:library 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(clk1)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 時鐘電路各信號波形3.2 累加器累加器是一個最常用的專用寄存器,大部分單操作數(shù)指令的操作數(shù)取自累加器,很多雙操作數(shù)指令的一個操作數(shù)也取自累計(jì)器。同時累加器還用來存放算術(shù)運(yùn)算指令的結(jié)果,綜合后的引腳圖,如圖3-3所示。圖3-3 累加器累加器的時鐘信號由時鐘電路產(chǎn)生的clkl信號提供。累加器采用同步復(fù)位方式,當(dāng)reset信號為高電平時,累加器的值為零。在reset信號變低以后,當(dāng)ena信號有效時,clk上升沿到來后接收來自于數(shù)據(jù)總線的數(shù)據(jù),由d7.0端輸入:當(dāng)ena信號無效時,累加器的值保持不變。累加器的ena信號由狀態(tài)控制電路產(chǎn)生。累加器的VHDL代碼主要采用PROCESS語句編寫。如前所述,PROCESS語句本身是一種并行處理語句,但進(jìn)程的內(nèi)部結(jié)構(gòu)由一系列順序語句構(gòu)成,語句逐條執(zhí)行,順序與語句的書寫順序相一致。之所以采用PROCESS語句的原因是:進(jìn)程必須由敏感信號表中定義的任一敏感信號的變化激活。而累加器的一切操作都由時鐘信號控制進(jìn)行,因此采用PROCESS語句可以很方便的實(shí)現(xiàn)這一要求。其源程序如下:library ieee;use ieee.std_logic_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 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 累加器各信號波形圖3-4為累加器各信號仿真波形圖。如圖所示,當(dāng)復(fù)位信號reset=0、使能信號ena=1時,在每個clk上升沿到來后,ACC接收來自于數(shù)據(jù)總線d7.0的數(shù)據(jù)(00、01、02、03、04);當(dāng)ena=0,ACC保持04不變;當(dāng)ena又變?yōu)橛行盘柡?,ACC繼續(xù)接受來自數(shù)據(jù)總線的數(shù)據(jù);當(dāng)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的時鐘信號,由時鐘電路生成的alu_clk信號提供;opcode為操作碼輸入端,取自指令寄存器的高3位,ALU根據(jù)輸入的不同操作碼進(jìn)行不同的操作;data輸入來自數(shù)據(jù)總線上的數(shù)據(jù);accum端輸入來自累加器的一個操作數(shù);alu_out端用來保存或輸出操作后的結(jié)果;zero用于標(biāo)志累加器的結(jié)果accum是否為0,如果為0,則zero為1,否則zero為0。在程序設(shè)計(jì)時,首先定義指令的編碼,然后規(guī)定各個指令所對應(yīng)的操作,編寫程序時采用CASE語句實(shí)現(xiàn)。CASE語句用來描述總線或編碼、譯碼的行為,從許多不同語句的序列中選擇其中之一執(zhí)行,屬于數(shù)據(jù)流描述法,是結(jié)構(gòu)體描述方法的一種。當(dāng)然此處也可以采用IF語句實(shí)現(xiàn)。沒有采用IF語句的原因有以下幾個:首先CASE語句的可讀性比IF語句要強(qiáng)的多,程序的閱讀者很容易找出條件式和動作的對應(yīng)關(guān)系。其次在CASE語句中,WHEN語句可以顛倒次序而不至于發(fā)生錯誤:而在IF語句中,顛倒條件判別的次序往往會使綜合的邏輯功能發(fā)生變化。另外,在IF語句中,先處理最起始的條件,如果不滿足,再處理下一個條件:而在CASE語句中,沒有值的順序號,所有值是并行處理的,這樣就縮短了程序的執(zhí)行時間。算術(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_out: 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 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_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為時鐘信號輸入端口,zero為判accum是否為零的輸出端口。opcode為操作碼輸入端,data為數(shù)據(jù)輸入端,accum為另一輸入端口,它接累加器的輸出端。opcode不同的值代表不同的操作,在此圖中,假設(shè)data為“1”(十進(jìn)制),accum為“2”,兩者相與為“0”,相加為“3”,跳轉(zhuǎn)時則輸出accum的值“2”,數(shù)據(jù)傳輸時輸出data的值“1”。3.4 指令寄存器指令寄存器用來寄存指令,其引腳圖如圖3-7所示。指令寄存器的觸發(fā)時鐘是clk1。clk1的上升沿觸發(fā),寄存器開始工作。每條指令為兩個字節(jié),即16位。高3位是操作碼,低13位是地址。本設(shè)計(jì)的數(shù)據(jù)總線為8位,所以每條指令需要取兩次,先取高8位,后取低8位。由狀態(tài)變量state來標(biāo)志從數(shù)據(jù)總線上取來的數(shù)據(jù)是高8位還是低8位。如果state為0表示取得的是高8位,存入高8位寄存器,同時將變量state置為1。下次再寄存時,由于state為1,可知取得的是低8位,存入低8位寄存器中,同時將state置為0。圖3-7指令寄存器由于數(shù)據(jù)總線既可以傳輸指令也可以傳輸數(shù)據(jù),而且只有指令需要寄存到指令寄存器中,因此需要一個信號指示是否進(jìn)行寄存。圖中ena引腳用來控制是否寄存。當(dāng)數(shù)據(jù)總線傳輸?shù)氖侵噶顣r,ena端由控制電路置為1,指令寄存;如果數(shù)據(jù)總線傳輸?shù)氖菙?shù)據(jù),則ena為0,指令寄存器停止工作。指令寄存時,分為高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(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); elsif 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為時鐘輸入信號,ena為使能輸入端口,reset為復(fù)位端口,這里假設(shè)data傳輸?shù)囊恢笔恰?1”(十六進(jìn)制),則當(dāng)state為0時,傳輸高八位,當(dāng)state為1時,傳輸?shù)桶宋?。其?3至15位存入opcode中,0至12位存入str_addr中。所以這里的opcode為“1”,str_addr為“0121”。3.5 狀態(tài)控制電路狀態(tài)控制電路是CPU的控制核心。用于產(chǎn)生一系列的控制信號,來控制各部件的啟動或者停止。clk1、clk8由時鐘產(chǎn)生電路產(chǎn)生;reset為高電平時,復(fù)位狀態(tài)控制電路所有輸出信號;opcode為操作碼輸入端,取自指令寄存器的高三位;pc_clk作為程序計(jì)數(shù)器的時鐘信號;acc_ena輸出到累加器的使能端;pc_ena為指令寄存器的使能信號,控制指令寄存器的啟、停;datactrl_ena作為數(shù)據(jù)控制電路的使能信號;idle為停機(jī)信號,輸出到片外。圖3-9 狀態(tài)控制電路如果將狀態(tài)控制電路作為一個整體進(jìn)行程序編寫,有許多語句需要反復(fù)描述。這樣降低了程序的可讀性,而且在硬件實(shí)現(xiàn)時也會增加不必要的重復(fù)的邏輯電路。因此將狀態(tài)控制電路又分為狀態(tài)機(jī)和狀態(tài)控制器兩部分。狀態(tài)控制器產(chǎn)生使能信號ena控制狀態(tài)機(jī)的啟、停。當(dāng)復(fù)位信號reset有效時,狀態(tài)控制器將ena置零,從而使?fàn)顟B(tài)機(jī)停止工作,各輸出信號復(fù)位。狀態(tài)控制器中當(dāng)復(fù)位脈沖過后,clk8上升沿到來,ena 輸出為1,否則為0。下面重點(diǎn)說明狀態(tài)機(jī)的設(shè)計(jì)。圖3-11狀態(tài)機(jī) 圖3-10狀態(tài)控制器此設(shè)計(jì)中,指令周期由8個時鐘周期組成,每個時鐘周期完成固定的工作。因此狀態(tài)控制器有8個狀態(tài),當(dāng)前狀態(tài)由某一變量記錄,此變量的值就是當(dāng)前這個指令周期中經(jīng)過的時鐘數(shù)(從零開始記錄)。各時鐘周期,CPU 進(jìn)行的操作如下:第0個時鐘,從ROM讀取指令。由于指令長度為16位,數(shù)據(jù)總線為8位,所以讀取一條指令需要兩個時鐘周期。第0個時鐘讀取指令的高8位代碼,并存入指令寄存器。此時狀態(tài)機(jī)使讀信號rd和reg_ena輸出1(表示高電平),其余全部為0(表示低電平)。第1個時鐘,從ROM讀取指令的低8位代碼并存入指令寄存器。此時鐘結(jié)束后一條指令讀完,程序指針將指向下一個存儲單元。因此與上一時鐘相比pc_clk也從0變?yōu)?,使程序計(jì)數(shù)器(PC)增1。第2個時鐘,空操作。所有的輸出信號均為0。第3個時鐘,開始分析前兩個時鐘讀取的指令。如果操作符為NOP ,則輸出信號idle為高;如果操作符不為NOP,則PC增1,指向下一條指令,其他各控制線輸出為零。第4個時鐘,若取得的操作符為ANL,ADD,XRL或MOV,則rd輸出1,讀取相應(yīng)地址的數(shù)據(jù),地址由所讀取的指令的低13位給出;若為AJMP,則pc_ena信號輸出為1,使程序計(jì)數(shù)器讀入目的地址;若為MEM,則datactrl_ena輸出1,使數(shù)據(jù)控制電路輸出累加器數(shù)據(jù);若為其它指令,則輸出全為0。第5個時鐘,若取得的操作符為ANL,ADD或XRL,則ALU將從ROM讀取的數(shù)據(jù)和累加器數(shù)據(jù)進(jìn)行相應(yīng)的運(yùn)算;若為MOV,就把從ROM讀取的數(shù)據(jù)通過ALU送給累加器;若為JZ,先通過zero判斷累加器的值是否為0,如果為0,pc_clk輸出1,使PC增1,否則PC保持原值不變;若為AJMP,鎖存目的地址;若為MEM,將數(shù)據(jù)寫入ROM中的相應(yīng)地址處;若為其它指令,則輸出全為0。第6個時鐘,空操作。第7個時鐘,若操作符為JZ且累加器值為0,則PC值再加1,跳過一條指令,否則PC保持原值不變;如果操作符不是JZ,則所有輸出為0。根據(jù)上述描述,畫出狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖,如圖4-12所示。其中輸入為opcode,輸出為狀態(tài)機(jī)的各個輸出信號。然后根據(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 isbeginprocess(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, 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 std_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, 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 state_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_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;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; 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; i
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校外培訓(xùn)用戶管理辦法
- 極端氣候預(yù)警管理辦法
- 沖擊地壓防治管理辦法
- 河南省核查員管理辦法
- 星級管理辦法舉措建議
- 江蘇沛縣公墓管理辦法
- 合肥廠區(qū)定位管理辦法
- 計(jì)算機(jī)視覺中的深度估計(jì)技術(shù)綜述與展望
- 鳥糞石電解過程中電流密度對鎂陽極析鎂行為的動力學(xué)分析
- 中學(xué)生德育教育實(shí)施困境與改進(jìn)路徑研究
- 企業(yè)消防安全責(zé)任制模板
- 2025屆黑龍江省哈爾濱四十七中學(xué)七年級英語第二學(xué)期期末統(tǒng)考試題含答案
- 人工智能通識課程開課方案
- 2025-2030中國智慧政務(wù)行業(yè)發(fā)展策略及投資潛力預(yù)測報告
- 【中考真題】2025年福建中考數(shù)學(xué)真題試卷(含解析)
- 2025年四川省宜賓市中考數(shù)學(xué)真題試卷及答案解析
- 2025年時事政治考試題及答案(300題)
- 第2章工業(yè)控制網(wǎng)絡(luò)技術(shù)基礎(chǔ)
- 海姆立克急救法PPT
- YS/T 534.3-2007氫氧化鋁化學(xué)分析方法第3部分:二氧化硅含量的測定鉬藍(lán)光度法
- GB/T 13822-2017壓鑄有色合金試樣
評論
0/150
提交評論