基于FPGA的电子计算器设计(上)
今天給大俠帶來(lái)基于FPGA的電子計(jì)算器設(shè)計(jì),由于篇幅較長(zhǎng),分三篇。今天帶來(lái)第一篇,上篇,話不多說(shuō),上貨。
?
?
?
?
?
導(dǎo)讀?
?
?
本篇介紹了一個(gè)簡(jiǎn)單計(jì)算器的設(shè)計(jì),基于 FPGA 硬件描述語(yǔ)言 Verilog HDL,系統(tǒng)設(shè)計(jì)由計(jì)算部分、顯示部分和輸入部分四個(gè)部分組成,計(jì)算以及存儲(chǔ)主要用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)。顯示部分由六個(gè)七段譯碼管組成,分別來(lái)顯示輸入數(shù)字,輸入部分采用4*4矩陣鍵盤(pán),由0-9一共十個(gè)數(shù)字按鍵,加減乘除四個(gè)運(yùn)算符按鍵,一個(gè)等號(hào)按鍵組成的。通過(guò)外部的按鍵可以完成加、減、乘、除四種功能運(yùn)算,其結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn)。本篇為本人畢業(yè)設(shè)計(jì)部分整理,各位大俠可依據(jù)自己的需要進(jìn)行閱讀,參考學(xué)習(xí)。
第一篇內(nèi)容摘要:本篇會(huì)介紹緒論,包括Verilog的發(fā)展、Verilog的特點(diǎn)、Verilog語(yǔ)言結(jié)構(gòu)、FPGA開(kāi)發(fā)環(huán)境簡(jiǎn)介等相關(guān)內(nèi)容;還會(huì)有現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)簡(jiǎn)介,包括可編程邏輯器件、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)等相關(guān)內(nèi)容。還會(huì)介紹整體系統(tǒng)設(shè)計(jì),包括數(shù)碼管顯示、按鍵部分原理以及狀態(tài)機(jī)原理等相關(guān)內(nèi)容。
?
前言
?
在國(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)置的軟件允許用戶(hù)進(jìn)行類(lèi)似于對(duì)計(jì)算機(jī)的文件和目錄管理等操作,允許用戶(hù)對(duì)圖形界面進(jìn)行定制,同時(shí)各種新技術(shù)也被應(yīng)用到計(jì)算器里使計(jì)算器功能越來(lái)越強(qiáng)大。可以說(shuō),計(jì)算器就是一個(gè)“微微型”的計(jì)算機(jī)。國(guó)內(nèi)也有廠商利用計(jì)算器芯片開(kāi)發(fā)新的產(chǎn)品,但對(duì)計(jì)算器技術(shù)的研究、計(jì)算器芯片的設(shè)計(jì)還處于起步階段。計(jì)算器的主要功能還是在于“計(jì)算”,不妨稱(chēng)之為“低檔計(jì)算器”。即便是對(duì)這種計(jì)算器,很多廠商也只從事計(jì)算器的組裝、銷(xiāo)售業(yè)務(wù)。一些IC設(shè)計(jì)公司、芯片提供商也開(kāi)始研究計(jì)算器技術(shù)。
本次設(shè)計(jì)基于現(xiàn)場(chǎng)可編程邏輯器件FPGA進(jìn)行設(shè)計(jì),應(yīng)用硬件描述語(yǔ)言Verilog編程并在Altera公司的QuartusⅡ軟件上實(shí)現(xiàn)仿真。需要進(jìn)行計(jì)算器的常用運(yùn)算功能的實(shí)現(xiàn),通過(guò)外接鍵盤(pán)輸入、LED數(shù)碼顯示來(lái)達(dá)成運(yùn)算目的。
?
一、緒論
?
?
Verilog HDL 是一種硬件描述語(yǔ)言(HDL:Hardware Description Language),以文本形式來(lái)描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語(yǔ)言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。Verilog HDL和VHDL是世界上最流行的兩種硬件描述語(yǔ)言,都是在20世紀(jì)80年代中期開(kāi)發(fā)出來(lái)的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購(gòu)開(kāi)發(fā))。兩種HDL均為IEEE標(biāo)準(zhǔn)。
?
1.1?Verilog HDL?的發(fā)展
Verilog是由Gateway設(shè)計(jì)自動(dòng)化公司的工程師于1983年末創(chuàng)立的。當(dāng)時(shí)Gateway設(shè)計(jì)自動(dòng)化公司還叫做自動(dòng)集成設(shè)計(jì)系統(tǒng)(Automated Integrated Design Systems),1985年公司將名字改成了前者。該公司的菲爾·莫比(Phil Moor by)完成了Verilog的主要設(shè)計(jì)工作。1990年,Gateway設(shè)計(jì)自動(dòng)化被Cadence公司收購(gòu)。
1990年代初,開(kāi)放Verilog國(guó)際(Open Verilog International,OVI)組織(即現(xiàn)在的Accellera)成立,Verilog面向公有領(lǐng)域開(kāi)放。1992年,該組織尋求將Verilog納入電氣電子工程師學(xué)會(huì)標(biāo)準(zhǔn)。最終,Verilog成為了電氣電子工程師學(xué)會(huì)1364-1995標(biāo)準(zhǔn),即通常所說(shuō)的Verilog-95。
設(shè)計(jì)人員在使用這個(gè)版本的Verilog的過(guò)程中發(fā)現(xiàn)了一些可改進(jìn)之處。為了解決用戶(hù)在使用此版本Verilog過(guò)程中反映的問(wèn)題,Verilog進(jìn)行了修正和擴(kuò)展,這部分內(nèi)容后來(lái)再次被提交給電氣電子工程師學(xué)會(huì)。這個(gè)擴(kuò)展后的版本后來(lái)成為了電氣電子工程學(xué)會(huì)1364-2001標(biāo)準(zhǔn),即通常所說(shuō)的Verilog-2001。Verilog-2001是對(duì)Verilog-95的一個(gè)重大改進(jìn)版本,它具備一些新的實(shí)用功能,例如敏感列表、多維數(shù)組、生成語(yǔ)句塊、命名端口連接等。目前,Verilog-2001是Verilog的最主流版本,被大多數(shù)商業(yè)電子設(shè)計(jì)自動(dòng)化軟件包支持。
2005年,Verilog再次進(jìn)行了更新,即電氣電子工程師學(xué)會(huì)1364-2005標(biāo)準(zhǔn)。該版本只是對(duì)上一版本的細(xì)微修正。這個(gè)版本還包括了一個(gè)相對(duì)獨(dú)立的新部分,即Verilog-AMS。這個(gè)擴(kuò)展使得傳統(tǒng)的Verilog可以對(duì)集成的模擬和混合信號(hào)系統(tǒng)進(jìn)行建模。容易與電氣電子工程師學(xué)會(huì)1364-2005標(biāo)準(zhǔn)混淆的是加強(qiáng)硬件驗(yàn)證語(yǔ)言特性的SystemVerilog(電氣電子工程師學(xué)會(huì)1800-2005標(biāo)準(zhǔn)),它是Verilog-2005的一個(gè)超集,它是硬件描述語(yǔ)言、硬件驗(yàn)證語(yǔ)言(針對(duì)驗(yàn)證的需求,特別加強(qiáng)了面向?qū)ο筇匦?#xff09;的一個(gè)集成。
2009年,IEEE 1364-2005和IEEE 1800-2005一共兩個(gè)部分合并為IEEE 1800-2009,成為了一個(gè)新的、統(tǒng)一的SystemVerilog硬件描述驗(yàn)證語(yǔ)言(hardware description and verification language,HDVL)。
?
1.2?Verilog?HDL?的特點(diǎn)
描述復(fù)雜的硬件電路,設(shè)計(jì)人員總是將復(fù)雜的功能劃分為簡(jiǎn)單的功能,模塊是提供每個(gè)簡(jiǎn)單功能的基本結(jié)構(gòu)。設(shè)計(jì)人員可以采取“自頂向下”的思路,將復(fù)雜的功能模塊劃分為低層次的模塊。這一步通常是由系統(tǒng)級(jí)的總設(shè)計(jì)師完成,而低層次的模塊則由下一級(jí)的設(shè)計(jì)人員完成。自頂向下的設(shè)計(jì)方式有利于系統(tǒng)級(jí)別層次劃分和管理,并提高了效率、降低了成本。“自底向上”方式是“自頂向下”方式的逆過(guò)程。
?
1.3?Verilog?HDL?的語(yǔ)言結(jié)構(gòu)
Verilog的設(shè)計(jì)初衷是成為一種基本語(yǔ)法與C語(yǔ)言相近的硬件描述語(yǔ)言。這是因?yàn)镃語(yǔ)言在Verilog設(shè)計(jì)之初,已經(jīng)在許多領(lǐng)域得到廣泛應(yīng)用,C語(yǔ)言的許多語(yǔ)言要素已經(jīng)被許多人習(xí)慣。一種與C語(yǔ)言相似的硬件描述語(yǔ)言,可以讓電路設(shè)計(jì)人員更容易學(xué)習(xí)和接受。不過(guò),Verilog與C語(yǔ)言還是存在許多差別。另外,作為一種與普通計(jì)算機(jī)編程語(yǔ)言不同的硬件描述語(yǔ)言,它還具有一些獨(dú)特的語(yǔ)言要素,例如向量形式的線網(wǎng)和寄存器、過(guò)程中的非阻塞賦值等。總的來(lái)說(shuō),具備C語(yǔ)言的設(shè)計(jì)人員將能夠很快掌握Verilog硬件描述語(yǔ)言。下面介紹Verilog語(yǔ)言基本規(guī)范:
1)空白符
空白符是指代碼中的空格(對(duì)應(yīng)的轉(zhuǎn)義標(biāo)識(shí)符為\b)、制表符(\t)和換行(\n)。如果這些空白符出現(xiàn)在字符串里,那么它們不可忽略。除此之外,代碼中的其他空白符在編譯的時(shí)候都將會(huì)被視為分隔標(biāo)識(shí)符,即使用2個(gè)空格或者1個(gè)空格并無(wú)影響。不過(guò),在代碼中使用合適的空格,可以讓上下行代碼的外觀一致(例如使賦值運(yùn)算符位于同一個(gè)豎直列),從而提高代碼的可讀性。
2)注釋
為了方便代碼的修改或其他人的閱讀,設(shè)計(jì)人員通常會(huì)在代碼中加入注釋。與C語(yǔ)言一樣,有兩種方式書(shū)寫(xiě)注釋。第一種為多行注釋,即注釋從/*開(kāi)始,直到*/才結(jié)束;另一種為單行注釋,注釋從//開(kāi)始,從這里到這一行末尾的內(nèi)容會(huì)被系統(tǒng)識(shí)別為注釋。
3)某些電子設(shè)計(jì)自動(dòng)化工具,會(huì)識(shí)別出代碼中以特殊格式書(shū)寫(xiě)、含有某些預(yù)先約定關(guān)鍵詞的注釋,并從這些注釋所提取有用的信息。這些注釋不是供人閱讀,而是向第三方工具提供有關(guān)設(shè)計(jì)項(xiàng)目的額外信息。例如,某些邏輯綜合工具可以從注釋中讀取綜合的約束信息。
4)大小寫(xiě)敏感性
Verilog是一種大小寫(xiě)敏感的硬件描述語(yǔ)言。其中,它的所有系統(tǒng)關(guān)鍵字都是小寫(xiě)的。
5)標(biāo)識(shí)符及保留字
Verilog代碼中用來(lái)定義語(yǔ)言結(jié)構(gòu)名稱(chēng)的字符稱(chēng)為標(biāo)識(shí)符,包括變量名、端口名、模塊名等等。標(biāo)識(shí)符可以由字母、數(shù)字、下劃線以及美元符($)來(lái)表示。但是標(biāo)識(shí)符的第一個(gè)字符只能是字母、數(shù)字或者下劃線,不能為美元符,這是因?yàn)橐悦涝_(kāi)始的標(biāo)識(shí)符和系統(tǒng)任務(wù)的保留字沖突。
和其他許多編程語(yǔ)言類(lèi)似,Verilog也有許多保留字(或稱(chēng)為關(guān)鍵字),用戶(hù)定義的標(biāo)識(shí)符不能夠和保留字相同。Verilog的保留字均為小寫(xiě)。變量類(lèi)型中的wire、reg、integer等、表示過(guò)程的initial、always等,以及所有其他的系統(tǒng)任務(wù)、編譯指令,都是關(guān)鍵字。可以查閱官方文獻(xiàn)以完整的關(guān)鍵字的列表。
?
1.4?FPGA開(kāi)發(fā)環(huán)境簡(jiǎn)介
系統(tǒng)電路的軟件設(shè)計(jì)可采用工具軟件Quartus Ⅱ,用該工具軟件所支持的語(yǔ)言——硬件描述語(yǔ)言,以文本的方式進(jìn)行編程輸入。在編程時(shí)分別對(duì)控制、計(jì)數(shù)、鎖存、譯碼等電路模塊進(jìn)行Verilog文本描述,使每個(gè)電路模塊以及器件都以文本的形式出現(xiàn),然后通過(guò)編譯、波形分析、仿真、調(diào)試來(lái)完善每個(gè)器件的功能。單個(gè)器件制作完成后,然后將它們生成庫(kù)文件,并產(chǎn)生相應(yīng)的符號(hào),最后用語(yǔ)言將各個(gè)已生成庫(kù)文件的器件的各個(gè)端口連接在一起,從而形成了系統(tǒng)主電路的軟件結(jié)構(gòu)。在連接器件時(shí),也可以采用圖形輸入方式,即在圖形輸入界面中調(diào)出先制作好的庫(kù)文件器件符號(hào),再將每個(gè)器件符號(hào)的各端口直接連線,從而構(gòu)成系統(tǒng)主電路。在上述工作的基礎(chǔ)上,再進(jìn)行波形分析、仿真調(diào)試便完成整個(gè)軟件設(shè)計(jì)。
?
?
二、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)簡(jiǎn)介
?
?
2.1?可編程邏輯器件簡(jiǎn)介
可編程邏輯器件(PLD——Programmable Logic Devices)是一種由用戶(hù)編程以實(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到FPGA、ispLSI等高密度PLD的發(fā)展過(guò)程。在此期間,PLD的集成度、速度不斷提高,功能不斷增強(qiáng),結(jié)構(gòu)趨于更合理,使用變得更靈活方便。PLD的出現(xiàn)打破了由中小型通用型集成電路和大規(guī)模專(zhuān)用集成電路壟斷的局面。與中小規(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種標(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(Complex Programmable Logic Device)是萬(wàn)門(mén)以上的復(fù)雜可編程邏輯器件,采用CMOS EPROM、EEPROM、快閃存儲(chǔ)器和SRAM等編程技術(shù),從而構(gòu)成高密度、高速度和低功耗的可編程邏輯器件。
?
2.2?現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)
FPGA是現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array)的簡(jiǎn)稱(chēng)。FPGA器件及其開(kāi)發(fā)系統(tǒng)是開(kāi)發(fā)大規(guī)模數(shù)字集成電路的新技術(shù)。它利用計(jì)算機(jī)輔助設(shè)計(jì),繪制出實(shí)現(xiàn)用戶(hù)邏輯的原理圖、編輯布爾方程或用硬件描述語(yǔ)言等方式作為設(shè)計(jì)輸入;然后經(jīng)一系列轉(zhuǎn)換程序、自動(dòng)布局布線、模擬仿真的過(guò)程;最后生成配置FPGA器件的數(shù)據(jù)文件,對(duì)FPGA器件初始化。這樣就實(shí)現(xiàn)了滿(mǎn)足用戶(hù)要求的專(zhuān)用集成電路,真正達(dá)到了用戶(hù)自行設(shè)計(jì)、自行研制和自行生產(chǎn)集成電路的目的。
FPGA是一種半定制的集成電路,其特點(diǎn)是直接面向用戶(hù),具有極大的靈活性和通用性,開(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)稱(chēng)為L(zhǎng)UT,LUT本質(zhì)上是一個(gè)RAM。FPGA使用4輸入的LUT,所以每一個(gè)LUT 可以看成一個(gè)有4位地址線的16*1的RAM。當(dāng)用戶(hù)通過(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)容,然后輸出即可。
?
2.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ǔ)器)組成,這三種可編程電路是:可編程邏輯陣列LAB(Logic Array Block),輸入輸出模塊IOB(I/O Block)和互連資源IR(Interconnect Resource)。FPGA可編程邏輯形成的方法是基于查找表LUT(Look Up Table)結(jié)構(gòu)的,LUT是可編程的最小邏輯構(gòu)成單元。
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é)構(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è)級(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的資源利用率。
在ACEK系列芯片的結(jié)構(gòu)中還提供了兩種專(zhuān)用的高速數(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)衡考慮,在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)以減小通過(guò)器件的時(shí)間偏差。此外,ACEK器件還提供了若干專(zhuān)用輸入引腳,這些引腳用來(lái)驅(qū)動(dòng)IOE寄存器的控制端,使用了專(zhuān)用的布線通道,以便具有比快速通道更短的延遲和更小的偏差。
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è)專(zhuān)用的“行互連”,“行互連”可以驅(qū)動(dòng)。I/O引腳或饋送到器件中的其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),它具有共同的輸入、互連和控制信號(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ì)。
?
2.2.2?基于EDA平臺(tái)的FPGA開(kāi)發(fā)流程
一個(gè)完整、典型的EDA設(shè)計(jì)流程即是自頂向下設(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è)計(jì)輸入
基于EDA軟件平臺(tái)的FPGA開(kāi)發(fā)流程,一般有兩種設(shè)計(jì)輸入方式:圖形輸入和硬件描述語(yǔ)言文本輸入。下面將重點(diǎn)介紹采用Verilog硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)輸入方法,這是我們?cè)谠O(shè)計(jì)開(kāi)發(fā)過(guò)程中采用的主要方法。Verilog作為電子工程主流硬件描述語(yǔ)言,是EDA技術(shù)的重要組成部分。它于1983年由美國(guó)國(guó)防部創(chuàng)建,由IEEE協(xié)會(huì)進(jìn)一步發(fā)展并在1987年成為IEEE國(guó)際標(biāo)準(zhǔn)。自IEEE協(xié)會(huì)公布了Verilog標(biāo)準(zhǔn)版本(IEEE Std 1076)之后,各大EDA公司相繼推出支持Verilog語(yǔ)言的開(kāi)發(fā)環(huán)境。從此Verilog作為硬件描述語(yǔ)言的業(yè)界標(biāo)準(zhǔn)之一,在電子設(shè)計(jì)領(lǐng)域得到廣泛應(yīng)用,并逐步成為事實(shí)上的通用硬件描述語(yǔ)言。
Verilog語(yǔ)言具有很強(qiáng)的電路建模能力,具有良好的電路行為描述和系統(tǒng)描述的能力,能從多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述;Verilog語(yǔ)言還具有與硬件電路無(wú)關(guān)和設(shè)計(jì)平臺(tái)無(wú)關(guān)的特性,并且在語(yǔ)言易讀性和層次化結(jié)構(gòu)化設(shè)計(jì)方面表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。這些特性使得Verilog語(yǔ)言在支持自頂向下的EDA設(shè)計(jì)流程方面顯得游刃有余。因此,采用Verilog進(jìn)行電子系統(tǒng)設(shè)計(jì)可以讓設(shè)計(jì)者專(zhuān)心致力于其功能的實(shí)現(xiàn),而不需要對(duì)不影響功能的與工藝相關(guān)的問(wèn)題花費(fèi)過(guò)多的時(shí)間和精力,提高了設(shè)計(jì)效率和可靠性。
采用Verilog文本設(shè)計(jì)輸入與傳統(tǒng)的計(jì)算機(jī)軟件語(yǔ)言編輯輸入基本上一樣,就是使用Verilog描述數(shù)字系統(tǒng)的功能,進(jìn)行文本編輯輸入。事實(shí)上,純粹的Verilog設(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)上編輯輸入Verilog文本,依據(jù)給定電路結(jié)構(gòu)組件和約束控制條件進(jìn)行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門(mén)級(jí)電路甚至更底層的電路描述網(wǎng)表文件。因此設(shè)計(jì)綜合的過(guò)程就是將軟件設(shè)計(jì)的Verilog描述文本與硬件結(jié)構(gòu)掛鉤,是軟件描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟,是文本描述與硬件實(shí)現(xiàn)之間的一座橋梁。
3)結(jié)構(gòu)適配
適配器也稱(chēng)為結(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)行邏輯映射操作,其中包括底層器件配置、邏輯分割、邏輯優(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)行模擬測(cè)試。主要用于測(cè)試設(shè)計(jì)項(xiàng)目的邏輯功能,用以了解其實(shí)現(xiàn)的功能是否滿(mǎn)足設(shè)計(jì)要求,在功能仿真的過(guò)程不涉及任何具體器件的硬件特性。
時(shí)序仿真:當(dāng)設(shè)計(jì)項(xiàng)目通過(guò)功能仿真初步確定滿(mǎn)足設(shè)計(jì)要求后,需要綁定具體器件進(jìn)行時(shí)序仿真。時(shí)序仿真就是接近真實(shí)器件運(yùn)行特性的仿真,仿真文件包含了器件硬件特性參數(shù),因而仿真精度高。
5)編程下載
把適配后生成的下載或配置文件,通過(guò)編程器或編程電纜向FPGA進(jìn)行下載,以便進(jìn)行硬件調(diào)試和驗(yàn)證,從而實(shí)現(xiàn)滿(mǎn)足設(shè)計(jì)要求的電子系統(tǒng)。
?
?
三、整體設(shè)計(jì)原理介紹
?
?
FPGA具有運(yùn)算速度快,編程簡(jiǎn)易等優(yōu)點(diǎn),它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它還是作為專(zhuān)用集成電路領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。所以我采用FPGA原理設(shè)計(jì)了本次計(jì)算器,主要包括數(shù)碼管部分,按鍵電路部分以及運(yùn)算器部分,設(shè)計(jì)方案基本原理如下。
?
3.1?數(shù)碼管顯示
數(shù)碼管的顯示分為兩種,靜態(tài)顯示和動(dòng)態(tài)顯示,在這里我們使用的是動(dòng)態(tài)顯示。動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管是有效的。這樣一來(lái),就沒(méi)有為每一位數(shù)碼管配置一個(gè)鎖存器的必要,從而就會(huì)大大簡(jiǎn)化了硬件電路。選亮的數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂的動(dòng)態(tài)掃描顯示就是輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用,使人的感覺(jué)好像各位數(shù)碼管在同時(shí)都在顯示。動(dòng)態(tài)的顯示的亮度要比靜態(tài)的顯示略差了一些,因而我們?cè)谶x擇需要的限流電阻應(yīng)小于靜態(tài)顯示電路中的。
?
3.2?按鍵部分原理
我們采用了4*4矩陣鍵盤(pán)掃描在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I(mǎi)/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線的應(yīng)用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),我們?cè)谛枰逆I數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。
矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過(guò)了電阻連接正電源,并將行線所接的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸入端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。下面我們介紹行掃描法。
行掃描法又稱(chēng)為逐行(或列)掃描查詢(xún)法,是一種最常用的按鍵識(shí)別方法,介紹過(guò)程如下。
首先判斷鍵盤(pán)中有無(wú)鍵按下:將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有的列線均是高電平,則鍵盤(pán)中無(wú)鍵按下。
其次判斷閉合鍵所存在的位置:在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,就是在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
?
3.3?狀態(tài)機(jī)原理
運(yùn)算部分我們主要應(yīng)用了狀態(tài)機(jī)進(jìn)行運(yùn)算和存儲(chǔ)的,主要是有限狀態(tài)機(jī),下面對(duì)有限狀態(tài)機(jī)進(jìn)行簡(jiǎn)單的介紹。
狀態(tài)機(jī)簡(jiǎn)寫(xiě)為FSM(Finite State Machine),主要分為2大類(lèi):第一類(lèi),若輸出只和狀態(tài)有關(guān)而與輸入無(wú)關(guān),則稱(chēng)為Moore狀態(tài)機(jī);第二類(lèi),輸出不僅和狀態(tài)有關(guān)而且和輸入有關(guān)系,則稱(chēng)為Mealy狀態(tài)機(jī)。要特別注意的是,因?yàn)镸ealy狀態(tài)機(jī)和輸入有關(guān),輸出會(huì)受到輸入的干擾,所以可能會(huì)產(chǎn)生毛刺(Glitch)現(xiàn)象,使用時(shí)應(yīng)當(dāng)注意。事實(shí)上現(xiàn)在市面上有很多EDA工具可以很方便的將狀態(tài)圖的描述轉(zhuǎn)換成可以綜合的Verilog程序代碼。
關(guān)于狀態(tài)機(jī)的一個(gè)極度確切的描述是它是一個(gè)有向圖形,由一組節(jié)點(diǎn)和一組相應(yīng)的轉(zhuǎn)移函數(shù)組成。狀態(tài)機(jī)通過(guò)響應(yīng)一系列事件而“運(yùn)行”。每個(gè)事件都在屬于“當(dāng)前”節(jié)點(diǎn)的轉(zhuǎn)移函數(shù)的控制范圍內(nèi),其中函數(shù)的范圍是節(jié)點(diǎn)的一個(gè)子集。函數(shù)返回“下一個(gè)”(也許是同一個(gè))節(jié)點(diǎn)。這些節(jié)點(diǎn)中至少有一個(gè)必須是終態(tài)。當(dāng)?shù)竭_(dá)終態(tài),狀態(tài)機(jī)停止。
包含一組狀態(tài)集(states)、一個(gè)起始狀態(tài)(start state)、一組輸入符號(hào)集(alphabet)、一個(gè)映射輸入符號(hào)和當(dāng)前狀態(tài)到下一狀態(tài)的轉(zhuǎn)換函數(shù)(transition function)的計(jì)算模型。當(dāng)輸入符號(hào)串,模型隨即進(jìn)入起始狀態(tài)。它要改變到新的狀態(tài),依賴(lài)于轉(zhuǎn)換函數(shù)。在有限狀態(tài)機(jī)中,會(huì)有有許多變量,例如,狀態(tài)機(jī)有很多與動(dòng)作(actions)轉(zhuǎn)換(Mealy機(jī))或狀態(tài)(摩爾機(jī))關(guān)聯(lián)的動(dòng)作,多重起始狀態(tài),基于沒(méi)有輸入符號(hào)的轉(zhuǎn)換,或者指定符號(hào)和狀態(tài)(非定有限狀態(tài)機(jī))的多個(gè)轉(zhuǎn)換,指派給接收狀態(tài)(識(shí)別者)的一個(gè)或多個(gè)狀態(tài),等等。
傳統(tǒng)應(yīng)用程序的控制流程基本是順序的:遵循事先設(shè)定的邏輯,從頭到尾地執(zhí)行。很少有事件能改變標(biāo)準(zhǔn)執(zhí)行流程;而且這些事件主要涉及異常情況。“命令行實(shí)用程序”是這種傳統(tǒng)應(yīng)用程序的典型例子。
另一類(lèi)應(yīng)用程序由外部發(fā)生的事件來(lái)驅(qū)動(dòng)——換言之,事件在應(yīng)用程序之外生成,無(wú)法由應(yīng)用程序或程序員來(lái)控制。具體需要執(zhí)行的代碼取決于接收到的事件,或者它相對(duì)于其他事件的抵達(dá)時(shí)間。所以,控制流程既不能是順序的,也不能是事先設(shè)定好的,因?yàn)樗蕾?lài)于外部事件。事件驅(qū)動(dòng)的GUI應(yīng)用程序是這種應(yīng)用程序的典型例子,它們由命令和選擇(也就是用戶(hù)造成的事件)來(lái)驅(qū)動(dòng)。
Web應(yīng)用程序由提交的表單和用戶(hù)請(qǐng)求的網(wǎng)頁(yè)來(lái)驅(qū)動(dòng),它們也可劃歸到上述類(lèi)別。但是,GUI應(yīng)用程序?qū)τ诮邮盏降氖录杂幸欢ǔ潭鹊目刂?#xff0c;因?yàn)檫@些事件要依賴(lài)于向用戶(hù)顯示的窗口和控件,而窗口和控件是由程序員控制的。Web應(yīng)用程序則不然,因?yàn)橐坏┯脩?hù)采取不在預(yù)料之中的操作(比如使用瀏覽器的歷史記錄、手工輸入鏈接以及模擬一次表單提交等等),就很容易打亂設(shè)計(jì)好的應(yīng)用程序邏輯。
顯然,必須采取不同的技術(shù)來(lái)處理這些情況。它能處理任何順序的事件,并能提供有意義的響應(yīng),即使這些事件發(fā)生的順序和預(yù)計(jì)的不同。有限狀態(tài)機(jī)正是為了滿(mǎn)足這方面的要求而設(shè)計(jì)的。
有限狀態(tài)機(jī)是一種概念性機(jī)器,它能采取某種操作來(lái)響應(yīng)一個(gè)外部事件。具體采取的操作不僅能取決于接收到的事件,還能取決于各個(gè)事件的相對(duì)發(fā)生順序。之所以能夠做到這一點(diǎn),是因?yàn)闄C(jī)器能跟蹤一個(gè)內(nèi)部狀態(tài),它會(huì)在收到事件后進(jìn)行更新。為一個(gè)事件而響應(yīng)的行動(dòng)不僅取決于事件本身,還取決于機(jī)器的內(nèi)部狀態(tài)。另外,采取的行動(dòng)還會(huì)決定并更新機(jī)器的狀態(tài)。這樣一來(lái),任何邏輯都可建模成一系列事件/狀態(tài)組合。
狀態(tài)機(jī)可歸納為4個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作、次態(tài)。這樣的歸納,主要是出于對(duì)狀態(tài)機(jī)的內(nèi)在因果關(guān)系的考慮。“現(xiàn)態(tài)”和“條件”是因,“動(dòng)作”和“次態(tài)”是果。
有限狀態(tài)機(jī)用于描述電路模型的時(shí)序行為,所有的輸入都可以看成是模型的激勵(lì),所有的輸出可以看成是模型對(duì)激勵(lì)的響應(yīng)。CLK提供時(shí)間基準(zhǔn)。
圖3-1 抽象時(shí)序電路的行為模型
Figure 3-1 abstract behavior model of sequential circuits
?
時(shí)序電路模型可以表示為:R=F(t),這里F(t)是模型行為的描述。當(dāng)電路的輸出僅僅與狀態(tài)時(shí)間有關(guān)時(shí)候,所描述的模型為摩爾型狀態(tài)機(jī);當(dāng)電路的輸出不僅與時(shí)間有關(guān),也與當(dāng)前的輸入信號(hào)有關(guān)時(shí),稱(chēng)為米利型狀態(tài)機(jī)。
?
?
?
本篇到此結(jié)束,下一篇帶來(lái)基于FPGA的電子計(jì)算器設(shè)計(jì)(中),介紹計(jì)算器設(shè)計(jì)的電路部分以及總體代碼設(shè)計(jì)等相關(guān)內(nèi)容。
?
?
END
?
后續(xù)會(huì)持續(xù)更新,帶來(lái)Vivado、 ISE、Quartus II 、candence等安裝相關(guān)設(shè)計(jì)教程,學(xué)習(xí)資源、項(xiàng)目資源、好文推薦等,希望大俠持續(xù)關(guān)注。
大俠們,江湖偌大,繼續(xù)闖蕩,愿一切安好,有緣再見(jiàn)!
?
?
?
?
?
?
?
?
精彩推薦
?
?
?
?
畢設(shè):基于FPGA的FIR數(shù)字濾波器設(shè)計(jì)
基于FPGA的千兆以太網(wǎng)設(shè)計(jì)
在word文檔中添加“原汁原味”代碼
“FPGA產(chǎn)品設(shè)計(jì)與研發(fā) ” 零基礎(chǔ)入門(mén)及就業(yè)
總結(jié)
以上是生活随笔為你收集整理的基于FPGA的电子计算器设计(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CPLD 是什么?
- 下一篇: 直流电机的电流、转速、电压的关系