找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6565|回復(fù): 3
收起左側(cè)

基于FPGA的搶答器設(shè)計(jì)論文

[復(fù)制鏈接]
ID:322478 發(fā)表于 2018-5-4 23:22 | 顯示全部樓層 |閱讀模式
基于FPGA的搶答器設(shè)計(jì)

摘 要

本文介紹了一種采用EDA技術(shù),基于FPGA并在QuartusⅡ工具軟件環(huán)境下使用Verilog硬件描述語(yǔ)言編寫(xiě)的數(shù)碼管顯示4路搶答器的電路設(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)備。
系統(tǒng)芯片主要采用EP2C8Q208,由搶答判別模塊,計(jì)時(shí)模塊,分頻器模塊,計(jì)分模塊,鎖存器模塊,數(shù)碼管驅(qū)動(dòng)模塊組成。經(jīng)過(guò)編譯及其仿真所設(shè)計(jì)的程序,該設(shè)計(jì)的搶答器基本能夠?qū)崿F(xiàn)此次設(shè)計(jì)的要求,從而完成了搶答器應(yīng)具備的功能。

目 錄
前 言
第1章 緒論
§1.1              選題背景
§1.1.1              EDA技術(shù)發(fā)展
§1.1.2              課題研究的必要性
§1.2              研究課題的內(nèi)容
第2章 系統(tǒng)方案設(shè)計(jì)
§2.1              FPGA簡(jiǎn)介
§2.1.1              FPGA芯片結(jié)構(gòu)
§2.1.2              FPGA設(shè)計(jì)流程
§2.1.3              FPGA軟件設(shè)計(jì)
§2.1.4              FPGA的應(yīng)用
§2. 2Verilog HDL概述
§2.2.1              Verilog HDL簡(jiǎn)介
§2.2.2              Verilog HDL主要功能
§2.2.3              Verilog HDL與VHDL的區(qū)別
§2.3              搶答器總體設(shè)計(jì)方案
§2.3.1              搶答器構(gòu)成
§2.3.2              搶答器工作原理
第3章 搶答器模塊設(shè)計(jì)與實(shí)現(xiàn)
§3.1              搶答判別模塊
§3.2              數(shù)碼管驅(qū)動(dòng)模塊
§3.3              計(jì)時(shí)模塊
§3.4              分頻器模塊
§3.5              計(jì)分模塊
§3.6              鎖存模塊
§3.7              總體模塊
第4章 搶答器程序設(shè)計(jì)、實(shí)現(xiàn)與仿真
§4.1              搶答判別程序設(shè)計(jì)
§4.2              數(shù)碼管驅(qū)動(dòng)模塊程序設(shè)計(jì)
§4.3              計(jì)時(shí)模塊程序設(shè)計(jì)
§4.4              分頻模塊程序設(shè)計(jì)
§4.5              計(jì)分模塊程序設(shè)計(jì)
§4.6              鎖存模塊程序設(shè)計(jì)
結(jié) 論
參考文獻(xiàn)
致 謝
附 錄

前 言
隨著人類社會(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ù)發(fā)展
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ì)是十分必要的。

  •          研究課題的內(nèi)容
本次設(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)備。


  • 系統(tǒng)方案設(shè)計(jì)


  •          FPGA簡(jiǎ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引腳。
  • FPGAASIC電路中設(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芯片結(jié)構(gòu)
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ò)濾功能。

  •      FPGA設(shè)計(jì)流程
一般來(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ì)
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)用
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概述

  •      Verilog HDL簡(jiǎn)介
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ì)描述。

  •      Verilog HDL主要功能
  • 基本邏輯門(mén),例如and、ornand等都內(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 HDLVHDL的區(qū)別
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):
  • 語(yǔ)法特點(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ǔ)句較為晦澀,使用難度較大。
  • 運(yùn)用群體
由于Verilog HDL早在1983年就已推出,至今已有20多年的應(yīng)用歷史,因而Verilog HDL擁有更加廣泛的設(shè)計(jì)群體,成熟的資源也比VHDL豐富。
  • 優(yōu)勢(shì)不同
傳統(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ì)方案

  •      搶答器構(gòu)成
本次設(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ù)碼管驅(qū)動(dòng)模塊
數(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)表
2進(jìn)制數(shù)
7位譯碼
0000
1111110
0001
0110000
0010
1101101
0011
1111001
0100
0110011
0101
1011011
0110
1011111
0111
1110000
1000
1111111
1001
1111011


數(shù)碼管驅(qū)動(dòng)模塊的輸入是4位2進(jìn)制數(shù),輸出則是7位譯碼數(shù)據(jù)。現(xiàn)其邏輯框圖如3-3所示。
圖3-3 數(shù)碼管驅(qū)動(dòng)模塊邏輯框圖

  •          計(jì)時(shí)模塊
該模塊主要是規(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ì)分模塊
計(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)與仿真


  •          搶答判別程序設(shè)計(jì)
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)備。

  •          分頻模塊程序設(shè)計(jì)
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)下去,就起到了分頻的作用。

  •          計(jì)分模塊程序設(shè)計(jì)
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。

  •          鎖存模塊程序設(shè)計(jì)
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)。


完整的Word格式文檔51黑下載地址:
4 answering device circuit .doc (477.5 KB, 下載次數(shù): 74)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:365883 發(fā)表于 2018-7-5 21:14 來(lái)自手機(jī) | 顯示全部樓層
樓樓 我試了下這個(gè)程序 編譯好多錯(cuò)啊
回復(fù)

使用道具 舉報(bào)

ID:411940 發(fā)表于 2018-11-15 17:44 來(lái)自手機(jī) | 顯示全部樓層
si_wei_yi_wei?
回復(fù)

使用道具 舉報(bào)

ID:433055 發(fā)表于 2018-11-25 21:10 | 顯示全部樓層
求大神給下程序,論文要用,希望抬一手
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表