前 言
隨著人類社會(huì)的高速發(fā)展,電子行業(yè)也隨之迅猛的發(fā)展,這也使得人們?cè)絹?lái)越想方設(shè)法的是自己更加方便、輕松的生活,例如:自從有了電視遙控器開(kāi)啟電視,更改電視頻道,我們?cè)僖膊挥门軄?lái)跑去用手改換頻道;自從有了全自動(dòng)洗衣機(jī),我們?cè)僖膊挥冒胱詣?dòng)洗衣機(jī)或者人工搓衣板去清洗衣服;自從有了交通燈,不僅省去了很多人力去指揮交通,而且使交通更加井然有序。當(dāng)然,當(dāng)具有定時(shí)、顯示、加減分等多功能性的搶答器擺在我們面前時(shí),我想人們不會(huì)用舉手的方式或者舉牌的方式進(jìn)行搶答了。
如今無(wú)論是什么場(chǎng)合,只要舉辦搶答比賽,我們都能見(jiàn)到搶答器的使用,因?yàn)樗钥陀^的電子電路進(jìn)行狀態(tài)判斷,避免了競(jìng)賽中出現(xiàn)的人為的失誤,或者由于某些原因造成的不公平。搶答器能夠準(zhǔn)確、公正的判斷誰(shuí)是第一搶答者,并且直觀的指出誰(shuí)是第一搶答者。由于其附加的定時(shí)、加減分等功能則能夠省去部分人力,且更準(zhǔn)確的規(guī)范時(shí)間。
現(xiàn)在市面上也存在著各種各樣的搶答器,但主要流行的是單片機(jī)搶答器和數(shù)字搶答器,雖然這兩款搶答器都能實(shí)現(xiàn)搶答器的基本功能,但是都或多或少的存在著一些缺點(diǎn)。
單片機(jī)搶答器的設(shè)計(jì)。控制系統(tǒng)主要由單片機(jī)應(yīng)用電路、存儲(chǔ)器接口電路、顯示接口電路組成。其中單片機(jī)89C51是系統(tǒng)工作的核心,它主要負(fù)責(zé)控制各個(gè)部分協(xié)調(diào)工作.。雖然單片機(jī)實(shí)現(xiàn)起來(lái)相當(dāng)靈活,但隨著搶答器數(shù)組的增加則存在著I/O口不足的問(wèn)題。這就不能為以后進(jìn)行搶答器組數(shù)的增加進(jìn)行改進(jìn)了。
數(shù)字搶答器的設(shè)計(jì)。數(shù)字搶答器電路主要是由電子元器件組成,數(shù)字搶答器由主體電路與擴(kuò)展電路組成。雖然數(shù)字電路主要有元器件組成,成本較為便宜,且小規(guī)模數(shù)字邏輯設(shè)計(jì)思路簡(jiǎn)單,但是電路實(shí)現(xiàn)起來(lái)比較麻煩:進(jìn)行電路規(guī)劃,用protel99畫(huà)出電路的PCB板,硬件的焊接與調(diào)試等等程序步驟。總之硬件設(shè)計(jì)不僅工作量大,而且要求也高。
介于上面兩款搶答器的不足點(diǎn),本次設(shè)計(jì)則采用FPGA現(xiàn)場(chǎng)可編程技術(shù),這樣就避免了硬件的焊接與調(diào)試,同時(shí)由于FPGA的I/O端口豐富,可以在設(shè)計(jì)的基礎(chǔ)上略加修改實(shí)現(xiàn)多組輸入的搶答器,增強(qiáng)了系統(tǒng)的靈活性。
本文介紹了一種采用EDA技術(shù),基于FPGA并在QuartusⅡ工具軟件環(huán)境下使用Verilog硬件描述語(yǔ)言編寫(xiě)的數(shù)碼管顯示4路搶答器的電路設(shè)計(jì)、設(shè)計(jì)思路以及實(shí)現(xiàn)功能。
本次設(shè)計(jì)以EP2C8Q208為核心,完成主持人的控制與參賽隊(duì)伍的搶答功能;使用Quartus II軟件用Verilog HDL完成代碼編寫(xiě),然后用Quartus II軟件實(shí)現(xiàn)正確的波形仿真作為主要的技術(shù)指標(biāo)。
根據(jù)本次設(shè)計(jì)的技術(shù)要求,特設(shè)計(jì)了以下各種模塊來(lái)實(shí)現(xiàn)搶答器的基本功能:搶答判別模塊,計(jì)時(shí)模塊,分頻器模塊,計(jì)分模塊,鎖存器模塊,數(shù)碼管驅(qū)動(dòng)模塊等等。經(jīng)過(guò)編譯及其仿真所設(shè)計(jì)的程序,該設(shè)計(jì)的搶答器基本能夠?qū)崿F(xiàn)此次設(shè)計(jì)的要求,從而完成了搶答器應(yīng)具備的功能。
EDA是電子設(shè)計(jì)自動(dòng)化(Electronic DesignAutomation)的縮寫(xiě),在20世紀(jì)90年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測(cè)試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來(lái)的。
EDA技術(shù)是指以計(jì)算機(jī)為工作平臺(tái),融合了應(yīng)用電子技術(shù)、計(jì)算機(jī)技術(shù)、信息處理及智能化技術(shù)的最新成果,進(jìn)行電子產(chǎn)品的自動(dòng)設(shè)計(jì)。
利用EDA工具,電子設(shè)計(jì)師可以從概念、算法、協(xié)議等開(kāi)始設(shè)計(jì)電子系統(tǒng),大量工作可以通過(guò)計(jì)算機(jī)完成,并可以將電子產(chǎn)品從電路設(shè)計(jì)、性能分析到設(shè)計(jì)出IC版圖或PCB版圖的整個(gè)過(guò)程的計(jì)算機(jī)上自動(dòng)處理完成。
EDA工具軟件可大致可分為芯片設(shè)計(jì)輔助軟件、可編程芯片輔助設(shè)計(jì)軟件、系統(tǒng)設(shè)計(jì)輔助軟件等三類。
目前進(jìn)入我國(guó)并具有廣泛影響的EDA軟件是系統(tǒng)設(shè)計(jì)軟件輔助類和可編程芯片輔助設(shè)計(jì)軟件:Protel、Altium Designer、PSPICE、multisim12(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim、ISE、modelsim、Matlab等等。這些工具都有較強(qiáng)的功能,一般可用于幾個(gè)方面,例如很多軟件都可以進(jìn)行電路設(shè)計(jì)與仿真,同時(shí)還可以進(jìn)行PCB自動(dòng)布局布線,可輸出多種網(wǎng)表文件與第三方軟件接口。
利用EDA技術(shù)進(jìn)行電子系統(tǒng)的設(shè)計(jì),具有以下特點(diǎn):
- 用軟件的方式設(shè)計(jì)硬件;用軟件方式設(shè)計(jì)的系統(tǒng)到硬件系統(tǒng)的轉(zhuǎn)換是由有關(guān)的考法軟件自動(dòng)完成的;
- 設(shè)計(jì)過(guò)程中可用有關(guān)軟件進(jìn)行各種仿真;
- 系統(tǒng)可現(xiàn)場(chǎng)編輯,在線升級(jí);
- 整個(gè)系統(tǒng)可集中在一個(gè)芯片上,體積小、功耗低、可靠性高;
- 從以前的“組合設(shè)計(jì)”轉(zhuǎn)向真正的“自由設(shè)計(jì)”;
- 設(shè)計(jì)的移植性好,效率高;
- 非常適合分工設(shè)計(jì),團(tuán)體協(xié)作。
因此,EDA技術(shù)是現(xiàn)代電子設(shè)計(jì)的發(fā)展趨勢(shì)。
現(xiàn)行的搶答的實(shí)現(xiàn)方案主要有兩種:一種則是使用單片機(jī),另一種是小規(guī)模數(shù)字邏輯芯片和觸發(fā)器。
單片機(jī)搶答器的設(shè)計(jì)。控制系統(tǒng)主要由單片機(jī)應(yīng)用電路、存儲(chǔ)器接口電路、顯示接口電路組成。其中單片機(jī)AT89C51是系統(tǒng)工作的核心,它主要負(fù)責(zé)控制各個(gè)部分協(xié)調(diào)工作.。然而現(xiàn)如今單片機(jī)組成的搶答器也存在著一些缺點(diǎn),或者應(yīng)該說(shuō)是不足點(diǎn),雖然單片機(jī)實(shí)現(xiàn)起來(lái)相當(dāng)靈活,但隨著搶答器數(shù)組的增加則存在著I/O口不足的問(wèn)題。這就不能為以后進(jìn)行搶答器組數(shù)的增加進(jìn)行改進(jìn)了。
數(shù)字搶答器的設(shè)計(jì)。數(shù)字搶答器電路主要是由電子元器件組成,數(shù)字搶答器由主體電路與擴(kuò)展電路組成。優(yōu)先編碼器、鎖存器、譯碼電路將參賽隊(duì)的輸入信號(hào)在顯示器上輸出;用控制電路和主持人開(kāi)關(guān)啟動(dòng)報(bào)警電路,以上兩部分組成主體電路。通過(guò)定時(shí)電路和譯碼電路將脈沖產(chǎn)生的信號(hào)在顯示器上輸出實(shí)現(xiàn)計(jì)時(shí)功能,構(gòu)成擴(kuò)展電路。雖然數(shù)字電路主要有元器件組成,成本較為便宜,且小規(guī)模數(shù)字邏輯設(shè)計(jì)思路簡(jiǎn)單,但是電路實(shí)現(xiàn)起來(lái)比較麻煩:進(jìn)行電路規(guī)劃,用protel99畫(huà)出電路的PCB板,硬件的焊接與調(diào)試等等程序步驟?傊布O(shè)計(jì)不僅工作量大,而且要求也高。
現(xiàn)存的搶答器設(shè)計(jì)方案雖然都能實(shí)現(xiàn)搶答器的功能,但是又由于它們自身缺點(diǎn)的限制,有些方面很難或者說(shuō)很麻煩實(shí)現(xiàn)。然而由于FPGA本身一些的特點(diǎn)、優(yōu)點(diǎn)能夠使基于FPGA制作的搶答器克服這些問(wèn)題。FPGA作為新技術(shù)具有以下優(yōu)點(diǎn):
(1) FPGA的管腳多,容易實(shí)現(xiàn)大規(guī)模系統(tǒng)。
(2) FPGA的運(yùn)行速度快。
(3) FPGA內(nèi)部程序并行運(yùn)行,有處理更復(fù)雜的功能。
(4) FPGA有大量的軟核,能夠進(jìn)行二次開(kāi)發(fā)。
所以學(xué)習(xí)FPGA并利用FPGA進(jìn)行搶答器的設(shè)計(jì)是十分必要的。
本次設(shè)計(jì)的搶答器能夠同時(shí)供應(yīng)4位選手或者4個(gè)代表隊(duì)進(jìn)行搶答比賽,分別使用4個(gè)按鈕a,b,c,d表示。同時(shí)需要設(shè)置系統(tǒng)復(fù)位和搶答控制開(kāi)關(guān),這需由主持人控制。主持人在允許搶答的情況下,計(jì)時(shí)器開(kāi)始從30s開(kāi)始倒計(jì)時(shí),直到有人搶答成功后,由鎖存器將時(shí)間鎖存住,此時(shí)數(shù)碼管上將顯示剩余時(shí)間及搶答成功選手號(hào)碼,同時(shí)對(duì)應(yīng)選手的LED燈也被點(diǎn)亮。在判別選手是否回答正確后,由主持人控制加減按鈕進(jìn)行給分。在一輪比賽結(jié)束后,主持人按下復(fù)位按鈕,則除了計(jì)分模塊外,其他模塊都復(fù)位為初始時(shí)刻,為下一輪的比賽做好準(zhǔn)備。
FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。
其主要特點(diǎn)如下:
- 采用FPGA設(shè)計(jì)ASIC電路(專用集成電路),用戶不需要投片生產(chǎn),就能得到合用的芯片。
- FPGA可做其它全定制或半定制ASIC電路的中試樣片。
- FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。
- FPGA是ASIC電路中設(shè)計(jì)周期最短、開(kāi)發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。
- FPGA采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。
可以說(shuō),F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。
FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。
加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。
目前以硬件描述語(yǔ)言(Verilog HDL或 VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過(guò)簡(jiǎn) 單的綜合與布局,快速的燒錄至FPGA上進(jìn)行測(cè)試,是現(xiàn)代IC設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些可編輯元件可以被用來(lái)實(shí)現(xiàn)一些基本的邏輯門(mén)電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。
FPGA一般來(lái)說(shuō)比ASIC(專用集成芯片)的速度要慢,無(wú)法完成復(fù)雜的設(shè)計(jì),但是功耗較低。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,所以這些設(shè)計(jì)的開(kāi)發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。
根據(jù)市場(chǎng)上對(duì)FPGA的需要,則FPGA的主要分類有以下幾種:
1) 按邏輯功能塊的大小分類
可編程邏輯塊是FPGA的基本邏輯構(gòu)造單元。按照邏輯功能塊的大小不同,可將FPGA分為細(xì)粒度結(jié)構(gòu)和粗粒度結(jié)構(gòu)兩類。
細(xì)粒度FPGA的邏輯功能塊一般較小,僅由很小的幾個(gè)晶體管組成,非常類似于半定制門(mén)陣列的基本單元,其優(yōu)點(diǎn)是功能塊的資源可以被完全利用,缺點(diǎn)是完成復(fù)雜的邏輯功能需要大量的連線和開(kāi)關(guān),因而速度慢;粗粒度FPGA的邏輯塊規(guī)模大,功能強(qiáng),完成復(fù)雜邏輯只需較少的功能塊和內(nèi)部連線,因而能獲得較好的性能,缺點(diǎn)是功能塊的資源有時(shí)不能被充分利用。
近年來(lái)隨著工藝的不斷改進(jìn),F(xiàn)PGA的集成度不斷提高,硬件描述語(yǔ)言(HDL)的設(shè)計(jì)方法得到了廣泛應(yīng)用。由于大多數(shù)邏輯綜合工具是針對(duì)門(mén)陣列的結(jié)構(gòu)開(kāi)發(fā)的,細(xì)粒度的FPGA較粗粒度的FPGA可以得到更好的邏輯綜合結(jié)果,因此許多廠家開(kāi)發(fā)出了一些具有更高集成度的細(xì)粒度FPGA,如Xilinx公司采用MicroVia技術(shù)的一次編程反熔絲結(jié)構(gòu)的XC8100系列,GateField公司采用閃速EPROM 控制開(kāi)關(guān)元件的可再編程GF100K系列等,它們的邏輯功能塊規(guī)模相對(duì)都較小。
2) 按互連結(jié)構(gòu)分類
根據(jù)FPGA內(nèi)部的連線結(jié)構(gòu)不同,可將其分為分段互連型和連續(xù)互連型兩類。
分段互連型FPGA中有不同長(zhǎng)度的多種金屬線,各金屬線段之間通過(guò)開(kāi)關(guān)矩陣或反熔絲編程連接。這種連線結(jié)構(gòu)走線靈活,有多種可行方案,但走線延時(shí)與布局布線的具體處理過(guò)程有關(guān),在設(shè)計(jì)完成前無(wú)法預(yù)測(cè),設(shè)計(jì)修改將引起延時(shí)性能發(fā)生變化。
連續(xù)互連型FPGA是利用相同長(zhǎng)度的金屬線,通常是貫穿于整個(gè)芯片的長(zhǎng)線來(lái)實(shí)現(xiàn)邏輯功能塊之間的互連,連接與距離遠(yuǎn)近無(wú)關(guān)。在這種連線結(jié)構(gòu)中,不同位置邏輯單元的連接線是確定的,因而布線延時(shí)是固定和可預(yù)測(cè)的。
3) 按編程特性分類
根據(jù)采用的開(kāi)關(guān)元件的不同,F(xiàn)PGA可分為一次編程型和可重復(fù)編程型兩類。
一次編程型FPGA采用反熔絲開(kāi)關(guān)元件,其工藝技術(shù)決定了這種器件具有體積小、集成度高、互連線特性阻抗低、寄生電容小及可獲得較高的速度等優(yōu)點(diǎn);此外,它還有加密位、反拷貝、抗輻射抗干擾、不需外接PROM或EPROM等特點(diǎn)。但它只能一次編程,一旦將設(shè)計(jì)數(shù)據(jù)寫(xiě)入芯片后,就不能再修改設(shè)計(jì),因此比較適合于定型產(chǎn)品及大批量應(yīng)用。
可重復(fù)編程型FPGA采用SRAM開(kāi)關(guān)元件或快閃EPROM控制的開(kāi)關(guān)元件。FPGA芯片中,每個(gè)邏輯塊的功能以及它們之間的互連模式由存儲(chǔ)在芯片中的SRAM或快閃EPROM中的數(shù)據(jù)決定。SRAM型開(kāi)關(guān)的FPGA是易失性的,每次重新加電,F(xiàn)PGA都要重新裝入配置數(shù)據(jù)。SRAM型FPGA的突出優(yōu)點(diǎn)是可反復(fù)編程,系統(tǒng)上電時(shí),給FPGA加載不同的配置數(shù)據(jù),即可令其完成不同的硬件功能。這種配置的改變甚至可以在系統(tǒng)的運(yùn)行中進(jìn)行,實(shí)現(xiàn)系統(tǒng)功能的動(dòng)態(tài)重構(gòu)。采用快閃EPROM控制開(kāi)關(guān)的FPGA具有非易失性和可重復(fù)編程的雙重優(yōu)點(diǎn),但在再編程的靈活性上較SRAM型FPGA差一些,不能實(shí)現(xiàn)動(dòng)態(tài)重構(gòu)。此外,其靜態(tài)功耗較反熔絲型及SRAM型的FPGA高。
FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和門(mén)陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來(lái)實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來(lái)驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過(guò)向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來(lái)實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無(wú)限次的編程。
FPGA是在PAL、GAL、EPLD、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為ASIC領(lǐng)域中的一種半定制電路而出現(xiàn)的,即解決了定制電路的不足,又克服了原有可編程器件門(mén)電路有限的缺點(diǎn)。
由于FPGA需要被反復(fù)燒寫(xiě),它實(shí)現(xiàn)組合邏輯的基本結(jié)構(gòu)不可能像ASIC那樣通過(guò)固定的與非門(mén)來(lái)完成,而只能采用一種易于反復(fù)配置的結(jié)構(gòu)。查找表可以很好地滿足這一要求,目前主流FPGA都采用了基于SRAM工藝的查找表結(jié)構(gòu),也有一些軍品和宇航級(jí)FPGA采用Flash或者熔絲與反熔絲工藝的查找表結(jié)構(gòu)。通過(guò)燒寫(xiě)文件改變查找表內(nèi)容的方法來(lái)實(shí)現(xiàn)對(duì)FPGA的重復(fù)配置。
根據(jù)數(shù)字電路的基本知識(shí)可以知道,對(duì)于一個(gè)n輸入的邏輯運(yùn)算,不管是與或非運(yùn)算還是異或運(yùn)算等等,最多只可能存在2n種結(jié)果。所以如果事先將相應(yīng)的結(jié)果存放于一個(gè)存貯單元,就相當(dāng)于實(shí)現(xiàn)了與非門(mén)電路的功能。FPGA的原理也是如此,它通過(guò)燒寫(xiě)文件去配置查找表的內(nèi)容,從而在相同的電路情況下實(shí)現(xiàn)了不同的邏輯功能。
查找表(Look-Up-Table)簡(jiǎn)稱為L(zhǎng)UT,LUT本質(zhì)上就是一個(gè)RAM。目前FPGA中多使用4輸入的LUT,所以每一個(gè)LUT可以看成一個(gè)有4位地址線的 的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)容,然后輸出即可。
目前主流的FPGA仍是基于查找表技術(shù)的,已經(jīng)遠(yuǎn)遠(yuǎn)超出了先前版本的基本性能,并且整合了常用功能(如RAM、時(shí)鐘管理和DSP)的硬核(ASIC型)模塊。FPGA芯片主要由7部分完成,分別為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時(shí)鐘管理、嵌入塊式RAM、豐富的布線資源、內(nèi)嵌的底層功能單元和內(nèi)嵌專用硬件模塊。
每個(gè)模塊功能如下:
1) 可編程輸入輸出單元(IOB)
可編程輸入/輸出單元簡(jiǎn)稱I/O單元,是芯片與外界電路的接口部分,完成不同電氣特性下對(duì)輸入/輸出信號(hào)的驅(qū)動(dòng)與匹配要求,F(xiàn)PGA內(nèi)的I/O按組分類,每組都能夠獨(dú)立地支持不同的I/O標(biāo)準(zhǔn)。通過(guò)軟件的靈活配置,可適配不同的電氣標(biāo)準(zhǔn)與I/O物理特性,可以調(diào)整驅(qū)動(dòng)電流的大小,可以改變上、下拉電阻。
外部輸入信號(hào)可以通過(guò)IOB模塊的存儲(chǔ)單元輸入到FPGA的內(nèi)部,也可以直接輸入FPGA 內(nèi)部。當(dāng)外部輸入信號(hào)經(jīng)過(guò)IOB模塊的存儲(chǔ)單元輸入到FPGA內(nèi)部時(shí),其保持時(shí)間(Hold Time)的要求可以降低,通常默認(rèn)為0。為了便于管理和適應(yīng)多種電器標(biāo)準(zhǔn),F(xiàn)PGA的IOB被劃分為若干個(gè)組(bank),每個(gè)bank的接口標(biāo)準(zhǔn)由其接口電壓VCCO決定,一個(gè)bank只能有 一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標(biāo)準(zhǔn)的端口才能連接在一起,VCCO電壓相同是接口標(biāo)準(zhǔn)的基本條件。
2) 可配置邏輯塊(CLB)
CLB是FPGA內(nèi)的基本邏輯單元。CLB的實(shí)際數(shù)量和特性會(huì)依器件的不同而不同,但是每個(gè)CLB都包含一個(gè)可配置開(kāi)關(guān)矩陣,此矩陣由4或6個(gè)輸入、一些選型電路(多路復(fù)用器等)和觸發(fā)器組成。開(kāi)關(guān)矩陣是高度靈活的,可以對(duì)其進(jìn)行配置以便處理組合邏輯、移位寄存器或RAM。數(shù)字時(shí)鐘管理模塊(DCM)。
業(yè)內(nèi)大多數(shù)FPGA均提供數(shù)字時(shí)鐘管理(Xilinx的全部FPGA均具有這種特性)。Xilinx推出最先進(jìn)的FPGA提供數(shù)字時(shí)鐘管理和相位環(huán)路鎖定。相位環(huán)路鎖定能夠提供精確的時(shí)鐘綜合,且能夠降低抖動(dòng),并實(shí)現(xiàn)過(guò)濾功能。
3) 豐富的布線資源
布線資源連通FPGA內(nèi)部的所有單元,而連線的長(zhǎng)度和工藝決定著信號(hào)在連線上的驅(qū)動(dòng)能力和傳輸速度。FPGA芯片內(nèi)部有著豐富的布線資源,根據(jù)工藝、長(zhǎng)度、寬度和分布位置的不同而劃分為4類不同的類別。第一類是全局布線資源,用于芯片內(nèi)部全局時(shí)鐘和全局復(fù)位/置位的布線;第二類是長(zhǎng)線資源,用以完成芯片 Bank間的高速信號(hào)和第二全局時(shí)鐘信號(hào)的布線;第三類是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;第四類是分布式的布線資源,用于專有時(shí)鐘、復(fù)位等控制信號(hào)線。
4) 底層內(nèi)嵌功能單元
內(nèi)嵌功能模塊主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等軟處理核(SoftCore)。現(xiàn)在越來(lái)越豐富的內(nèi)嵌功能單元,使得單片F(xiàn)PGA成為了系統(tǒng)級(jí)的設(shè)計(jì)工具,使其具備了軟硬件聯(lián)合設(shè)計(jì)的能力,逐步向SOC平臺(tái)過(guò)渡。
5) 內(nèi)嵌專用硬核
內(nèi)嵌專用硬核是相對(duì)底層嵌入的軟核而言的,指FPGA處理能力強(qiáng)大的硬核(Hard Core),等效于ASIC電路。為了提高FPGA性能,芯片生產(chǎn)商在芯片內(nèi)部集成了一些專用的硬核。
6) 嵌入式塊RAM(BRAM)
大多數(shù)FPGA都具有內(nèi)嵌的塊RAM,這大大拓展了FPGA的應(yīng)用范圍和靈活性。塊RAM可被配置為單端口RAM、雙端口RAM、內(nèi)容地址存儲(chǔ)器 (CAM)以及FIFO等常用存儲(chǔ)結(jié)構(gòu)。RAM、FIFO是比較普及的概念,在此就不冗述。CAM存儲(chǔ)器在其內(nèi)部的每個(gè)存儲(chǔ)單元中都有一個(gè)比較邏輯,寫(xiě)入 CAM中的數(shù)據(jù)會(huì)和內(nèi)部的每一個(gè)數(shù)據(jù)進(jìn)行比較,并返回與端口數(shù)據(jù)相同的所有數(shù)據(jù)的地址,因而在路由的地址交換器中有廣泛的應(yīng)用。除了塊RAM,還可以將 FPGA中的LUT靈活地配置成RAM、ROM和FIFO等結(jié)構(gòu)。在實(shí)際應(yīng)用中,芯片內(nèi)部塊RAM的數(shù)量也是選擇芯片的一個(gè)重要因素。
單片塊RAM的容量為18k比特,即位寬為18比特、深度為1024,可以根據(jù)需要改變其位寬和深度,但要滿足兩個(gè)原則:首先,修改后的容量(位寬 深度)不能大于18k比特;其次,位寬最大不能超過(guò)36比特。當(dāng)然,可以將多片塊RAM級(jí)聯(lián)起來(lái)形成更大的RAM,此時(shí)只受限于芯片內(nèi)塊RAM的數(shù)量,而 不再受上面兩條原則約束。
7) 數(shù)字時(shí)鐘管理模塊(DCM)
業(yè)內(nèi)大多數(shù)FPGA均提供數(shù)字時(shí)鐘管理(Xilinx的全部FPGA均具有這種特性)。Xilinx推出最先進(jìn)的FPGA提供數(shù)字時(shí)鐘管理和相位環(huán)路鎖定。相位環(huán)路鎖定能夠提供精確的時(shí)鐘綜合,且能夠降低抖動(dòng),并實(shí)現(xiàn)過(guò)濾功能。
一般來(lái)說(shuō),完整的FPGA/CPLD設(shè)計(jì)流程包括:
(1) 電路功能設(shè)計(jì),系統(tǒng)設(shè)計(jì)之前,首要的是方案論證、系統(tǒng)設(shè)計(jì)和FPGA芯片選擇等準(zhǔn)備工作。一般采用自頂向下的設(shè)計(jì)方法將系統(tǒng)分成若干基本單元,然后將基本單元?jiǎng)澐殖上乱粚拥幕締卧,一直這樣就行下去,直到可以直接使用EDA元件庫(kù)為止。
(2) 設(shè)計(jì)輸入,常用的方法是硬件描述語(yǔ)言和原理圖輸入方式。
(3) 功能仿真,驗(yàn)證設(shè)計(jì)電路的邏輯功能。
(4) 綜合優(yōu)化(synthesis),綜合優(yōu)化是指將HDL語(yǔ)言、原理圖等設(shè)計(jì)輸入翻譯成由與、或、非門(mén)、RAM、觸發(fā)器等基本邏輯單元組成的邏輯網(wǎng)表,并根據(jù)目標(biāo)與要求(約束條件)優(yōu)化生成的邏輯網(wǎng)表,輸出edf和edn等文件,供FPGA/CPLD廠家的布局布線器進(jìn)行實(shí)現(xiàn)。
(5) 綜合后仿真,檢查綜合結(jié)果是否與原設(shè)計(jì)一致,仿真時(shí)把綜合生成
的標(biāo)準(zhǔn)延時(shí)文件反標(biāo)注到綜合仿真模型中,可估計(jì)門(mén)延時(shí)帶來(lái)的影響。但這一步驟不能估計(jì)線延時(shí),因此和布線后的仿真情況還有一定的差距,并不十分準(zhǔn)確。
(6) 實(shí)現(xiàn)(Implementation),實(shí)現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,Xilinx的實(shí)現(xiàn)過(guò)程分為翻譯(Translate)、映射(Map)、和布局布線(Place&Route)。布局布線是其中最重要的過(guò)程,布局是將邏輯網(wǎng)表中的硬件原語(yǔ)和底層單元合理得配置到芯片內(nèi)部的硬件結(jié)構(gòu)上,并且需要在速度最優(yōu)和面積最優(yōu)之間做出選擇。布線時(shí)根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用芯片內(nèi)部的各種連線資源合理準(zhǔn)確的連接各個(gè)元件。
(7) 時(shí)序仿真與驗(yàn)證,將布局布線后的延時(shí)信息反標(biāo)注到網(wǎng)表中用來(lái)檢測(cè)時(shí)序工作情況,時(shí)序仿真包括的延時(shí)信息最全,也最精確,能較好的反映芯片的實(shí)際工作情況。有是為了保證設(shè)計(jì)的可靠性,在時(shí)序仿真后還要做一些驗(yàn)證,可以用ISE內(nèi)嵌的時(shí)序分析工具完成靜態(tài)時(shí)序分析(STA,Static Timing Analyzer),也可以用第三方驗(yàn)證工具(如Synopsys的Formality驗(yàn)證工具,PrimeTime靜態(tài)時(shí)序分析工具等)進(jìn)行驗(yàn)證?梢杂肐SE內(nèi)嵌的FPGA Editor和Chip Viewer觀察芯片內(nèi)部的連接于配置情況,或者使用ISE內(nèi)嵌的ChipScope Pro進(jìn)行在線邏輯分析。
(8) 調(diào)試與加載配置,就是在線調(diào)試或者將生成的配置文件寫(xiě)入芯片中進(jìn)行測(cè)試。在ISE中對(duì)應(yīng)的工具就是iMPACT。
FPGA設(shè)計(jì)流程圖如圖2-1所示。
圖2-1 FPGA設(shè)計(jì)流程圖
FPGA軟件設(shè)計(jì)可分為兩大塊:編程語(yǔ)言和編程工具。編程語(yǔ)言主要有VHDL和Verilog兩種硬件描述語(yǔ)言;編程工具主要是兩大廠家Altera和Xilinx的集成綜合EDA軟件QuartusII以及第三方工具。具體的設(shè)計(jì)輸入方式有以下幾種:
(1) HDL語(yǔ)言方式。HDL既可以描述底層設(shè)計(jì),也可以描述頂層的設(shè)計(jì),
但它不容易做到較高的工作速度和芯片利用率。用這種方式描述的項(xiàng)目最后所能達(dá)到的性能與設(shè)計(jì)人員的水平、經(jīng)驗(yàn)以及綜合軟件有很大的關(guān)系。
(2) 圖形方式。可以分為電路原理圖描述,狀態(tài)機(jī)描述和波形描述3種
形式。電路原理圖方式描述比較直觀和高效,對(duì)綜合軟件的要求不高;狀態(tài)機(jī)描述主要用來(lái)設(shè)計(jì)基于狀態(tài)機(jī)思想的時(shí)序電路;波形描述方式是基于真值表的一種圖形輸入方式,直接描述輸入與輸出的波形關(guān)系。
FPGA的應(yīng)用可分為三個(gè)層面:電路設(shè)計(jì),產(chǎn)品設(shè)計(jì),系統(tǒng)設(shè)計(jì)。
1) 電路設(shè)計(jì)中FPGA的應(yīng)用
連接邏輯,控制邏輯是FPGA早期發(fā)揮作用比較大的領(lǐng)域也是FPGA應(yīng)用的基石.事實(shí)上在電路設(shè)計(jì)中應(yīng)用FPGA的難度還是比較大的這要求開(kāi)發(fā)者要具備相應(yīng)的硬件知識(shí)(電路知識(shí))和軟件應(yīng)用能力(開(kāi)發(fā)工具)這方面的人才總是緊缺的,往往都從事新技術(shù),新產(chǎn)品的開(kāi)發(fā)成功的產(chǎn)品將變成市場(chǎng)主流基礎(chǔ)產(chǎn)品供產(chǎn)品設(shè)計(jì)者應(yīng)用在不遠(yuǎn)的將來(lái),通用和專用IP的設(shè)計(jì)將成為一個(gè)熱門(mén)行業(yè)!搞電路設(shè)計(jì)的前提是必須要具備一定的硬件知識(shí).在這個(gè)層面,干重于學(xué),當(dāng)然,快速入門(mén)是很重要的,越好的位子越不等人電路開(kāi)發(fā)是黃金飯碗。
2) 產(chǎn)品設(shè)計(jì)
把相對(duì)成熟的技術(shù)應(yīng)用到某些特定領(lǐng)域如通訊,視頻,信息處理等等開(kāi)發(fā)出滿足行業(yè)需要并能被行業(yè)客戶接受的產(chǎn)品這方面主要是FPGA技術(shù)和專業(yè)技術(shù)的結(jié)合問(wèn)題,另外還有就是與專業(yè)客戶的界面問(wèn)題產(chǎn)品設(shè)計(jì)還包括專業(yè)工具類產(chǎn)品及民用產(chǎn)品,前者重點(diǎn)在性能,后者對(duì)價(jià)格敏感產(chǎn)品設(shè)計(jì)以實(shí)現(xiàn)產(chǎn)品功能為主要目的,F(xiàn)PGA技術(shù)是一個(gè)實(shí)現(xiàn)手段在這個(gè)領(lǐng)域,F(xiàn)PGA因?yàn)榫邆浣涌冢刂,功能IP,內(nèi)嵌CPU等特點(diǎn)有條件實(shí)現(xiàn)一個(gè)構(gòu)造簡(jiǎn)單,固化程度高,功能全面的系統(tǒng)產(chǎn)品設(shè)計(jì)將是FPGA技術(shù)應(yīng)用最廣大的市場(chǎng),具有極大的爆發(fā)性的需求空間產(chǎn)品設(shè)計(jì)對(duì)技術(shù)人員的要求比較高,路途也比較漫長(zhǎng)不過(guò)現(xiàn)在整個(gè)行業(yè)正處在組建"首發(fā)團(tuán)隊(duì)"的狀態(tài),只要加入,前途光明產(chǎn)品設(shè)計(jì)是一種職業(yè)發(fā)展方向定位,不是簡(jiǎn)單的愛(ài)好就能做到的!產(chǎn)品設(shè)計(jì)領(lǐng)域會(huì)造就大量的企業(yè)和企業(yè)家,是一個(gè)近期的發(fā)展熱點(diǎn)和機(jī)遇。
3) 系統(tǒng)級(jí)應(yīng)用
系統(tǒng)級(jí)的應(yīng)用是FPGA與傳統(tǒng)的計(jì)算機(jī)技術(shù)結(jié)合,實(shí)現(xiàn)一種FPGA版的計(jì)算機(jī)系統(tǒng)如用Xilinx V-4, V-5系列的FPGA,實(shí)現(xiàn)內(nèi)嵌POWER PC CPU, 然后再配合各種外圍功能,實(shí)現(xiàn)一個(gè)基本環(huán)境,在這個(gè)平臺(tái)上跑LINIX等系統(tǒng)這個(gè)系統(tǒng)也就支持各種標(biāo)準(zhǔn)外設(shè)和功能接口(如圖象接口)了這對(duì)于快速構(gòu)成 FPGA大型系統(tǒng)來(lái)講是很有幫助的。這種"山寨"味很濃的系統(tǒng)早期優(yōu)勢(shì)不一定很明顯,類似ARM系統(tǒng)的境況但若能慢慢發(fā)揮出FPGA的優(yōu)勢(shì),逐漸實(shí)現(xiàn)一些特色系統(tǒng)也是一種發(fā)展方向。若在系統(tǒng)級(jí)應(yīng)用中,開(kāi)發(fā)人員不具備系統(tǒng)的擴(kuò)充開(kāi)發(fā)能力,只是搞搞編程是沒(méi)什么意義的,當(dāng)然設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)是另一種情況,搞系統(tǒng)級(jí)應(yīng)用看似起點(diǎn)高,但不具備深層開(kāi)發(fā)能力,很可能會(huì)變成愛(ài)好者,就如很多人會(huì)做網(wǎng)頁(yè)但不能稱做會(huì)編程類似以上是幾點(diǎn)個(gè)人開(kāi)發(fā),希望能幫助想學(xué)FPGA 但很茫然無(wú)措的人理一理思路。這是一個(gè)不錯(cuò)的行業(yè),有很好的個(gè)人成功機(jī)會(huì)。但也肯定是一個(gè)競(jìng)爭(zhēng)很激烈的行業(yè),關(guān)鍵看的就是速度和深度當(dāng)然還有市場(chǎng)適應(yīng)能力。
Verilog HDL是目前應(yīng)用最為廣泛的硬件描述語(yǔ)言,適合算法級(jí),寄存器級(jí),邏輯級(jí),門(mén)級(jí)和版圖級(jí)等各個(gè)層次的設(shè)計(jì)和描述,優(yōu)點(diǎn)是其工藝無(wú)關(guān)性.這使得工程師在功能設(shè)計(jì),邏輯驗(yàn)證階段可以不必過(guò)多考慮門(mén)級(jí)及工藝實(shí)現(xiàn)的具體細(xì)節(jié),只需根據(jù)系統(tǒng)設(shè)計(jì)的要求施加不同的約束條件。
Verilog HDL 是一種硬件描述語(yǔ)言,用于從算法級(jí)、門(mén)級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對(duì)象的復(fù)雜性可以介于簡(jiǎn)單的門(mén)和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可以在相同描述中顯示的進(jìn)行時(shí)序建模。
這種語(yǔ)言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控和設(shè)計(jì)驗(yàn)證方面的時(shí)延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語(yǔ)言、此外,Verilog HDL語(yǔ)言提供了編程語(yǔ)言接口,通過(guò)該接口可以在模擬、驗(yàn)證期間從設(shè)計(jì)外部訪問(wèn)設(shè)計(jì),包括模擬的具體控制和運(yùn)行。
這種硬件語(yǔ)言不僅定義了語(yǔ)法。而且對(duì)每個(gè)語(yǔ)法結(jié)構(gòu)都定義了清晰的模擬、仿真語(yǔ)義。因此,用這種語(yǔ)言編寫(xiě)的模型能夠使用Verilog仿真器進(jìn)行驗(yàn)證。語(yǔ)言從C編程語(yǔ)言中繼承了多種操作符和結(jié)構(gòu)。Verilog HDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。但是,Verilog HDL語(yǔ)言的核心子集非常易于學(xué)習(xí)和使用,這對(duì)大多數(shù)建模應(yīng)用來(lái)說(shuō)已經(jīng)足夠。當(dāng)然,完整的硬件描述語(yǔ)言足以對(duì)從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。
Verilog HDL語(yǔ)言最初是于1983年由Gateway Design Automation公司為其模擬器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言。那時(shí)它只是一種專用語(yǔ)言。由于他們的模擬、仿真器產(chǎn)品的廣泛使用,Verilog HDL 作為一種便于使用且實(shí)用的語(yǔ)言逐漸為眾多設(shè)計(jì)者所接受。在一次努力增加語(yǔ)言普及性的活動(dòng)中,Verilog HDL語(yǔ)言于1990年被推向公眾領(lǐng)域。 Open Verilog International (OVI)是促進(jìn)Verilog發(fā)展的國(guó)際性組織。1992年,OVI決定致力于推廣Verilog OVI標(biāo)準(zhǔn)成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得成功,Verilog HDL于1995年成為IEEE標(biāo)準(zhǔn),稱為IEEE Std 1364-1995。完整的標(biāo)準(zhǔn)在Verilog硬件描述語(yǔ)言參考手冊(cè)中有詳細(xì)描述。
- 基本邏輯門(mén),例如and、or和nand等都內(nèi)置在語(yǔ)言中。
- 用戶定義原語(yǔ)(UDP)創(chuàng)建的靈活性。用戶定義的原語(yǔ)既可以是組
合邏輯原語(yǔ),也可以是時(shí)序邏輯原語(yǔ)。
- 開(kāi)關(guān)級(jí)基本結(jié)構(gòu)模型,例如pmos 和nmos等也被內(nèi)置在語(yǔ)言中。
- 提供顯式語(yǔ)言結(jié)構(gòu)指定設(shè)計(jì)中的端口到端口的時(shí)延及路徑時(shí)延和設(shè)
計(jì)的時(shí)序檢查。
- 可采用三種不同方式或混合方式對(duì)設(shè)計(jì)建模。這些方式包括:行為
描述方式—使用過(guò)程化結(jié)構(gòu)建模;數(shù)據(jù)流方式—使用連續(xù)賦值語(yǔ)句方式建模;結(jié)構(gòu)化方式—使用門(mén)和模塊實(shí)例語(yǔ)句描述建模。
Verilog HDL和VHDL作為描述硬件電路設(shè)計(jì)的語(yǔ)言,其共同特點(diǎn)在于:能形式化地抽象表示電路的行為和結(jié)構(gòu);支持邏輯設(shè)計(jì)中層次與范圍的描述;可借用高級(jí)語(yǔ)言的精巧結(jié)構(gòu)來(lái)簡(jiǎn)化電路行為的描述;具有電路仿真與驗(yàn)證機(jī)制以保證設(shè)計(jì)的正確性;支持電路描述由高層到低層的綜合轉(zhuǎn)換;硬件描述與實(shí)現(xiàn)工藝無(wú)關(guān)(有關(guān)工藝參數(shù)可通過(guò)語(yǔ)言提供的屬性包括進(jìn)去);便于文檔管理;易于理解和設(shè)計(jì)重用。但是,兩者又有著各自的特點(diǎn):
Verilog HDL和VHDL最大的差別在語(yǔ)法上,Verilog HDL是一種類C語(yǔ)言,而VHDL是一種ADA(Action Data Automation,行動(dòng)數(shù)據(jù)自動(dòng)化)語(yǔ)言。由于C語(yǔ)言簡(jiǎn)單易用且應(yīng)用廣泛,因此也使得Verilog HDL語(yǔ)言容易學(xué)習(xí),如果有C語(yǔ)言學(xué)習(xí)的基礎(chǔ),很快就能夠掌握;相比之下,VHDL語(yǔ)句較為晦澀,使用難度較大。
由于Verilog HDL早在1983年就已推出,至今已有20多年的應(yīng)用歷史,因而Verilog HDL擁有更加廣泛的設(shè)計(jì)群體,成熟的資源也比VHDL豐富。
傳統(tǒng)觀念認(rèn)為Verilog HDL在系統(tǒng)級(jí)抽象方面較弱,不太適合大型的系統(tǒng);VHDL側(cè)重于系統(tǒng)描述,從而更多地為系統(tǒng)級(jí)設(shè)計(jì)人員所采用;Verilog HDL側(cè)重于電路級(jí)描述,從而更多地為電路設(shè)計(jì)人員所采用。但這兩種語(yǔ)言仍處于不斷完善之中,都在朝著更高級(jí)、更強(qiáng)大描述語(yǔ)言的方向前進(jìn)。其中,經(jīng)過(guò)IEEE Verilog HDL 2001標(biāo)準(zhǔn)補(bǔ)充之后,Verilog HDL 語(yǔ)言的系統(tǒng)級(jí)描述性能和可綜合性能有了大幅度提高。
綜上所述,Verilog HDL 語(yǔ)言作為學(xué)習(xí)HDL設(shè)計(jì)方法入門(mén)和基礎(chǔ)是非常合適的。掌握了Verilog HDL 語(yǔ)言建模、綜合和仿真技術(shù),不僅可以增加對(duì)數(shù)字電路設(shè)計(jì)的深入了解,還可以為后續(xù)高級(jí)階段的高級(jí)學(xué)習(xí)打好基礎(chǔ) ,包括數(shù)字信號(hào)處理和數(shù)字通信的FPGA實(shí)現(xiàn)、IC設(shè)計(jì)等領(lǐng)域。本文的設(shè)計(jì)中,采用Verilog HDL語(yǔ)言。
本次設(shè)計(jì)的搶答器,其系統(tǒng)芯片主要采用EP2C8Q208,由搶答判別模塊,計(jì)時(shí)模塊,分頻器模塊,計(jì)分模塊,鎖存器模塊,數(shù)碼管驅(qū)動(dòng)模塊組成。搶答器結(jié)構(gòu)簡(jiǎn)圖如圖2-3所示。
圖2-3 搶答器結(jié)構(gòu)簡(jiǎn)圖
由圖2-3我們很清楚的看到系統(tǒng)都有哪些外圍電路組成,而且還能很快就能明白這次設(shè)計(jì)目的與原理。
分頻器主要是運(yùn)用計(jì)數(shù)器的功能,由于實(shí)際上我們使用的是50HZ的頻率,所以我將設(shè)計(jì)計(jì)數(shù)器,其在每個(gè)脈沖的上升沿來(lái)臨時(shí),就會(huì)加1,直到加到25時(shí),則會(huì)使輸出脈沖致1,在下一個(gè)25時(shí),則會(huì)使輸出脈沖致0。這樣就能夠?qū)崿F(xiàn)將50HZ的脈沖變成1HZ的脈沖,用于控制計(jì)時(shí)模塊。
計(jì)時(shí)模塊運(yùn)用的是計(jì)數(shù)器的減法運(yùn)算,當(dāng)外部條件滿足時(shí),計(jì)時(shí)器就會(huì)從30S開(kāi)始計(jì)時(shí),一直計(jì)到零時(shí),計(jì)數(shù)器停止,直到主持人按下復(fù)位按鈕,計(jì)數(shù)器復(fù)位,才能使下次搶答時(shí)能夠從頭開(kāi)始。
數(shù)碼管驅(qū)動(dòng)主要是將4位變8位,即當(dāng)外部條件滿足時(shí),就會(huì)將輸入的4位數(shù)據(jù)轉(zhuǎn)變成7位,從而能夠使其能夠在數(shù)碼管上顯示出來(lái)。
鎖存器在外部信號(hào)沒(méi)要求進(jìn)行鎖存操作時(shí),則會(huì)跟著輸入的變化而變化,然而當(dāng)外部要求進(jìn)行鎖存時(shí),就是立即鎖存住當(dāng)前的數(shù)據(jù),即輸出保持當(dāng)前的數(shù)據(jù)不再變化。
- 搶答器模塊設(shè)計(jì)與實(shí)現(xiàn)
搶答判別模塊是實(shí)現(xiàn)搶答器搶答功能的核心元件了,通過(guò)搶答判別模塊來(lái)鑒別搶答的先后,其中設(shè)計(jì)的這個(gè)模塊中自帶鎖存功能,即當(dāng)其中一人或者一組搶答成功后,其余人或者組都不能再搶答了。該模塊還能夠進(jìn)行判別誰(shuí)進(jìn)行了搶答,當(dāng)主持人還沒(méi)有說(shuō)開(kāi)始搶答時(shí),就有人開(kāi)始搶答時(shí),該人或者該組面前的LED燈就會(huì)被點(diǎn)亮,對(duì)應(yīng)的報(bào)警器也會(huì)響起,同時(shí)數(shù)碼管這時(shí)也會(huì)顯示出提前搶答的組號(hào),從而杜絕了一些不公平的元素。
其流程圖如圖3-1。
圖3-1 搶答判別流程圖
我們通過(guò)對(duì)FPGA以及硬件語(yǔ)言Verilo HDL的學(xué)習(xí),只通過(guò)對(duì)系統(tǒng)的編程就滿足了該模塊的要求,能實(shí)現(xiàn)判別,鎖存,顯示,報(bào)警等功能。
搶答判別模塊的輸入有en,clr,a,b,c,d,而輸出端為led_a,led_b.led_c,led_d以及4位led_f,4位led_t。其中en表示使能端,只有主持人按下這個(gè)按鈕,才能允許參賽選手進(jìn)行搶答;clr表示復(fù)位信號(hào),當(dāng)主持人按下這個(gè)按鈕后,所有的狀態(tài)都將恢復(fù)成初始狀態(tài),為下次搶答做好準(zhǔn)備;a,b,c,d表示四組搶答選手;led_a,led_b.led_c,led_d分別表示對(duì)應(yīng)小組的LED燈,用來(lái)顯示選手們的搶答情況;led_f表示報(bào)警信號(hào),當(dāng)有選手提前搶答時(shí),該對(duì)應(yīng)的報(bào)警器將會(huì)響起;led_t表示顯示選手號(hào)碼的信號(hào),當(dāng)有選手搶答時(shí),就會(huì)通過(guò)led_t輸出的信號(hào)使其組號(hào)在數(shù)碼管上顯示出來(lái)。
該模塊的邏輯框圖如圖3-2所示。
圖3-2 搶答判別模塊邏輯框圖
數(shù)碼管按段數(shù)可分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、3位、4位、5位、6位、7位等數(shù)碼管。
按發(fā)光二極管單元連接方式可分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管,共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。
數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來(lái)驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類。
- 靜態(tài)顯示驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管
的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來(lái)驅(qū)動(dòng),要知道一個(gè)89S51單片機(jī)可用的I/O端口才32個(gè)),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。
- 動(dòng)態(tài)顯示驅(qū)動(dòng)。動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管8個(gè)顯示筆"a,b,c,d,e,f,g,dp"
的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開(kāi),該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。
數(shù)碼管驅(qū)動(dòng)模塊就是將輸入的2進(jìn)制代碼以7段譯碼方式輸出,其對(duì)應(yīng)的表格如表3-1。
表3-1 2進(jìn)制與7段譯碼對(duì)應(yīng)表
數(shù)碼管驅(qū)動(dòng)模塊的輸入是4位2進(jìn)制數(shù),輸出則是7位譯碼數(shù)據(jù)。現(xiàn)其邏輯框圖如3-3所示。
圖3-3 數(shù)碼管驅(qū)動(dòng)模塊邏輯框圖
該模塊主要是規(guī)定搶答時(shí)間,當(dāng)主持人按下?lián)尨鸢粹o后,該模塊就會(huì)從30s開(kāi)始倒計(jì)時(shí),直到有人搶答成功后,通過(guò)鎖存模塊的作用使得在數(shù)碼管上顯示的時(shí)間不變。
計(jì)時(shí)模塊電路中,clk為計(jì)時(shí)脈沖信號(hào);sign為計(jì)時(shí)使能端,由主持人控制,當(dāng)主持人按下這個(gè)按鈕后,計(jì)時(shí)功能才能實(shí)現(xiàn);reset為復(fù)位信號(hào),也由主持人控制,按下復(fù)位按鈕,計(jì)時(shí)模塊重新計(jì)時(shí),這為下一次的搶答計(jì)時(shí)做準(zhǔn)備。
其中計(jì)時(shí)模塊需要的計(jì)時(shí)脈沖信號(hào)應(yīng)該是1HZ的,而實(shí)際上我們所使用的頻率大部分都是50HZ的,這就需要分頻器的作用,分頻模塊將在下面給與介紹。
計(jì)時(shí)模塊運(yùn)用的是計(jì)數(shù)器的減法運(yùn)算,當(dāng)外部條件滿足時(shí),計(jì)時(shí)器就會(huì)從30s開(kāi)始計(jì)時(shí),一直計(jì)到零時(shí),計(jì)數(shù)器停止,直到主持人按下復(fù)位按鈕,計(jì)數(shù)器復(fù)位,才能使下次搶答時(shí)能夠從頭開(kāi)始。計(jì)時(shí)模塊在搶答器中的作用就是計(jì)時(shí)作用,超時(shí)搶答則為無(wú)效。
現(xiàn)其邏輯框圖如3-4所示。
圖3-4 計(jì)時(shí)模塊邏輯框圖
分頻器主要是運(yùn)用計(jì)數(shù)器的功能,由于實(shí)際上我們使用的是50HZ的頻率,所以我將設(shè)計(jì)計(jì)數(shù)器,其在每個(gè)脈沖的上升沿來(lái)臨時(shí),就會(huì)加1,直到加到24時(shí),則會(huì)使輸出脈沖致1,在下一個(gè)24時(shí),則會(huì)使輸出脈沖致0。這樣就能夠?qū)崿F(xiàn)將50HZ的脈沖變成1HZ的脈沖,用于控制計(jì)時(shí)模塊。
其中clk為頻率輸入,大部分表示50HZ;div表示通過(guò)分頻的作用后所產(chǎn)生的新的頻率。
現(xiàn)其邏輯框圖如3-5所示。
圖3-5 分頻器模塊邏輯框圖
計(jì)分模塊中加法、減法系統(tǒng),計(jì)分系統(tǒng)等系統(tǒng)組成。add_sub是計(jì)分的使能端,只有這個(gè)信號(hào)為高電平時(shí),才允許進(jìn)行計(jì)分;cont_sign1為加分按鈕,cont_sign2為減分按鈕,clk為脈沖信號(hào)。運(yùn)行模塊是首先設(shè)定周期脈沖,定時(shí)的加減1,有搶答判別模塊的輸出給chos決定了哪組的計(jì)分,其中a1[3..0],a2[3..0]分別表示a組分?jǐn)?shù)的個(gè)位與十位,b1[3..0],b2[3..0]分別表示b組分?jǐn)?shù)的個(gè)位與十位,c1[3..0],c2[3..0]分別表示c組分?jǐn)?shù)的個(gè)位與十位,d1[3..0],d2[3..0]分別表示d組分?jǐn)?shù)的個(gè)位與十位。
現(xiàn)其邏輯框圖如3-6所示。
圖3-6 計(jì)分模塊邏輯框圖
鎖存器(Latch)是一種對(duì)脈沖電平敏感的存儲(chǔ)單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號(hào)暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存,其次完成高速的控制其與慢速的外設(shè)的不同步問(wèn)題,再其次是解決驅(qū)動(dòng)的問(wèn)題,最后是解決一個(gè)I/O口既能輸出也能輸入的問(wèn)題。
此次設(shè)計(jì)的鎖存模塊既有鎖存作用,又有伴隨作用,只有當(dāng)鎖存信號(hào)來(lái)臨時(shí)才進(jìn)行鎖存,在沒(méi)有鎖存信號(hào)下的時(shí)候,則輸出跟著輸入變化。
鎖存模塊中,g表示鎖存信號(hào),a[3..0]表示輸入信號(hào),b[3..0]表示輸出信號(hào),F(xiàn)其邏輯框圖如3-7所示。
圖3-7 鎖存器模塊邏輯框圖
通過(guò)對(duì)各個(gè)模塊的搭建,我們可以完成對(duì)整體搶答器的硬件設(shè)計(jì),如圖3-8所示為系統(tǒng)整體原理圖。
圖3-8 系統(tǒng)整體原理圖
- 搶答器程序設(shè)計(jì)、實(shí)現(xiàn)與仿真
Module
qiang_da_pan_bie(clr,en,a,b,c,d,led_a,led_b,led_c,led_d,led_t,led_f);
input clr,en,a,b,c,d;
output led_a,led_b,led_c,led_d;
output [3:0] led_t;
output [3:0] led_f;
reg [3:0] states;
reg led_a,led_b,led_c,led_d;
reg [3:0] led_t;
reg [3:0] led_f;
以上程序描述了搶答判別模塊的實(shí)體部分,其中qiang_da_pan_bie是模塊的文件名;input定義的是模塊的輸入端口,即clr,en,a,b,c,d為模塊的輸入端;output定義的是模塊的輸出端口,即led_a,led_b,led_c,led_d,led_t,led_f為輸出端口;states被定義成reg型,用于暫時(shí)存放輸入端a,b,c,d的狀態(tài);led_t被定義成reg型,表示搶答組號(hào)的號(hào)碼。
if(en==0)
begin
if (states==4'b0001)
begin
{led_d,led_c,led_b,led_a}<=states;
led_f<=states;
led_t<=4'b0001;
end
end
這段程序表示在主持人還沒(méi)有說(shuō)開(kāi)始搶答時(shí),判別是否有人提前搶答,若有人提前搶答了,則就會(huì)判斷哪個(gè)人或者哪一組提前搶答了,這時(shí)搶答者前面的led燈將會(huì)被點(diǎn)亮,對(duì)應(yīng)的報(bào)警器也會(huì)響起,同時(shí)將提前搶答者的組號(hào)通過(guò)數(shù)碼管顯示出來(lái)。
搶答判別模塊的波形仿真如圖4-1與4-2。

圖4-1 en=0時(shí)搶答判別模塊的波形仿真圖
在圖4-1中,我們看出在搶答允許使能端en=0的情況下,b組率先搶答,這是違規(guī)的,因此,led_b為1,即與a組對(duì)應(yīng)的LED燈亮起;led_f為0010,即表示b的報(bào)警器將會(huì)響起;led_t為0010,即數(shù)碼管顯示的是第二組(b組)搶答的。
圖4-2 en=1時(shí)搶答判別模塊的波形仿真圖
在圖4-2中,我們看出在搶答允許使能端en=1的情況下,a組率先搶答,這是合理的,因此,led_a為1,即與a組對(duì)應(yīng)的LED燈亮起;led_f為0000,即表示所有的報(bào)警器都不會(huì)響起;led_t為0001,即數(shù)碼管顯示的是第一組(a組)搶答的。
- 數(shù)碼管驅(qū)動(dòng)模塊程序設(shè)計(jì)
module decode47(a , D);
output [7:0] a;
input [3:0] D;
reg [7:0] a;
以上程序描述的是數(shù)碼管驅(qū)動(dòng)模塊的實(shí)體部分,其中decode47是模塊的文件名;input定義的是模塊的輸入端口,即D為模塊的輸入端;output定義的是模塊的輸出端口,即a為輸出端口,reg是a端口的類型。
case(D)
4'd0: a<=7'b1111110;
4'd1: a<=7'b0110000;
4'd2: a<=7'b1101101;
4'd3: a<=7'b1111001;
4'd4: a<=7'b0110011;
4'd5: a<=7'b1011011;
4'd6: a<=7'b1011111;
4'd7: a<=7'b1110000;
4'd8: a<=7'b1111111;
4'd9: a<=7'b1111011;
endcase
以上程序運(yùn)用case語(yǔ)句進(jìn)行譯碼,當(dāng)輸入端口D滿足條件時(shí),就會(huì)輸出與之相對(duì)應(yīng)的情況,如當(dāng)D=4’b0011時(shí),輸出a<=7’b1111001,然后接到數(shù)碼管上,就會(huì)顯示3,從而完成驅(qū)動(dòng)數(shù)碼管的作用。
數(shù)碼管驅(qū)動(dòng)模塊的波形仿真如圖4-3。
圖4-3 數(shù)碼管驅(qū)動(dòng)模塊的波形仿真圖
如圖4-3所示,由于運(yùn)行程序時(shí)有一定的延時(shí),故輸出總是落后與輸入的。如當(dāng)D=6時(shí),這是a=1011111,與實(shí)際結(jié)果一樣。
- 計(jì)時(shí)模塊程序設(shè)計(jì)
module ji_shi_mo_kuai(clk,sign,reset,a2,a1,g);
input clk,sign,reset,g;
output a2,a1;
reg [3:0] a2;
reg [3:0] a1;
reg a;
以上程序描述的是計(jì)時(shí)模塊的實(shí)體部分,其中ji_shi_mo_kuai是模塊的文件名;input定義的是模塊的輸入端口,即clk,sign,reset,g為模塊的輸入端;output定義的是模塊的輸出端口,即a2,a1為輸出端口,a,a2,a1端口的類型是reg。clk為時(shí)鐘信號(hào);sign是使能信號(hào),只有在使能信號(hào)成立的條件下,程序才能夠運(yùn)行;reset為復(fù)位信號(hào),當(dāng)復(fù)位按鍵被按下時(shí),系統(tǒng)將會(huì)從頭計(jì)時(shí),為下一輪的搶答做好準(zhǔn)備。
if (reset==1)
begin
a2<=4'b0011;
a1<=4'b0000;
end
以上程序?yàn)閺?fù)位程序,當(dāng)這段程序起作用時(shí),a1將會(huì)被賦值為4'b0000,a2將會(huì)被賦值為4'b0011,即系統(tǒng)將會(huì)重新從30S開(kāi)始倒計(jì)時(shí)。
if (a2!=4'b0000 && a1==4'b0000)
begin
a2<=a2-1;a1<=4'b1001;
end
if (a2!=4'b0000 && a1!=4'b0000)
begin
a2<=a2;a1<=a1-1;
end
if (a2==4'b0000 && a1!=4'b0000)
begin
a2<=a2;a1<=a1-1;
end
if (a2==4'b0000 && a1==4'b0000)
begin
a2<=4'b0000;a1<=4'b0000;
end
以上程序?yàn)橛?jì)時(shí)程序,首先分情況進(jìn)行判斷:當(dāng)a2不為0,而a1為0時(shí),a2將自減1,a1變成9;當(dāng)a2不為0,a1不為0時(shí),a2不變,a1自減1;當(dāng)a2為0,a1不為0時(shí),a2不變,a1自減1;當(dāng)a2為0,a1為0時(shí),這是將a2,a1都賦值為0。
計(jì)時(shí)模塊的波形仿真如圖4-4與圖4-5。
圖4-4 計(jì)時(shí)模塊的波形仿真圖
圖4-4所示,先按下復(fù)位按鍵reset,這時(shí)a2=3,a1=0,然后在按下計(jì)數(shù)使能端sign后,計(jì)時(shí)模塊開(kāi)始工作,計(jì)時(shí)時(shí)間從30S一直倒計(jì)時(shí)至0S后,不在計(jì)時(shí)了,只有等到復(fù)位后,才能重新計(jì)時(shí)。
圖4-5計(jì)時(shí)模塊的波形仿真圖
圖4-5中,在一輪計(jì)時(shí)結(jié)束后,開(kāi)始下一輪的搶答,這是主持人需要再次按下reset鍵,這時(shí)計(jì)時(shí)模塊重新計(jì)時(shí),即又開(kāi)始從30S開(kāi)始倒計(jì)時(shí),依次循環(huán),這樣就為比賽的順利進(jìn)行做好了準(zhǔn)備。
Module fen_pin_qi(clk,div,cnt);
input clk;
output div,cnt;
reg [4:0] cnt;
reg div;
以上程序描述的是分頻模塊的實(shí)體部分,其中fen_pin_qi是模塊的文件名;input定義的是模塊的輸入端口,即clk為模塊的輸入端;output定義的是模塊的輸出端口,即div,cnt為輸出端口,div,cnt端口的類型是reg。clk為時(shí)鐘信號(hào),通常輸入的是50HZ。
if (cnt==5'b11000)
begin
div<=~div;
cnt<=5'b0000;
end
else
begin
cnt<=cnt+1;
end
以上程序?yàn)橛?jì)數(shù)程序,首先進(jìn)行判斷,若cnt沒(méi)有達(dá)到24時(shí),則進(jìn)行自加1的操作,直到cnt達(dá)到24時(shí),div將會(huì)取反,這樣的程序?qū)?huì)一直進(jìn)行下去。這里之所以判斷cnt是否達(dá)到24,是因?yàn)閷?shí)際中我們使用的頻率是50HZ,所以根據(jù)實(shí)際的情況,在這里設(shè)定24的界限。
分頻模塊的波形仿真如圖4-6。
圖4-6 分頻模塊的波形仿真圖
圖4-6所示,隨著clk的變化,cnt從0開(kāi)始往上加1,直到加到24時(shí),div發(fā)生偏轉(zhuǎn),即由0變?yōu)?,隨后cnt又開(kāi)始從0開(kāi)始加1直至24,div又發(fā)生偏轉(zhuǎn),即由1變?yōu)?。如此循環(huán)下去,就起到了分頻的作用。
Module ji_fen_mo_kuai(add_sub,cont_sign1,cont_sign2,chos,a2,a1,b2,b1,c2,c1,d2,d1,clk);
input add_sub, cont_sign1,cont_sign2,chos,clk;
output a2,a1,b2,b1,c2,c1,d2,d1;
wire [3:0] chos;
reg [3:0] a2;
reg [3:0] a1;
reg [3:0] b2;
reg [3:0] b1;
reg [3:0] c2;
reg [3:0] c1;
reg [3:0] d2;
reg [3:0] d1;
以上程序描述的是計(jì)分模塊的實(shí)體部分,其中ji_fen_mo_kuai是模塊的文件名;input定義的是模塊的輸入端口,即add_sub,cont_sign1,cont_sign2,chos,clk為模塊的輸入端;output定義的是模塊的輸出端口,即a2,a1,b2,b1,c2,c1,d2,d1為輸出端口。clk為時(shí)鐘信號(hào);add_sub表示計(jì)分使能端;cont_sign1表示加法使能端,按下這個(gè)按鍵后,計(jì)數(shù)器開(kāi)始進(jìn)行加法運(yùn)算;cont_sign2表示加法使能端,按下這個(gè)按鍵后,計(jì)數(shù)器開(kāi)始進(jìn)行減法運(yùn)算,即減分操作;a2,a1,b2,b1,c2,c1,d2,d1則表示每組分?jǐn)?shù)的十位,個(gè)位。
if (cont_sign1==1)
begin
if (chos==4'b1000)
begin
if (a2==4'b1001 && a1==4'b1001)
begin
a1<=4'b0000;
a2<=4'b0000;
end
else if (a2!=4'b1001 && a1==4'b1001)
begin
a1<=4'b0000;
a2<=a2+1;
end
else if (a2!=4'b1001 && a1!=4'b1001)
begin
a1<=a1+1;
a2<=a2;
end
end
end
以上程序只是加法程序中的一部分,首先,加法使能端口cont_sign1有效后,就要判斷哪一組進(jìn)行加分運(yùn)算,然后就要根據(jù)情況進(jìn)行討論:當(dāng)a2,a1都為9時(shí),a2,a1都要變成0;當(dāng)a2不為9,a1為9時(shí),a2將自加1,a1變成0;當(dāng)a2,a1都不為9時(shí),a2不變,a1自加1。
if(cont_sign2==1)
begin
if (chos==4'b1000)
begin
if (a2==4'b0000 && a1==4'b0000)
begin
a1<=4'b1001;
a2<=4'b1001;
end
else if (a2!=4'b0000 && a1==4'b0000)
begin
a1<=4'b1001;
a2<=a2-1;
end
else if (a2!=4'b0000 && a1!=4'b0000)
begin
a1<=a1-1;
a2<=a2;
end
else if (a2==4'b0000 && a1!=4'b0000)
begin
a1<=a1-1;
a2<=a2;
end
end
end
以上程序只是減法程序中的一部分,首先,加法使能端口cont_sign2有效后,就要判斷哪一組進(jìn)行加分運(yùn)算,然后就要根據(jù)情況進(jìn)行討論:當(dāng)a2,a1都為0時(shí),a2,a1都要變成9;當(dāng)a2不為0,a1為0時(shí),a2將自加1,a1變成9;當(dāng)a2,a1都不為0時(shí),a2不變,a1自減1;當(dāng)a2為0,a1不為0時(shí),a2不變,a1自減1。計(jì)分模塊的波形仿真如圖4-7與圖4-8。
圖4-7計(jì)分模塊的波形仿真圖
圖4-7所示,add_sub為1,即允許計(jì)分運(yùn)算。首先第四組(d組)搶答成功并回答正確,則應(yīng)給與加分,即d1由0變?yōu)?,在由圖知,在給d組加分的時(shí)候,由于干擾,此時(shí)a組也發(fā)來(lái)加分信號(hào),但是并不給予a組加分,這樣避免了干擾。第二輪搶答中,d組又回答正確,在給予加分,此時(shí)d1由1變?yōu)?。然而在第三輪中d組回答錯(cuò)誤,應(yīng)給予d組減分,此時(shí)d1由2變成1。
圖4-8計(jì)分模塊的波形仿真圖
圖4-8所示,add_sub為1,即允許計(jì)分運(yùn)算。首先第四組(d組)搶答成功并回答正確,則應(yīng)給與加分,即d1由0變?yōu)?;第二輪搶答中,b組回答正確,給予加分,此時(shí)b1由1變?yōu)?。然而在第三輪中d組回答錯(cuò)誤,應(yīng)給予d組減分,此時(shí)d1由1變成0。
module suo_cun_qi(g,a,b);
input g;
input [3:0] a;
output [3:0] b;
reg [3:0] b;
以上程序描述的是鎖存模塊的實(shí)體部分,其中suo_cun_qi是模塊的文件名;input定義的是模塊的輸入端口,即g,a為模塊的輸入端;output定義的是模塊的輸出端口,即b為輸出端口。其中g(shù)表示搶答成功信號(hào)。
if (g==1)
begin
b<=b;
end
else
begin
b<=a;
end
以上程序?yàn)殒i存程序,如程序中所示,只有在g這個(gè)信號(hào)有效的情況下,鎖存模塊才開(kāi)始起作用,否則其輸出b將隨著輸入a的變化而變化。
鎖存模塊的波形仿真如圖4-9。
圖4-9 鎖存模塊的波形仿真圖
在圖4-9中,我們看見(jiàn)在g信號(hào)無(wú)效的時(shí)候,輸出b跟隨著輸入a的變化而變化,當(dāng)g信號(hào)有效的時(shí)候,輸出b就會(huì)不再變化了,實(shí)現(xiàn)了應(yīng)有的功能。在圖中我們看見(jiàn),輸出b出現(xiàn)了一點(diǎn)誤差,這是因?yàn)榉抡嫠o的頻率過(guò)小,且仿真程序有一定的延遲,這樣就造成了輸入信號(hào)之間有一定的重疊,因此會(huì)出現(xiàn)這樣的差錯(cuò),當(dāng)增大仿真頻率到一定程度后,就不會(huì)出現(xiàn)這樣的情況。
結(jié) 論
將程序進(jìn)行編譯仿真后進(jìn)行分析仿真圖可證明本設(shè)計(jì)所用的基于FPGA的在Quarters II軟件平臺(tái)上實(shí)現(xiàn)的搶答器是完全可行的。
這次畢業(yè)設(shè)計(jì)介紹了一種采用EDA技術(shù),基于FPGA并在QuartusⅡ工具軟件環(huán)境下使用Verilog硬件描述語(yǔ)言編寫(xiě)的數(shù)碼管顯示4路搶答器的電路設(shè)計(jì)、設(shè)計(jì)思路以及實(shí)現(xiàn)功能,經(jīng)過(guò)仿真驗(yàn)證符合搶答器的基本功能要求。
為了實(shí)現(xiàn)搶答器的基本功能,本次系統(tǒng)芯片主要采用EP2C8Q208,并設(shè)計(jì)了搶答判別模塊,計(jì)時(shí)模塊,分頻器模塊,計(jì)分模塊,鎖存器模塊,數(shù)碼管驅(qū)動(dòng)模塊等等。經(jīng)過(guò)仿真都可以驗(yàn)證各個(gè)模塊的功能都能滿足搶答器的基本要求。
這次設(shè)計(jì)的系統(tǒng)主要有以下幾個(gè)功能:
(1) 可以使四組選手同時(shí)進(jìn)行搶答,并鎖存搶答成功的那一組。
(2) 可以計(jì)算四組選手的得分情況。
(3) 可以計(jì)算提前搶答的選手,顯示其組號(hào),并給予報(bào)警提醒。
(4) 可以通過(guò)LED顯示出搶答成功的組別。
(5) 可以顯示答題時(shí)間,搶答剩余時(shí)間。
沒(méi)有解決的問(wèn)題是按鍵防抖動(dòng)模塊的設(shè)計(jì),接下來(lái)的研究和學(xué)習(xí)就是要解決這個(gè)問(wèn)題。
此次畢業(yè)設(shè)計(jì)通過(guò)查資料和收集有關(guān)的文獻(xiàn),培養(yǎng)了自學(xué)能力和動(dòng)手能力。并且由原先的別動(dòng)的接受知識(shí)轉(zhuǎn)化為主動(dòng)的尋求知識(shí),這可以說(shuō)是學(xué)習(xí)方法上的一個(gè)很大的突破。在以往的傳統(tǒng)的學(xué)習(xí)模式下,我們可能會(huì)記住很多的書(shū)本知識(shí),但是通過(guò)畢業(yè)論文,我們學(xué)會(huì)了如何將學(xué)到的知識(shí)轉(zhuǎn)化為自己的東西,學(xué)會(huì)了怎么更好地處理知識(shí)和實(shí)踐相結(jié)合的問(wèn)題。
任何涉及的控制系統(tǒng)都要經(jīng)過(guò)試驗(yàn)和實(shí)踐的考驗(yàn)方能得到完善,我們做畢業(yè)設(shè)計(jì)也是一樣,這畢業(yè)設(shè)計(jì)是對(duì)我們所學(xué)主頁(yè)知識(shí)的考驗(yàn),更是對(duì)我們應(yīng)用專業(yè)知識(shí)解決實(shí)際生產(chǎn)問(wèn)題能力的考驗(yàn)。通過(guò)畢業(yè)設(shè)計(jì),我更加堅(jiān)信只有擁有一定的毅力,認(rèn)真的學(xué)習(xí)態(tài)度,豐富的日常積累,正確處理問(wèn)題的能力,才能在以后的工作及生活中經(jīng)的住考驗(yàn)。