基于FPGA的計算器設(shè)計教材_第1頁
基于FPGA的計算器設(shè)計教材_第2頁
基于FPGA的計算器設(shè)計教材_第3頁
基于FPGA的計算器設(shè)計教材_第4頁
基于FPGA的計算器設(shè)計教材_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于 FPGA 的計算器設(shè)計 摘要 本文介紹了一個簡單計算器的設(shè)計,該設(shè)計采用了現(xiàn)場可編程邏輯器件 FPGA 設(shè) 計,并基于硬件描述語言 VHDL 在 Altera 公司的 Quartus 軟件上實現(xiàn)仿真。系統(tǒng)由 計算部分、存儲部分、 顯示部分和輸入部分四個部分組成, 計算部分為加法器、 減法器、 乘法器和除法器,存儲部分需要 3 個存儲器來實現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(reg) 以及結(jié)果暫存器( ans)。顯示部分由四個七段譯碼管組成,分別來顯示輸入數(shù)字,輸入 部分采用外接鍵盤,由 09 十個數(shù)字按鍵,加減乘除四個運算符按鍵,一個等號按鍵 和一個清零按鍵組成的。通過外部的按鍵可以完

2、成四位數(shù)之內(nèi)的 加 、減、乘、除 四種功能運算,其結(jié)構(gòu)簡單,易于實現(xiàn)。 關(guān)鍵詞: FPGA;VHDL ;計算器 1 概述 在國外,電子計算器在集成電路發(fā)明后,只用短短幾年時間就完成了技術(shù)飛躍,經(jīng) 過激烈的市場競爭,現(xiàn)在的計算器技術(shù)己經(jīng)相當(dāng)成熟。計算器已慢慢地脫離原來的 “輔 助計算工具 ”的功能定位,正向著多功能化、可編程化方向發(fā)展,在各個領(lǐng)域都得到了 廣泛的應(yīng)用。用計算器不僅可以實現(xiàn)各種各樣復(fù)雜的數(shù)學(xué)計算還可以用來編制、運行程 序,甚至解方程組,圖形計算器還可以進(jìn)行圖形處理。計算器內(nèi)置的軟件允許用戶進(jìn)行 類似于對計算機的文件和目錄管理等操作,允許用戶對圖形界面進(jìn)行定制,同時各種新 技術(shù)也被應(yīng)

3、用到計算器里使計算器功能越來越強大??梢哉f,計算器就是一個 “微微型 ” 的計算機。國內(nèi)也有廠商利用計算器芯片開發(fā)新的產(chǎn)品,但對計算器技術(shù)的研究、計算 器芯片的設(shè)計還處于起步階段。計算器的主要功能還是在于 “計算 ”,不妨稱之為 “低檔 計算器 ”。即便是對這種計算器,很多廠商也只從事計算器的組裝、銷售業(yè)務(wù)。一些IC 設(shè)計公司、芯片提供商也開始研究計算器技術(shù)。 本次設(shè)計基于現(xiàn)場可編程邏輯器件 FPGA 進(jìn)行設(shè)計,應(yīng)用硬件描述語言 VHDL 編 程并在 Altera 公司的 Quartus 軟件上實現(xiàn)仿真。需要進(jìn)行計算器的常用運算功能的 實現(xiàn),通過外接鍵盤輸入、 LED 數(shù)碼顯示來達(dá)成運算目的。

4、 II 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è)計環(huán)境,或宣布自己的設(shè)計工具可以和 VHDL 接口。 此后 VHDL 在電子設(shè)計領(lǐng)域得到了廣泛的接受, 并逐步取代了原有的非標(biāo)準(zhǔn)的硬件描述 語言。而 Verilog HDL 是由 GDA(Gateway Design Automation)公司的 PhilMoorby 在 1983 年末首

5、創(chuàng)的,最初只設(shè)計了一個仿真與驗證工具,之后又陸續(xù)開發(fā)了相關(guān)的故障模擬與 時序分析工具。 1985年 Moorby 推出它的第三個商用仿真器 Verilog XL,獲得了巨大的成 功,從而使得 Verilog HDL 迅速得到推廣應(yīng)用。 1989年 CADENCE 公司收購了 GDA 公 司,使得 Verilog HDL 成為了該公司的獨家專利。 1990 年 CADENCE 公司公開發(fā)表了 Verilog HDL, 并成立 LVI 組織以促進(jìn) Verilog HDL 成為 IEEE 標(biāo)準(zhǔn),即 IEEE Standard 1364-1995。 2.2 VHDL 的特點 VHDL 語言主要用于描述

6、數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,與其他硬件描述語 言相比, VHDL 語言有如下優(yōu)越之處 2: 1) VHDL 語言支持自上而下( Top Down)和基于庫( Library Base )的設(shè)計方法, 還支持同步電路、異步電路、 FPGA 以及其他隨機電路的設(shè)計; 2) VHDL 語言具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到 門級電路,其高層次的行為描述可以與低層次的 RTL 描述和結(jié)構(gòu)描述混合使 用,還可以自定義數(shù)據(jù) 類型,給編程人員帶來較大的自由和方便; 3) VHDL 對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必關(guān) 心最終設(shè)計實現(xiàn)的目標(biāo)器件是什么;

7、4) VHDL 具有電路仿真與驗證功能,可以保證設(shè)計的正確性,用戶甚至不必編寫 如何測試相量便可以進(jìn)行源代碼級的調(diào)試,而且設(shè)計者可以非常方便地比較各 III 種方案之間的可行性及其優(yōu)劣,不需做任何實際的電路實驗; 5) VHDL 語言可以與工藝無關(guān)編程; 6) VHDL 語言標(biāo)準(zhǔn)、規(guī)范,易于共享和復(fù)用 2.3 VHDL 語言結(jié)構(gòu) 圖 2.1 中是 VHDL 的全部結(jié)構(gòu),但實際上并不需要全部的結(jié)構(gòu), 就像在許多設(shè)計項 目中,大部分工程師只用到 VHDL 其中的 30%的語法; 通常圖 2.2 的結(jié)構(gòu)才是基本和必 需的。 USE定義區(qū) ENTITY定義區(qū) ARCHITECTUR定E義區(qū) 圖 2.2

8、 VHDL 程序基本結(jié)構(gòu) IV 2.3.1 實體( ENTITY ) 實體作為一個設(shè)計實體的組成部分, 其功能是對這個設(shè)計實體與外部電路進(jìn)行接口 描述,它是設(shè)計實體的表層設(shè)計單元;實體說明部分規(guī)定了設(shè)計單元的輸入輸出接口信 號或引腳,它是設(shè)計實體對外一個通信界面。就一個設(shè)計實體面言,外界所看到的僅僅 是它的界面上的各種接口。它可以擁有一個或多個結(jié)構(gòu)體,用于描述此設(shè)計實體的邏輯 結(jié)構(gòu)和邏輯功能,對于外界來主,這一部分是不可見的。不同邏輯功能的實體可以擁有 相同的實體描述,這是因為實體類似于原理圖中的一個部件符號,而其的邏輯功能是由 設(shè)計實體中結(jié)構(gòu)體的描述確定的。 實體是 VHDL 的基本設(shè)計單元

9、,它可以對一個門電路、 一個芯片、一塊電路板乃至整個系統(tǒng)進(jìn)行接口描述。其結(jié)構(gòu): ENTITY 實體名 IS4 GENERIC (常數(shù)名:數(shù)據(jù)類型 :設(shè)定值 ; 常數(shù)名:數(shù)據(jù)類型 :設(shè)定值 ); PORT(端口名:端口模式 數(shù)據(jù)類型; 端口名:端口模式 數(shù)據(jù)類型 ); END ENTITY 實體名; 2.3.2 結(jié)構(gòu)體( ARCHITECTURE ) 結(jié)構(gòu)體是實體所定義的設(shè)計實體中的一個組成部分。 結(jié)構(gòu)體描述設(shè)計實體的內(nèi)部結(jié) 構(gòu)和實體端口間的邏輯關(guān)系。結(jié)構(gòu)體由兩大部分組成 5 : 對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等元素的說明部分; 描述實體邏輯行為的,以各種不同的描述風(fēng)格表達(dá)的功能描述語句,

10、它們包括各種 形式的順序描述語句和并行描述語句。其語句格式如下: ARCHITECTURE 結(jié)構(gòu)體名; 說明語句 BEGIN 功能描述語句 END ARCHITECTURE 結(jié)構(gòu)體名; 圖 2.3 中的五種語句結(jié)構(gòu)的基本組成和功能分別是: 塊語句是由一個系列并行執(zhí)行語句構(gòu)成的組成體, 它的功能是將結(jié)構(gòu)中的并行語句 組成一個或多個模塊。 進(jìn)程語句定義順序語句模塊,用以將從外部獲得的信號值,或內(nèi)部的運算數(shù)據(jù)向其 它的信號進(jìn)行賦值。 信號賦值語句將設(shè)計實體內(nèi)的處理結(jié)果向定義的信號或界面端口進(jìn)行賦值。 子程序調(diào)用語句用以調(diào)用過程或者函數(shù),并將此元件的端口與其它的元件、信號或 高層次實體的界面端口進(jìn)行連

11、接。 結(jié)構(gòu)體( ARCHITECTUR)E 圖 2.3 結(jié)構(gòu)體構(gòu)造圖 2.4 VHDL 軟件設(shè)計簡介 系統(tǒng)電路的軟件設(shè)計可采用工具軟件 Quartus ,用該工具軟件所支持的語言 硬件描述語言 VHDL ,以文本的方式進(jìn)行編程輸入。在編程時分別對控制、計數(shù)、鎖 存、譯碼等電路模塊進(jìn)行 VHDL 文本描述,使每個電路模塊以及器件都以文本的形式出 現(xiàn),然后通過編譯、波形分析、仿真、調(diào)試來完善每個器件的功能。單個器件制作完成 后,然后將它們生成庫文件,并產(chǎn)生相應(yīng)的符號,最后用語言將各個已生成庫文件的器 VI 件的各個端口連接在一起,從而形成了系統(tǒng)主電路的軟件結(jié)構(gòu)。在連接器件時,也可以 采用圖形輸入方

12、式,即在圖形輸入界面中調(diào)出先制作好的庫文件器件符號,再將每個器 件符號的各端口直接連線,從而構(gòu)成系統(tǒng)主電路。在上述工作的基礎(chǔ)上,再進(jìn)行波形分 析、仿真調(diào)試便完成整個軟件設(shè)計 6 。 VII 3 現(xiàn)場可編程門陣列( FPGA )簡介 3.1 可編程邏輯器件 可編程邏輯器件 ( PLD-Programmable Logic Devices)是一種由用戶編程以實現(xiàn)某種 邏輯功能的新型邏輯器件。它誕生于 20 世紀(jì) 70 年代,在 20 世紀(jì) 80 年代以后,隨著 集成電路技術(shù)和計算機技術(shù)的發(fā)展而迅速發(fā)展起來的??删幊踢壿嬈骷詥柺酪詠?, PLD 經(jīng)歷了從 PROM 、PLA 、PAL、GAL 到 F

13、PGA、ispLSI 等高密度 PLD 的發(fā)展過程。 在此期間, PLD 的集成度、速度不斷提高,功能不斷增強,結(jié)構(gòu)趨于更合理,使用變 得更靈活方便。 PLD 的出現(xiàn)打破了由中小型通用型集成電路和大規(guī)模專用集成電路壟 斷的局面。與中小規(guī)模通用型集成電路相比,用 PLD 實現(xiàn)數(shù)字系統(tǒng),有研制周期短、 先期投資少、無風(fēng)險、修改邏輯設(shè)計方便、小批量生產(chǎn)成本低等優(yōu)勢。 隨著可編程邏輯器件性能價格比的不斷提高, EDA 開發(fā)軟件的不斷完善,現(xiàn)代電 子系統(tǒng)的設(shè)計將越來越多地使用可編程邏輯器件,特別是大規(guī)??删幊踢壿嬈骷H绻?說一個電子系統(tǒng)可以像積木堆積起來的話, 那么現(xiàn)在構(gòu)成許多電子系統(tǒng)僅僅需要 3 種

14、標(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)特點。 CPLD

15、(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 器件 VII 及其開發(fā)系統(tǒng)是開發(fā)大規(guī)模數(shù)字集成電路的新技術(shù)。它利用計算機輔助設(shè)計,繪制出實 現(xiàn)用戶邏輯的原理圖、編輯布爾方程或用硬件描述語言等方式作為設(shè)計輸入;然后經(jīng)一 系列轉(zhuǎn)換程序、自動布局布線、 模擬仿

16、真的過程; 最后生成配置 FPGA 器件的數(shù)據(jù)文件, 對 FPGA 器件初始化。 這樣就實現(xiàn)了滿足用戶要求的專用集成電路, 真正達(dá)到了用戶自 行設(shè)計、自行研制和自行生產(chǎn)集成電路的目的。 FPGA 是一種半定制的集成電路,其特點是直接面向用戶,具有極大的靈活性和通 用性,開發(fā)效率高,硬件測試和實現(xiàn)快捷,工作可靠性好而且技術(shù)維護(hù)簡單。 FPGA 相對于 CPLD 而言,其結(jié)構(gòu)特點在于 FPGA 是基于查找表 look-up-table 的。 查找表( look-up-table)簡稱為 LUT , LUT 本質(zhì)上是一個 RAM 。FPGA 中多使用 4 輸 入的 LUT ,所以每一個 LUT 可以

17、看成一個有 4 位地址線的 16x1 的 RAM 。當(dāng)用戶通 過原理圖或 HDL 語言描述了一個邏輯電路后, PLD/FPGA 開發(fā)軟件會自動計算邏輯電 路的所有可能的結(jié)果,并把結(jié)果事先寫入 RAM ,這樣,每輸入一個信號進(jìn)行邏輯運算 就等于輸入一個地址進(jìn)行查表,找出地址對應(yīng)的內(nèi)容,然后輸出即可。 3.2.1 FPGA 的器件結(jié)構(gòu)與工作原理 FPGA(Field Programmable Gate Array)即現(xiàn)場可編程邏輯陣列, 是大規(guī)模可編程集成 電路的主流器件。FPGA 一般由三種可編程電路和一個用于存放編程數(shù)據(jù)的 SRAM(靜態(tài) 隨機存儲器 )組成,這三種可編程電路是:可編程邏輯陣列

18、 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)成的,每個 LAB 包括八個邏輯單元 LE、相連的進(jìn)位鏈和級聯(lián)鏈, LAB 控制信號和 LAB 局部互連。 LAB 的構(gòu)成、 ACEK 系列芯片的“粗粒度 (coarse-grained )結(jié)

19、構(gòu),有利于 EDA 軟件進(jìn)行布局 布線,優(yōu)化器件的利用進(jìn)而提高整個數(shù)字系統(tǒng)的性。 其中的邏輯單元 LE 是一種基于查找表的函數(shù)發(fā)生器。它能夠?qū)崿F(xiàn) 4 輸入 1 輸出的 任意邏輯函數(shù)。 每個 LE 包含一個 4 輸入的查找表、 一個帶有同步使能的可編程觸發(fā)器、 IX 一個進(jìn)位鏈和一個級聯(lián)鏈。 每個 LE 有兩個輸出分別可以驅(qū)動局部互連和快速通道互連。 LE 有兩個輸出驅(qū)動內(nèi)部互連,一個是驅(qū)動局部互連輸出,另一個驅(qū)動行或列的快速通 道 Fast Track 的互連輸出,這兩個輸出可以單獨控制。因此在一個邏輯單元LE 中的觸 發(fā)器和查找表能夠用來完成不相關(guān)的功能,從而提高 LE 的資源利用率。 在

20、ACEK 系列芯片的結(jié)構(gòu)中還提供了兩種專用的高速數(shù)據(jù)通道,用于連接相鄰的 LE,但不占用局部互連通路, 它們是進(jìn)位鏈和級聯(lián)鏈。 進(jìn)位鏈用來支持高速計數(shù)器和加 法器,它提供了 LE 之間的決速向前進(jìn)位功能。來自低位的進(jìn)位信號經(jīng)進(jìn)位鏈向前直接 送到高位, 同時饋入查找表和進(jìn)位鏈的下一段。 這種特點使得 ACEK 結(jié)構(gòu)能夠?qū)崿F(xiàn)高速 計數(shù)器、加法器和寬位比較器。級聯(lián)鏈可以用來實現(xiàn)多輸入數(shù)的邏輯函數(shù)。相鄰的查找 表并行地完成部分邏輯功能,級聯(lián)鏈把中間結(jié)果拼接起來。進(jìn)位鏈和級聯(lián)鏈的使用有利 于提高器件的工作速度,但是大量使用進(jìn)位鏈和級聯(lián)鏈會限制布局布線的靈活性,導(dǎo)致 資源的浪費。因此在設(shè)計過程應(yīng)該權(quán)衡考慮

21、, 在 FPGA芯片資源利用和工作速度之間尋 求平衡。 2. 輸入 /輸出模塊 IOB ACEK 器件的 I/O 引腳是由一些 I/O 單元驅(qū)動的。IOE (I/O Element)位于快速通道的 行和列末端,包含一個雙向的緩沖器和一個寄存器。這個寄存器可以用作需要快速建立 時間的外部數(shù)據(jù)輸入寄存器,也可以作為需要快速“時鐘到輸出”性能的數(shù)據(jù)輸出寄存 器。 IOE 可以配置成輸入、輸出或雙向口。 ACEK 器件中的 IOE 具有許多特性,支持 JTAG 編程、三態(tài)緩沖和漏極開路輸出等 等。每個 IOE 的時鐘、清零、時鐘使能和輸出使能的控制均由 I/O 控制信號網(wǎng)絡(luò)提供, 采用高速驅(qū)動以減小通

22、過器件的時間偏差。此外, ACEK 器件還提供了若干專用輸入引 腳,這些引腳用來驅(qū)動 IOE 寄存器的控制端, 使用了專用的布線通道,以便具有比快速 通道更短的延遲和更小的偏差。 3. 互連資源 IR 可編程的互連資源包括各種長度的金屬連線線段和一些可編程的連線開關(guān), 它們將 各個邏輯陣列之間、及其與 IO 模塊之間互相連接起來,構(gòu)成各種功能復(fù)雜的系統(tǒng)。 在 ACEK 中互連結(jié)構(gòu)是通過快速通道 (Fast Track)實現(xiàn)的。 Fast Track 遍布于整個 ACEK 器件,是一系列水平和垂直走向的連續(xù)式布線通道。每一行的 LAB 都有一個專 用的“行互連”,“行互連”可以驅(qū)動。 I/O 引

23、腳或饋送到器件中的其 LAB ;“列互連” 連接各行,也能驅(qū)動 I/O 引腳。這種布線結(jié)構(gòu)能夠有效提高布線效率,使得即使非常復(fù) 雜的設(shè)計也能夠測定其延時性。 4. 嵌人式陣列塊 EAB 嵌人式陣列塊 EAB 是在輸入輸出口上帶有寄存器的靈活的 RAM 塊,是由一系列嵌 人式 RAM 單元組成的。 EAB 的邏輯功能是在配置期間,用只讀模式對 EAB 編程產(chǎn)生 一個大型查找表來實現(xiàn)的。 采用查找表實現(xiàn)組合邏輯比一般算法快, EAB 的快速時間通 道使得這一先進(jìn)性能進(jìn)一步得到加強。當(dāng)要實現(xiàn)存儲器功能時,每個 EAB 提供 2048 比 特位,每一個 EAB 是一個獨立的結(jié)構(gòu), 它具有共同的輸入、

24、互連和控制信號。 每個 EAB 含有一個行互連饋入端, EAB 的輸出能夠同時驅(qū)動行互連通道和列互連通道。 這一特性 增加了 EAB 的可利用布線資源。因此, EAB 可以非常方便地用于實現(xiàn)一些規(guī)模不大的 RAM, ROM, FIFO 等功能模塊;同時在實現(xiàn)地址譯碼器、狀態(tài)機、微控制器等復(fù)雜邏輯 時也具備了一定優(yōu)勢 5。 3.2.2 基于 EDA 平臺的 FPGA 開發(fā)流程 一個完整、 典型的 EDA 設(shè)計流程 67 即是自頂向下設(shè)計方法的具體實施過程, 也是 EDA 軟件本身的組成結(jié)構(gòu)。在實踐中進(jìn)一步了解支持這一個設(shè)計流程的諸多設(shè)計工具, 有利于排解設(shè)計中的具體問題,提高設(shè)計質(zhì)量。 1. 設(shè)

25、計輸入 基于 EDA 軟件平臺的 FPGA 開發(fā)流程,一般有兩種設(shè)計輸入方式:圖形輸入和硬 件描述語言文本輸入。 下面將重點介紹采用 VHDL 硬件描述語言進(jìn)行設(shè)計輸入方法, 這 是筆者在設(shè)計開發(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)之一,在

26、電子設(shè)計領(lǐng)域得到廣泛應(yīng)用,并逐步成為事實上的通用硬件描 述語言。 VHDL 語言具有很強的電路建模能力,具有良好的電路行為描述和系統(tǒng)描述的能 力,能從多個層次對數(shù)字系統(tǒng)進(jìn)行建模和描述; VHDL 語言還具有與硬件電路無關(guān)和設(shè) 計平臺無關(guān)的特性, 并且在語言易讀性和層次化結(jié)構(gòu)化設(shè)計方面表現(xiàn)了強大的生命力和 XI 應(yīng)用潛力。這些特性使得 VHDL 語言在支持自頂向下的 EDA 設(shè)計流程方面顯得游刃有 余。因此,采用 VHDL 進(jìn)行電子系統(tǒng)設(shè)計可以讓設(shè)計者專心致力于其功能的實現(xiàn), 而不 需要對不影響功能的與工藝相關(guān)的問題花費過多的時間和精力, 從而大大簡化了設(shè)計任 務(wù),提高了設(shè)計效率和可靠性。 采用

27、 VHDL 文本設(shè)計輸入與傳統(tǒng)的計算機軟件語言編輯輸入基本上一樣, 就是使用 VHDL 描述數(shù)字系統(tǒng)的功能,進(jìn)行文本編輯輸入。事實上,純粹的 VHDL 設(shè)計輸入方 法仍然是最基本、最有效和最普遍的設(shè)計輸入方法。 2. 設(shè)計綜合 在電子設(shè)計領(lǐng)域“綜合”的概念可以表示為:將行為和功能層次表達(dá)的電子系統(tǒng)轉(zhuǎn) 化為低層次的便于具體實現(xiàn)的模塊組合裝配而成的過程。事實上,設(shè)計過程通常從高層 次的行為描述開始,直到最底層的結(jié)構(gòu)描述結(jié)束,每一個步驟都是上一個層次的綜合轉(zhuǎn) 換。在 FPGA 設(shè)計開發(fā)過程中,整個綜合過程就是設(shè)計者在 EDA 軟件平臺上編輯輸入 VHDL 文本,依據(jù)給定電路結(jié)構(gòu)組件和約束控制條件進(jìn)行

28、編譯、優(yōu)化、轉(zhuǎn)換和綜合,最 終獲得門級電路甚至更底層的電路描述網(wǎng)表文件。 因此設(shè)計綜合的過程就是將軟件設(shè)計 的 VHDL 描述文本與硬件結(jié)構(gòu)掛鉤, 是軟件描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟, 是文本描 述與硬件實現(xiàn)之間的一座橋梁。 3. 結(jié)構(gòu)適配 適配器也稱為結(jié)構(gòu)綜合器,它的功能是將綜合器產(chǎn)生的網(wǎng)表文件配置于指定的 FPGA 目標(biāo)器件中,使之產(chǎn)生最終的下載文件。適配過程中所選定的 FPGA 目標(biāo)器件必 須屬于綜合器原來指定的目標(biāo)器件系列, 這是因為適配器的適配對象是直接與器件的結(jié) 構(gòu)細(xì)節(jié)相對應(yīng)的。 邏輯綜合通過后必須利用適配器將綜合后的網(wǎng)表文件針對某一具體目 標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件

29、配置、邏輯分割、邏輯優(yōu)化、邏輯布局布 線操作。適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時序仿真,同時產(chǎn)生可用 于編程下載文件。 4. 功能仿真和時序仿真 在編程下載前必須利用 EDA 工具對配置生成的結(jié)果進(jìn)行模擬分析,這就是所謂的 仿真。仿真的過程就是讓計算機根據(jù)一定的算法和一定的仿真庫對 EDA 設(shè)計進(jìn)行模擬, 以驗證設(shè)計,排除錯誤。仿真包括功能仿真和時序仿真。 功能仿真:不經(jīng)過綜合和適配階段,在設(shè)計項目編譯后直接進(jìn)入門級仿真器進(jìn)行模 XII 擬測試。主要用于測試設(shè)計項目的邏輯功能, 用以了解其實現(xiàn)的功能是否滿足設(shè)計要求, 在功能仿真的過程不涉及任何具體器件的硬件特性。 時序仿真:當(dāng)設(shè)

30、計項目通過功能仿真初步確定滿足設(shè)計要求后,需要綁定具體器件 進(jìn)行時序仿真。時序仿真就是接近真實器件運行特性的仿真,仿真文件包含了器件硬件 特性參數(shù),因而仿真精度高。但時序仿真的仿真文件必須來自針對具體器件的綜合器和 適配器。綜合所得的 EDIF 網(wǎng)表文件通常作為 FPGA 適配器的輸入文件,產(chǎn)生的仿真網(wǎng) 表文件包含了器件精確的延時信息。 5. 編程下載 把適配后生成的下載或配置文件, 通過編程器或編程電纜向 FPGA 進(jìn)行下載, 以便 進(jìn)行硬件調(diào)試和驗證,從而實現(xiàn)滿足設(shè)計要求的電子系統(tǒng) 8。 4 Quartus 概述及其設(shè)計流程 4.1 Quartus 概述 Quartus 是 Altera

31、公司的綜合性 PLD 開發(fā)軟件 ,支持原理圖、 VHDL 、 VerilogHDL 以及 AHDL ( Altera Hardware Description Language )等多種設(shè)計輸入 形式,內(nèi)嵌自有的綜合器以及仿真器, 可以完成從設(shè)計輸入到硬件配置的完整 PLD 設(shè)計流程。 Quartus 可以在 XP 、Linux 以及 Unix 上使用,除了可以使用 Tcl 腳本 完成設(shè)計流程外,提供了完善的用戶圖形界面設(shè)計方式。具有運行速度快,界面 統(tǒng)一,功能集中,易學(xué)易用等特點。 Quartus 支持 Altera 的 IP 核,包含了 LPM/MegaFunction 宏功能模塊庫,使

32、用戶可以充分利用成熟的模塊,簡化了設(shè)計的復(fù)雜性、加快了設(shè)計速度。對第三 方 EDA 工具的良好支持也使用戶可以在設(shè)計流程的各個階段使用熟悉的第三方 EDA 工具。此外, Quartus 通過和 DSP Builder 工具與 Matlab/Simulink 相結(jié)合, 可以方便地實現(xiàn)各種 DSP 應(yīng)用系統(tǒng); 支持 Altera 的片上可編程系統(tǒng) ( SOPC)開發(fā), 集系統(tǒng)級設(shè)計、嵌入式軟件開發(fā)、可編程邏輯設(shè)計于一體,是一種綜合性的開發(fā) 平臺。 Maxplus II 作為 Altera 的上一代 PLD 設(shè)計軟件,由于其出色的易用性而得 到了廣泛的應(yīng)用。目前 Altera 已經(jīng)停止了對 Maxp

33、lus II 的更新支持, Quartus 與 之相比不僅僅是支持器件類型的豐富和圖形界面的改變。 Altera 在 Quartus 中包 含了許多諸如 SignalTap II 、Chip Editor 和 RTL Viewer 的設(shè)計輔助工具,集成了 XIII SOPC 和 HardCopy 設(shè)計流程,并且繼承了 Maxplus II 友好的圖形界面及簡便的使 用方法。 Altera Quartus 作為一種可編程邏輯的設(shè)計環(huán)境 , 由于其強大的設(shè)計能力和 直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計者的歡迎。 Altera 的 Quartus 可編程 邏輯軟件屬于第四代 PLD 開發(fā)平臺。該平

34、臺支持一個工作組環(huán)境下的設(shè)計要求, 其中包括支持基于 Internet 的協(xié)作設(shè)計。 Quartus 平臺與 Cadence、ExemplarLogic 、 MentorGraphics 、Synopsys 和 Synplicity 等 EDA 供應(yīng)商的開發(fā)工具相兼容。 改進(jìn)了 軟件的 LogicLock 模塊設(shè)計功能, 增添 了 FastFit 編譯選項, 推進(jìn)了網(wǎng)絡(luò)編輯性能, 而且提升了調(diào)試能力。支持 MAX7000/MAX3000 等乘積項器件。 4.2 Quartus 設(shè)計流程 .建立新工程 :首先將所設(shè)計工程項目劃分為若干子模塊,將每個子模塊單獨 存放在一個文件夾中,并分別進(jìn)行編譯,

35、驗證通過后,將每個子模塊的 VHDL 文 本文件添加到總工程文件夾中,并建立圖元(建立圖元block ,右鍵點擊 .V 文件, 選擇 create symbol files for current files ),將各個圖元(亦即子模塊)連接起來 構(gòu)成總體設(shè)計項目。 .設(shè)計各子模塊 :編寫各子模塊相應(yīng)的代碼,并分別進(jìn)行編譯,驗證通過后將 各子模塊 VHDL 文件添加到頂層設(shè)計中,創(chuàng)建圖元,進(jìn)行連接以完成總體項目的 設(shè)計。這部分就是將管腳連好。在原理圖編輯中,英文的大小寫代表相同的含義, 只要器件連接線的節(jié)點名稱相同就會默認(rèn)為是連接的,總線(Bus )在圖形編輯窗 口顯示的是一條粗線,總線必須在

36、名稱的后面加上“a.b ,”表示一條總線內(nèi)所含 有的節(jié)點編號,原理圖編輯的文件擴展名為“.bdf ,”在 Quartus II 中工程名稱必須 與頂層實體名稱相同,且 VHDL 設(shè)計中實體名稱亦為相同的名字,否則不能進(jìn)行 編譯。 .編譯工程 .仿真 :波形矢量文件的擴展名為 “.vwf ,”仿真分為功能仿真和時序仿真,也 稱為前仿真和后仿真,功能仿真是忽略延時后的仿真,是最理想的仿真,時序仿 真則是加上了一些延時的仿真,是最接近于實際的仿真,在設(shè)計中通常先做功能 仿真驗證邏輯的正確性,后做時序仿真驗證時序是否符合要求,需注意默認(rèn)為時 序仿真,在設(shè)置功能仿真后需要生成功能仿真網(wǎng)絡(luò)表。 XIV 5

37、 系統(tǒng)方案設(shè)計 系統(tǒng)總體設(shè)計框圖如圖 5.1 所示。此設(shè)計由計算部分、存儲部分、顯示部分和輸入 部分組成。 圖 5.1 計算器的系統(tǒng)組成框圖 5.1 計算器的計算部分 在這一部分中,可以將每一個數(shù)均表示成 8 位或者 4 位二進(jìn)制數(shù)統(tǒng)一進(jìn)行運算,各 個計算數(shù)之間的計算可以直接使用 VHDL 語言中的運算符來實現(xiàn)。 但在顯示時, 必須將 個位、十位、百位分開顯示,設(shè)計時使用比較的方法來實現(xiàn)計算器的功能要求。另外, 由于在 VHDL 語言中只能進(jìn)行除數(shù)是 2的冪的除法, 不能進(jìn)行任意數(shù)的除法, 因此必須 單獨設(shè)計一個除法器來實現(xiàn)計算器的功能要求, 該除法器可以利用減法運算和左移位運 算實現(xiàn)除法運算

38、,具體算法見第四章。 5.2 計算器的存儲部分 存儲部分需要 3個存儲器來實現(xiàn):內(nèi)部累加器( acc)、輸入寄存器( reg)以及結(jié)果 暫存器( ans)。在存放數(shù)字時,將數(shù)字放入 acc或者 reg 里面,當(dāng)?shù)谝淮伟聪聰?shù)字鍵時, 表示該數(shù)字是個位。當(dāng)?shù)诙伟聪聰?shù)字鍵時,表示這次輸入的是個位,上一次輸入的是 十位,所以要把第一次輸入的數(shù)字乘以 10,再加上第二次輸入的數(shù)字, 來得到最終輸入 XV 的數(shù)字。當(dāng)?shù)谌伟聪聰?shù)字鍵時,要將第一次輸入的數(shù)字乘以100,再加上第二次輸入 的數(shù)字乘以 10,再加上第一次輸入的數(shù)字,來得到最終輸入的數(shù)字。 當(dāng)進(jìn)行第一次計算時,第一個數(shù)字存放在 acc 里面。按

39、下運算符以后,第二個數(shù)字 放在 reg 里面。當(dāng)再按下運算符號或者等號時,第一次計算的結(jié)果將存放在ans里面, 同時 reg 清零,等待下一個數(shù)字的輸入。進(jìn)行第二次運算時,將ans 里面的結(jié)果與 reg 里面新輸入的數(shù)字進(jìn)行運算,再將運算結(jié)果存放在 ans 里面,直到最后按下等號按鍵的 時候,顯示最終的運算結(jié)果。 5.3 計算器的顯示部分 顯示部分是系統(tǒng)的輸出部分,用于顯示按鍵值及計算結(jié)果,由于數(shù)字系統(tǒng)的數(shù)據(jù)運 算都是二進(jìn)制的,而輸出表達(dá)式都是 BCD 碼,為了滿足 BCD 碼的譯碼顯示,最方便的 方法就是利用譯碼程序在 FPGA 中實現(xiàn)。本文采用的是共陽極七段數(shù)碼管, 顯示數(shù)字時 需要將對應(yīng)

40、管腳置為低電平,輸出時,從左到右,按從高到低位的順序依次接g、f 、e、 d、c、b、a。七段譯碼器的基本結(jié)構(gòu)如圖 3.2 所示。 a fb g ec d 圖 5.2 七段譯碼器的結(jié)構(gòu) 其 VHDL 語言描述如下所示。在這段程序中, indata 是輸入 4 位二進(jìn)制數(shù)的端口, outdata是輸出 7 位譯碼的端口,用 WITH 語句來實現(xiàn)譯碼。 WITH indata SELECT outdata=0111111WHEN0000,-0 的顯示; 0000110WHEN0001,-1 的顯示; XVI 1011011WHEN0010, 1001111WHEN0011, 1100110WHEN

41、0100, 1101101WHEN0101, 1111101WHEN0110, 0000111WHEN0111, 1111111WHEN1000, 1101111WHEN1001, 0000000WHEN OTHERS; -2 的顯示; -3 的顯示; -4 的顯示; -5 的顯示; -6 的顯示; -7 的顯示; -8 的顯示; -9 的顯示; -其它的輸入按鍵均不顯示。 計算器顯示部分的設(shè)計和實現(xiàn),實際上就是七段譯碼器的設(shè)計和實現(xiàn),三個七段譯 碼器分別顯示的是個位、十位和百位。輸入第一個數(shù)字后至再一次按下數(shù)字按鍵輸入第 二個數(shù)字前,三個七段譯碼器顯示的都是第一個數(shù)字。當(dāng)開始輸入第二個數(shù)字的

42、時候顯 示第二個數(shù)字,再次按下運算按鍵到輸入第三個數(shù)字前,顯示的是前兩個數(shù)字的運算結(jié) 果,以此類推,當(dāng)最后按下等號鍵的時候,顯示最終的運算結(jié)果。 5.4 計算器的輸入部分 計算器輸入部分的設(shè)計最主要的是按鍵譯碼電路的設(shè)計和實現(xiàn)。 計算器的輸入部分 是由 0 9 十個數(shù)字按鍵、加減乘除四則運算的運算符按鍵、一個等號按鍵和一個清 零按鍵組成的,設(shè)計所要做的是對按鍵信息進(jìn)行譯碼,使其在計算器內(nèi)部可以使用。數(shù) 字按鍵譯碼電路的主體部分 VHDL 語言描述如下。 PROCESS(inclk,reset) BEGIN IF reset=1THEN-異步復(fù)位信號為高電平的時候 outnumoutnum=00

43、00;outflagoutnum=0001;outflagoutnum=0010;outflagoutnum=0011;outflagoutnum=0100;outflagoutnum=0101;outflagoutnum=0110;outflagoutnum=0111;outflagoutnum=1000;outflagoutnum=1001;outflagoutnum=outnum;outflag=0;-不按鍵時保持 END CASE; END IF; END PROCESS; 在本次設(shè)計的程序中,設(shè) reset 是異步復(fù)位信號的輸入端口, inclk 是時鐘信號的輸 入端口,innum

44、端口用來表示輸入的按鍵向量, outnum 端口用來表示輸入的按鍵動作對 應(yīng)的輸出數(shù)字, outflag 端口用來輸出是否有按鍵動作, 它主要實現(xiàn)的是按下什么就輸出 什么。一共有十個位,初始值都為低電平 “0,”當(dāng)按下哪個位時哪個位上的電平就跳為 高電平(有且僅有一個為高電平) ,這時就有相應(yīng)的輸出。那十個位分別對應(yīng)的是 0 9 這十個數(shù)字,所以當(dāng)?shù)谝粋€位(從左往右位數(shù)依次增高)為高電平時顯示0,第 十個位上位高電平時,相應(yīng)的顯示為 9。如果按下的鍵是加號、減號、乘號、除號或者 是等于號時,也是不顯示的,所以也可以稱作數(shù)字按鍵譯碼電路。 XVIII 6 計算器的 VHDL 設(shè)計 6.1 加法器

45、的設(shè)計與仿真 本次設(shè)計的加法器屬于多位加法器的范疇,可按其進(jìn)位方式的不同分為兩類:串行 進(jìn)位加法器和并行進(jìn)位加法器。串行進(jìn)位加法器是將多個一位全加器級聯(lián),低位全加器 的進(jìn)位輸出送給相鄰高位全加器作為進(jìn)位輸入,以此構(gòu)成多位加法器。這種設(shè)計思路簡 單明了且占用資源少,但運算速度較慢。并行進(jìn)位方式則是在各位的加法環(huán)節(jié)之外,另 外設(shè)有進(jìn)位產(chǎn)生邏輯電路,各位的進(jìn)位輸入信號同時產(chǎn)生,從而各位可以同時完成全加 運算,輸出最后結(jié)果。并行進(jìn)位方式具有較快的運算速度,但是相對于串行進(jìn)位方式來 說,卻往往占用更多的資源。尤其是當(dāng)運算位數(shù)增加的時候,相同位數(shù)的并行進(jìn)位和串 行進(jìn)位加法器的資源占用差距也越來越大。因此,

46、常常需要設(shè)計者在運算速度和資源占 用量之間做出折中平衡。而經(jīng)過實踐證明, 4 位二進(jìn)制并行進(jìn)位加法器和串行級聯(lián)加法 器占用的資源幾乎相同。因此,可以用兩個 4 位二進(jìn)制并行加法器級聯(lián)構(gòu)成 8 位二進(jìn)制 加法器,這是一種較為合理的選擇,加法器的原理框圖如圖 6.1 所示。 ci 為輸入進(jìn)位。此加法器還有兩個輸出端口,分別是加法運算的最終結(jié)果輸出和進(jìn)位位 的輸出,設(shè) s為結(jié)果的輸出端口, co 為進(jìn)位的輸出端口。當(dāng)輸入被加數(shù)與加數(shù)后,兩個 8 位二進(jìn)制數(shù)開始相加,之后,再與輸入進(jìn)位位相加,這樣得到的最終結(jié)果就是加法器 XIV 加法運算的最終結(jié)果。加法器模塊圖如附錄中所示 程序如附錄中加法程序,經(jīng)

47、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ù)字, 但因為程序中未包含出錯溢出判斷, 所以 需滿足 a+b255),仿真后所得結(jié)果如圖 6.2 所示。 16+176192,仿真結(jié)果正確,可知此 加法器設(shè)計有效。 圖 6.2 加法器仿真 16+176 192 6.2 減法器的設(shè)計與仿真 首先設(shè)計一個四位二進(jìn)制數(shù)的減法器,四位全減器的原理框圖如圖 6.3 所示。由圖 可以看出,此減法器共需要兩個輸入端口和一個輸出端口。減法器的

48、設(shè)計可以引用加法 器,即通過對減數(shù)的求補,再與被減數(shù)相加得到最終的結(jié)果,所以需要增設(shè)一個進(jìn)位位 輸入端口和進(jìn)位位的輸出端口。 XX 圖 6.3 四位全減器的原理框圖 可以設(shè) a端口為被減數(shù), b端口為減數(shù), ci 為輸入借位位, s為結(jié)果的輸出端口, co 為借位的輸出端口。減法器的運算過程中首先要引用加法器,在此不再贅述。而且此減 法器可以進(jìn)行位數(shù)擴展,每增加一位需要多引用一個加法器,為使圖形原理簡潔,所以 此處只列出四位減法器。減法器模塊圖如附錄中所示。 程序如附錄中減法程序, 經(jīng) Quartus 編譯后建立 .vmf 文件,設(shè)置被減數(shù) a 為“1111” 即十進(jìn)制數(shù) 15(可設(shè)置 015

49、內(nèi)的任意數(shù)字),設(shè)置減數(shù) b 為“1001即”十進(jìn)制數(shù) 9(可 設(shè)置 0 15內(nèi)的任意數(shù)字, 但因為程序中未包含出錯判斷, 所以需滿足 ab),仿真后所 得結(jié)果如圖 6.4 所示。 15-96,仿真結(jié)果正確,可知此減法器設(shè)計有效。 圖 6.4 減法器仿真 15-9 6 XXI 6.3 乘法器的設(shè)計與仿真 乘法器是數(shù)字系統(tǒng)中的基本邏輯器件,在很多應(yīng)用中都會出現(xiàn)如各種濾波器的設(shè) 計、矩陣的運算等。這里設(shè)計的是一個 44 的乘法器。依據(jù)乘法器的原理,可以繪出其 原理框圖如圖 6.5 所示。 圖 6.5 乘法器的原理框圖 可設(shè) a端口為被乘數(shù)(一個 4位二進(jìn)制數(shù)),b 端口為乘數(shù)(一個 4 位二進(jìn)制數(shù)

50、),y 為乘法運算的結(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è)置 0 16內(nèi)的任意數(shù)字),仿真后所得結(jié)果如圖 6.6 所示。13*10130,仿真結(jié)果正確, 可知此乘法器設(shè)計有效。 圖 6.6 乘法器仿真 13*10 130 6.4 除法器的設(shè)計與仿真 除法器是基于連減和移位操作的,連減實際上就是基于數(shù)學(xué)上除法的基本原理。例 如,ab=c 余數(shù)是 d,就等價于 a減去 c 個 b后得到 d

51、而且 db;之所以可以使用移位操 作,是因為所有運算的數(shù)都用二進(jìn)制表示,本文設(shè)計的除法器主要部分為一個控制移位 的控制器,另有一個由全加器組成的 4位減法器 (引用上面的減法器的設(shè)計 )。又因為規(guī) 定了結(jié)果為 4位,控制器首先比較被除數(shù)的高 4 位與除數(shù)的大小,判斷是否溢出,溢出 則退出,否則就做 4 位移位和減法得到結(jié)果。在每次做完減法以后都要判斷是否夠減, 即判斷是否有借位, 不夠得話,就恢復(fù)被減數(shù), 移一位再減。除法器的原理框圖如圖 6.7 所示。 XXIII 被除數(shù) 除數(shù) 圖 6.7 除法器的原理框圖 設(shè) a 端口為被除數(shù), b 端口為除數(shù), clk 為時鐘信號的輸入端口, str 為

52、啟動信號的 輸入端口,此端口的作用是當(dāng)啟動信號為高電平的時候有效,表示啟動了除法器開始作 除法運算。 s 為除法運算所得到的商的輸出端口, y 為除法運算中所得到的余數(shù)的輸出 端口。該除法器的設(shè)計中使用了狀態(tài)機,它有 5 個狀態(tài): start 為開始狀態(tài), one為第一 次移位狀態(tài), two 為第二次移位狀態(tài), three為第三次移位狀態(tài)(正常運算結(jié)果的輸出狀 態(tài)),error 為溢出出錯狀態(tài)。 在除法器的設(shè)計中引用了減法器。 ain 用來寄存被除數(shù), bin 用來寄存除數(shù), atem 為減法器的被減數(shù)輸入, btem 為減法器的減數(shù)輸入, stem 用來計 算內(nèi)存結(jié)果, citem 為減法器

53、的借位輸入, cotem為減法器的借位輸出。除法器的模塊圖 如附錄中所示。 程序如附件中除法程序, 經(jīng) Quartus 編譯后建立 .vmf 文件,設(shè)置 clk=100ns,str=1, XXIV 使除法器工作。前面部分設(shè)置被除數(shù)為 “10010100,”即十進(jìn)制數(shù) 148(可設(shè)置 0255 內(nèi) 的任意數(shù)字),后面部分設(shè)置被除數(shù)為 “00010110,”即十進(jìn)制數(shù) 22(可設(shè)置 0255 內(nèi)的 任意數(shù)字,為對比,勿與第一個數(shù)設(shè)置相同) ,設(shè)置除數(shù)為 “1101,”即十進(jìn)制數(shù) 13(可 設(shè)置 0 15內(nèi)的任意數(shù)字,本部分程序中有差錯判斷部分,所以除數(shù)取 0 時不做運算), 仿真所得結(jié)果如圖 6.

54、8所示。當(dāng)檢測到 clk 上升沿時啟動運算, 所以第一個 clk 上升沿出 現(xiàn)前雖然被除數(shù)與除數(shù)已設(shè)置,商和余數(shù)仍然為0,第一個 clk 上升沿出現(xiàn),計算得到 14813115,仿真結(jié)果正確。 當(dāng)被除數(shù)改變?yōu)?22 的一段時間內(nèi),因為未檢測到 clk 上升沿,所以未進(jìn)行運算,商和余數(shù)未變,分別仍為 11和5。當(dāng)接下來的第一個 clk 上 升沿出現(xiàn),再次進(jìn)行運算,計算得到 2213 19,仿真結(jié)果正確,由此可知此除法 器設(shè)計有效 圖 6.8 除法器仿真 14813115,22 1319 XXV 致謝 這次課程設(shè)計是學(xué)完 EDA 技術(shù) 之后將自己所學(xué)理論與實際相結(jié)合的機會,通過這 次比較完整的基于

55、 FPGA 的計算器芯片設(shè)計, 我自己的理論與實踐相結(jié)合的能力有了大 幅度的提升。在溫習(xí)了所學(xué)專業(yè)知識的基礎(chǔ)上,同時通過查閱專業(yè)書籍、相關(guān)文獻(xiàn)資來 解決實際工程問題,這鍛煉了我的綜合運用各項知識和資源的能力。而且通過對整體的 掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的實際動手經(jīng)驗得到了極大的豐 富,由于程序編寫與處理是一項非常繁瑣非常令人頭疼的工作,完成了這些,也使我的 意志、抗壓能力及耐力都得到了不同程度的提升,我相信這些提升是會影響我一輩子的 寶貴財富。這一次的設(shè)計讓我積累很多的解決實際問題的經(jīng)驗,使我的頭腦更加靈活, 這必然會讓我在未來的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力,更強的溝通

56、力和理解力。 通過這次的設(shè)計,我對 FPGA技術(shù)、VHDL 語言以及 Quartus 的使用都有了深入 的了解。雖然課程設(shè)計中內(nèi)容較多,過程繁瑣,但這也造就了我豐富的收獲。我采用的 是分模塊的設(shè)計方法, 各個模塊的設(shè)計我都是隨著設(shè)計的不斷深入而不斷熟悉并學(xué)會應(yīng) 用的。以前從課堂上沒學(xué)懂的內(nèi)容經(jīng)過這次課程設(shè)計大部分都弄明白了,總之, 這次 課程設(shè)計我收獲很大。 XXVI 參考文獻(xiàn) 1 周潤景 .基于 Quartus的 FPGA/CPLD 數(shù)字系統(tǒng)設(shè)計實例 M. 電子工業(yè)出版社 .2007,8 2 林明權(quán) 馬維旻 VHDL 數(shù)字控制系統(tǒng)設(shè)計范例 .電子工業(yè)出版社 2003,1 3 褚振勇 . FP

57、GA 設(shè)計及應(yīng)用(第三版) M.西安電子科技大學(xué)出版社 .2012,4 ,2008 4 崔葛瑾 ,沈利芳,李偉民 .基于 FPGA 的數(shù)字電路系統(tǒng)設(shè)計 M. 西安:西安電子科技大學(xué)出版社 年. 5 王彥.基于 FPGA 的工程設(shè)計與應(yīng)用 M.西安:西安電子科技大學(xué)出版社 ,2007 年. 6 黃智偉 .FPGA 系統(tǒng)設(shè)計與實踐 M. 北京:電子工業(yè)出版社 ,2005年. 7 江思敏 .VHDL 數(shù)字電路及系統(tǒng)設(shè)計 M. 北京:機械工業(yè)出版社 ,2006年. 8 潘松,黃繼業(yè) .EDA 技術(shù)實用教程 M.第二版 .北京:科學(xué)出版社 ,2005 年. 9 徐志軍,徐光輝 .CPLD/FPGA 的開

58、發(fā)與應(yīng)用 M. 北京:電子工業(yè)出版社 ,2002年. XXVII 附錄 附錄 A :源程序 4 位二進(jìn)制并行進(jìn)位加法器的源程序 ADDER4B.VHD 如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER4B IS PORT(ci:IN STD_LOGIC; a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); b:IN STD_LOGIC_VECTOR(3 DOWNTO 0); s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

59、; co:OUT STD_LOGIC ); END ADDER4B; ARCHITECTURE behave OF ADDER4B IS SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0);- 類似于在芯片 -部定義的一個數(shù)據(jù) SIGNAL aa,bb:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN aa=0 -拓展位數(shù),使其成為最高位 bb=0 SINT=aa+bb+ci;- 相加 s=SINT(3 DOWNTO 0); coci,a=a(3 DOWNTO 0),b=b(3 DOWNTO 0),s=s(3 0),co=CARRY_OUT)

60、; U2:ADDER4B PORT MAP(ci=CARRY_OUT,a=a(7 DOWNTO 4),b=b(7 DOWNTO 4),s=s(7 4),co=co); END a; 4 位二進(jìn)制并行進(jìn)位減法器的源程序 suber.VHD 如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY suber IS PORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); b:IN STD_LOGIC_

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論