基于FPGA的乒乓球游戲機(jī)設(shè)計(jì)_第1頁
基于FPGA的乒乓球游戲機(jī)設(shè)計(jì)_第2頁
基于FPGA的乒乓球游戲機(jī)設(shè)計(jì)_第3頁
基于FPGA的乒乓球游戲機(jī)設(shè)計(jì)_第4頁
基于FPGA的乒乓球游戲機(jī)設(shè)計(jì)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、摘要在現(xiàn)代電子設(shè)計(jì)領(lǐng)域,微電子技術(shù)迅猛發(fā)展,無論是系統(tǒng)設(shè)計(jì)、電路設(shè)計(jì),還是芯片設(shè)計(jì),其設(shè)計(jì)的復(fù)雜度都在增加,傳統(tǒng)的手工設(shè)計(jì)方法已經(jīng)不能滿足設(shè)計(jì)者的要求,急需新的設(shè)計(jì)工具來解決。EDA技術(shù)的迅速發(fā)展順應(yīng)了時(shí)代的發(fā)展,使得電子設(shè)計(jì)自動化技術(shù)有了新的、快的發(fā)展,其重要程度日益突出。本文設(shè)計(jì)了基于FPGA的,用Verilog HDL語言描述的乒乓球游戲機(jī)的設(shè)計(jì)。它由控制模塊、數(shù)碼管的片選信號模塊、送數(shù)據(jù)模塊和7段譯碼器模塊組成,連接形成乒乓球游戲機(jī)的頂層電路。在Quartus軟件上用Verilog HDL語言分別對每個(gè)模塊進(jìn)行描述,然后在軟件上進(jìn)行編譯、仿真,最終實(shí)現(xiàn)乓乓球比賽的基本過程和規(guī)則,并能自

2、動裁判和計(jì)分,達(dá)到設(shè)計(jì)的要求。關(guān)鍵詞:EDA ;FPGA ;Verilog HDLAbstractIn the field of modern electronic design, the rapid development of microelectronic technology,whether the system design, circuit design and chip design, the design is more complex, the traditional manu

3、al design methods have been unable to meet the requirements of designers,in urgent need of new design tools to solve. The rapid development of EDA technology to the development of the times, the electronic design automation technology has been t

4、he development of new, fast, its importance is outstanding day by day. This paper is designed based on FPGA, the design of table tennis game is described with Verilog HDL language. It consists of control module, chip select signal modu

5、le, digital tube to send data module and the 7 segment decoder modules, the top-level circuit connected to form a table tennis game. In the Quartus software by Verilog HDL language for each module are described, and then

6、 the compiler, simulation in software, realize the basic process and the rules of table tennis table tennis competition, and can automatically judge and score, to meet the design requirements.Keywords: EDA;  FPGA;  Verilog

7、60;HDL第一章 引言1.1課題研究的背景隨著微電子技術(shù)的飛躍發(fā)展,無論是系統(tǒng)級設(shè)計(jì)、電路設(shè)計(jì)還是芯片設(shè)計(jì),它的復(fù)雜程度都在不斷的增加,而且它的發(fā)展速度也越來越快。這時(shí),僅僅依靠傳統(tǒng)的電子設(shè)計(jì)方法已經(jīng)不能滿足需求。EDA技術(shù)的興起與發(fā)展給電子設(shè)計(jì)帶來了革命性的變化,推動了微電子技術(shù)的迅猛發(fā)展,電子學(xué)進(jìn)入一個(gè)嶄新的時(shí)代。1.2課題研究的目的EDA技術(shù)是現(xiàn)代電子設(shè)計(jì)領(lǐng)域的一門技術(shù),它提供了基于計(jì)算機(jī)和信息技術(shù)的電路設(shè)計(jì)方法,不依托其他設(shè)計(jì)工具,僅以計(jì)算機(jī)為工具,在EDA軟件上完成設(shè)計(jì)、編譯、仿真。EDA技術(shù)正以空前的發(fā)展速度和規(guī)模滲透到各行各業(yè)。 在這個(gè)快節(jié)奏生活的社會,人們外出的休閑娛樂活動越

8、來少,而越來越多的電子游戲解決了這個(gè)問題,人們可以在家中玩各種休閑娛樂節(jié)目。所以設(shè)計(jì)了基于FPGA的兩人乒乓球游戲機(jī),讓人們能在忙碌中有時(shí)間體驗(yàn)下體育節(jié)目的樂趣。FPGA器件具有高開發(fā)周期短,高集成度,現(xiàn)場可修改等特點(diǎn),因此十分有必要對FPGA進(jìn)行詳細(xì)認(rèn)真的研究。硬件描述語言VHDL功能性強(qiáng),靈活性高,覆蓋面廣,用以甚高速集成電路硬件描述語言,具有很好的實(shí)用性??偟膩碚f,現(xiàn)代EDA技術(shù)的基本特征是采用高級語言(VHDL、Verilog HDL等)描述,具有系統(tǒng)級仿真和綜合的能力。它必將成為21世紀(jì)不可或缺的電子設(shè)計(jì)工具,必將影響這個(gè)世紀(jì)的發(fā)展。2.1EDA基礎(chǔ)2.1.1EDA定義 EDA是El

9、ectronics Design Automation(電子設(shè)計(jì)自動化)的縮寫,以計(jì)算機(jī)為工作平臺;在20世紀(jì)90年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測試(CAT)和計(jì)算機(jī)輔助工程(CAE)的定義發(fā)展而來的;是利用電子技術(shù)基礎(chǔ)、計(jì)算機(jī)技術(shù)、智能化技術(shù)等多種應(yīng)用技術(shù)而開發(fā)成的整套電子CAD軟件;是一種幫助從事電子元件產(chǎn)品和系統(tǒng)設(shè)計(jì)的電子工作者的綜合技術(shù)。2.1.2EDA技術(shù)的發(fā)展歷程 集成電路的飛快發(fā)展不斷給EDA技術(shù)提出更高的要求,對EDA技術(shù)的發(fā)展起了巨大的推動作用。從20世紀(jì)60年代中期開始,人們不斷地開發(fā)出各種計(jì)算機(jī)輔助設(shè)計(jì)工具來幫助設(shè)計(jì)人員進(jìn)行集成電路

10、和電子系統(tǒng)的設(shè)計(jì)。經(jīng)歷了計(jì)算機(jī)輔助設(shè)計(jì)、計(jì)算機(jī)輔助工程設(shè)計(jì)和電子系統(tǒng)設(shè)計(jì)自動化這3個(gè)階段,如圖2.1所示。圖2.1 EDA技術(shù)的發(fā)展歷程(1)CAD階段20世紀(jì)70年代,隨著中、小規(guī)模集成電路的興起和應(yīng)用,傳統(tǒng)的手工設(shè)計(jì)印刷電路板和集成電路的方法已經(jīng)不能滿足設(shè)計(jì)精度和效率的要求,于是電子設(shè)計(jì)工程師們開始在二維平面圖形上進(jìn)行計(jì)算機(jī)輔助設(shè)計(jì),這樣就產(chǎn)生了第一代EDA工具,設(shè)計(jì)者從繁雜、機(jī)械的、手工布局和布線工作中解放了出來。(2)CAE階段20世紀(jì)80年代以后,集成電路的規(guī)模越來越大,電子系統(tǒng)設(shè)計(jì)的復(fù)雜也在增加,電子設(shè)計(jì)自動化的工具逐步完善和發(fā)展起來,設(shè)計(jì)者們尤其在設(shè)計(jì)方法、設(shè)計(jì)工具集成化方面取得

11、了很大的進(jìn)步。為了適應(yīng)電子產(chǎn)品在規(guī)模和制作上的需要,以計(jì)算機(jī)仿真和自動布線為核心的第二代EDA技術(shù)應(yīng)運(yùn)而生。其特點(diǎn)是以軟件設(shè)計(jì)工具為核心,通過軟件完成產(chǎn)品的開發(fā)、設(shè)計(jì)、分析、生產(chǎn)和測試等工作。(3)ESDA階段 20世紀(jì)90年代,設(shè)計(jì)師們逐步從使用硬件轉(zhuǎn)向去設(shè)計(jì)硬件,從單個(gè)電子產(chǎn)品開發(fā)轉(zhuǎn)向系統(tǒng)級電子產(chǎn)品開發(fā)(及片上系統(tǒng)集成)。因此,這時(shí)的EDA工具是以系統(tǒng)級設(shè)計(jì)為核心,包括結(jié)構(gòu)綜合與系統(tǒng)行為級描述,系統(tǒng)仿真與測試驗(yàn)證,系統(tǒng)決策與文件生成,系統(tǒng)劃分與指標(biāo)分配等一整套的電子系統(tǒng)設(shè)計(jì)工具。這時(shí)的EDA工具不僅具有電子系統(tǒng)設(shè)計(jì)的能力,而且具有獨(dú)立于生產(chǎn)工藝和廠家的系統(tǒng)級設(shè)計(jì)能力。第三代EDA工具的出現(xiàn)

12、,極大地提高了電子系統(tǒng)設(shè)計(jì)的效率,讓設(shè)計(jì)工程師們開始能夠以概念來驅(qū)動設(shè)計(jì)工程的夢想。2.1.3EDA技術(shù)的發(fā)展趨勢 隨著微電子技術(shù)的不斷發(fā)展與進(jìn)步和市場需求的不斷增長,EDA技術(shù)在21世紀(jì)后得到了迅猛的發(fā)展,這一發(fā)展趨勢表現(xiàn)在以下幾個(gè)方面:(1)軟件IP核在微電子的產(chǎn)業(yè)領(lǐng)域、設(shè)計(jì)應(yīng)用領(lǐng)域和技術(shù)領(lǐng)域得到進(jìn)一步的鞏固與發(fā)展。(2)使支持硬件描述語言仿真和設(shè)計(jì)的EDA軟件不斷地強(qiáng)大起來。(3)EDA使得系統(tǒng)與器件、專用集成電路ASIC與FPGA、模擬與數(shù)字、行為與結(jié)構(gòu)、軟件與硬件等的界限越來越模糊。(4) EDA技術(shù)保護(hù)了設(shè)計(jì)者的電子設(shè)計(jì)成果的知識產(chǎn)權(quán)。(5)大規(guī)模的電子系統(tǒng)都是以EDA為工具設(shè)計(jì)的

13、,正以飛快的速度滲透到IP核模塊。(6)更大規(guī)模的可編程邏輯器件正在推向市場,使得設(shè)計(jì)更為廣泛與便捷。 2.1.4EDA技術(shù)的基本特征 總的來說,現(xiàn)代EDA技術(shù)是采用高級程序語言描述,具有系統(tǒng)級仿真和綜合的能力。它主要采用并行工程和“自頂向下”的設(shè)計(jì)方法,使開發(fā)人員從一開始就能考慮到產(chǎn)品生成周期的諸多方面,包括質(zhì)量、成本、開發(fā)時(shí)間及用戶的需求等。然后從系統(tǒng)設(shè)計(jì)開始,在頂層進(jìn)行功能方框圖的劃分和結(jié)構(gòu)的設(shè)計(jì),在方框圖一級進(jìn)行仿真、糾錯(cuò),并用VHDL、Verilog-HDL等硬件描述語言對頂層的系統(tǒng)進(jìn)行功能和行為上的描述,在系統(tǒng)一級進(jìn)行驗(yàn)證與仿真。最后,用邏輯綜合優(yōu)化工具生成具體的門級邏輯電路的網(wǎng)表

14、,其對應(yīng)的物理實(shí)現(xiàn)級可以是印刷電路板或者是專用的集成電路。近年來,硬件描述語言等設(shè)計(jì)數(shù)據(jù)格式逐步形成一種標(biāo)準(zhǔn),不同的設(shè)計(jì)風(fēng)格和應(yīng)用要求使得各具特色的EDA工具被集成在相同的設(shè)計(jì)方法上,EDA技術(shù)的設(shè)計(jì)框架日趨標(biāo)準(zhǔn)化。2.1.5EDA技術(shù)的基本工具 集成電路技術(shù)的不斷發(fā)展對EDA技術(shù)提出了更高的要求,促進(jìn)了EDA技術(shù)向更高的層次發(fā)展。但實(shí)際來說,EDA系統(tǒng)的設(shè)計(jì)能力一直難以滿足集成電路的要求。EDA工具的發(fā)展經(jīng)歷了兩個(gè)階段,即物理工具階段和邏輯工具階段。 現(xiàn)在,人們已經(jīng)開發(fā)了很多計(jì)算機(jī)輔助設(shè)計(jì)工具來幫助設(shè)計(jì)集成電路,常見的EDA工具有編輯器、仿真器、檢查/分析工具和優(yōu)化/綜合工具等,如圖2.2所

15、示。EDA設(shè)計(jì)工具檢查/分析工具編輯器仿真器優(yōu)化/綜合工具文字編輯器圖形編輯器統(tǒng)計(jì)型編輯器確定型仿真器圖2.2 EDA設(shè)計(jì)工具的分類2.1.6EDA技術(shù)的基本設(shè)計(jì)思路(1)EDA技術(shù)的電路級設(shè)計(jì) 電路級設(shè)計(jì)工作,首先,應(yīng)該先確定合適的設(shè)計(jì)方案,然后選擇方便實(shí)現(xiàn)該方案的元器件,接著就可根據(jù)所選元器件設(shè)計(jì)符合要求的電路原理圖,再接著進(jìn)行一次仿真。其目的是檢驗(yàn)此設(shè)計(jì)方案在元件模型庫支持下的功能方面是否正確,這樣,設(shè)計(jì)工作就進(jìn)入了軌道。第一次仿真通過后,就開始進(jìn)行PCB的自動布局布線,此布局布線要根據(jù)原理圖產(chǎn)生的電路連接網(wǎng)絡(luò)表來進(jìn)行。然后,對PCB進(jìn)行分析,將分析結(jié)果反饋給電路圖,并再次仿真。這樣,P

16、CB板在實(shí)際工作中的可行性就一目了然了。綜上,EDA的電路級設(shè)計(jì)可在實(shí)際的電子系統(tǒng)產(chǎn)生之前就了解其功能特性,從而降低其設(shè)計(jì)風(fēng)險(xiǎn),降低開發(fā)成本,縮短其開發(fā)周期,使得設(shè)計(jì)人員能夠更好、更方便的設(shè)計(jì)。電路級設(shè)計(jì)工作流程如圖2.3方案設(shè)計(jì)原理圖設(shè)計(jì)系統(tǒng)仿真自動布局PCB后仿真制造PCB元件符號庫元件模型庫系統(tǒng)實(shí)現(xiàn)圖2.3 電路級設(shè)計(jì)工作流程圖(2)EDA技術(shù)的系統(tǒng)級設(shè)計(jì) EDA技術(shù)的系統(tǒng)級設(shè)計(jì)方法是采用“自頂向下”的思路來設(shè)計(jì)的,讓開發(fā)者一開始就可了解到產(chǎn)品的開發(fā)周期、生產(chǎn)成本等。設(shè)計(jì)者首先從系統(tǒng)方案入手,進(jìn)行頂層的劃分和結(jié)構(gòu)設(shè)計(jì);然后,用VHDL語言等硬件描述語言對系統(tǒng)進(jìn)行深刻描述;接著就用編輯器將

17、其轉(zhuǎn)換成標(biāo)準(zhǔn)的VHDL文件,再接著驗(yàn)證系統(tǒng)功能設(shè)計(jì)的正確性;再接著就用邏輯綜合優(yōu)化工具生成具體的門級電路的網(wǎng)絡(luò)表;其后,進(jìn)行時(shí)序仿真;最后,就到了系統(tǒng)的物理實(shí)現(xiàn)級,將其變成FPGA等。EDA技術(shù)的系統(tǒng)級設(shè)計(jì)如圖2.4所示。方案設(shè)計(jì)系統(tǒng)規(guī)劃VHDL代碼輸入編譯器功能仿真綜合器時(shí)序仿真適配器編程文件FPGA等圖2.4 EDA技術(shù)的系統(tǒng)級設(shè)計(jì)2.1.7 EDA的設(shè)計(jì)流程EDA的設(shè)計(jì)流程是“自頂向下”的設(shè)計(jì)思路。設(shè)計(jì)流程如圖2.5所示。原理圖/HDL文本編輯綜合FPGA/CPLD適配FPGA/CPLD編程下載FPGA/CPLD器件和電路系統(tǒng)時(shí)序與功能門級仿真功能仿真邏輯綜合器結(jié)構(gòu)綜合器1.功能仿真2.

18、時(shí)序仿真1. ISP方式下載2. JTAG方式下載3. 針對SRAM結(jié)構(gòu)的配置4. OTP器件編程圖2.5 應(yīng)用于FPGA/CPLD的EDA開發(fā)流程2.2 FPGA的概念與特點(diǎn)FPGA(FieldProgrammable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。目前以硬件描述語言(Verilog 或 VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過簡單的綜合與布局,快速的燒錄至 FPGA 上進(jìn)行測試,是現(xiàn)代

19、 IC 設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些可編輯元件可以被用來實(shí)現(xiàn)一些基本的邏輯門電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flipflop)或者其他更加完整的記憶塊。 系統(tǒng)設(shè)計(jì)師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個(gè)電路試驗(yàn)板被放在了一個(gè)芯片里。一個(gè)出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計(jì)者而改變,所以FPGA可以完成所需要的邏輯功能。 FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復(fù)雜的設(shè)計(jì),而且消耗更多的電能。但是他們也有很多的優(yōu)點(diǎn)

20、比如可以快速成品,可以被修改來改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會提供便宜的但是編輯能力差的FPGA。因?yàn)檫@些芯片有比較差的可編輯能力,所以這些設(shè)計(jì)的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。 早在1980年代中期,F(xiàn)PGA已經(jīng)在PLD設(shè)備中扎根。CPLD和FPGA包括了一些相對大數(shù)量的可以編輯邏輯單元。CPLD邏輯門的密度在幾千到幾萬個(gè)邏輯單元之間,而FPGA通常是在幾萬到幾百萬。 CPLD和FPGA的主要區(qū)別是他們的系統(tǒng)結(jié)構(gòu)。CPLD是一個(gè)有點(diǎn)限制性的結(jié)構(gòu)。這個(gè)結(jié)構(gòu)由一個(gè)或者多個(gè)可編輯的結(jié)果之和的邏

21、輯組列和一些相對少量的鎖定的寄存器。這樣的結(jié)果是缺乏編輯靈活性,但是卻有可以預(yù)計(jì)的延遲時(shí)間和邏輯單元對連接單元高比率的優(yōu)點(diǎn)。而FPGA卻是有很多的連接單元,這樣雖然讓它可以更加靈活的編輯,但是結(jié)構(gòu)卻復(fù)雜的多。 CPLD和FPGA另外一個(gè)區(qū)別是大多數(shù)的FPGA含有高層次的內(nèi)置模塊(比如加法器和乘法器)和內(nèi)置的記憶體。一個(gè)因此有關(guān)的重要區(qū)別是很多新的FPGA支持完全的或者部分的系統(tǒng)內(nèi)重新配置。允許他們的設(shè)計(jì)隨著系統(tǒng)升級或者動態(tài)重新配置而改變。一些FPGA可以讓設(shè)備的一部分重新編輯而其他部分繼續(xù)正常運(yùn)行。FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置

22、邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。FPGA的基本特點(diǎn)主要有: 1)采用FPGA設(shè)計(jì)ASIC電路,用戶不需要投片生產(chǎn),就能得到合用的芯片。2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。 3)FPGA內(nèi)部有豐富的觸發(fā)器和IO引腳。 4)FPGA是ASIC電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。 5) FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。 可以說,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選

23、擇之一。FPGA是由存放在片內(nèi)RAM中的程序來設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對片內(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的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。Verilog HDL語言簡介 Verilog HD

24、L和VHDL是目前世界上最流行的兩種硬件描述語言(HDL:Hardware Description Language),均為IEEE標(biāo)準(zhǔn),被廣泛地應(yīng)用于基于可編程邏輯器件的項(xiàng)目開發(fā)。二者都是在20世紀(jì)80年代中期開發(fā)出來的,前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發(fā),后者由美國軍方研發(fā)。 HDL語言以文本形式來描述數(shù)字系統(tǒng)硬件結(jié)構(gòu)和行為,是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言,可以從上層到下層來逐層描述自己的設(shè)計(jì)思想。即用一系列分層次的模塊來表示復(fù)雜的數(shù)字系統(tǒng),并逐層進(jìn)行驗(yàn)證仿真,再把具體的模塊組合由綜合工具轉(zhuǎn)化成門級網(wǎng)

25、表,接下去再利用布局布線工具把網(wǎng)表轉(zhuǎn)化為具體電路結(jié)構(gòu)的實(shí)現(xiàn)。目前,這種自頂向下的方法已被廣泛使用。概括地講,HDL語言包含以下主要特征: Verilog HDL語言既包含一些高級程序設(shè)計(jì)語言的結(jié)構(gòu)形式,同時(shí)也兼顧描述硬件線路連接的具體結(jié)構(gòu)。 通過使用結(jié)構(gòu)級行為描述,可以在不同的抽象層次描述設(shè)計(jì)。Verilog HDL語言采用自頂向下的數(shù)字電路設(shè)計(jì)方法,主要包括3個(gè)領(lǐng)域5個(gè)抽象層次。 Verilog HDL語言是并行處理的,具有同一時(shí)刻執(zhí)行多任務(wù)的能力。這和一般高級設(shè)計(jì)語言(例如C語言等)串行執(zhí)行的特征是不同的。 Verilog HDL語言具有時(shí)序的概念。一般的高級編程語言是沒有時(shí)序概念的,但在

26、硬件電路中從輸入到輸出總是有延時(shí)存在的,為了描述這一特征,需要引入時(shí)延的概念。HDL語言不僅可以描述硬件電路的功能,還可以描述電路的時(shí)序。 2.1.1 Verilog HDL語言的歷史 1983年,Gateway Design Automation(GDA)硬件描述語言公司的Philip Moorby首創(chuàng)了Verilog HDL。后來Moorby成為Verilog HDL-XL的主要設(shè)計(jì)者和Cadence公司的第一合伙人。1984至1986年,Moorby設(shè)計(jì)出第一個(gè)關(guān)于Verilog HDL的仿真器,并提出了用于快速門級仿真的XL算法,使Verilog HDL語言得到迅速發(fā)展。1987年Sy

27、nonsys公司開始使用Verilog HDL行為語言作為綜合工具的輸入。1989年Cadence公司收購了Gateway公司,Verilog HDL成為Cadence公司的私有財(cái)產(chǎn)。1990年初,Cadence公司把Verilog HDL和Verilog HDL-XL分開,并公開發(fā)布了Verilog HDL。隨后成立的OVI(Open Verilog HDL International)組織負(fù)責(zé)Verilog HDL的發(fā)展并制定有關(guān)標(biāo)準(zhǔn),OVI由Verilog HDL的使用者和CAE供應(yīng)商組成。1993年,幾乎所有ASIC廠商都開始支持Verilog HDL,并且認(rèn)為Verilog HDL-

28、XL是最好的仿真器。同時(shí),OVI推出2.0版本的Verilong HDL規(guī)范,IEEE則將OVI的Verilog HDL2.0作為IEEE標(biāo)準(zhǔn)的提案。1995年12月,IEEE制定了Verilog HDL的標(biāo)準(zhǔn)IEEE1364-1995。目前,最新的Verilog語言版本是2000年IEEE公布的Verilog 2001標(biāo)準(zhǔn),其大幅度地提高了系統(tǒng)級和可綜合性能。Verilog HDL的主要能力 Verilog HDL既是一種行為描述語言,也是一種結(jié)構(gòu)描述語言。如果按照一定的規(guī)則和風(fēng)格編寫代碼,就可以將功能行為模塊通過工具自動轉(zhuǎn)化為門級互連的結(jié)構(gòu)模塊。這意味著利用V

29、erilog語言所提供的功能,就可以構(gòu)造一個(gè)模塊間的清晰結(jié)構(gòu)來描述復(fù)雜的大型設(shè)計(jì),并對所需的邏輯電路進(jìn)行嚴(yán)格的設(shè)計(jì)。 下面列出的是Verilog語言的主要功能:  1.可描述順序執(zhí)行或并行執(zhí)行的程序結(jié)構(gòu);  2.用延遲表示式或事件表達(dá)式來明確地控制過程的啟動時(shí)間;3.通過命名的事件來觸發(fā)其他過程里的激活行為或停止行為; 4.提供了條件和循環(huán)等程序結(jié)構(gòu);  5.提供了可帶參數(shù)且非零延續(xù)時(shí)間的任務(wù)程序結(jié)構(gòu); 6.提供了可定義新的操作符的函數(shù)結(jié)構(gòu);  7.提供了用于建立表達(dá)式的算術(shù)運(yùn)算符、邏

30、輯運(yùn)算符和位運(yùn)算符;  8.提供了一套完整的表示組合邏輯基本元件的原語;  9.提供了雙向通路和電阻器件的描述;  10.可建立MOS器件的電荷分享和衰減模型;  11.可以通過構(gòu)造性語句精確地建立信號模型;此外,Verilog HDL語言還有一個(gè)重要特征就是:和C語言風(fēng)格有很多的相似之處,學(xué)習(xí)起來比較容易。 Verilog HDL和VHDL的區(qū)別  Verilog HDL和VHDL都是用于邏輯設(shè)計(jì)的硬件描述語言。VHDL在1987年成為IEEE標(biāo)準(zhǔn),Ve

31、rilog HDL則在1995年才成為IEEE標(biāo)準(zhǔn),這是因?yàn)榍罢呤敲绹姺浇M織開發(fā)的,而后者則是從民間公司轉(zhuǎn)化而來,要成為國際標(biāo)準(zhǔn)就必須放棄專利。相比而言,Verilog HDL具有更強(qiáng)的生命力。  Verilog HDL和VHDL的相同點(diǎn)在于:都能形式化地抽象表示電路的行為和結(jié)構(gòu);支持邏輯設(shè)計(jì)中層次與范圍的描述;可以簡化電路行為的描述;具有電路仿真和驗(yàn)證機(jī)制;支持電路描述由高層到低層的綜合轉(zhuǎn)換;與實(shí)現(xiàn)工藝無關(guān);便于管理和設(shè)計(jì)重用。  但Verilog HDL和VHDL又有各自的特點(diǎn),由于Verilog 

32、HDL推出較早,因而擁有更廣泛的客戶群體、更豐富的資源。Verilog HDL還有一個(gè)優(yōu)點(diǎn)就是容易掌握,如果具有C語言學(xué)習(xí)的基礎(chǔ),很快就能夠掌握。而VHDL需要Ada編程語言基礎(chǔ),一般需要半年以上的專業(yè)培訓(xùn)才能夠掌握。傳統(tǒng)觀點(diǎn)認(rèn)為Verilog HDL在系統(tǒng)級抽象方面較弱,不太適合特大型的系統(tǒng)。但經(jīng)過Verilog 2001標(biāo)準(zhǔn)的補(bǔ)充之后,系統(tǒng)級表述性能和可綜合性能有了大幅度提高。當(dāng)然,這兩種語言也仍處于不斷完善的過程中,都在朝著更高級描述語言的方向前進(jìn)。 Verilog HDL設(shè)計(jì)方法 1. 自下而上的設(shè)計(jì)方法 

33、 自下而上的設(shè)計(jì)是傳統(tǒng)的設(shè)計(jì)方法,是從基本單元出發(fā),對設(shè)計(jì)進(jìn)行逐層劃分的過程。這種設(shè)計(jì)方法與用電子元件在模擬實(shí)現(xiàn)板上建立一個(gè)系統(tǒng)的步驟有密切的關(guān)系。優(yōu)、缺點(diǎn)分別如下: 優(yōu)點(diǎn) :設(shè)計(jì)人員對這種設(shè)計(jì)方法比較熟悉;實(shí)現(xiàn)各個(gè)子模塊所需的時(shí)間較短。    缺點(diǎn)  :對系統(tǒng)的整體功能把握不足;由于必須先對多個(gè)子模塊進(jìn)行設(shè)計(jì),因此實(shí)現(xiàn)整個(gè)系統(tǒng)的功能所需的時(shí)間長;另外,對設(shè)計(jì)人員之間相互協(xié)作也有較高的要求。  2自上而下的設(shè)計(jì)方法  自上而下的設(shè)計(jì)是從系統(tǒng)級開始,把系統(tǒng)劃分為基本單

34、元,然后再把基本單元劃分為下一層次的基本單元,直到可用EDA元件實(shí)現(xiàn)為止。這種方法的優(yōu)、缺點(diǎn)如下。  優(yōu)點(diǎn):  在設(shè)計(jì)周期開始就做好了系統(tǒng)分析;由于設(shè)計(jì)的主要仿真和調(diào)試過程是在高層完成的,所以能夠早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)上的錯(cuò)誤,避免了設(shè)計(jì)工作的浪費(fèi),方便了系統(tǒng)的劃分和整個(gè)項(xiàng)目的管理,可減少設(shè)計(jì)人員勞動,避免了重復(fù)設(shè)計(jì)。 缺點(diǎn)  :得到的最小單元不標(biāo)準(zhǔn),且制造成本高。  3混合的設(shè)計(jì)方法 復(fù)雜數(shù)字邏輯電路和系統(tǒng)設(shè)計(jì)過程,通常是以上兩種設(shè)計(jì)方法的結(jié)合。設(shè)計(jì)時(shí)需要考慮多個(gè)目標(biāo)的綜合平衡。在高層系統(tǒng)用自上而下

35、的設(shè)計(jì)方法實(shí)現(xiàn),而使用自下而上的方法從庫元件或以往設(shè)計(jì)庫中調(diào)用已有的設(shè)計(jì)單元?;旌显O(shè)計(jì)方法兼有以上兩種方法的優(yōu)點(diǎn),并且可使用先進(jìn)的矢量測試方法。第二章 設(shè)計(jì)思想 1.基本原理 用8個(gè)(或更多個(gè))LED排成一條直線,以中點(diǎn)為界,兩邊各代表參賽雙方的位置,其中一只點(diǎn)亮的LED指示球的當(dāng)前位置,點(diǎn)亮的LED依此從左到右,或從右到左,其移動的速度應(yīng)能調(diào)節(jié)。當(dāng)“球”(點(diǎn)亮的那只LED)運(yùn)動到某方的最后一位時(shí),參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),即表示啟動球拍擊球。若擊中,則球向相反方向移動;若未擊中,則對方得1分。一方得分時(shí),電路自動響鈴3秒,這期間發(fā)球無效,等鈴聲停止后方能繼續(xù)比賽。設(shè)置自動記

36、分電路,甲、乙雙方各用2位數(shù)碼管進(jìn)行記分顯示,每計(jì)滿21分為1局。甲、乙雙方各設(shè)一個(gè)發(fā)光二極管,表示擁有發(fā)球權(quán),每隔5次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才有效。根據(jù)乒乓球比賽的過程和規(guī)則,首先游戲開始,如果一方非正確擊球則另一方加分,當(dāng)分?jǐn)?shù)大于21時(shí)獲勝,游戲結(jié)束,我們把設(shè)計(jì)流程規(guī)定如圖1.1所示。狀態(tài)機(jī)設(shè)置了7個(gè)狀態(tài),分別是“等待發(fā)球狀態(tài)”,“第一盞燈亮狀態(tài)”,“第八盞燈亮狀態(tài)”,“球向乙移動狀態(tài)”,“ 球向甲移動狀態(tài)”,“允許甲擊球狀態(tài)”,“允許乙擊球狀態(tài)”。這是該程序中起決定作用的七個(gè)狀態(tài)。開始的時(shí)候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉(zhuǎn)移到“第一盞燈亮狀態(tài)”,若乙發(fā)球則轉(zhuǎn)移到“第八

37、盞燈亮狀態(tài)”,具體說明以甲球?yàn)槔?若發(fā)球后乙沒有提前擊球規(guī)定球移動到對方第一個(gè)發(fā)光二極管時(shí)允許擊球,那么狀態(tài)機(jī)從“第一盞燈亮狀態(tài)”轉(zhuǎn)移到“球向乙移動狀態(tài)”。若在“球向乙移動狀態(tài)”乙仍然沒有提前擊球,狀態(tài)就轉(zhuǎn)移到“允許乙擊球狀態(tài)”,在此狀態(tài)下,如果乙擊球了,那么狀態(tài)就轉(zhuǎn)移到“ 球向甲移動狀態(tài)”。在“第一盞燈亮狀態(tài)”, “球向乙移動狀態(tài)”中,如果乙擊球了 ,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球狀態(tài)”等待發(fā)球,“ 球向甲移動狀態(tài)”之后的過程和前面的過程只不過是甲乙角色的調(diào)換而已。2.設(shè)計(jì)框圖圖1流程圖圖2 基本原理第三章 設(shè)計(jì)步驟和調(diào)試過程 1、模塊設(shè)計(jì)和相應(yīng)模塊代碼 (1)發(fā)球選擇模塊

38、的設(shè)計(jì) 游戲開始時(shí),必須先決定發(fā)球權(quán)在哪一方。同時(shí),在游戲進(jìn)行的過程中,必須能夠正確交換甲乙雙方發(fā)球權(quán)。相應(yīng)的代碼如下:module Permissions(clk,res,in1,in2,out1,out2,en_jia,en_yi);input clk,res,in1,in2;output out1,out2,en_jia,en_yi;reg out1,out2,en_jia,en_yi;wire w1,w2,a,b;or u2(w1,in1,in2);add4 u1(.res(res),.c(w1),.cnt(w2);select u3(.cnt(w2),.a(a),.b(b);para

39、meter1:0 s0=1'b00,s1=1'b01;reg1:0 current_state,next_current;always(posedge clk or negedge res)begin if(!res) current_state<=s0; /復(fù)位else current_state<=next_current;endalways(current_state or next_current)begin case(current_state)s0: begin out1<=1;en_jia<=1;en_yi<=0;out2<=0

40、; if(a=1) next_current<=s1;else next_current<=s0;ends1: begin out1<=0;en_jia<=0;en_yi<=1; out2<=1; if(b=1) next_current<=s0;else next_current<=s1;endendcaseendendmodule(2)狀態(tài)機(jī)編程實(shí)現(xiàn) 狀態(tài)機(jī)設(shè)置了7個(gè)狀態(tài),它們代表的具體數(shù)值依次是0到6。在波形模擬圖中是用數(shù)值來表示狀態(tài)的。 在整個(gè)程序中,狀態(tài)機(jī)起的是中央控制器的作用,由它控制的信號來影響整個(gè)程序中的其他相關(guān)部分,如記分部分,

41、發(fā)光二極管部分。乒乓球游戲機(jī)中有兩個(gè)計(jì)數(shù)器,分別記憶甲和乙的得分,用發(fā)光二極管的輪流發(fā)光表示球的移動軌跡。狀態(tài)機(jī)的進(jìn)程如下:module state_machine (clk,res,key1,key2,led,jia,yi,en_jia,en_yi,win,t1,t2);input clk,res,key1,key2,en_jia,en_yi,win,t1;output jia,yi,t2;reg jia,yi,t2;output7:0 led;reg7:0 led;parameter7:0 s0=8'b0000_0001,s1=8'b0000_0010,s2=8'b

42、0000_0100,s3=8'b0000_1000, s4=8'b0001_0000,s5=8'b0010_0000,s6=8'b0100_0000,s7=8'b1000_0000;reg7:0 current_state,next_current;/*-每個(gè)時(shí)鐘沿轉(zhuǎn)跳一次邏輯狀態(tài)-*/always(posedge clk or negedge res)begin if(res) current_state<=s0; else current_state<=next_current;end/*-產(chǎn)生下一狀態(tài)的組合邏輯-*/always(cur

43、rent_state)begincase(current_state)s0: if(key1=1)&&(en_jia=1) next_current<=s1; else if(key2=1)&&(en_yi=1) next_current<=s2; else next_current<=s0;s1: if(led=8'b0000_0001) next_current<=s3;else next_current<=s1;s2: if(led=8'b1000_0000) next_current<=s4;else

44、next_current<=s2;s3:if(t1=1)&&(key2=1) next_current<=s2; else next_current<=s5;s4: if(t1=1)&&(key1=1) next_current<=s1;else next_current<=s6;s5: if(win=1) next_current<=s7;elseif(en_jia=1)|(en_yi=1) next_current<=s0;else next_current<=s5;s6: if(win=1) next_cur

45、rent<=s7;elseif(en_jia=1)|(en_yi=1) next_current<=s0;else next_current<=s6;endcaseend/*-狀態(tài)機(jī)輸出的組合邏輯-*/always(posedge clk or negedge res)begin if(res) begin led<=8'b0000_0000; t2<=0; jia<=0; yi<=0;endelse begin case(current_state) s0:led<=8'b0000_0000;s1: begin led=8

46、9;b1000_0000; #1000 led=8'b0100_0000; #1000 led=8'b0010_0000; #1000 led=8'b0001_0000; #1000 led=8'b0000_1000; #1000 led=8'b0000_0100; #1000 led=8'b0000_0010; #1000 led=8'b0000_0001;end s2: begin led=8'b0000_0001; #1000 led=8'b0000_0010; #1000 led=8'b0000_0100;

47、 #1000 led=8'b0000_1000; #1000 led=8'b0001_0000; #1000 led=8'b0010_0000; #1000 led=8'b0100_0000; #1000 led=8'b1000_0000;end s3: begin led<=8'b0000_0001;t2<=1;end s4: begin led<=8'b1000_0000;t2<=1;end s5: jia<=1; s6: yi<=1;s7: begin led=8'b0000_0001;

48、#1000 led=8'b0000_0010; #1000 led=8'b0000_0100; #1000 led=8'b0000_1000; #1000 led=8'b0001_0000; #1000 led=8'b0010_0000; #1000 led=8'b0100_0000; #1000 led=8'b1000_0000; #1000 led=8'b0100_0000; #1000 led=8'b0010_0000; #1000 led=8'b0001_0000; #1000 led=8'b000

49、0_1000; #1000 led=8'b0000_0100; #1000 led=8'b0000_0010; #1000 led=8'b0000_0001;endendcaseendendendmodule(3)得分判斷模塊的設(shè)計(jì)在一方并沒有擊球成功時(shí),需要進(jìn)行判定,并且鳴響蜂鳴器來提示這個(gè)球某一方?jīng)]有擊中,而另一方得分。于是編寫相應(yīng)程序。module goal(res,buzz,jia,yi,en);input res,jia,yi;output buzz,en;reg buzz,en;reg12:0 q;wire w;or u1(w,jia,yi);always(

50、posedge w or negedge res)begin if(res) begin q<=0;en<=1;buzz<=0; endelse begin if(q=2999) begin en<=1; q<=0;buzz<=0; end else begin q<=q+1; en<=0;buzz<=1; end endendendmodule(4)記分譯碼器的設(shè)計(jì) 七段譯碼器是在數(shù)學(xué)電路設(shè)計(jì)中經(jīng)常用到的顯示電路。所謂七段譯碼器,其實(shí)是由7段發(fā)光二極管組成的用于顯示數(shù)字的器件。記分譯碼器(encoder):由于記分需要顯示出來,

51、所以要使用七段譯碼器。而狀態(tài)機(jī)中的記分是由2個(gè)4位二進(jìn)制碼來表示的。以下程序就是實(shí)現(xiàn)從4位二進(jìn)制碼轉(zhuǎn)換成七段譯碼顯示。module encoder(in1,in2,out1,out2);input3:0 in1,in2;output7:0 out1,out2;reg7:0 out1,out2;always(*) case(in1) /共陽數(shù)碼管編碼 8'b0000:out1=8'b1100_0000; /08'b0001:out1=8'b1111_1001; /18'b0010:out1=8'b1010_0100; /28'b0011:o

52、ut1=8'b1011_0000; /38'b0100:out1=8'b1001_1001; /48'b0101:out1=8'b1001_0010; /58'b0110:out1=8'b1000_0010; /68'b0111:out1=8'b1111_1000; /7 8'b1000:out1=8'b1000_0000; /88'b1001:out1=8'b1001_0000; /9default:out1=8'b1100_0000;endcasealways(*) case(i

53、n2) 8'b0000:out2=8'b1100_0000; /08'b0001:out2=8'b1111_1001; /18'b0010:out2=8'b1010_0100; /28'b0011:out2=8'b1011_0000; /38'b0100:out2=8'b1001_1001; /48'b0101:out2=8'b1001_0010; /58'b0110:out2=8'b1000_0010; /68'b0111:out2=8'b1111_1000; /7

54、 8'b1000:out2=8'b1000_0000; /88'b1001:out2=8'b1001_0000; /9default:out2=8'b1100_0000; endcaseendmodule這個(gè)記分譯馬電路是針對乒乓球游戲機(jī)的特點(diǎn)進(jìn)行的特別設(shè)計(jì),采用的是全部列舉的方法。(4)頂層的設(shè)計(jì) 頂層綜合各個(gè)模塊設(shè)計(jì),這樣就完成了數(shù)字乒乓球游戲機(jī)的VHDL源程序編寫。module table_tennis(clk,res,key1,key2,led,smg1,smg2,smg3,smg4,buzz,jia_led,yi_led);input clk,res,key1,key2;output buzz,jia_led,yi_led;output7:0 led,smg1,smg2,smg3,smg4; wire

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論