基于FPGA的計(jì)算器設(shè)計(jì).doc_第1頁
基于FPGA的計(jì)算器設(shè)計(jì).doc_第2頁
基于FPGA的計(jì)算器設(shè)計(jì).doc_第3頁
基于FPGA的計(jì)算器設(shè)計(jì).doc_第4頁
基于FPGA的計(jì)算器設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于FPGA的計(jì)算器設(shè)計(jì)摘 要本文介紹了一個(gè)簡單計(jì)算器的設(shè)計(jì),該設(shè)計(jì)采用了現(xiàn)場可編程邏輯器件FPGA設(shè)計(jì),并基于硬件描述語言VHDL在Altera公司的Quartus 軟件上實(shí)現(xiàn)仿真。系統(tǒng)由計(jì)算部分、存儲部分、顯示部分和輸入部分四個(gè)部分組成,計(jì)算部分為加法器、減法器、乘法器和除法器,存儲部分需要3個(gè)存儲器來實(shí)現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(reg)以及結(jié)果暫存器(ans)。顯示部分由四個(gè)七段譯碼管組成,分別來顯示輸入數(shù)字,輸入部分采用外接鍵盤,由09十個(gè)數(shù)字按鍵,加減乘除四個(gè)運(yùn)算符按鍵,一個(gè)等號按鍵和一個(gè)清零按鍵組成的。通過外部的按鍵可以完成四位數(shù)之內(nèi)的 加、減、乘、除四種功能運(yùn)算,其結(jié)構(gòu)簡單,易于實(shí)現(xiàn)。 關(guān)鍵詞:FPGA;VHDL;計(jì)算器1 概述在國外,電子計(jì)算器在集成電路發(fā)明后,只用短短幾年時(shí)間就完成了技術(shù)飛躍,經(jīng)過激烈的市場競爭,現(xiàn)在的計(jì)算器技術(shù)己經(jīng)相當(dāng)成熟。計(jì)算器已慢慢地脫離原來的“輔助計(jì)算工具”的功能定位,正向著多功能化、可編程化方向發(fā)展,在各個(gè)領(lǐng)域都得到了廣泛的應(yīng)用。用計(jì)算器不僅可以實(shí)現(xiàn)各種各樣復(fù)雜的數(shù)學(xué)計(jì)算還可以用來編制、運(yùn)行程序,甚至解方程組,圖形計(jì)算器還可以進(jìn)行圖形處理。計(jì)算器內(nèi)置的軟件允許用戶進(jìn)行類似于對計(jì)算機(jī)的文件和目錄管理等操作,允許用戶對圖形界面進(jìn)行定制,同時(shí)各種新技術(shù)也被應(yīng)用到計(jì)算器里使計(jì)算器功能越來越強(qiáng)大??梢哉f,計(jì)算器就是一個(gè)“微微型”的計(jì)算機(jī)。國內(nèi)也有廠商利用計(jì)算器芯片開發(fā)新的產(chǎn)品,但對計(jì)算器技術(shù)的研究、計(jì)算器芯片的設(shè)計(jì)還處于起步階段。計(jì)算器的主要功能還是在于“計(jì)算”,不妨稱之為“低檔計(jì)算器”。即便是對這種計(jì)算器,很多廠商也只從事計(jì)算器的組裝、銷售業(yè)務(wù)。一些IC設(shè)計(jì)公司、芯片提供商也開始研究計(jì)算器技術(shù)。本次設(shè)計(jì)基于現(xiàn)場可編程邏輯器件FPGA進(jìn)行設(shè)計(jì),應(yīng)用硬件描述語言VHDL編程并在Altera公司的Quartus 軟件上實(shí)現(xiàn)仿真。需要進(jìn)行計(jì)算器的常用運(yùn)算功能的實(shí)現(xiàn),通過外接鍵盤輸入、LED數(shù)碼顯示來達(dá)成運(yùn)算目的。2 硬件描述語言VHDL簡介2.1 VHDL的發(fā)展VHDL誕生于1982年。在1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言 。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本,IEEE-1076(簡稱87版)之后,各EDA公司相繼推出了自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口。此后VHDL在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)的硬件描述語言。而Verilog HDL是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首創(chuàng)的,最初只設(shè)計(jì)了一個(gè)仿真與驗(yàn)證工具,之后又陸續(xù)開發(fā)了相關(guān)的故障模擬與時(shí)序分析工具。1985年Moorby推出它的第三個(gè)商用仿真器Verilog XL,獲得了巨大的成功,從而使得Verilog HDL迅速得到推廣應(yīng)用。1989年CADENCE公司收購了GDA公司,使得Verilog HDL成為了該公司的獨(dú)家專利。1990年CADENCE公司公開發(fā)表了Verilog HDL,并成立LVI組織以促進(jìn)Verilog HDL成為IEEE標(biāo)準(zhǔn),即IEEE Standard 1364-1995。 2.2 VHDL的特點(diǎn)VHDL語言主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,與其他硬件描述語言相比,VHDL語言有如下優(yōu)越之處2:1) VHDL語言支持自上而下(Top Down)和基于庫(Library Base )的設(shè)計(jì)方法,還支持同步電路、異步電路、FPGA以及其他隨機(jī)電路的設(shè)計(jì);2) VHDL語言具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到門級電路,其高層次的行為描述可以與低層次的RTL描述和結(jié)構(gòu)描述混合使用,還可以自定義數(shù)據(jù) 類型,給編程人員帶來較大的自由和方便;3) VHDL對設(shè)計(jì)的描述具有相對獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必關(guān)心最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么;4) VHDL具有電路仿真與驗(yàn)證功能,可以保證設(shè)計(jì)的正確性,用戶甚至不必編寫如何測試相量便可以進(jìn)行源代碼級的調(diào)試,而且設(shè)計(jì)者可以非常方便地比較各種方案之間的可行性及其優(yōu)劣,不需做任何實(shí)際的電路實(shí)驗(yàn);5) VHDL語言可以與工藝無關(guān)編程;6) VHDL語言標(biāo)準(zhǔn)、規(guī)范,易于共享和復(fù)用。2.3 VHDL語言結(jié)構(gòu) 圖2.1 VHDL程序結(jié)構(gòu)框圖3圖2.1中是VHDL的全部結(jié)構(gòu),但實(shí)際上并不需要全部的結(jié)構(gòu),就像在許多設(shè)計(jì)項(xiàng)目中,大部分工程師只用到VHDL其中的30%的語法;通常圖2.2的結(jié)構(gòu)才是基本和必需的。圖2.2 VHDL程序基本結(jié)構(gòu)2.3.1 實(shí)體(ENTITY)實(shí)體作為一個(gè)設(shè)計(jì)實(shí)體的組成部分,其功能是對這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口描述,它是設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元;實(shí)體說明部分規(guī)定了設(shè)計(jì)單元的輸入輸出接口信號或引腳,它是設(shè)計(jì)實(shí)體對外一個(gè)通信界面。就一個(gè)設(shè)計(jì)實(shí)體面言,外界所看到的僅僅是它的界面上的各種接口。它可以擁有一個(gè)或多個(gè)結(jié)構(gòu)體,用于描述此設(shè)計(jì)實(shí)體的邏輯結(jié)構(gòu)和邏輯功能,對于外界來主,這一部分是不可見的。不同邏輯功能的實(shí)體可以擁有相同的實(shí)體描述,這是因?yàn)閷?shí)體類似于原理圖中的一個(gè)部件符號,而其的邏輯功能是由設(shè)計(jì)實(shí)體中結(jié)構(gòu)體的描述確定的。實(shí)體是VHDL的基本設(shè)計(jì)單元,它可以對一個(gè)門電路、一個(gè)芯片、一塊電路板乃至整個(gè)系統(tǒng)進(jìn)行接口描述。其結(jié)構(gòu):ENTITY 實(shí)體名 IS4 GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值 ;常數(shù)名:數(shù)據(jù)類型:設(shè)定值 ); PORT(端口名:端口模式 數(shù)據(jù)類型;端口名:端口模式 數(shù)據(jù)類型);END ENTITY 實(shí)體名;2.3.2 結(jié)構(gòu)體(ARCHITECTURE)結(jié)構(gòu)體是實(shí)體所定義的設(shè)計(jì)實(shí)體中的一個(gè)組成部分。結(jié)構(gòu)體描述設(shè)計(jì)實(shí)體的內(nèi)部結(jié)構(gòu)和實(shí)體端口間的邏輯關(guān)系。結(jié)構(gòu)體由兩大部分組成5:對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等元素的說明部分;描述實(shí)體邏輯行為的,以各種不同的描述風(fēng)格表達(dá)的功能描述語句,它們包括各種形式的順序描述語句和并行描述語句。其語句格式如下:ARCHITECTURE 結(jié)構(gòu)體名; 說明語句BEGIN 功能描述語句END ARCHITECTURE 結(jié)構(gòu)體名;圖2.3中的五種語句結(jié)構(gòu)的基本組成和功能分別是:塊語句是由一個(gè)系列并行執(zhí)行語句構(gòu)成的組成體,它的功能是將結(jié)構(gòu)中的并行語句組成一個(gè)或多個(gè)模塊。進(jìn)程語句定義順序語句模塊,用以將從外部獲得的信號值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其它的信號進(jìn)行賦值。信號賦值語句將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號或界面端口進(jìn)行賦值。子程序調(diào)用語句用以調(diào)用過程或者函數(shù),并將此元件的端口與其它的元件、信號或高層次實(shí)體的界面端口進(jìn)行連接。圖2.3 結(jié)構(gòu)體構(gòu)造圖2.4 VHDL軟件設(shè)計(jì)簡介系統(tǒng)電路的軟件設(shè)計(jì)可采用工具軟件Quartus ,用該工具軟件所支持的語言硬件描述語言VHDL,以文本的方式進(jìn)行編程輸入。在編程時(shí)分別對控制、計(jì)數(shù)、鎖存、譯碼等電路模塊進(jìn)行VHDL文本描述,使每個(gè)電路模塊以及器件都以文本的形式出現(xiàn),然后通過編譯、波形分析、仿真、調(diào)試來完善每個(gè)器件的功能。單個(gè)器件制作完成后,然后將它們生成庫文件,并產(chǎn)生相應(yīng)的符號,最后用語言將各個(gè)已生成庫文件的器件的各個(gè)端口連接在一起,從而形成了系統(tǒng)主電路的軟件結(jié)構(gòu)。在連接器件時(shí),也可以采用圖形輸入方式,即在圖形輸入界面中調(diào)出先制作好的庫文件器件符號,再將每個(gè)器件符號的各端口直接連線,從而構(gòu)成系統(tǒng)主電路。在上述工作的基礎(chǔ)上,再進(jìn)行波形分析、仿真調(diào)試便完成整個(gè)軟件設(shè)計(jì)6。3 現(xiàn)場可編程門陣列(FPGA)簡介3.1 可編程邏輯器件可編程邏輯器件(PLD-Programmable Logic Devices)是一種由用戶編程以實(shí)現(xiàn)某種邏輯功能的新型邏輯器件。它誕生于20 世紀(jì)70 年代,在20 世紀(jì)80 年代以后,隨著集成電路技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展而迅速發(fā)展起來的。可編程邏輯器件自問世以來,PLD 經(jīng)歷了從PROM、PLA、PAL、GAL 到FPGA、ispLSI 等高密度PLD 的發(fā)展過程。在此期間,PLD 的集成度、速度不斷提高,功能不斷增強(qiáng),結(jié)構(gòu)趨于更合理,使用變得更靈活方便。PLD 的出現(xiàn)打破了由中小型通用型集成電路和大規(guī)模專用集成電路壟斷的局面。與中小規(guī)模通用型集成電路相比,用PLD 實(shí)現(xiàn)數(shù)字系統(tǒng),有研制周期短、先期投資少、無風(fēng)險(xiǎn)、修改邏輯設(shè)計(jì)方便、小批量生產(chǎn)成本低等優(yōu)勢。隨著可編程邏輯器件性能價(jià)格比的不斷提高,EDA 開發(fā)軟件的不斷完善,現(xiàn)代電子系統(tǒng)的設(shè)計(jì)將越來越多地使用可編程邏輯器件,特別是大規(guī)模可編程邏輯器件。如果說一個(gè)電子系統(tǒng)可以像積木堆積起來的話,那么現(xiàn)在構(gòu)成許多電子系統(tǒng)僅僅需要3 種標(biāo)準(zhǔn)的積木塊微處理器、存儲器和可編程邏輯器件,甚至只需一塊大規(guī)??删幊踢壿嬈骷?。PAL ( Programmable Array Logic)器件是20 世紀(jì)70 年代末期出現(xiàn)的一種低密度、一次性可編程邏輯器件。GAL(Generic Array Logic)器件是繼PAL 器件之后,在20 世紀(jì)80 年代中期推出的一種低密度可編程邏輯器件。它在結(jié)構(gòu)上采用了輸出邏輯宏單元(OLMC-Output Logic Macro Cell )結(jié)構(gòu)形式,在工藝上吸收EEPROM 的浮柵技術(shù),從而使GAL 器件具有可擦除、可重新編程、數(shù)據(jù)可長期保存的結(jié)構(gòu)特點(diǎn)。CPLD(Complex Programmable Logic Device)是萬門以上的復(fù)雜可編程邏輯器件,采用CMOS EPROM、EEPROM、快閃存儲器和SRAM 等編程技術(shù),從而構(gòu)成高密度、高速度和低功耗的可編程邏輯器件7。3.2 現(xiàn)場可編程門陣列(FPGA)FPGA 是現(xiàn)場可編程門陣列(Field Programmable Gate Array)的簡稱。FPGA器件及其開發(fā)系統(tǒng)是開發(fā)大規(guī)模數(shù)字集成電路的新技術(shù)。它利用計(jì)算機(jī)輔助設(shè)計(jì),繪制出實(shí)現(xiàn)用戶邏輯的原理圖、編輯布爾方程或用硬件描述語言等方式作為設(shè)計(jì)輸入;然后經(jīng)一系列轉(zhuǎn)換程序、自動布局布線、模擬仿真的過程;最后生成配置FPGA 器件的數(shù)據(jù)文件,對FPGA 器件初始化。這樣就實(shí)現(xiàn)了滿足用戶要求的專用集成電路,真正達(dá)到了用戶自行設(shè)計(jì)、自行研制和自行生產(chǎn)集成電路的目的。FPGA是一種半定制的集成電路,其特點(diǎn)是直接面向用戶,具有極大的靈活性和通用性,開發(fā)效率高,硬件測試和實(shí)現(xiàn)快捷,工作可靠性好而且技術(shù)維護(hù)簡單。FPGA 相對于CPLD 而言,其結(jié)構(gòu)特點(diǎn)在于FPGA 是基于查找表look-up-table的。查找表(look-up-table)簡稱為LUT,LUT 本質(zhì)上是一個(gè)RAM。FPGA 中多使用4 輸入的LUT,所以每一個(gè)LUT 可以看成一個(gè)有4 位地址線的16x1 的RAM。當(dāng)用戶通過原理圖或HDL語言描述了一個(gè)邏輯電路后,PLD/FPGA 開發(fā)軟件會自動計(jì)算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入RAM,這樣,每輸入一個(gè)信號進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對應(yīng)的內(nèi)容,然后輸出即可。3.2.1 FPGA的器件結(jié)構(gòu)與工作原理FPGA(Field Programmable Gate Array)即現(xiàn)場可編程邏輯陣列,是大規(guī)??删幊碳呻娐返闹髁髌骷?。FPGA一般由三種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的SRAM(靜態(tài)隨機(jī)存儲器)組成,這三種可編程電路是:可編程邏輯陣列LAB(Logic Array Block),輸入輸出模塊IOB (I/O Block)和互連資源IR(Interconnect Resource)。FPGA可編程邏輯形成的方法是基于查找表LUT (Look Up Table)結(jié)構(gòu)的,LUT是可編程的最小邏輯構(gòu)成單元4。1.可編程邏輯陣列LAB可編程邏輯陣列是由一系列相鄰的邏輯單元LE (Logic Element)構(gòu)成的,每個(gè)LAB包括八個(gè)邏輯單元LE、相連的進(jìn)位鏈和級聯(lián)鏈,LAB控制信號和LAB局部互連。LAB的構(gòu)成、ACEK系列芯片的“粗粒度(coarse-grained )結(jié)構(gòu),有利于EDA軟件進(jìn)行布局布線,優(yōu)化器件的利用進(jìn)而提高整個(gè)數(shù)字系統(tǒng)的性。其中的邏輯單元LE是一種基于查找表的函數(shù)發(fā)生器。它能夠?qū)崿F(xiàn)4輸入1輸出的任意邏輯函數(shù)。每個(gè)LE包含一個(gè)4輸入的查找表、一個(gè)帶有同步使能的可編程觸發(fā)器、一個(gè)進(jìn)位鏈和一個(gè)級聯(lián)鏈。每個(gè)LE有兩個(gè)輸出分別可以驅(qū)動局部互連和快速通道互連。LE有兩個(gè)輸出驅(qū)動內(nèi)部互連,一個(gè)是驅(qū)動局部互連輸出,另一個(gè)驅(qū)動行或列的快速通道Fast Track的互連輸出,這兩個(gè)輸出可以單獨(dú)控制。因此在一個(gè)邏輯單元LE中的觸發(fā)器和查找表能夠用來完成不相關(guān)的功能,從而提高LE的資源利用率。在ACEK系列芯片的結(jié)構(gòu)中還提供了兩種專用的高速數(shù)據(jù)通道,用于連接相鄰的LE,但不占用局部互連通路,它們是進(jìn)位鏈和級聯(lián)鏈。進(jìn)位鏈用來支持高速計(jì)數(shù)器和加法器,它提供了LE之間的決速向前進(jìn)位功能。來自低位的進(jìn)位信號經(jīng)進(jìn)位鏈向前直接送到高位,同時(shí)饋入查找表和進(jìn)位鏈的下一段。這種特點(diǎn)使得ACEK結(jié)構(gòu)能夠?qū)崿F(xiàn)高速計(jì)數(shù)器、加法器和寬位比較器。級聯(lián)鏈可以用來實(shí)現(xiàn)多輸入數(shù)的邏輯函數(shù)。相鄰的查找表并行地完成部分邏輯功能,級聯(lián)鏈把中間結(jié)果拼接起來。進(jìn)位鏈和級聯(lián)鏈的使用有利于提高器件的工作速度,但是大量使用進(jìn)位鏈和級聯(lián)鏈會限制布局布線的靈活性,導(dǎo)致資源的浪費(fèi)。因此在設(shè)計(jì)過程應(yīng)該權(quán)衡考慮,在FPGA芯片資源利用和工作速度之間尋求平衡。2.輸入/輸出模塊IOBACEK器件的I/O引腳是由一些I/O單元驅(qū)動的。IOE (I/O Element)位于快速通道的行和列末端,包含一個(gè)雙向的緩沖器和一個(gè)寄存器。這個(gè)寄存器可以用作需要快速建立時(shí)間的外部數(shù)據(jù)輸入寄存器,也可以作為需要快速“時(shí)鐘到輸出”性能的數(shù)據(jù)輸出寄存器。IOE可以配置成輸入、輸出或雙向口。ACEK器件中的IOE具有許多特性,支持JTAG編程、三態(tài)緩沖和漏極開路輸出等等。每個(gè)IOE的時(shí)鐘、清零、時(shí)鐘使能和輸出使能的控制均由I/O控制信號網(wǎng)絡(luò)提供,采用高速驅(qū)動以減小通過器件的時(shí)間偏差。此外,ACEK器件還提供了若干專用輸入引腳,這些引腳用來驅(qū)動IOE寄存器的控制端,使用了專用的布線通道,以便具有比快速通道更短的延遲和更小的偏差。3.互連資源IR可編程的互連資源包括各種長度的金屬連線線段和一些可編程的連線開關(guān),它們將各個(gè)邏輯陣列之間、及其與IO模塊之間互相連接起來,構(gòu)成各種功能復(fù)雜的系統(tǒng)。在ACEK中互連結(jié)構(gòu)是通過快速通道(Fast Track)實(shí)現(xiàn)的。Fast Track遍布于整個(gè)ACEK器件,是一系列水平和垂直走向的連續(xù)式布線通道。每一行的LAB都有一個(gè)專用的“行互連”,“行互連”可以驅(qū)動。I/O引腳或饋送到器件中的其LAB;“列互連”連接各行,也能驅(qū)動I/O引腳。這種布線結(jié)構(gòu)能夠有效提高布線效率,使得即使非常復(fù)雜的設(shè)計(jì)也能夠測定其延時(shí)性。4.嵌人式陣列塊EAB嵌人式陣列塊EAB是在輸入輸出口上帶有寄存器的靈活的RAM塊,是由一系列嵌人式RAM單元組成的。EAB的邏輯功能是在配置期間,用只讀模式對EAB編程產(chǎn)生一個(gè)大型查找表來實(shí)現(xiàn)的。采用查找表實(shí)現(xiàn)組合邏輯比一般算法快,EAB的快速時(shí)間通道使得這一先進(jìn)性能進(jìn)一步得到加強(qiáng)。當(dāng)要實(shí)現(xiàn)存儲器功能時(shí),每個(gè)EAB提供2048比特位,每一個(gè)EAB是一個(gè)獨(dú)立的結(jié)構(gòu),它具有共同的輸入、互連和控制信號。每個(gè)EAB含有一個(gè)行互連饋入端,EAB的輸出能夠同時(shí)驅(qū)動行互連通道和列互連通道。這一特性增加了EAB的可利用布線資源。因此,EAB可以非常方便地用于實(shí)現(xiàn)一些規(guī)模不大的RAM, ROM, FIFO等功能模塊;同時(shí)在實(shí)現(xiàn)地址譯碼器、狀態(tài)機(jī)、微控制器等復(fù)雜邏輯時(shí)也具備了一定優(yōu)勢5。3.2.2 基于EDA平臺的FPGA開發(fā)流程一個(gè)完整、典型的EDA設(shè)計(jì)流程67即是自頂向下設(shè)計(jì)方法的具體實(shí)施過程,也是EDA軟件本身的組成結(jié)構(gòu)。在實(shí)踐中進(jìn)一步了解支持這一個(gè)設(shè)計(jì)流程的諸多設(shè)計(jì)工具,有利于排解設(shè)計(jì)中的具體問題,提高設(shè)計(jì)質(zhì)量。1.設(shè)計(jì)輸入基于EDA軟件平臺的FPGA開發(fā)流程,一般有兩種設(shè)計(jì)輸入方式:圖形輸入和硬件描述語言文本輸入。下面將重點(diǎn)介紹采用VHDL硬件描述語言進(jìn)行設(shè)計(jì)輸入方法,這是筆者在設(shè)計(jì)開發(fā)過程中采用的主要方法。VHDL作為電子工程主流硬件描述語言,是EDA技術(shù)的重要組成部分。它于1983年由美國國防部創(chuàng)建,由IEEE協(xié)會進(jìn)一步發(fā)展并在1987年成為IEEE國際標(biāo)準(zhǔn)。自IEEE協(xié)會公布了VHDL標(biāo)準(zhǔn)版本(IEEE Std 1076)之后,各大EDA公司相繼推出支持VHDL語言的開發(fā)環(huán)境。從此VHDL作為硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一,在電子設(shè)計(jì)領(lǐng)域得到廣泛應(yīng)用,并逐步成為事實(shí)上的通用硬件描述語言。VHDL語言具有很強(qiáng)的電路建模能力,具有良好的電路行為描述和系統(tǒng)描述的能力,能從多個(gè)層次對數(shù)字系統(tǒng)進(jìn)行建模和描述;VHDL語言還具有與硬件電路無關(guān)和設(shè)計(jì)平臺無關(guān)的特性,并且在語言易讀性和層次化結(jié)構(gòu)化設(shè)計(jì)方面表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。這些特性使得VHDL語言在支持自頂向下的EDA設(shè)計(jì)流程方面顯得游刃有余。因此,采用VHDL進(jìn)行電子系統(tǒng)設(shè)計(jì)可以讓設(shè)計(jì)者專心致力于其功能的實(shí)現(xiàn),而不需要對不影響功能的與工藝相關(guān)的問題花費(fèi)過多的時(shí)間和精力,從而大大簡化了設(shè)計(jì)任務(wù),提高了設(shè)計(jì)效率和可靠性。采用VHDL文本設(shè)計(jì)輸入與傳統(tǒng)的計(jì)算機(jī)軟件語言編輯輸入基本上一樣,就是使用VHDL描述數(shù)字系統(tǒng)的功能,進(jìn)行文本編輯輸入。事實(shí)上,純粹的VHDL設(shè)計(jì)輸入方法仍然是最基本、最有效和最普遍的設(shè)計(jì)輸入方法。2.設(shè)計(jì)綜合在電子設(shè)計(jì)領(lǐng)域“綜合”的概念可以表示為:將行為和功能層次表達(dá)的電子系統(tǒng)轉(zhuǎn)化為低層次的便于具體實(shí)現(xiàn)的模塊組合裝配而成的過程。事實(shí)上,設(shè)計(jì)過程通常從高層次的行為描述開始,直到最底層的結(jié)構(gòu)描述結(jié)束,每一個(gè)步驟都是上一個(gè)層次的綜合轉(zhuǎn)換。在FPGA設(shè)計(jì)開發(fā)過程中,整個(gè)綜合過程就是設(shè)計(jì)者在EDA軟件平臺上編輯輸入VHDL文本,依據(jù)給定電路結(jié)構(gòu)組件和約束控制條件進(jìn)行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門級電路甚至更底層的電路描述網(wǎng)表文件。因此設(shè)計(jì)綜合的過程就是將軟件設(shè)計(jì)的VHDL描述文本與硬件結(jié)構(gòu)掛鉤,是軟件描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟,是文本描述與硬件實(shí)現(xiàn)之間的一座橋梁。3.結(jié)構(gòu)適配適配器也稱為結(jié)構(gòu)綜合器,它的功能是將綜合器產(chǎn)生的網(wǎng)表文件配置于指定的FPGA目標(biāo)器件中,使之產(chǎn)生最終的下載文件。適配過程中所選定的FPGA目標(biāo)器件必須屬于綜合器原來指定的目標(biāo)器件系列,這是因?yàn)檫m配器的適配對象是直接與器件的結(jié)構(gòu)細(xì)節(jié)相對應(yīng)的。邏輯綜合通過后必須利用適配器將綜合后的網(wǎng)表文件針對某一具體目標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件配置、邏輯分割、邏輯優(yōu)化、邏輯布局布線操作。適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時(shí)序仿真,同時(shí)產(chǎn)生可用于編程下載文件。4.功能仿真和時(shí)序仿真在編程下載前必須利用EDA工具對配置生成的結(jié)果進(jìn)行模擬分析,這就是所謂的仿真。仿真的過程就是讓計(jì)算機(jī)根據(jù)一定的算法和一定的仿真庫對EDA設(shè)計(jì)進(jìn)行模擬,以驗(yàn)證設(shè)計(jì),排除錯(cuò)誤。仿真包括功能仿真和時(shí)序仿真。功能仿真:不經(jīng)過綜合和適配階段,在設(shè)計(jì)項(xiàng)目編譯后直接進(jìn)入門級仿真器進(jìn)行模擬測試。主要用于測試設(shè)計(jì)項(xiàng)目的邏輯功能,用以了解其實(shí)現(xiàn)的功能是否滿足設(shè)計(jì)要求,在功能仿真的過程不涉及任何具體器件的硬件特性。時(shí)序仿真:當(dāng)設(shè)計(jì)項(xiàng)目通過功能仿真初步確定滿足設(shè)計(jì)要求后,需要綁定具體器件進(jìn)行時(shí)序仿真。時(shí)序仿真就是接近真實(shí)器件運(yùn)行特性的仿真,仿真文件包含了器件硬件特性參數(shù),因而仿真精度高。但時(shí)序仿真的仿真文件必須來自針對具體器件的綜合器和適配器。綜合所得的EDIF網(wǎng)表文件通常作為FPGA適配器的輸入文件,產(chǎn)生的仿真網(wǎng)表文件包含了器件精確的延時(shí)信息。5.編程下載把適配后生成的下載或配置文件,通過編程器或編程電纜向FPGA進(jìn)行下載,以便進(jìn)行硬件調(diào)試和驗(yàn)證,從而實(shí)現(xiàn)滿足設(shè)計(jì)要求的電子系統(tǒng)8。4 Quartus 概述及其設(shè)計(jì)流程4.1 Quartus 概述Quartus 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。Quartus 可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。Quartus 支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。此外,Quartus 通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺。Maxplus II 作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前Altera已經(jīng)停止了對Maxplus II 的更新支持,Quartus 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設(shè)計(jì)輔助工具,集成了SOPC和HardCopy設(shè)計(jì)流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。Altera Quartus 作為一種可編程邏輯的設(shè)計(jì)環(huán)境, 由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。Altera的Quartus 可編程邏輯軟件屬于第四代PLD開發(fā)平臺。該平臺支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求,其中包括支持基于Internet的協(xié)作設(shè)計(jì)。Quartus平臺與Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應(yīng)商的開發(fā)工具相兼容。改進(jìn)了軟件的LogicLock模塊設(shè)計(jì)功能,增添 了FastFit編譯選項(xiàng),推進(jìn)了網(wǎng)絡(luò)編輯性能,而且提升了調(diào)試能力。支持MAX7000/MAX3000等乘積項(xiàng)器件。4.2 Quartus 設(shè)計(jì)流程.建立新工程:首先將所設(shè)計(jì)工程項(xiàng)目劃分為若干子模塊,將每個(gè)子模塊單獨(dú)存放在一個(gè)文件夾中,并分別進(jìn)行編譯,驗(yàn)證通過后,將每個(gè)子模塊的VHDL文本文件添加到總工程文件夾中,并建立圖元(建立圖元block,右鍵點(diǎn)擊.V文件,選擇 create symbol files for current files),將各個(gè)圖元(亦即子模塊)連接起來構(gòu)成總體設(shè)計(jì)項(xiàng)目。.設(shè)計(jì)各子模塊:編寫各子模塊相應(yīng)的代碼,并分別進(jìn)行編譯,驗(yàn)證通過后將各子模塊VHDL文件添加到頂層設(shè)計(jì)中,創(chuàng)建圖元,進(jìn)行連接以完成總體項(xiàng)目的設(shè)計(jì)。這部分就是將管腳連好。在原理圖編輯中,英文的大小寫代表相同的含義,只要器件連接線的節(jié)點(diǎn)名稱相同就會默認(rèn)為是連接的,總線(Bus)在圖形編輯窗口顯示的是一條粗線,總線必須在名稱的后面加上“a.b”,表示一條總線內(nèi)所含有的節(jié)點(diǎn)編號,原理圖編輯的文件擴(kuò)展名為“.bdf”,在Quartus II中工程名稱必須與頂層實(shí)體名稱相同,且VHDL設(shè)計(jì)中實(shí)體名稱亦為相同的名字,否則不能進(jìn)行編譯。.編譯工程.仿真:波形矢量文件的擴(kuò)展名為“.vwf”,仿真分為功能仿真和時(shí)序仿真,也稱為前仿真和后仿真,功能仿真是忽略延時(shí)后的仿真,是最理想的仿真,時(shí)序仿真則是加上了一些延時(shí)的仿真,是最接近于實(shí)際的仿真,在設(shè)計(jì)中通常先做功能仿真驗(yàn)證邏輯的正確性,后做時(shí)序仿真驗(yàn)證時(shí)序是否符合要求,需注意默認(rèn)為時(shí)序仿真,在設(shè)置功能仿真后需要生成功能仿真網(wǎng)絡(luò)表。5 系統(tǒng)方案設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)框圖如圖5.1所示。此設(shè)計(jì)由計(jì)算部分、存儲部分、顯示部分和輸入部分組成。圖5.1 計(jì)算器的系統(tǒng)組成框圖5.1 計(jì)算器的計(jì)算部分在這一部分中,可以將每一個(gè)數(shù)均表示成8位或者4位二進(jìn)制數(shù)統(tǒng)一進(jìn)行運(yùn)算,各個(gè)計(jì)算數(shù)之間的計(jì)算可以直接使用VHDL語言中的運(yùn)算符來實(shí)現(xiàn)。但在顯示時(shí),必須將個(gè)位、十位、百位分開顯示,設(shè)計(jì)時(shí)使用比較的方法來實(shí)現(xiàn)計(jì)算器的功能要求。另外,由于在VHDL語言中只能進(jìn)行除數(shù)是2的冪的除法,不能進(jìn)行任意數(shù)的除法,因此必須單獨(dú)設(shè)計(jì)一個(gè)除法器來實(shí)現(xiàn)計(jì)算器的功能要求,該除法器可以利用減法運(yùn)算和左移位運(yùn)算實(shí)現(xiàn)除法運(yùn)算,具體算法見第四章。5.2 計(jì)算器的存儲部分存儲部分需要3個(gè)存儲器來實(shí)現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(reg)以及結(jié)果暫存器(ans)。在存放數(shù)字時(shí),將數(shù)字放入acc或者reg里面,當(dāng)?shù)谝淮伟聪聰?shù)字鍵時(shí),表示該數(shù)字是個(gè)位。當(dāng)?shù)诙伟聪聰?shù)字鍵時(shí),表示這次輸入的是個(gè)位,上一次輸入的是十位,所以要把第一次輸入的數(shù)字乘以10,再加上第二次輸入的數(shù)字,來得到最終輸入的數(shù)字。當(dāng)?shù)谌伟聪聰?shù)字鍵時(shí),要將第一次輸入的數(shù)字乘以100,再加上第二次輸入的數(shù)字乘以10,再加上第一次輸入的數(shù)字,來得到最終輸入的數(shù)字。當(dāng)進(jìn)行第一次計(jì)算時(shí),第一個(gè)數(shù)字存放在acc里面。按下運(yùn)算符以后,第二個(gè)數(shù)字放在reg里面。當(dāng)再按下運(yùn)算符號或者等號時(shí),第一次計(jì)算的結(jié)果將存放在ans里面,同時(shí)reg清零,等待下一個(gè)數(shù)字的輸入。進(jìn)行第二次運(yùn)算時(shí),將ans里面的結(jié)果與reg里面新輸入的數(shù)字進(jìn)行運(yùn)算,再將運(yùn)算結(jié)果存放在ans里面,直到最后按下等號按鍵的時(shí)候,顯示最終的運(yùn)算結(jié)果。5.3 計(jì)算器的顯示部分顯示部分是系統(tǒng)的輸出部分,用于顯示按鍵值及計(jì)算結(jié)果,由于數(shù)字系統(tǒng)的數(shù)據(jù)運(yùn)算都是二進(jìn)制的,而輸出表達(dá)式都是BCD碼,為了滿足BCD碼的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA中實(shí)現(xiàn)。本文采用的是共陽極七段數(shù)碼管,顯示數(shù)字時(shí)需要將對應(yīng)管腳置為低電平,輸出時(shí),從左到右,按從高到低位的順序依次接g、f、e、d、c、b、a。七段譯碼器的基本結(jié)構(gòu)如圖3.2所示。圖5.2 七段譯碼器的結(jié)構(gòu)其VHDL語言描述如下所示。在這段程序中,indata是輸入4位二進(jìn)制數(shù)的端口,outdata是輸出7位譯碼的端口,用WITH語句來實(shí)現(xiàn)譯碼。WITH indata SELECToutdata=0111111WHEN0000, -0的顯示; 0000110WHEN0001, -1的顯示; 1011011WHEN0010, -2的顯示; 1001111WHEN0011, -3的顯示; 1100110WHEN0100, -4的顯示; 1101101WHEN0101, -5的顯示; 1111101WHEN0110, -6的顯示; 0000111WHEN0111, -7的顯示; 1111111WHEN1000, -8的顯示; 1101111WHEN1001, -9的顯示; 0000000WHEN OTHERS; -其它的輸入按鍵均不顯示。計(jì)算器顯示部分的設(shè)計(jì)和實(shí)現(xiàn),實(shí)際上就是七段譯碼器的設(shè)計(jì)和實(shí)現(xiàn),三個(gè)七段譯碼器分別顯示的是個(gè)位、十位和百位。輸入第一個(gè)數(shù)字后至再一次按下數(shù)字按鍵輸入第二個(gè)數(shù)字前,三個(gè)七段譯碼器顯示的都是第一個(gè)數(shù)字。當(dāng)開始輸入第二個(gè)數(shù)字的時(shí)候顯示第二個(gè)數(shù)字,再次按下運(yùn)算按鍵到輸入第三個(gè)數(shù)字前,顯示的是前兩個(gè)數(shù)字的運(yùn)算結(jié)果,以此類推,當(dāng)最后按下等號鍵的時(shí)候,顯示最終的運(yùn)算結(jié)果。5.4 計(jì)算器的輸入部分計(jì)算器輸入部分的設(shè)計(jì)最主要的是按鍵譯碼電路的設(shè)計(jì)和實(shí)現(xiàn)。計(jì)算器的輸入部分是由09十個(gè)數(shù)字按鍵、加減乘除四則運(yùn)算的運(yùn)算符按鍵、一個(gè)等號按鍵和一個(gè)清零按鍵組成的,設(shè)計(jì)所要做的是對按鍵信息進(jìn)行譯碼,使其在計(jì)算器內(nèi)部可以使用。數(shù)字按鍵譯碼電路的主體部分VHDL語言描述如下。PROCESS(inclk,reset) BEGIN IF reset=1THEN -異步復(fù)位信號為高電平的時(shí)候 outnumoutnum=0000;outflagoutnum=0001;outflagoutnum=0010;outflagoutnum=0011;outflagoutnum=0100;outflagoutnum=0101;outflagoutnum=0110;outflagoutnum=0111;outflagoutnum=1000;outflagoutnum=1001;outflagoutnum=outnum;outflag=0; -不按鍵時(shí)保持 END CASE;END IF;END PROCESS;在本次設(shè)計(jì)的程序中,設(shè)reset是異步復(fù)位信號的輸入端口,inclk是時(shí)鐘信號的輸入端口,innum端口用來表示輸入的按鍵向量,outnum端口用來表示輸入的按鍵動作對應(yīng)的輸出數(shù)字,outflag端口用來輸出是否有按鍵動作,它主要實(shí)現(xiàn)的是按下什么就輸出什么。一共有十個(gè)位,初始值都為低電平“0”,當(dāng)按下哪個(gè)位時(shí)哪個(gè)位上的電平就跳為高電平(有且僅有一個(gè)為高電平),這時(shí)就有相應(yīng)的輸出。那十個(gè)位分別對應(yīng)的是09這十個(gè)數(shù)字,所以當(dāng)?shù)谝粋€(gè)位(從左往右位數(shù)依次增高)為高電平時(shí)顯示0,第十個(gè)位上位高電平時(shí),相應(yīng)的顯示為9。如果按下的鍵是加號、減號、乘號、除號或者是等于號時(shí),也是不顯示的,所以也可以稱作數(shù)字按鍵譯碼電路。6 計(jì)算器的VHDL設(shè)計(jì)6.1加法器的設(shè)計(jì)與仿真本次設(shè)計(jì)的加法器屬于多位加法器的范疇,可按其進(jìn)位方式的不同分為兩類:串行進(jìn)位加法器和并行進(jìn)位加法器。串行進(jìn)位加法器是將多個(gè)一位全加器級聯(lián),低位全加器的進(jìn)位輸出送給相鄰高位全加器作為進(jìn)位輸入,以此構(gòu)成多位加法器。這種設(shè)計(jì)思路簡單明了且占用資源少,但運(yùn)算速度較慢。并行進(jìn)位方式則是在各位的加法環(huán)節(jié)之外,另外設(shè)有進(jìn)位產(chǎn)生邏輯電路,各位的進(jìn)位輸入信號同時(shí)產(chǎn)生,從而各位可以同時(shí)完成全加運(yùn)算,輸出最后結(jié)果。并行進(jìn)位方式具有較快的運(yùn)算速度,但是相對于串行進(jìn)位方式來說,卻往往占用更多的資源。尤其是當(dāng)運(yùn)算位數(shù)增加的時(shí)候,相同位數(shù)的并行進(jìn)位和串行進(jìn)位加法器的資源占用差距也越來越大。因此,常常需要設(shè)計(jì)者在運(yùn)算速度和資源占用量之間做出折中平衡。而經(jīng)過實(shí)踐證明,4位二進(jìn)制并行進(jìn)位加法器和串行級聯(lián)加法器占用的資源幾乎相同。因此,可以用兩個(gè)4位二進(jìn)制并行加法器級聯(lián)構(gòu)成8位二進(jìn)制加法器,這是一種較為合理的選擇,加法器的原理框圖如圖6.1所示。圖6.1 加法器的原理框圖加法器要有被加數(shù)、加數(shù)和進(jìn)位位的輸入端口。設(shè)a端口為被加數(shù),b端口為加數(shù),ci為輸入進(jìn)位。此加法器還有兩個(gè)輸出端口,分別是加法運(yùn)算的最終結(jié)果輸出和進(jìn)位位的輸出,設(shè)s為結(jié)果的輸出端口,co為進(jìn)位的輸出端口。當(dāng)輸入被加數(shù)與加數(shù)后,兩個(gè)8位二進(jìn)制數(shù)開始相加,之后,再與輸入進(jìn)位位相加,這樣得到的最終結(jié)果就是加法器加法運(yùn)算的最終結(jié)果。加法器模塊圖如附錄中所示。程序如附錄中加法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被加數(shù)a為“0010000”即十進(jìn)制數(shù)16(可設(shè)置0255內(nèi)的任意數(shù)字),設(shè)置加數(shù)b為“10110000”即十進(jìn)制數(shù)176(可設(shè)置0255內(nèi)的任意數(shù)字,但因?yàn)槌绦蛑形窗鲥e(cuò)溢出判斷,所以需滿足a+b255),仿真后所得結(jié)果如圖6.2所示。16+176192,仿真結(jié)果正確,可知此加法器設(shè)計(jì)有效。圖6.2 加法器仿真16+1761926.2減法器的設(shè)計(jì)與仿真首先設(shè)計(jì)一個(gè)四位二進(jìn)制數(shù)的減法器,四位全減器的原理框圖如圖6.3所示。由圖可以看出,此減法器共需要兩個(gè)輸入端口和一個(gè)輸出端口。減法器的設(shè)計(jì)可以引用加法器,即通過對減數(shù)的求補(bǔ),再與被減數(shù)相加得到最終的結(jié)果,所以需要增設(shè)一個(gè)進(jìn)位位輸入端口和進(jìn)位位的輸出端口。圖6.3 四位全減器的原理框圖可以設(shè)a端口為被減數(shù),b端口為減數(shù),ci為輸入借位位,s為結(jié)果的輸出端口,co為借位的輸出端口。減法器的運(yùn)算過程中首先要引用加法器,在此不再贅述。而且此減法器可以進(jìn)行位數(shù)擴(kuò)展,每增加一位需要多引用一個(gè)加法器,為使圖形原理簡潔,所以此處只列出四位減法器。減法器模塊圖如附錄中所示。程序如附錄中減法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被減數(shù)a為“1111”即十進(jìn)制數(shù)15(可設(shè)置015內(nèi)的任意數(shù)字),設(shè)置減數(shù)b為“1001”即十進(jìn)制數(shù)9(可設(shè)置015內(nèi)的任意數(shù)字,但因?yàn)槌绦蛑形窗鲥e(cuò)判斷,所以需滿足ab),仿真后所得結(jié)果如圖6.4所示。15-96,仿真結(jié)果正確,可知此減法器設(shè)計(jì)有效。圖6.4 減法器仿真15-966.3乘法器的設(shè)計(jì)與仿真乘法器是數(shù)字系統(tǒng)中的基本邏輯器件,在很多應(yīng)用中都會出現(xiàn)如各種濾波器的設(shè)計(jì)、矩陣的運(yùn)算等。這里設(shè)計(jì)的是一個(gè)44的乘法器。依據(jù)乘法器的原理,可以繪出其原理框圖如圖6.5所示。圖6.5 乘法器的原理框圖可設(shè)a端口為被乘數(shù)(一個(gè)4位二進(jìn)制數(shù)),b端口為乘數(shù)(一個(gè)4位二進(jìn)制數(shù)),y為乘法運(yùn)算的結(jié)果的輸出端口。乘法器模塊圖如附錄中所示。程序如附錄中乘法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被乘數(shù)a為“1101”即十進(jìn)制數(shù)13(可設(shè)置016內(nèi)的任意數(shù)字),設(shè)置乘數(shù)b為“1010”即十進(jìn)制數(shù)10(可設(shè)置016內(nèi)的任意數(shù)字),仿真后所得結(jié)果如圖6.6所示。13*10130,仿真結(jié)果正確,可知此乘法器設(shè)計(jì)有效。圖6.6 乘法器仿真 13*101306.4 除法器的設(shè)計(jì)與仿真除法器是基于連減和移位操作的,連減實(shí)際上就是基于數(shù)學(xué)上除法的基本原理。例如,ab=c余數(shù)是d,就等價(jià)于a減去c個(gè)b后得到d而且db;之所以可以使用移位操作,是因?yàn)樗羞\(yùn)算的數(shù)都用二進(jìn)制表示,本文設(shè)計(jì)的除法器主要部分為一個(gè)控制移位的控制器,另有一個(gè)由全加器組成的4位減法器(引用上面的減法器的設(shè)計(jì))。又因?yàn)橐?guī)定了結(jié)果為4位,控制器首先比較被除數(shù)的高4位與除數(shù)的大小,判斷是否溢出,溢出則退出,否則就做4位移位和減法得到結(jié)果。在每次做完減法以后都要判斷是否夠減,即判斷是否有借位,不夠得話,就恢復(fù)被減數(shù),移一位再減。除法器的原理框圖如圖6.7所示。圖6.7 除法器的原理框圖設(shè)a端口為被除數(shù),b端口為除數(shù),clk為時(shí)鐘信號的輸入端口,str為啟動信號的輸入端口,此端口的作用是當(dāng)啟動信號為高電平的時(shí)候有效,表示啟動了除法器開始作除法運(yùn)算。s為除法運(yùn)算所得到的商的輸出端口,y為除法運(yùn)算中所得到的余數(shù)的輸出端口。該除法器的設(shè)計(jì)中使用了狀態(tài)機(jī),它有5個(gè)狀態(tài):start為開始狀態(tài),one為第一次移位狀態(tài),two為第二次移位狀態(tài),three為第三次移位狀態(tài)(正常運(yùn)算結(jié)果的輸出狀態(tài)),error為溢出出錯(cuò)狀態(tài)。在除法器的設(shè)計(jì)中引用了減法器。ain用來寄存被除數(shù),bin用來寄存除數(shù),atem為減法器的被減數(shù)輸入,btem為減法器的減數(shù)輸入,stem用來計(jì)算內(nèi)存結(jié)果,citem為減法器的借位輸入,cotem為減法器的借位輸出。除法器的模塊圖如附錄中所示。程序如附件中除法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置clk=100ns,str=1,使除法器工作。前面部分設(shè)置被除數(shù)為“10010100”,即十進(jìn)制數(shù)148(可設(shè)置0255內(nèi)的任意數(shù)字),后面部分設(shè)置被除數(shù)為“00010110”,即十進(jìn)制數(shù)22(可設(shè)置0255內(nèi)的任意數(shù)字,為對比,勿與第一個(gè)數(shù)設(shè)置相同),設(shè)置除數(shù)為“1101”,即十進(jìn)制數(shù)13(可設(shè)置015內(nèi)的任意數(shù)字,本部分程序中有差錯(cuò)判斷部分,所以除數(shù)取0時(shí)不做運(yùn)算),仿真所得結(jié)果如圖6.8所示。當(dāng)檢測到clk上升沿時(shí)啟動運(yùn)算,所以第一個(gè)clk上升沿出現(xiàn)前雖然被除數(shù)與除數(shù)已設(shè)置,商和余數(shù)仍然為0,第一個(gè)clk上升沿出現(xiàn),計(jì)算得到14813115,仿真結(jié)果正確。當(dāng)被除數(shù)改變?yōu)?2的一段時(shí)間內(nèi),因?yàn)槲礄z測到clk上升沿,所以未進(jìn)行運(yùn)算,商和余數(shù)未變,分別仍為11和5。當(dāng)接下來的第一個(gè)clk上升沿出現(xiàn),再次進(jìn)行運(yùn)算,計(jì)算得到221319,仿真結(jié)果正確,由此可知此除法器設(shè)計(jì)有效。圖6.8 除法器仿真 14813115,221319致 謝這次課程設(shè)計(jì)是學(xué)完EDA技術(shù)之后將自己所學(xué)理論與實(shí)際相結(jié)合的機(jī)會,通過這次比較完整的基于FPGA的計(jì)算器芯片設(shè)計(jì),我自己的理論與實(shí)踐相結(jié)合的能力有了大幅度的提升。在溫習(xí)了所學(xué)專業(yè)知識的基礎(chǔ)上,同時(shí)通過查閱專業(yè)書籍、相關(guān)文獻(xiàn)資來解決實(shí)際工程問題,這鍛煉了我的綜合運(yùn)用各項(xiàng)知識和資源的能力。而且通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的實(shí)際動手經(jīng)驗(yàn)得到了極大的豐富,由于程序編寫與處理是一項(xiàng)非常繁瑣非常令人頭疼的工作,完成了這些,也使我的意志、抗壓能力及耐力都得到了不同程度的提升,我相信這些提升是會影響我一輩子的寶貴財(cái)富。這一次的設(shè)計(jì)讓我積累很多的解決實(shí)際問題的經(jīng)驗(yàn),使我的頭腦更加靈活,這必然會讓我在未來的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力,更強(qiáng)的溝通力和理解力。通過這次的設(shè)計(jì),我對FPGA技術(shù)、VHDL語言以及Quartus 的使用都有了深入的了解。雖然課程設(shè)計(jì)中內(nèi)容較多,過程繁瑣,但這也造就了我豐富的收獲。我采用的是分模塊的設(shè)計(jì)方法,各個(gè)模塊的設(shè)計(jì)我都是隨著設(shè)計(jì)的不斷深

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論