版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于 FPGA 的計(jì)算器設(shè)計(jì) 摘要 本文介紹了一個(gè)簡(jiǎn)單計(jì)算器的設(shè)計(jì),該設(shè)計(jì)采用了現(xiàn)場(chǎng)可編程邏輯器件 FPGA 設(shè) 計(jì),并基于硬件描述語(yǔ)言 VHDL 在 Altera 公司的 Quartus 軟件上實(shí)現(xiàn)仿真。系統(tǒng)由 計(jì)算部分、存儲(chǔ)部分、 顯示部分和輸入部分四個(gè)部分組成, 計(jì)算部分為加法器、 減法器、 乘法器和除法器,存儲(chǔ)部分需要 3 個(gè)存儲(chǔ)器來(lái)實(shí)現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(reg) 以及結(jié)果暫存器( ans)。顯示部分由四個(gè)七段譯碼管組成,分別來(lái)顯示輸入數(shù)字,輸入 部分采用外接鍵盤(pán),由 09 十個(gè)數(shù)字按鍵,加減乘除四個(gè)運(yùn)算符按鍵,一個(gè)等號(hào)按鍵 和一個(gè)清零按鍵組成的。通過(guò)外部的按鍵可以完
2、成四位數(shù)之內(nèi)的 加 、減、乘、除 四種功能運(yùn)算,其結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn)。 關(guān)鍵詞: FPGA;VHDL ;計(jì)算器 1 概述 在國(guó)外,電子計(jì)算器在集成電路發(fā)明后,只用短短幾年時(shí)間就完成了技術(shù)飛躍,經(jīng) 過(guò)激烈的市場(chǎng)競(jìng)爭(zhēng),現(xiàn)在的計(jì)算器技術(shù)己經(jīng)相當(dāng)成熟。計(jì)算器已慢慢地脫離原來(lái)的 “輔 助計(jì)算工具 ”的功能定位,正向著多功能化、可編程化方向發(fā)展,在各個(gè)領(lǐng)域都得到了 廣泛的應(yīng)用。用計(jì)算器不僅可以實(shí)現(xiàn)各種各樣復(fù)雜的數(shù)學(xué)計(jì)算還可以用來(lái)編制、運(yùn)行程 序,甚至解方程組,圖形計(jì)算器還可以進(jìn)行圖形處理。計(jì)算器內(nèi)置的軟件允許用戶進(jìn)行 類似于對(duì)計(jì)算機(jī)的文件和目錄管理等操作,允許用戶對(duì)圖形界面進(jìn)行定制,同時(shí)各種新 技術(shù)也被應(yīng)
3、用到計(jì)算器里使計(jì)算器功能越來(lái)越強(qiáng)大??梢哉f(shuō),計(jì)算器就是一個(gè) “微微型 ” 的計(jì)算機(jī)。國(guó)內(nèi)也有廠商利用計(jì)算器芯片開(kāi)發(fā)新的產(chǎn)品,但對(duì)計(jì)算器技術(shù)的研究、計(jì)算 器芯片的設(shè)計(jì)還處于起步階段。計(jì)算器的主要功能還是在于 “計(jì)算 ”,不妨稱之為 “低檔 計(jì)算器 ”。即便是對(duì)這種計(jì)算器,很多廠商也只從事計(jì)算器的組裝、銷售業(yè)務(wù)。一些IC 設(shè)計(jì)公司、芯片提供商也開(kāi)始研究計(jì)算器技術(shù)。 本次設(shè)計(jì)基于現(xiàn)場(chǎng)可編程邏輯器件 FPGA 進(jìn)行設(shè)計(jì),應(yīng)用硬件描述語(yǔ)言 VHDL 編 程并在 Altera 公司的 Quartus 軟件上實(shí)現(xiàn)仿真。需要進(jìn)行計(jì)算器的常用運(yùn)算功能的 實(shí)現(xiàn),通過(guò)外接鍵盤(pán)輸入、 LED 數(shù)碼顯示來(lái)達(dá)成運(yùn)算目的。
4、 II 2 硬件描述語(yǔ)言 VHDL 簡(jiǎn)介 2.1 VHDL 的發(fā)展 VHDL 誕生于 1982年。在 1987年底, VHDL 被 IEEE 和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬 件描述語(yǔ)言 。自 IEEE公布了 VHDL 的標(biāo)準(zhǔn)版本,IEEE-1076(簡(jiǎn)稱 87版)之后,各 EDA 公司相繼推出了自己的 VHDL 設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和 VHDL 接口。 此后 VHDL 在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受, 并逐步取代了原有的非標(biāo)準(zhǔn)的硬件描述 語(yǔ)言。而 Verilog HDL 是由 GDA(Gateway Design Automation)公司的 PhilMoorby 在 1983 年末首
5、創(chuàng)的,最初只設(shè)計(jì)了一個(gè)仿真與驗(yàn)證工具,之后又陸續(xù)開(kāi)發(fā)了相關(guān)的故障模擬與 時(shí)序分析工具。 1985年 Moorby 推出它的第三個(gè)商用仿真器 Verilog XL,獲得了巨大的成 功,從而使得 Verilog HDL 迅速得到推廣應(yīng)用。 1989年 CADENCE 公司收購(gòu)了 GDA 公 司,使得 Verilog HDL 成為了該公司的獨(dú)家專利。 1990 年 CADENCE 公司公開(kāi)發(fā)表了 Verilog HDL, 并成立 LVI 組織以促進(jìn) Verilog HDL 成為 IEEE 標(biāo)準(zhǔn),即 IEEE Standard 1364-1995。 2.2 VHDL 的特點(diǎn) VHDL 語(yǔ)言主要用于描述
6、數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,與其他硬件描述語(yǔ) 言相比, VHDL 語(yǔ)言有如下優(yōu)越之處 2: 1) VHDL 語(yǔ)言支持自上而下( Top Down)和基于庫(kù)( Library Base )的設(shè)計(jì)方法, 還支持同步電路、異步電路、 FPGA 以及其他隨機(jī)電路的設(shè)計(jì); 2) VHDL 語(yǔ)言具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到 門(mén)級(jí)電路,其高層次的行為描述可以與低層次的 RTL 描述和結(jié)構(gòu)描述混合使 用,還可以自定義數(shù)據(jù) 類型,給編程人員帶來(lái)較大的自由和方便; 3) VHDL 對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必關(guān) 心最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么;
7、4) VHDL 具有電路仿真與驗(yàn)證功能,可以保證設(shè)計(jì)的正確性,用戶甚至不必編寫(xiě) 如何測(cè)試相量便可以進(jìn)行源代碼級(jí)的調(diào)試,而且設(shè)計(jì)者可以非常方便地比較各 III 種方案之間的可行性及其優(yōu)劣,不需做任何實(shí)際的電路實(shí)驗(yàn); 5) VHDL 語(yǔ)言可以與工藝無(wú)關(guān)編程; 6) VHDL 語(yǔ)言標(biāo)準(zhǔn)、規(guī)范,易于共享和復(fù)用 2.3 VHDL 語(yǔ)言結(jié)構(gòu) 圖 2.1 中是 VHDL 的全部結(jié)構(gòu),但實(shí)際上并不需要全部的結(jié)構(gòu), 就像在許多設(shè)計(jì)項(xiàng) 目中,大部分工程師只用到 VHDL 其中的 30%的語(yǔ)法; 通常圖 2.2 的結(jié)構(gòu)才是基本和必 需的。 USE定義區(qū) ENTITY定義區(qū) ARCHITECTUR定E義區(qū) 圖 2.2
8、 VHDL 程序基本結(jié)構(gòu) IV 2.3.1 實(shí)體( ENTITY ) 實(shí)體作為一個(gè)設(shè)計(jì)實(shí)體的組成部分, 其功能是對(duì)這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口 描述,它是設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元;實(shí)體說(shuō)明部分規(guī)定了設(shè)計(jì)單元的輸入輸出接口信 號(hào)或引腳,它是設(shè)計(jì)實(shí)體對(duì)外一個(gè)通信界面。就一個(gè)設(shè)計(jì)實(shí)體面言,外界所看到的僅僅 是它的界面上的各種接口。它可以擁有一個(gè)或多個(gè)結(jié)構(gòu)體,用于描述此設(shè)計(jì)實(shí)體的邏輯 結(jié)構(gòu)和邏輯功能,對(duì)于外界來(lái)主,這一部分是不可見(jiàn)的。不同邏輯功能的實(shí)體可以擁有 相同的實(shí)體描述,這是因?yàn)閷?shí)體類似于原理圖中的一個(gè)部件符號(hào),而其的邏輯功能是由 設(shè)計(jì)實(shí)體中結(jié)構(gòu)體的描述確定的。 實(shí)體是 VHDL 的基本設(shè)計(jì)單元
9、,它可以對(duì)一個(gè)門(mén)電路、 一個(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 : 對(duì)數(shù)據(jù)類型、常數(shù)、信號(hào)、子程序和元件等元素的說(shuō)明部分; 描述實(shí)體邏輯行為的,以各種不同的描述風(fēng)格表達(dá)的功能描述語(yǔ)句,
10、它們包括各種 形式的順序描述語(yǔ)句和并行描述語(yǔ)句。其語(yǔ)句格式如下: ARCHITECTURE 結(jié)構(gòu)體名; 說(shuō)明語(yǔ)句 BEGIN 功能描述語(yǔ)句 END ARCHITECTURE 結(jié)構(gòu)體名; 圖 2.3 中的五種語(yǔ)句結(jié)構(gòu)的基本組成和功能分別是: 塊語(yǔ)句是由一個(gè)系列并行執(zhí)行語(yǔ)句構(gòu)成的組成體, 它的功能是將結(jié)構(gòu)中的并行語(yǔ)句 組成一個(gè)或多個(gè)模塊。 進(jìn)程語(yǔ)句定義順序語(yǔ)句模塊,用以將從外部獲得的信號(hào)值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其 它的信號(hào)進(jìn)行賦值。 信號(hào)賦值語(yǔ)句將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值。 子程序調(diào)用語(yǔ)句用以調(diào)用過(guò)程或者函數(shù),并將此元件的端口與其它的元件、信號(hào)或 高層次實(shí)體的界面端口進(jìn)行連
11、接。 結(jié)構(gòu)體( ARCHITECTUR)E 圖 2.3 結(jié)構(gòu)體構(gòu)造圖 2.4 VHDL 軟件設(shè)計(jì)簡(jiǎn)介 系統(tǒng)電路的軟件設(shè)計(jì)可采用工具軟件 Quartus ,用該工具軟件所支持的語(yǔ)言 硬件描述語(yǔ)言 VHDL ,以文本的方式進(jìn)行編程輸入。在編程時(shí)分別對(duì)控制、計(jì)數(shù)、鎖 存、譯碼等電路模塊進(jìn)行 VHDL 文本描述,使每個(gè)電路模塊以及器件都以文本的形式出 現(xiàn),然后通過(guò)編譯、波形分析、仿真、調(diào)試來(lái)完善每個(gè)器件的功能。單個(gè)器件制作完成 后,然后將它們生成庫(kù)文件,并產(chǎn)生相應(yīng)的符號(hào),最后用語(yǔ)言將各個(gè)已生成庫(kù)文件的器 VI 件的各個(gè)端口連接在一起,從而形成了系統(tǒng)主電路的軟件結(jié)構(gòu)。在連接器件時(shí),也可以 采用圖形輸入方
12、式,即在圖形輸入界面中調(diào)出先制作好的庫(kù)文件器件符號(hào),再將每個(gè)器 件符號(hào)的各端口直接連線,從而構(gòu)成系統(tǒng)主電路。在上述工作的基礎(chǔ)上,再進(jìn)行波形分 析、仿真調(diào)試便完成整個(gè)軟件設(shè)計(jì) 6 。 VII 3 現(xiàn)場(chǎng)可編程門(mén)陣列( FPGA )簡(jiǎn)介 3.1 可編程邏輯器件 可編程邏輯器件 ( PLD-Programmable Logic Devices)是一種由用戶編程以實(shí)現(xiàn)某種 邏輯功能的新型邏輯器件。它誕生于 20 世紀(jì) 70 年代,在 20 世紀(jì) 80 年代以后,隨著 集成電路技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展而迅速發(fā)展起來(lái)的??删幊踢壿嬈骷詥?wèn)世以來(lái), PLD 經(jīng)歷了從 PROM 、PLA 、PAL、GAL 到 F
13、PGA、ispLSI 等高密度 PLD 的發(fā)展過(guò)程。 在此期間, PLD 的集成度、速度不斷提高,功能不斷增強(qiáng),結(jié)構(gòu)趨于更合理,使用變 得更靈活方便。 PLD 的出現(xiàn)打破了由中小型通用型集成電路和大規(guī)模專用集成電路壟 斷的局面。與中小規(guī)模通用型集成電路相比,用 PLD 實(shí)現(xiàn)數(shù)字系統(tǒng),有研制周期短、 先期投資少、無(wú)風(fēng)險(xiǎn)、修改邏輯設(shè)計(jì)方便、小批量生產(chǎn)成本低等優(yōu)勢(shì)。 隨著可編程邏輯器件性能價(jià)格比的不斷提高, EDA 開(kāi)發(fā)軟件的不斷完善,現(xiàn)代電 子系統(tǒng)的設(shè)計(jì)將越來(lái)越多地使用可編程邏輯器件,特別是大規(guī)??删幊踢壿嬈骷?。如果 說(shuō)一個(gè)電子系統(tǒng)可以像積木堆積起來(lái)的話, 那么現(xiàn)在構(gòu)成許多電子系統(tǒng)僅僅需要 3 種
14、標(biāo) 準(zhǔn)的積木塊微處理器、存儲(chǔ)器和可編程邏輯器件,甚至只需一塊大規(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ù)可長(zhǎng)期保存的結(jié)構(gòu)特點(diǎn)。 CPLD
15、(Complex Programmable Logic Device)是萬(wàn)門(mén)以上的復(fù)雜可編程邏輯器件,采用 CMOS EPROM 、 EEPROM、快閃存儲(chǔ)器和 SRAM 等編程技術(shù),從而構(gòu)成高密度、高速度和低功耗的可 編程邏輯器件 7。 3.2 現(xiàn)場(chǎng)可編程門(mén)陣列( FPGA ) FPGA 是現(xiàn)場(chǎng)可編程門(mén)陣列( Field Programmable Gate Array)的簡(jiǎn)稱。 FPGA 器件 VII 及其開(kāi)發(fā)系統(tǒng)是開(kāi)發(fā)大規(guī)模數(shù)字集成電路的新技術(shù)。它利用計(jì)算機(jī)輔助設(shè)計(jì),繪制出實(shí) 現(xiàn)用戶邏輯的原理圖、編輯布爾方程或用硬件描述語(yǔ)言等方式作為設(shè)計(jì)輸入;然后經(jīng)一 系列轉(zhuǎn)換程序、自動(dòng)布局布線、 模擬仿
16、真的過(guò)程; 最后生成配置 FPGA 器件的數(shù)據(jù)文件, 對(duì) FPGA 器件初始化。 這樣就實(shí)現(xiàn)了滿足用戶要求的專用集成電路, 真正達(dá)到了用戶自 行設(shè)計(jì)、自行研制和自行生產(chǎn)集成電路的目的。 FPGA 是一種半定制的集成電路,其特點(diǎn)是直接面向用戶,具有極大的靈活性和通 用性,開(kāi)發(fā)效率高,硬件測(cè)試和實(shí)現(xiàn)快捷,工作可靠性好而且技術(shù)維護(hù)簡(jiǎn)單。 FPGA 相對(duì)于 CPLD 而言,其結(jié)構(gòu)特點(diǎn)在于 FPGA 是基于查找表 look-up-table 的。 查找表( look-up-table)簡(jiǎn)稱為 LUT , LUT 本質(zhì)上是一個(gè) RAM 。FPGA 中多使用 4 輸 入的 LUT ,所以每一個(gè) LUT 可以
17、看成一個(gè)有 4 位地址線的 16x1 的 RAM 。當(dāng)用戶通 過(guò)原理圖或 HDL 語(yǔ)言描述了一個(gè)邏輯電路后, PLD/FPGA 開(kāi)發(fā)軟件會(huì)自動(dòng)計(jì)算邏輯電 路的所有可能的結(jié)果,并把結(jié)果事先寫(xiě)入 RAM ,這樣,每輸入一個(gè)信號(hào)進(jìn)行邏輯運(yùn)算 就等于輸入一個(gè)地址進(jìn)行查表,找出地址對(duì)應(yīng)的內(nèi)容,然后輸出即可。 3.2.1 FPGA 的器件結(jié)構(gòu)與工作原理 FPGA(Field Programmable Gate Array)即現(xiàn)場(chǎng)可編程邏輯陣列, 是大規(guī)??删幊碳?電路的主流器件。FPGA 一般由三種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的 SRAM(靜態(tài) 隨機(jī)存儲(chǔ)器 )組成,這三種可編程電路是:可編程邏輯陣列
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)成的,每個(gè) LAB 包括八個(gè)邏輯單元 LE、相連的進(jìn)位鏈和級(jí)聯(lián)鏈, LAB 控制信號(hào)和 LAB 局部互連。 LAB 的構(gòu)成、 ACEK 系列芯片的“粗粒度 (coarse-grained )結(jié)
19、構(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ā)器、 IX 一個(gè)進(jìn)位鏈和一個(gè)級(jí)聯(lián)鏈。 每個(gè) LE 有兩個(gè)輸出分別可以驅(qū)動(dòng)局部互連和快速通道互連。 LE 有兩個(gè)輸出驅(qū)動(dòng)內(nèi)部互連,一個(gè)是驅(qū)動(dòng)局部互連輸出,另一個(gè)驅(qū)動(dòng)行或列的快速通 道 Fast Track 的互連輸出,這兩個(gè)輸出可以單獨(dú)控制。因此在一個(gè)邏輯單元LE 中的觸 發(fā)器和查找表能夠用來(lái)完成不相關(guān)的功能,從而提高 LE 的資源利用率。 在
20、ACEK 系列芯片的結(jié)構(gòu)中還提供了兩種專用的高速數(shù)據(jù)通道,用于連接相鄰的 LE,但不占用局部互連通路, 它們是進(jìn)位鏈和級(jí)聯(lián)鏈。 進(jìn)位鏈用來(lái)支持高速計(jì)數(shù)器和加 法器,它提供了 LE 之間的決速向前進(jìn)位功能。來(lái)自低位的進(jìn)位信號(hào)經(jīng)進(jìn)位鏈向前直接 送到高位, 同時(shí)饋入查找表和進(jìn)位鏈的下一段。 這種特點(diǎn)使得 ACEK 結(jié)構(gòu)能夠?qū)崿F(xiàn)高速 計(jì)數(shù)器、加法器和寬位比較器。級(jí)聯(lián)鏈可以用來(lái)實(shí)現(xiàn)多輸入數(shù)的邏輯函數(shù)。相鄰的查找 表并行地完成部分邏輯功能,級(jí)聯(lián)鏈把中間結(jié)果拼接起來(lái)。進(jìn)位鏈和級(jí)聯(lián)鏈的使用有利 于提高器件的工作速度,但是大量使用進(jìn)位鏈和級(jí)聯(lián)鏈會(huì)限制布局布線的靈活性,導(dǎo)致 資源的浪費(fèi)。因此在設(shè)計(jì)過(guò)程應(yīng)該權(quán)衡考慮
21、, 在 FPGA芯片資源利用和工作速度之間尋 求平衡。 2. 輸入 /輸出模塊 IOB ACEK 器件的 I/O 引腳是由一些 I/O 單元驅(qū)動(dòng)的。IOE (I/O Element)位于快速通道的 行和列末端,包含一個(gè)雙向的緩沖器和一個(gè)寄存器。這個(gè)寄存器可以用作需要快速建立 時(shí)間的外部數(shù)據(jù)輸入寄存器,也可以作為需要快速“時(shí)鐘到輸出”性能的數(shù)據(jù)輸出寄存 器。 IOE 可以配置成輸入、輸出或雙向口。 ACEK 器件中的 IOE 具有許多特性,支持 JTAG 編程、三態(tài)緩沖和漏極開(kāi)路輸出等 等。每個(gè) IOE 的時(shí)鐘、清零、時(shí)鐘使能和輸出使能的控制均由 I/O 控制信號(hào)網(wǎng)絡(luò)提供, 采用高速驅(qū)動(dòng)以減小通
22、過(guò)器件的時(shí)間偏差。此外, ACEK 器件還提供了若干專用輸入引 腳,這些引腳用來(lái)驅(qū)動(dòng) IOE 寄存器的控制端, 使用了專用的布線通道,以便具有比快速 通道更短的延遲和更小的偏差。 3. 互連資源 IR 可編程的互連資源包括各種長(zhǎng)度的金屬連線線段和一些可編程的連線開(kāi)關(guān), 它們將 各個(gè)邏輯陣列之間、及其與 IO 模塊之間互相連接起來(lái),構(gòu)成各種功能復(fù)雜的系統(tǒng)。 在 ACEK 中互連結(jié)構(gòu)是通過(guò)快速通道 (Fast Track)實(shí)現(xiàn)的。 Fast Track 遍布于整個(gè) ACEK 器件,是一系列水平和垂直走向的連續(xù)式布線通道。每一行的 LAB 都有一個(gè)專 用的“行互連”,“行互連”可以驅(qū)動(dòng)。 I/O 引
23、腳或饋送到器件中的其 LAB ;“列互連” 連接各行,也能驅(qū)動(dòng) I/O 引腳。這種布線結(jié)構(gòu)能夠有效提高布線效率,使得即使非常復(fù) 雜的設(shè)計(jì)也能夠測(cè)定其延時(shí)性。 4. 嵌人式陣列塊 EAB 嵌人式陣列塊 EAB 是在輸入輸出口上帶有寄存器的靈活的 RAM 塊,是由一系列嵌 人式 RAM 單元組成的。 EAB 的邏輯功能是在配置期間,用只讀模式對(duì) EAB 編程產(chǎn)生 一個(gè)大型查找表來(lái)實(shí)現(xiàn)的。 采用查找表實(shí)現(xiàn)組合邏輯比一般算法快, EAB 的快速時(shí)間通 道使得這一先進(jìn)性能進(jìn)一步得到加強(qiáng)。當(dāng)要實(shí)現(xiàn)存儲(chǔ)器功能時(shí),每個(gè) EAB 提供 2048 比 特位,每一個(gè) EAB 是一個(gè)獨(dú)立的結(jié)構(gòu), 它具有共同的輸入、
24、互連和控制信號(hào)。 每個(gè) EAB 含有一個(gè)行互連饋入端, EAB 的輸出能夠同時(shí)驅(qū)動(dòng)行互連通道和列互連通道。 這一特性 增加了 EAB 的可利用布線資源。因此, EAB 可以非常方便地用于實(shí)現(xiàn)一些規(guī)模不大的 RAM, ROM, FIFO 等功能模塊;同時(shí)在實(shí)現(xiàn)地址譯碼器、狀態(tài)機(jī)、微控制器等復(fù)雜邏輯 時(shí)也具備了一定優(yōu)勢(shì) 5。 3.2.2 基于 EDA 平臺(tái)的 FPGA 開(kāi)發(fā)流程 一個(gè)完整、 典型的 EDA 設(shè)計(jì)流程 67 即是自頂向下設(shè)計(jì)方法的具體實(shí)施過(guò)程, 也是 EDA 軟件本身的組成結(jié)構(gòu)。在實(shí)踐中進(jìn)一步了解支持這一個(gè)設(shè)計(jì)流程的諸多設(shè)計(jì)工具, 有利于排解設(shè)計(jì)中的具體問(wèn)題,提高設(shè)計(jì)質(zhì)量。 1. 設(shè)
25、計(jì)輸入 基于 EDA 軟件平臺(tái)的 FPGA 開(kāi)發(fā)流程,一般有兩種設(shè)計(jì)輸入方式:圖形輸入和硬 件描述語(yǔ)言文本輸入。 下面將重點(diǎn)介紹采用 VHDL 硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)輸入方法, 這 是筆者在設(shè)計(jì)開(kāi)發(fā)過(guò)程中采用的主要方法。 VHDL 作為電子工程主流硬件描述語(yǔ)言, 是 EDA 技術(shù)的重要組成部分。它于 1983 年由美國(guó)國(guó)防部創(chuàng)建,由 IEEE 協(xié)會(huì)進(jìn)一步發(fā)展 并在 1987 年成為 IEEE 國(guó)際標(biāo)準(zhǔn)。自 IEEE 協(xié)會(huì)公布了 VHDL 標(biāo)準(zhǔn)版本 (IEEE Std 1076) 之后,各大 EDA 公司相繼推出支持 VHDL 語(yǔ)言的開(kāi)發(fā)環(huán)境。 從此 VHDL 作為硬件描述 語(yǔ)言的業(yè)界標(biāo)準(zhǔn)之一,在
26、電子設(shè)計(jì)領(lǐng)域得到廣泛應(yīng)用,并逐步成為事實(shí)上的通用硬件描 述語(yǔ)言。 VHDL 語(yǔ)言具有很強(qiáng)的電路建模能力,具有良好的電路行為描述和系統(tǒng)描述的能 力,能從多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述; VHDL 語(yǔ)言還具有與硬件電路無(wú)關(guān)和設(shè) 計(jì)平臺(tái)無(wú)關(guān)的特性, 并且在語(yǔ)言易讀性和層次化結(jié)構(gòu)化設(shè)計(jì)方面表現(xiàn)了強(qiáng)大的生命力和 XI 應(yīng)用潛力。這些特性使得 VHDL 語(yǔ)言在支持自頂向下的 EDA 設(shè)計(jì)流程方面顯得游刃有 余。因此,采用 VHDL 進(jìn)行電子系統(tǒng)設(shè)計(jì)可以讓設(shè)計(jì)者專心致力于其功能的實(shí)現(xiàn), 而不 需要對(duì)不影響功能的與工藝相關(guān)的問(wèn)題花費(fèi)過(guò)多的時(shí)間和精力, 從而大大簡(jiǎn)化了設(shè)計(jì)任 務(wù),提高了設(shè)計(jì)效率和可靠性。 采用
27、 VHDL 文本設(shè)計(jì)輸入與傳統(tǒng)的計(jì)算機(jī)軟件語(yǔ)言編輯輸入基本上一樣, 就是使用 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)的模塊組合裝配而成的過(guò)程。事實(shí)上,設(shè)計(jì)過(guò)程通常從高層 次的行為描述開(kāi)始,直到最底層的結(jié)構(gòu)描述結(jié)束,每一個(gè)步驟都是上一個(gè)層次的綜合轉(zhuǎn) 換。在 FPGA 設(shè)計(jì)開(kāi)發(fā)過(guò)程中,整個(gè)綜合過(guò)程就是設(shè)計(jì)者在 EDA 軟件平臺(tái)上編輯輸入 VHDL 文本,依據(jù)給定電路結(jié)構(gòu)組件和約束控制條件進(jìn)行
28、編譯、優(yōu)化、轉(zhuǎn)換和綜合,最 終獲得門(mén)級(jí)電路甚至更底層的電路描述網(wǎng)表文件。 因此設(shè)計(jì)綜合的過(guò)程就是將軟件設(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)生最終的下載文件。適配過(guò)程中所選定的 FPGA 目標(biāo)器件必 須屬于綜合器原來(lái)指定的目標(biāo)器件系列, 這是因?yàn)檫m配器的適配對(duì)象是直接與器件的結(jié) 構(gòu)細(xì)節(jié)相對(duì)應(yīng)的。 邏輯綜合通過(guò)后必須利用適配器將綜合后的網(wǎng)表文件針對(duì)某一具體目 標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件
29、配置、邏輯分割、邏輯優(yōu)化、邏輯布局布 線操作。適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時(shí)序仿真,同時(shí)產(chǎn)生可用 于編程下載文件。 4. 功能仿真和時(shí)序仿真 在編程下載前必須利用 EDA 工具對(duì)配置生成的結(jié)果進(jìn)行模擬分析,這就是所謂的 仿真。仿真的過(guò)程就是讓計(jì)算機(jī)根據(jù)一定的算法和一定的仿真庫(kù)對(duì) EDA 設(shè)計(jì)進(jìn)行模擬, 以驗(yàn)證設(shè)計(jì),排除錯(cuò)誤。仿真包括功能仿真和時(shí)序仿真。 功能仿真:不經(jīng)過(guò)綜合和適配階段,在設(shè)計(jì)項(xiàng)目編譯后直接進(jìn)入門(mén)級(jí)仿真器進(jìn)行模 XII 擬測(cè)試。主要用于測(cè)試設(shè)計(jì)項(xiàng)目的邏輯功能, 用以了解其實(shí)現(xiàn)的功能是否滿足設(shè)計(jì)要求, 在功能仿真的過(guò)程不涉及任何具體器件的硬件特性。 時(shí)序仿真:當(dāng)設(shè)
30、計(jì)項(xiàng)目通過(guò)功能仿真初步確定滿足設(shè)計(jì)要求后,需要綁定具體器件 進(jìn)行時(shí)序仿真。時(shí)序仿真就是接近真實(shí)器件運(yùn)行特性的仿真,仿真文件包含了器件硬件 特性參數(shù),因而仿真精度高。但時(shí)序仿真的仿真文件必須來(lái)自針對(duì)具體器件的綜合器和 適配器。綜合所得的 EDIF 網(wǎng)表文件通常作為 FPGA 適配器的輸入文件,產(chǎn)生的仿真網(wǎng) 表文件包含了器件精確的延時(shí)信息。 5. 編程下載 把適配后生成的下載或配置文件, 通過(guò)編程器或編程電纜向 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
31、公司的綜合性 PLD 開(kāi)發(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 宏功能模塊庫(kù),使
32、用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三 方 EDA 工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方 EDA 工具。此外, Quartus 通過(guò)和 DSP Builder 工具與 Matlab/Simulink 相結(jié)合, 可以方便地實(shí)現(xiàn)各種 DSP 應(yīng)用系統(tǒng); 支持 Altera 的片上可編程系統(tǒng) ( SOPC)開(kāi)發(fā), 集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開(kāi)發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開(kāi)發(fā) 平臺(tái)。 Maxplus II 作為 Altera 的上一代 PLD 設(shè)計(jì)軟件,由于其出色的易用性而得 到了廣泛的應(yīng)用。目前 Altera 已經(jīng)停止了對(duì) Maxp
33、lus II 的更新支持, Quartus 與 之相比不僅僅是支持器件類型的豐富和圖形界面的改變。 Altera 在 Quartus 中包 含了許多諸如 SignalTap II 、Chip Editor 和 RTL Viewer 的設(shè)計(jì)輔助工具,集成了 XIII SOPC 和 HardCopy 設(shè)計(jì)流程,并且繼承了 Maxplus II 友好的圖形界面及簡(jiǎn)便的使 用方法。 Altera Quartus 作為一種可編程邏輯的設(shè)計(jì)環(huán)境 , 由于其強(qiáng)大的設(shè)計(jì)能力和 直觀易用的接口,越來(lái)越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。 Altera 的 Quartus 可編程 邏輯軟件屬于第四代 PLD 開(kāi)發(fā)平臺(tái)。該平
34、臺(tái)支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求, 其中包括支持基于 Internet 的協(xié)作設(shè)計(jì)。 Quartus 平臺(tái)與 Cadence、ExemplarLogic 、 MentorGraphics 、Synopsys 和 Synplicity 等 EDA 供應(yīng)商的開(kāi)發(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)行編譯,
35、驗(yàn)證通過(guò)后,將每個(gè)子模塊的 VHDL 文 本文件添加到總工程文件夾中,并建立圖元(建立圖元block ,右鍵點(diǎn)擊 .V 文件, 選擇 create symbol files for current files ),將各個(gè)圖元(亦即子模塊)連接起來(lái) 構(gòu)成總體設(shè)計(jì)項(xiàng)目。 .設(shè)計(jì)各子模塊 :編寫(xiě)各子模塊相應(yīng)的代碼,并分別進(jìn)行編譯,驗(yàn)證通過(guò)后將 各子模塊 VHDL 文件添加到頂層設(shè)計(jì)中,創(chuàng)建圖元,進(jìn)行連接以完成總體項(xiàng)目的 設(shè)計(jì)。這部分就是將管腳連好。在原理圖編輯中,英文的大小寫(xiě)代表相同的含義, 只要器件連接線的節(jié)點(diǎn)名稱相同就會(huì)默認(rèn)為是連接的,總線(Bus )在圖形編輯窗 口顯示的是一條粗線,總線必須在
36、名稱的后面加上“a.b ,”表示一條總線內(nèi)所含 有的節(jié)點(diǎn)編號(hào),原理圖編輯的文件擴(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ò)表。 XIV 5
37、 系統(tǒng)方案設(shè)計(jì) 系統(tǒng)總體設(shè)計(jì)框圖如圖 5.1 所示。此設(shè)計(jì)由計(jì)算部分、存儲(chǔ)部分、顯示部分和輸入 部分組成。 圖 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ǔ)言中的運(yùn)算符來(lái)實(shí)現(xiàn)。 但在顯示時(shí), 必須將 個(gè)位、十位、百位分開(kāi)顯示,設(shè)計(jì)時(shí)使用比較的方法來(lái)實(shí)現(xiàn)計(jì)算器的功能要求。另外, 由于在 VHDL 語(yǔ)言中只能進(jìn)行除數(shù)是 2的冪的除法, 不能進(jìn)行任意數(shù)的除法, 因此必須 單獨(dú)設(shè)計(jì)一個(gè)除法器來(lái)實(shí)現(xiàn)計(jì)算器的功能要求, 該除法器可以利用減法運(yùn)算和左移位運(yùn) 算實(shí)現(xiàn)除法運(yùn)算
38、,具體算法見(jiàn)第四章。 5.2 計(jì)算器的存儲(chǔ)部分 存儲(chǔ)部分需要 3個(gè)存儲(chǔ)器來(lái)實(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ù)字, 來(lái)得到最終輸入 XV 的數(shù)字。當(dāng)?shù)谌伟聪聰?shù)字鍵時(shí),要將第一次輸入的數(shù)字乘以100,再加上第二次輸入 的數(shù)字乘以 10,再加上第一次輸入的數(shù)字,來(lái)得到最終輸入的數(shù)字。 當(dāng)進(jìn)行第一次計(jì)算時(shí),第一個(gè)數(shù)字存放在 acc 里面。按
39、下運(yùn)算符以后,第二個(gè)數(shù)字 放在 reg 里面。當(dāng)再按下運(yùn)算符號(hào)或者等號(hào)時(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 里面,直到最后按下等號(hào)按鍵的 時(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)。本文采用的是共陽(yáng)極七段數(shù)碼管, 顯示數(shù)字時(shí) 需要將對(duì)應(yīng)
40、管腳置為低電平,輸出時(shí),從左到右,按從高到低位的順序依次接g、f 、e、 d、c、b、a。七段譯碼器的基本結(jié)構(gòu)如圖 3.2 所示。 a fb g ec d 圖 5.2 七段譯碼器的結(jié)構(gòu) 其 VHDL 語(yǔ)言描述如下所示。在這段程序中, indata 是輸入 4 位二進(jìn)制數(shù)的端口, outdata是輸出 7 位譯碼的端口,用 WITH 語(yǔ)句來(lái)實(shí)現(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 的顯示; -其它的輸入按鍵均不顯示。 計(jì)算器顯示部分的設(shè)計(jì)和實(shí)現(xiàn),實(shí)際上就是七段譯碼器的設(shè)計(jì)和實(shí)現(xiàn),三個(gè)七段譯 碼器分別顯示的是個(gè)位、十位和百位。輸入第一個(gè)數(shù)字后至再一次按下數(shù)字按鍵輸入第 二個(gè)數(shù)字前,三個(gè)七段譯碼器顯示的都是第一個(gè)數(shù)字。當(dāng)開(kāi)始輸入第二個(gè)數(shù)字的
42、時(shí)候顯 示第二個(gè)數(shù)字,再次按下運(yùn)算按鍵到輸入第三個(gè)數(shù)字前,顯示的是前兩個(gè)數(shù)字的運(yùn)算結(jié) 果,以此類推,當(dāng)最后按下等號(hào)鍵的時(shí)候,顯示最終的運(yùn)算結(jié)果。 5.4 計(jì)算器的輸入部分 計(jì)算器輸入部分的設(shè)計(jì)最主要的是按鍵譯碼電路的設(shè)計(jì)和實(shí)現(xiàn)。 計(jì)算器的輸入部分 是由 0 9 十個(gè)數(shù)字按鍵、加減乘除四則運(yùn)算的運(yùn)算符按鍵、一個(gè)等號(hào)按鍵和一個(gè)清 零按鍵組成的,設(shè)計(jì)所要做的是對(duì)按鍵信息進(jìn)行譯碼,使其在計(jì)算器內(nèi)部可以使用。數(shù) 字按鍵譯碼電路的主體部分 VHDL 語(yǔ)言描述如下。 PROCESS(inclk,reset) BEGIN IF reset=1THEN-異步復(fù)位信號(hào)為高電平的時(shí)候 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;-不按鍵時(shí)保持 END CASE; END IF; END PROCESS; 在本次設(shè)計(jì)的程序中,設(shè) reset 是異步復(fù)位信號(hào)的輸入端口, inclk 是時(shí)鐘信號(hào)的輸 入端口,innum
44、端口用來(lái)表示輸入的按鍵向量, outnum 端口用來(lái)表示輸入的按鍵動(dòng)作對(duì) 應(yīng)的輸出數(shù)字, outflag 端口用來(lái)輸出是否有按鍵動(dòng)作, 它主要實(shí)現(xiàn)的是按下什么就輸出 什么。一共有十個(gè)位,初始值都為低電平 “0,”當(dāng)按下哪個(gè)位時(shí)哪個(gè)位上的電平就跳為 高電平(有且僅有一個(gè)為高電平) ,這時(shí)就有相應(yīng)的輸出。那十個(gè)位分別對(duì)應(yīng)的是 0 9 這十個(gè)數(shù)字,所以當(dāng)?shù)谝粋€(gè)位(從左往右位數(shù)依次增高)為高電平時(shí)顯示0,第 十個(gè)位上位高電平時(shí),相應(yīng)的顯示為 9。如果按下的鍵是加號(hào)、減號(hào)、乘號(hào)、除號(hào)或者 是等于號(hào)時(shí),也是不顯示的,所以也可以稱作數(shù)字按鍵譯碼電路。 XVIII 6 計(jì)算器的 VHDL 設(shè)計(jì) 6.1 加法器
45、的設(shè)計(jì)與仿真 本次設(shè)計(jì)的加法器屬于多位加法器的范疇,可按其進(jìn)位方式的不同分為兩類:串行 進(jìn)位加法器和并行進(jìn)位加法器。串行進(jìn)位加法器是將多個(gè)一位全加器級(jí)聯(lián),低位全加器 的進(jìn)位輸出送給相鄰高位全加器作為進(jìn)位輸入,以此構(gòu)成多位加法器。這種設(shè)計(jì)思路簡(jiǎn) 單明了且占用資源少,但運(yùn)算速度較慢。并行進(jìn)位方式則是在各位的加法環(huán)節(jié)之外,另 外設(shè)有進(jìn)位產(chǎn)生邏輯電路,各位的進(jìn)位輸入信號(hào)同時(shí)產(chǎn)生,從而各位可以同時(shí)完成全加 運(yùn)算,輸出最后結(jié)果。并行進(jìn)位方式具有較快的運(yùn)算速度,但是相對(duì)于串行進(jìn)位方式來(lái) 說(shuō),卻往往占用更多的資源。尤其是當(dāng)運(yùn)算位數(shù)增加的時(shí)候,相同位數(shù)的并行進(jìn)位和串 行進(jìn)位加法器的資源占用差距也越來(lái)越大。因此,
46、常常需要設(shè)計(jì)者在運(yùn)算速度和資源占 用量之間做出折中平衡。而經(jīng)過(guò)實(shí)踐證明, 4 位二進(jìn)制并行進(jìn)位加法器和串行級(jí)聯(lián)加法 器占用的資源幾乎相同。因此,可以用兩個(gè) 4 位二進(jìn)制并行加法器級(jí)聯(lián)構(gòu)成 8 位二進(jìn)制 加法器,這是一種較為合理的選擇,加法器的原理框圖如圖 6.1 所示。 ci 為輸入進(jìn)位。此加法器還有兩個(gè)輸出端口,分別是加法運(yùn)算的最終結(jié)果輸出和進(jìn)位位 的輸出,設(shè) s為結(jié)果的輸出端口, co 為進(jìn)位的輸出端口。當(dāng)輸入被加數(shù)與加數(shù)后,兩個(gè) 8 位二進(jìn)制數(shù)開(kāi)始相加,之后,再與輸入進(jìn)位位相加,這樣得到的最終結(jié)果就是加法器 XIV 加法運(yùn)算的最終結(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ù)字, 但因?yàn)槌绦蛑形窗鲥e(cuò)溢出判斷, 所以 需滿足 a+b255),仿真后所得結(jié)果如圖 6.2 所示。 16+176192,仿真結(jié)果正確,可知此 加法器設(shè)計(jì)有效。 圖 6.2 加法器仿真 16+176 192 6.2 減法器的設(shè)計(jì)與仿真 首先設(shè)計(jì)一個(gè)四位二進(jìn)制數(shù)的減法器,四位全減器的原理框圖如圖 6.3 所示。由圖 可以看出,此減法器共需要兩個(gè)輸入端口和一個(gè)輸出端口。減法器的
48、設(shè)計(jì)可以引用加法 器,即通過(guò)對(duì)減數(shù)的求補(bǔ),再與被減數(shù)相加得到最終的結(jié)果,所以需要增設(shè)一個(gè)進(jìn)位位 輸入端口和進(jìn)位位的輸出端口。 XX 圖 6.3 四位全減器的原理框圖 可以設(shè) a端口為被減數(shù), b端口為減數(shù), ci 為輸入借位位, s為結(jié)果的輸出端口, co 為借位的輸出端口。減法器的運(yùn)算過(guò)程中首先要引用加法器,在此不再贅述。而且此減 法器可以進(jìn)行位數(shù)擴(kuò)展,每增加一位需要多引用一個(gè)加法器,為使圖形原理簡(jiǎn)潔,所以 此處只列出四位減法器。減法器模塊圖如附錄中所示。 程序如附錄中減法程序, 經(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ù)字, 但因?yàn)槌绦蛑形窗鲥e(cuò)判斷, 所以需滿足 ab),仿真后所 得結(jié)果如圖 6.4 所示。 15-96,仿真結(jié)果正確,可知此減法器設(shè)計(jì)有效。 圖 6.4 減法器仿真 15-9 6 XXI 6.3 乘法器的設(shè)計(jì)與仿真 乘法器是數(shù)字系統(tǒng)中的基本邏輯器件,在很多應(yīng)用中都會(huì)出現(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ù)
50、),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è)置 0 16內(nèi)的任意數(shù)字),仿真后所得結(jié)果如圖 6.6 所示。13*10130,仿真結(jié)果正確, 可知此乘法器設(shè)計(jì)有效。 圖 6.6 乘法器仿真 13*10 130 6.4 除法器的設(shè)計(jì)與仿真 除法器是基于連減和移位操作的,連減實(shí)際上就是基于數(shù)學(xué)上除法的基本原理。例 如,ab=c 余數(shù)是 d,就等價(jià)于 a減去 c 個(gè) b后得到 d
51、而且 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 所示。 XXIII 被除數(shù) 除數(shù) 圖 6.7 除法器的原理框圖 設(shè) a 端口為被除數(shù), b 端口為除數(shù), clk 為時(shí)鐘信號(hào)的輸入端口, str 為
52、啟動(dòng)信號(hào)的 輸入端口,此端口的作用是當(dāng)啟動(dòng)信號(hào)為高電平的時(shí)候有效,表示啟動(dòng)了除法器開(kāi)始作 除法運(yùn)算。 s 為除法運(yùn)算所得到的商的輸出端口, y 為除法運(yùn)算中所得到的余數(shù)的輸出 端口。該除法器的設(shè)計(jì)中使用了狀態(tài)機(jī),它有 5 個(gè)狀態(tài): start 為開(kāi)始狀態(tài), one為第一 次移位狀態(tài), two 為第二次移位狀態(tài), three為第三次移位狀態(tài)(正常運(yùn)算結(jié)果的輸出狀 態(tài)),error 為溢出出錯(cuò)狀態(tài)。 在除法器的設(shè)計(jì)中引用了減法器。 ain 用來(lái)寄存被除數(shù), bin 用來(lái)寄存除數(shù), atem 為減法器的被減數(shù)輸入, btem 為減法器的減數(shù)輸入, stem 用來(lái)計(jì) 算內(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ù)字,為對(duì)比,勿與第一個(gè)數(shù)設(shè)置相同) ,設(shè)置除數(shù)為 “1101,”即十進(jìn)制數(shù) 13(可 設(shè)置 0 15內(nèi)的任意數(shù)字,本部分程序中有差錯(cuò)判斷部分,所以除數(shù)取 0 時(shí)不做運(yùn)算), 仿真所得結(jié)果如圖 6.
54、8所示。當(dāng)檢測(cè)到 clk 上升沿時(shí)啟動(dòng)運(yùn)算, 所以第一個(gè) clk 上升沿出 現(xiàn)前雖然被除數(shù)與除數(shù)已設(shè)置,商和余數(shù)仍然為0,第一個(gè) clk 上升沿出現(xiàn),計(jì)算得到 14813115,仿真結(jié)果正確。 當(dāng)被除數(shù)改變?yōu)?22 的一段時(shí)間內(nèi),因?yàn)槲礄z測(cè)到 clk 上升沿,所以未進(jìn)行運(yùn)算,商和余數(shù)未變,分別仍為 11和5。當(dāng)接下來(lái)的第一個(gè) clk 上 升沿出現(xiàn),再次進(jìn)行運(yùn)算,計(jì)算得到 2213 19,仿真結(jié)果正確,由此可知此除法 器設(shè)計(jì)有效 圖 6.8 除法器仿真 14813115,22 1319 XXV 致謝 這次課程設(shè)計(jì)是學(xué)完 EDA 技術(shù) 之后將自己所學(xué)理論與實(shí)際相結(jié)合的機(jī)會(huì),通過(guò)這 次比較完整的基于
55、 FPGA 的計(jì)算器芯片設(shè)計(jì), 我自己的理論與實(shí)踐相結(jié)合的能力有了大 幅度的提升。在溫習(xí)了所學(xué)專業(yè)知識(shí)的基礎(chǔ)上,同時(shí)通過(guò)查閱專業(yè)書(shū)籍、相關(guān)文獻(xiàn)資來(lái) 解決實(shí)際工程問(wèn)題,這鍛煉了我的綜合運(yùn)用各項(xiàng)知識(shí)和資源的能力。而且通過(guò)對(duì)整體的 掌控,對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理,都使我的實(shí)際動(dòng)手經(jīng)驗(yàn)得到了極大的豐 富,由于程序編寫(xiě)與處理是一項(xiàng)非常繁瑣非常令人頭疼的工作,完成了這些,也使我的 意志、抗壓能力及耐力都得到了不同程度的提升,我相信這些提升是會(huì)影響我一輩子的 寶貴財(cái)富。這一次的設(shè)計(jì)讓我積累很多的解決實(shí)際問(wèn)題的經(jīng)驗(yàn),使我的頭腦更加靈活, 這必然會(huì)讓我在未來(lái)的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力,更強(qiáng)的溝通
56、力和理解力。 通過(guò)這次的設(shè)計(jì),我對(duì) FPGA技術(shù)、VHDL 語(yǔ)言以及 Quartus 的使用都有了深入 的了解。雖然課程設(shè)計(jì)中內(nèi)容較多,過(guò)程繁瑣,但這也造就了我豐富的收獲。我采用的 是分模塊的設(shè)計(jì)方法, 各個(gè)模塊的設(shè)計(jì)我都是隨著設(shè)計(jì)的不斷深入而不斷熟悉并學(xué)會(huì)應(yīng) 用的。以前從課堂上沒(méi)學(xué)懂的內(nèi)容經(jīng)過(guò)這次課程設(shè)計(jì)大部分都弄明白了,總之, 這次 課程設(shè)計(jì)我收獲很大。 XXVI 參考文獻(xiàn) 1 周潤(rùn)景 .基于 Quartus的 FPGA/CPLD 數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 M. 電子工業(yè)出版社 .2007,8 2 林明權(quán) 馬維旻 VHDL 數(shù)字控制系統(tǒng)設(shè)計(jì)范例 .電子工業(yè)出版社 2003,1 3 褚振勇 . FP
57、GA 設(shè)計(jì)及應(yīng)用(第三版) M.西安電子科技大學(xué)出版社 .2012,4 ,2008 4 崔葛瑾 ,沈利芳,李偉民 .基于 FPGA 的數(shù)字電路系統(tǒng)設(shè)計(jì) M. 西安:西安電子科技大學(xué)出版社 年. 5 王彥.基于 FPGA 的工程設(shè)計(jì)與應(yīng)用 M.西安:西安電子科技大學(xué)出版社 ,2007 年. 6 黃智偉 .FPGA 系統(tǒng)設(shè)計(jì)與實(shí)踐 M. 北京:電子工業(yè)出版社 ,2005年. 7 江思敏 .VHDL 數(shù)字電路及系統(tǒng)設(shè)計(jì) M. 北京:機(jī)械工業(yè)出版社 ,2006年. 8 潘松,黃繼業(yè) .EDA 技術(shù)實(shí)用教程 M.第二版 .北京:科學(xué)出版社 ,2005 年. 9 徐志軍,徐光輝 .CPLD/FPGA 的開(kāi)
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);- 類似于在芯片 -部定義的一個(gè)數(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. 本站所有資源如無(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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行業(yè)知識(shí)與職業(yè)技能的雙重培養(yǎng)
- 財(cái)務(wù)穩(wěn)健管理之道-小區(qū)超市案例分享
- 科技驅(qū)動(dòng)的居住區(qū)水環(huán)境改善方案
- 高效批改作業(yè)的流程與規(guī)范
- 跨學(xué)科教學(xué)在小學(xué)數(shù)學(xué)教育中的價(jià)值體現(xiàn)
- 數(shù)字化時(shí)代的商業(yè)廣告與市場(chǎng)推廣策略
- 二零二五年度裝飾公司員工績(jī)效考核勞動(dòng)合同
- 二零二五年度荒地流轉(zhuǎn)與生態(tài)農(nóng)業(yè)示范園區(qū)承包合同
- 2025年度物業(yè)人員雇用及社區(qū)突發(fā)事件應(yīng)對(duì)合同
- 2025年度門(mén)面出租合同終止與租賃期滿續(xù)租意向協(xié)議
- 2025年江蘇農(nóng)牧科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025江蘇連云港市贛榆城市建設(shè)發(fā)展集團(tuán)限公司招聘工作人員15人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級(jí)上學(xué)期英語(yǔ)期末試卷(含答案無(wú)聽(tīng)力原文無(wú)音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長(zhǎng)郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 《有機(jī)化學(xué)》課件-第十章 羧酸及其衍生物
- 2024年海南公務(wù)員考試申論試題(A卷)
- 中醫(yī)培訓(xùn)課件:《經(jīng)穴推拿術(shù)》
- 臨床藥師進(jìn)修匯報(bào)課件
- 北京市首都師大附中2025屆數(shù)學(xué)高三第一學(xué)期期末達(dá)標(biāo)測(cè)試試題含解析
- 2024年貴州省高職(??疲┓诸惪荚囌惺罩新毊厴I(yè)生文化綜合考試語(yǔ)文試題
評(píng)論
0/150
提交評(píng)論