基于FPGA的交通燈控制器設(shè)計4(完整資料)_第1頁
基于FPGA的交通燈控制器設(shè)計4(完整資料)_第2頁
基于FPGA的交通燈控制器設(shè)計4(完整資料)_第3頁
基于FPGA的交通燈控制器設(shè)計4(完整資料)_第4頁
基于FPGA的交通燈控制器設(shè)計4(完整資料)_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于FPGA的交通燈控制器設(shè)計4(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

引言基于FPGA的交通燈控制器設(shè)計4(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)隨著城鄉(xiāng)的經(jīng)濟發(fā)展,車輛的數(shù)量在迅速的增加,交通阻塞的問題已經(jīng)嚴重影響了人們的出行。現(xiàn)在的社會是一個數(shù)字化程度相當高的社會,很多的系統(tǒng)設(shè)計師都愿意把自己的設(shè)計設(shè)計成集成電路芯片,芯片可以在實際中方便使用。隨著EDA技術(shù)的發(fā)展,嵌入式通用及標準FPGA器件的呼之欲出,片上系統(tǒng)(SOC)已經(jīng)近在咫尺。FPGA/CPLD以其不可替代的地位及伴隨而來的極具知識經(jīng)濟特征的IP芯片產(chǎn)業(yè)的崛起,正越來越受到業(yè)內(nèi)人士的密切關(guān)注.FPGA就是在這樣的背景下誕生的,它在數(shù)字電路中的地位也越來越高,這樣迅速的發(fā)展源于它的眾多特點.交通等是保障交通道路暢通和安全的重要工具,而控制器是交通燈控制的主要部分,它可以通過很多種方式來實現(xiàn)。在這許許多多的方法之中,使用FPGA和VHDL語言設(shè)計的交通燈控制器,比起其他的方法顯得更加靈活、易于改動,并且它的設(shè)計周期性更加短。城市中的交通事故頻繁發(fā)生,威脅著人們的生命健康和工作生活,交通阻塞問題在延遲出行時間的同時,還會造成更多的空氣污染和噪聲污染。在這種情況下,根據(jù)每個道路的實際情況來設(shè)置交通燈,使道路更加通暢,這對構(gòu)建和諧暢通的城市交通有著十分重要的意義。第一章軟件介紹1。1QuartusⅡ介紹本次畢業(yè)設(shè)計是基于FPGA下的設(shè)計,F(xiàn)PGA是現(xiàn)場可編程門陣列,FPGA開發(fā)工具種類很多、智能化高、功能非常的強大。可編程QuartusⅡ是一個為邏輯器件編程提供編程環(huán)境的軟件,它能夠支持VHDL、VerilogHDL語言的設(shè)計。在該軟件環(huán)境下,設(shè)計者可以實現(xiàn)程序的編寫、編譯、仿真、圖形設(shè)計、圖形的仿真等許許多多的功能。在做交通燈控制器設(shè)計時選擇的編程語言是VHDL語言。在這里簡單的介紹一下QuartusⅡ的基本部分。圖1-1-1是一幅啟動界面的圖片.在設(shè)計前需要對軟件進行初步的了解,在圖中已經(jīng)明顯的標出了每一部分的名稱。圖1-1-1啟動界面開始設(shè)計前我們需要新建一個工程,首先要在啟動界面上的菜單欄中找到File,單擊它選擇它下拉菜單中的“NewProjectWizard”時會出現(xiàn)圖1—1—2所顯示的對話框,把項目名稱按照需要填好后單擊Next,便會進入圖1-1-3顯示的界面。圖1-1-2創(chuàng)建工程框圖1-1—3芯片選擇框根據(jù)自己選擇的實驗設(shè)備選擇好相應(yīng)的芯片型號點擊Next,進入下一個步驟當出現(xiàn)圖1-1—5時,點擊“Finish”后這個工程就建立好了。圖1-1-4仿真器選擇框圖1-1-5對話框建好工程后開始進行設(shè)計,首先在圖1-1-6中單擊file后選擇new,接著會出現(xiàn)圖1-1-7,在交通燈控制器的設(shè)計中我們選擇的是VHDLFile,當出現(xiàn)圖1-1-8時就可以把編輯的程序敲入編輯器中。圖1-1—6工程建好后的界面圖1-1-7新建文件類型選擇框圖1—1-8程序編輯框在第一章中對QuartusⅡ軟件的使用做一個簡單介紹,設(shè)計中的編譯和仿真步驟在后面的幾章中會做出介紹。第二章交通燈控制器設(shè)計的概述2.1控制器設(shè)計描述2.1.1設(shè)計任務(wù)要求設(shè)計交通燈控制器,分別在四個方向都安裝紅、黃、綠三種顏色的交通指示燈,紅燈表示停止,綠燈表示通行,黃燈表示左轉(zhuǎn)和直行將要禁止通行,四個方向分別還安裝有倒計時的計時器。2。1.2設(shè)計要求東西方向和南北方向各有組指示燈,紅燈亮的時間為20S,黃燈亮的時間為5S,綠燈亮的時間為25S。三種燈亮滅的順序為紅燈、綠燈、黃燈。第三章交通燈控制器的設(shè)計過程3。1設(shè)計方案本設(shè)計課題用FPGA來實現(xiàn)智能交通燈的設(shè)計,本設(shè)計現(xiàn)要研究的問題主要有:智能交通燈的設(shè)計方案;各功能模塊的設(shè)計與實現(xiàn);如何用VHDL編寫源程序以及進行系統(tǒng)仿真。3.1。1框圖設(shè)計交通燈控制器設(shè)計的框圖中包括控制器、分頻器、顯示器、指示燈、譯碼器、位選器。當?shù)褂嫊r為零時,控制器改變交通燈的顏色,同時倒計時開始進入下一個倒計時.當有緊急情況出現(xiàn)的時候,四面的交通燈都會變?yōu)榧t燈,緊急情況的處理在設(shè)計中是依靠HOLD鍵來實現(xiàn)的。圖3—1-1-1是交通燈設(shè)計的設(shè)計框圖特殊情況特殊情況計時器位選器顯示器(東、西、南、北)譯碼器控制器指示燈圖3—1—1-1交通燈設(shè)計的設(shè)計框圖系統(tǒng)的紅、黃、綠燈顯示的總時間為50s,具體的亮燈時間和亮燈順序看表3—1-1-2表3-1-1-2交通燈亮燈順序與亮燈時間安排東西方向(A燈)A綠燈亮(20s)A黃燈亮(21—25s)A紅燈亮(26—50s)南北方向(B燈)B紅燈亮(0—25s)B綠燈亮(26-45s)B黃燈亮(46—50s)3。1.2工程流程圖創(chuàng)建一個新的工程創(chuàng)建一個新的工程創(chuàng)建VHDL語言文件保存輸入的程序?qū)⒊绦蜉斎胛募袑Τ绦蜻M行編譯,有錯誤的要進行修改、再編譯,直至沒有錯對程序進行波形的仿真進行圖形電路設(shè)計、保存、編譯、波形仿真、管腳鎖定進行硬件仿真圖3-1-2工程流程圖3。1.3時序圖的假象在時序圖中,上升沿有效,即為“1"時燈亮,好比RedA為上升沿(“1”)時A方向的紅燈是亮的,相對的GreenB也為上升沿(“1”)B方向上綠燈是亮的。具體的時序顯示見圖3—2時序圖。GreenAGreenAYellowARedBYeelowBGreenBRedAAAAA圖3-2時序圖3。2模塊設(shè)計3.2.1主控制器模塊在QuartusⅡ按照1—1中的方法新建一個工程并新建一個文件項目后,在圖1-1-8程序編輯框中將主控制器的程序輸入后保存。接著需要對主控制器的程序進行編譯,編譯的步驟是點擊Project→SetasTop將文件置頂,具體的參考圖3—2—1-1置頂,接著點擊圖3—2-1-2的StartCompilat(yī)ion進行編譯。圖3-2—1-1置頂圖3—2—1-2編譯在編譯的過程中,出現(xiàn)了一些錯誤,在我編譯主控制器的程序時,出現(xiàn)的錯誤是沒有將CLOCK放入PROCESS()中,將程序中的錯誤一一改正后有時還會出現(xiàn)些Warning,有些Warning并不會影響后面的設(shè)計步驟。將上面的錯面都改正后,就會顯示圖3-2-1-3所顯示的對話框。下一步就是對程序進行時序仿真,圖3-2-1—3編譯成功程序編譯無措后在當前的工程下面新建一個文件,點擊File出現(xiàn)圖3—2—1-4新建文件對話框,選擇圖中顯示藍色的選項就會出現(xiàn)我們想要的界面,把鼠標移在圖3-2-1-5時序仿真編輯框中左邊的空白處,然后點擊右鍵,選擇INSERT→INSERTNODEORBUS選項出現(xiàn)另一個對話框,選擇對話框中的NODEFINDER后就會產(chǎn)生新的對話框,點擊LIST是在左下角的空白處會出現(xiàn)很多的引腳,我們選中需要的引腳后確定后,我們需要的引腳就會出現(xiàn)在時序仿真編輯中左邊的空白處,我們對輸入信號進行設(shè)定,若想讓輸出信號顯示為十六進制數(shù),我們可以選中輸出信號然后點擊鼠標的右鍵選擇VALUE→COUNTVALUE后出現(xiàn)的對話框中可以選擇自己需要顯示的進制類型和進制數(shù)的定時等。對輸出輸入信號編輯完成后保存。在菜單工具欄中選擇PROCESSING→SIMULATOORTOOL,出現(xiàn)圖3-2-1-6的對話框,按照對話框顯示的進行設(shè)定,點擊QENERATFUNCTIONAL…→START→REPORT,就會得出我們想要的圖3-2-1—7主控制器時序仿真圖。圖3—2-1—4新建文件對話框圖3-2-1-5仿真編輯框圖3-2—1—6仿真工具對話框圖3-2—1-7主控制器的仿真圖圖3—2—1-7中顯示的仿真結(jié)果和設(shè)計前預計的時序仿真圖的結(jié)果是相符合的。時序圖中的HOLD是保持信號,當HOLD信號為有效信號(“1”)時,則四個方向的路燈都是紅燈亮,當HOLD無效時,四個方向的信號燈會正常工作。RESET信號有效時,計數(shù)器的顯示就會重新從零開始。圖中四個方向的指示燈的亮滅順序是正確的。圖3—2-1-8主控制器的模塊主控制器的時序仿真完成后,一個程序的設(shè)計、仿真就已經(jīng)暫時結(jié)束了,下一步還要進行圖形的設(shè)計,在總的圖形設(shè)計前,需要先將每個程序都生成模塊,為之后的設(shè)計做好準備。點擊File→Creat(yī)e\Updade→CreateSymbolFilesforCurrentFile,完成這個操作過程后便會生成主控制器的模塊,具體的看圖3-2-1-8主控制器的模塊。模塊中主要有CLOCK、RESET、HOLD、NUMA、NUMB和六個指示燈的輸出.3.2.2分頻器模塊設(shè)計中需要用到1秒鐘的脈沖,分頻這個模塊就是為了改變頻率脈沖波,使20Mhz的頻率最終變?yōu)?hz的脈沖,這樣就可以得到一個周期是1秒鐘的脈沖,分頻器的程序見附錄.具體的程序編譯過程和仿真的過程和主控制模塊中談到的過程是相同的。按照上面談的步驟完成后就會得到圖3—2—2-1分頻模塊的時序仿真圖。圖3-2—2-1分頻模塊的仿真圖圖3-2-2—2分頻模塊分頻的程序經(jīng)過編譯和時序仿真圖后生成的模塊是圖3—2—2-2分頻模塊所顯示的20mhz的脈沖通過第一模塊時變?yōu)?0hz,再經(jīng)過第二個模塊后變成1hz的脈沖.3。2.3提取顯示值模塊提取顯示值的功能是在10hz的速度下提取顯示值,得到的是顯示時間值的十位和個位。圖3—2—3—1提取顯示值的時序仿真圖中NUMIN是主控制器的輸出值,NUMA和NUMB兩個輸出端口是要顯示的值的高位和低位。高位的最大輸出值是為二的四位二進制數(shù),低位的最大輸出值是為九的四位二進制數(shù).圖3-2-3-2是提取顯示值生成的模塊.提取顯示值的程序見文章的附錄.圖3—2-3-1提取顯示值的仿真圖仿真圖中,NUMB先從0開始計數(shù),當計到9時NUMA計為1,NUMB重新從0開始計數(shù),當計到9時NUMA會計為2,NUMB再次從0開始計數(shù),當NUMA(高位)計數(shù)到2時,NUMB的最大值輸出為5。圖3—2-3-2提取顯示值的模塊3.2。4動態(tài)掃描模塊LED顯示的工作原理是利用人類的視覺特性。七段LED數(shù)字顯示塊是由“a、b、c、d、e、f、g、dp”這幾段組成的,LED的顯示原理就是要看這八段中的哪幾段是亮的,那幾段是滅的。每段管子不是同時被點亮的并且點亮的時間都是極短的,又因為變化的時間很短暫,亮滅的過程中留下的余光會給人一種錯覺,人的眼睛覺得是一組靜態(tài)的顯示燈。具體的動態(tài)掃描的程序請看正文后的附錄。圖3-2-4-1是動態(tài)掃描的時序仿真圖,圖3-2-4-2是動態(tài)掃描生成的模塊。圖3—2—4-1動態(tài)掃描的時序仿真圖圖3—2-4—2動態(tài)掃描的模塊3.2.5位選器模塊位選程序的輸入和編譯完成后,對程序進行仿真,仿真的步驟依然和上面談到的一樣,下面兩幅圖一張是位選程序的時序仿真圖,另一幅是位選程序生成的模塊.見圖3—2—5-1和圖3-2-5-2.圖3—2-5-1位選時序仿真圖圖3-2—5-2位選模塊3.2.6譯碼器模塊譯碼器是將要顯示的數(shù)字轉(zhuǎn)換成驅(qū)動七段數(shù)碼管的信號,程序中的NUM與動態(tài)掃描模塊相連,將四位二進制數(shù)轉(zhuǎn)換為八位二進制數(shù),再通過LED8輸出.譯碼器的程序編輯和編譯步驟也和前面所說的相同.當譯碼器編譯成功后進行仿真,仿真的結(jié)果見圖3—2—6-1譯碼器的時序仿真。像時序仿真圖中顯示的一樣,當NUM輸入“0000"時LED8便會輸出“00111111”顯示數(shù)字“0”,當NUM輸入“0001”時LED8輸出“00000110”顯示數(shù)字“1”。圖3-2-6-2是譯碼器程序生成的模塊。圖3-2-6-1譯碼器的時序仿真圖圖3-2-6—2譯碼器模塊3.3圖形設(shè)計3.3。1圖形設(shè)計的生成將每個程序都編譯、仿真完成后,下一步就是要設(shè)計圖形仿真,在進行圖形的時序仿真前,要先進行圖形的編輯和編譯.要建立一個新工程和圖形編輯的文件的的過程是點擊File→New→BlockDiagram/SchematicFile.(見圖3-3—1-1)圖3-3-1-1新建一個文件的對話框新建了一個文件以后,就要開始編輯圖形了,要把每一個模塊都找出來,選擇Assignment→Settings后出現(xiàn)圖3-3-1—2的對話框,在左邊找到libraries,單擊它以后會出現(xiàn)圖3-3—1-2右邊顯示的內(nèi)容,再點擊處可以找到之前生成的那些模塊所在的文件夾,把它們一次性添加在libraries中,這樣可以為后面圖形設(shè)計做好準備,全部添加完成后點擊“OK”,這樣在元件庫中就可以找到生成的那些模塊了。選擇Edit→InsertSymbol后出現(xiàn)圖3—3—1—3的對話框,在這里就可以顯示出上面生成的模塊和軟件中原本存在的元器件,按照設(shè)計中的需要選出模塊和元件。圖3—3-1—2libraries對話框圖3-3—1-3元件庫對話框圖3—3-1—4編譯對話框圖3-3—1-4中標明了每個快捷工具的用途,選擇合適的工具把選擇好的模塊和元件連接起來。然后將連接好的圖形文件保存以后進行編譯。3。3。2仿真結(jié)果圖3-3—2-1圖形設(shè)計的時序仿真圖圖形設(shè)計編譯完成以后按照程序的時序仿真的過程對圖形設(shè)計進行時序仿真,給CLK適當?shù)男盘?,并且要給輸入值定義正確的值,開始仿真后會出現(xiàn)圖3-3—2—1就是編譯后的時序仿真圖。圖形設(shè)計的時序仿真圖中主要顯示的是紅、黃、綠燈之間的亮滅關(guān)系和LED8顯示的數(shù)值變化過程,還有位選輸出端的變化,時序圖中可以很容易看出當計時數(shù)計數(shù)到某一個值的時候東西方向和南北方向是什么顏色的指示燈在工作。當A路的綠燈亮時,B路的紅燈亮,A路的綠燈亮20秒后,A路的黃燈亮5秒……由此可以很容易的看出指示燈的亮滅是正確的。3.4管腳的鎖定管腳鎖定是為了為硬件仿真做準備。當所有的設(shè)計都完成后,接著要對圖形設(shè)計進行管腳的鎖定。先確定設(shè)計時確定的器件類型和實際的硬件類型是不是一樣,選擇Assignments→Device,在出現(xiàn)的對話框中認真確定選擇的器件是不是正確的。接下來選擇Assignments→Pins進入圖3—4—1中,用鼠標雙擊Location就可以設(shè)定管腳了。圖3—4—2是在這次畢業(yè)設(shè)計中使用到的芯片ACEX1K-EP1K100QC208—3.圖3-4—3是完成編譯、時序仿真、管腳鎖定這些步驟后的圖形設(shè)計。圖3-4-1管腳鎖定對話框圖3—4-2芯片ACEX1K-EP1K100QC208-3圖3-4—3最終的圖形設(shè)計表3—4-1管腳和相應(yīng)的功能序號名稱功能管腳口1CLK時鐘信號792HOLD保持鍵73RESET復位鍵84RedAA路口的紅燈115GreenAA路口的綠燈136YellowAA路口的黃燈157RedBB路口的紅燈128GreenBB路口的綠燈149YellowBB路口的黃燈1610LED8LED數(shù)碼管24—3111SI位選36—39在這次畢業(yè)設(shè)計中,我們用的芯片是ACEX1K-EP1K100QC208-3,圖3-4—3就是設(shè)計所用的芯片,褐色小點是設(shè)計中鎖定的管腳。而表3—4—1是鎖定的管腳和相應(yīng)的功能。結(jié)論經(jīng)過了兩個多月的努力,畢業(yè)設(shè)計終于完成了.這次的畢業(yè)設(shè)計是在大學期間完全沒有接觸過的知識,在兩個月的時間里我已經(jīng)對FPGA有了一定的認識,又學到了新的知識。剛開始做這個課題時,我從知網(wǎng)和圖書館找了很多的資料,在對這些資料整理的過程中開始一點點的熟悉FPGA和VHDL語言,最初我連最基本的程序都看不懂,經(jīng)過努力后,我不僅可以看懂程序還可以利用QuartusⅡ軟件對程序進行編譯、仿真。這次畢業(yè)設(shè)計的經(jīng)歷提高了我的自學能力,當我遇到一個問題的時候,我會認真的查找出錯的地方,然后想辦法把它解決掉,一個程序的仿真結(jié)果出來后,我還會認真的查看仿真的結(jié)果是不是正確的。在做硬件實驗時,開始我反復琢磨了很久都沒有做出來,通過和老師同學的交流,我終于成功的做出了硬件的仿真.這次的畢業(yè)設(shè)計結(jié)果可以按照設(shè)計的正常運行。這次畢業(yè)設(shè)計告訴我,只要努力、認真,再難再陌生的東西都能夠做的出來.FPGA課程設(shè)計——交通燈控制器通信工程學院電科0701班羅超(17)第一部分技術(shù)規(guī)范1。1功能描述:實現(xiàn)一個由一條主干道和一條支干道的匯合點形成的十字路口的交通燈控制器,具體功能:(1)主、支干道各設(shè)有一個綠、黃、紅指示燈,兩個顯示數(shù)碼管。(2)主干道處于長允許通行狀態(tài),而支干道有車來時才允許通行。當主干道允許通行亮綠燈時,支干道亮紅燈.而支干道允許通行亮綠燈時,主干道亮紅燈。(3)當主干道、支干道均有車時,兩者交替允許通行,主干道每次通行45秒,支干道每次通行25秒,在每次由綠燈向紅燈轉(zhuǎn)換的過程中,要亮5秒的黃燈作為過渡,并進行減計時顯示。每個周期結(jié)束時都要進行支干道是否有車的檢測,若有車則進行下一個周期,若沒有,則主干道亮綠燈,支干道亮紅燈,直到檢測到支干道有車。1。2系統(tǒng)總體框圖:根據(jù)設(shè)計要求和系統(tǒng)所具有的功能,并參考相關(guān)的文獻資料,經(jīng)行方案設(shè)計,可以畫出如下圖所示的交通信號燈控制器的系統(tǒng)框圖。時鐘分頻模塊交通燈控制模塊時鐘分頻模塊交通燈控制模塊掃描顯示譯碼模塊clkrstcarsignal計時模塊數(shù)碼管段碼sel數(shù)碼管位碼segLED燈名稱方向電平位寬功能clkInput3。3V1系統(tǒng)時鐘信號(10KHZ)carsignalInput3。3V1檢測支路是否有車rstInput3.3V1復位信號ledOutput3。3V6LED燈selOutput3。3V7數(shù)碼管段碼segOutput3。3V4數(shù)碼管位碼表一:系統(tǒng)總體I/O管腳的描述注:其中系統(tǒng)時鐘的頻率選為10KHZ,復位采取同步復位方式,且低有效.支干道檢測到有車時,carsignal=1;否則,carsignal=0。方案核心:在交通燈控制器的設(shè)計中,交通燈控制及計時模塊是本設(shè)計的關(guān)鍵模塊。第二部分總體設(shè)計方案交通燈2.1系統(tǒng)詳細框圖:在系統(tǒng)總體框圖的基礎(chǔ)上進一步詳細設(shè)計,得到如下系統(tǒng)詳細框圖.rstLED燈carsignalclk顯示控制單元定時模塊顯示單元交通燈控制模塊時鐘分頻模塊rstLED燈carsignalclk顯示控制單元定時模塊顯示單元交通燈控制模塊時鐘分頻模塊譯碼單元譯碼單元數(shù)碼管顯示數(shù)碼管顯示圖三:系統(tǒng)詳細框圖注:系統(tǒng)總體I/O管腳描述請查看技術(shù)規(guī)范。2。2具體模塊設(shè)計1.時鐘分頻模塊系統(tǒng)的動態(tài)掃描需要10KHZ的脈沖,而系統(tǒng)時鐘計時模塊需要1HZ的脈沖.分頻模塊主要為系統(tǒng)提供所需的時鐘計時脈沖。該模塊將10KHZ的脈沖信號進行分頻,產(chǎn)生1S的方波(占空比為50%),作為系統(tǒng)時鐘計時信號。clkclk時鐘分頻模塊rstclk_out圖四:時鐘分頻模塊框圖I/O管腳描述如下:名稱方向電平位寬功能clkinput3.3V1系統(tǒng)時鐘(10KHZ)rstinput3.3V1復位信號clk_outoutput3。3V1分頻后時鐘信號(1HZ)表二:時鐘分頻模塊I/O端口描述注:系統(tǒng)時鐘的頻率為10KHZ,分頻后的時鐘信號為1HZ(占空比為50%).復位信號為同步復位,且低有效.2。交通燈控制及計時模塊控制模塊JTDKZH:根據(jù)主干道、支干道輸入信號以及時鐘信號CLK,發(fā)出主、支干道指示燈的控制信號,同時向各個定時單元、顯示控制單元發(fā)出使能控制信號產(chǎn)生系統(tǒng)的狀態(tài)機,控制其他部分協(xié)調(diào)工作。計時模塊分別實現(xiàn)45s,25s,5s的定時,根據(jù)主、支干道輸入信號和時鐘信號以及交通燈控制器發(fā)出的使能信號按要求進行定時用來設(shè)定主干道和支干道計時器的初值,并為掃描顯示譯碼模塊提供倒計時時間.控制模塊采用狀態(tài)機進行設(shè)計,可以定義出5種狀態(tài),分別為S0:主干道綠燈,支干道紅燈且沒有車輛行駛;S1:主干道綠燈,支干道紅燈且支干道有車輛駛?cè)?S2:主干道黃燈,支干道紅燈;S3:主干道紅燈,支干道綠燈;S4:主干道紅燈,支干道黃燈。利用CASE語句定義狀態(tài)的轉(zhuǎn)換方式及時間的變換方式,達到主干道綠燈亮45秒,支干道綠燈亮25秒,黃燈亮5秒的設(shè)計要求.clk_outclk_outcarsignalrstled交通燈控制模塊count_H_1count_L_1count_H_2count_H_2圖五:交通燈控制及計數(shù)模塊I/O管腳描述如下:名稱方向電平位寬功能clk_outInput3。3V1分頻后時鐘信號(1HZ)rstInput3.3V1復位信號(同步復位)carsignalInput3.3V1檢測信號(低有效)count_H_1Output3.3V4主干道時間高位譯碼count_L_1O(jiān)utput3.3V4主干道時間低位譯碼count_H_2Output3。3V4支干道時間高位譯碼count_L_2Output3.3V4支干道時間低位譯碼ledOutput3。3V6LED燈表三:交通燈控制模塊I/O端口描述系統(tǒng)的狀態(tài)圖如下所示carsignal=0carsignal=0S0S3carsignal=1S3carsignal=1S1S2S2S0:主干道綠燈,支干道紅燈S1:主干道黃燈,支干道紅燈S2:主干道紅燈,支干道綠燈S3:主干道紅燈,支干道黃燈3。掃描顯示譯碼模塊掃描顯示譯碼模塊可以根據(jù)控制信號,驅(qū)動交通信號燈以及倒計時數(shù)碼管的顯示,其中數(shù)碼管的顯示采用動態(tài)掃描顯示。rstrstclksegsel掃描顯示譯碼模塊count_H_1count_L_1count_H_2count_H_2圖六:掃描顯示譯碼模塊框圖該模塊的I/O管腳描述如下:名稱方向電平位寬功能clkInput3。3V1系統(tǒng)時鐘信號(10KHZ)rstInput3.3V1復位信號(低有效)count_H_1Input3。3V4主干道時間高位譯碼count_L_1Input3.3V4主干道時間低位譯碼count_H_2Input3.3V4支干道時間高位譯碼count_L_2Input3.3V4支干道時間低位譯碼selOutput3.3V7數(shù)碼管段碼segOutput3.3V3數(shù)碼管位碼表四:掃描顯示譯碼模塊I/O端口描述第三部分仿真結(jié)果Modelsim前仿真Quartus2后仿真第四部分源代碼分頻模塊:modulefenpinqi(clk,rst,clk_odd);inputclk,rst;outputclk_odd;regclk_odd;reg[13:0]count;parameterN=10;always@(posedgeclk)if(!rst)begincount<=1’b0;clk_odd〈=1'b0;endelseif(count〈N/2-1)begincount〈=count+1’b1;endelsebegincount〈=1'b0;clk_odd〈=~clk_odd;endendmodule控制及計時模塊:modulecontrol(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);output[3:0]count_H_1,count_L_1,count_H_2,count_L_2;output[5:0]led;inputclk,rst,car;reg[5:0]led;reg[3:0]count_H_1,count_L_1,count_H_2,count_L_2;reg[1:0]state;parameterS0=2'b00,S1=2’b01,S2=2’b10,S3=2'b11;always@(posedgeclkornegedgerst)if(!rst)beginled=6'b010100;stat(yī)e=S0;count_H_1=4’b0000;count_L_1=4'b0000;count_H_2=4’b0000;count_L_2=4'b0000;endelsebegincase(state)S0:beginBeginif(!car)beginled=6'b010100;//count_H_1=4’b0100;count_L_1=4’b0101;//???count_H_1=4'b0111;count_L_1=4'b0111;endelsebeginif(count_H_1==4'b0111)begincount_H_1=4’b0100;count_L_1=4'b0101;count_H_2=4'b0101;count_L_2=4'b0000;endelseif(count_L_1=0)if(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state<=S1;if(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4’b1001;endelsebegincount_L_2<=count_L_2-1'b1;endendelsebegincount_H_1<=count_H_1-1’b1;count_L_1<=4’b1001;if(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4’b1001;endelsebegincount_L_2<=count_L_2-1'b1;endendelsebegincount_L_1<=count_L_1-1’b1;if(count_L_2==0)begincount_H_2<=count_H_2-1’b1;count_L_2〈=4'b1001;endelsebegincount_L_2〈=count_L_2-1’b1;endendendend/*beginif(!car)begincount_H_2=4'b0101;count_L_2=4’b0000;endelseif(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4'b1001;endelsebegincount_L_2<=count_L_2-1’b1;endend*/end/*if(count_L_1==0)beginif(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state<=S1;endelsebegincount_H_1〈=count_H_1—1'b1;count_L_1〈=4'b1001;endendelsebegincount_L_1<=count_L_1—1'b1;endif(!car)begincount_H_2=4'b0101;count_L_2=4’b0000;endelseif(count_L_2==0)begincount_H_2<=count_H_2-1'b1;count_L_2〈=4’b1001;endelsebegincount_L_2〈=count_L_2—1'b1;endS1:beginif(count_L_1==0)beginif(count_H_1==0)beginled=6'b100010;count_H_1=4'b0010;count_L_1=4'b1001;count_H_2=4’b0010;count_L_2=4'b0100;state〈=S2;endelsebegincount_H_1<=count_H_1—1’b1;count_H_2<=count_H_2—1'b1;endendelsebegincount_L_1〈=count_L_1-1'b1;count_L_2〈=count_L_2-1'b1;endendS2:beginif(count_L_2==0)beginif(count_H_2==0)beginled=6'b100001;count_H_2=4'b0000;count_L_2=4'b0100;state〈=S3;elsebegincount_H_2<=count_H_2-1'b1;count_L_2=4'b1001;endendelsebegincount_L_2<=count_L_2—1'b1;endif(count_L_1==0)beginbegincount_H_1<=count_H_1-1’b1;count_L_1=4’b1001;endendelsebegincount_L_1〈=count_L_1-1'b1;endendS3:beginif(count_L_2==0)beginif(count_H_2==0)beginled=6'b010100;count_H_1=4’b0100;count_L_1=4'b1001;count_H_2=4'b0100;count_L_2=4'b0100;state<=S0;endelsebegincount_H_1〈=count_H_1—1’b1;count_H_2<=count_H_2-1’b1;endendelsebegincount_L_1<=count_L_1-1’b1;count_L_2<=count_L_2—1’b1;endendcaseendendmodule掃描譯碼顯示模塊:modulesaomiao(rst,clk,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);inputrst,clk;input[3:0]count_H_1,count_L_1,count_H_2,count_L_2;output[6:0]sel;output[3:0]seg;reg[6:0]sel;reg[3:0]seg;reg[15:0]count;reg[1:0]cnt;reg[3:0]data;regclk_odd;always@(posedgeclkornegedgerst)beginif(!rst)begincount<=0;clk_odd〈=0;endelseif(count==16'd2)beginclk_odd<=~clk_odd;count〈=0;endelsecount〈=count+1’b1;endalways@(negedgerstorposedgeclk_odd)//????1msif(!rst)begincnt〈=2'b00;endelsecnt〈=cnt+1’b1;always@(negedgerstorposedgeclk)if(!rst)begin//sel=7’b0000000;seg=4'b1111;endelsebegincase(cnt)2'b00:beginseg=4'b1110;data=count_H_1;end2'b01:begiseg=4'b1101;//?????data=count_L_1;end2'b10:begin//?????seg=4'b1011;data=count_H_2;end2'b11:begin//?????seg=4'b0111;data=count_L_2;enddefault:begin//sel=8'b0000000;seg=4'b0000;endendcaseendalways@(dataorseg)begincase(data)4’b0000:sel=7'b1111110;4'b0001:sel=7'b0110000;4’b0010:sel=7'b1101101;4’b0011:sel=7'b1111001;4'b0100:sel=7’b0110011;4’b0101:sel=7’b1011011;4'b0110:sel=7’b1011111;4'b0111:sel=7’b1110000;4'b1000:sel=7’b1111111;4'b1001:sel=7'b1111011;default:sel=7'b1111110;endcaseendendmodule頂層模塊:modulejiaotongdeng(clk,rst,car,led,sel,seg,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);inputclk,rst,car;output[3:0]seg;output[6:0]sel;output[5:0]led;output[3:0]count_H_1,count_L_1,count_H_2,count_L_2;outputclk_odd;wire[3:0]count_H_1,count_L_1,count_H_2,count_L_2;wireclk_odd;saomiaoee(rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);controlrr(led,car,rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2);fenpinqitt(clk,rst,clk_odd);endmodule激勵模塊:`defineTRUE1'b1`defineFALSE1'b0modulestimulus;wire[3:0]SEG;wire[6:0]SEL;wire[5:0]LED;wire[3:0]count_H_1,count_L_1,count_H_2,count_L_2;wireclk_odd;regCAR_ON_CNTRY_RD;regCLOCK,RST;jiaotongdengjiaotongdeng1(CLOCK,RST,CAR_ON_CNTRY_RD,LED,SEL,SEG,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);initial$monitor($time,”led=%b,sel=%b,seg=%b",LED,SEL,SEG);initialbeginCLOCK=`FALSE;forever#5CLOCK=~CLOCK;endinitialbeginRST=`FALSE;repeat(2)@(negedgeCLOCK);RST=`TRUE;endinitialbeginCAR_ON_CNTRY_RD=1'b0;repeat(20)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1'b1;repeat(yī)(500)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1’b0;repeat(500)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1'b1;repeat(2400)@(negedgeCLOCK);$stop;endendmodule引言隨著城鄉(xiāng)的經(jīng)濟發(fā)展,車輛的數(shù)量在迅速的增加,交通阻塞的問題已經(jīng)嚴重影響了人們的出行.現(xiàn)在的社會是一個數(shù)字化程度相當高的社會,很多的系統(tǒng)設(shè)計師都愿意把自己的設(shè)計設(shè)計成集成電路芯片,芯片可以在實際中方便使用。隨著EDA技術(shù)的發(fā)展,嵌入式通用及標準FPGA器件的呼之欲出,片上系統(tǒng)(SOC)已經(jīng)近在咫尺。FPGA/CPLD以其不可替代的地位及伴隨而來的極具知識經(jīng)濟特征的IP芯片產(chǎn)業(yè)的崛起,正越來越受到業(yè)內(nèi)人士的密切關(guān)注。FPGA就是在這樣的背景下誕生的,它在數(shù)字電路中的地位也越來越高,這樣迅速的發(fā)展源于它的眾多特點.交通等是保障交通道路暢通和安全的重要工具,而控制器是交通燈控制的主要部分,它可以通過很多種方式來實現(xiàn).在這許許多多的方法之中,使用FPGA和VHDL語言設(shè)計的交通燈控制器,比起其他的方法顯得更加靈活、易于改動,并且它的設(shè)計周期性更加短。城市中的交通事故頻繁發(fā)生,威脅著人們的生命健康和工作生活,交通阻塞問題在延遲出行時間的同時,還會造成更多的空氣污染和噪聲污染.在這種情況下,根據(jù)每個道路的實際情況來設(shè)置交通燈,使道路更加通暢,這對構(gòu)建和諧暢通的城市交通有著十分重要的意義.第一章軟件介紹1.1QuartusⅡ介紹本次畢業(yè)設(shè)計是基于FPGA下的設(shè)計,FPGA是現(xiàn)場可編程門陣列,F(xiàn)PGA開發(fā)工具種類很多、智能化高、功能非常的強大??删幊蹋眩酰醨tusⅡ是一個為邏輯器件編程提供編程環(huán)境的軟件,它能夠支持VHDL、VerilogHDL語言的設(shè)計。在該軟件環(huán)境下,設(shè)計者可以實現(xiàn)程序的編寫、編譯、仿真、圖形設(shè)計、圖形的仿真等許許多多的功能。在做交通燈控制器設(shè)計時選擇的編程語言是VHDL語言。在這里簡單的介紹一下QuartusⅡ的基本部分.圖1-1-1是一幅啟動界面的圖片.在設(shè)計前需要對軟件進行初步的了解,在圖中已經(jīng)明顯的標出了每一部分的名稱。圖1-1—1啟動界面開始設(shè)計前我們需要新建一個工程,首先要在啟動界面上的菜單欄中找到File,單擊它選擇它下拉菜單中的“NewProjectWizard”時會出現(xiàn)圖1-1—2所顯示的對話框,把項目名稱按照需要填好后單擊Next,便會進入圖1-1-3顯示的界面。圖1-1-2創(chuàng)建工程框圖1-1—3芯片選擇框根據(jù)自己選擇的實驗設(shè)備選擇好相應(yīng)的芯片型號點擊Next,進入下一個步驟當出現(xiàn)圖1-1-5時,點擊“Finish"后這個工程就建立好了。圖1-1-4仿真器選擇框圖1-1-5對話框建好工程后開始進行設(shè)計,首先在圖1-1-6中單擊file后選擇new,接著會出現(xiàn)圖1-1—7,在交通燈控制器的設(shè)計中我們選擇的是VHDLFile,當出現(xiàn)圖1—1-8時就可以把編輯的程序敲入編輯器中.圖1-1-6工程建好后的界面圖1—1-7新建文件類型選擇框圖1-1-8程序編輯框在第一章中對QuartusⅡ軟件的使用做一個簡單介紹,設(shè)計中的編譯和仿真步驟在后面的幾章中會做出介紹。第二章交通燈控制器設(shè)計的概述2.1控制器設(shè)計描述2.1.1設(shè)計任務(wù)要求設(shè)計交通燈控制器,分別在四個方向都安裝紅、黃、綠三種顏色的交通指示燈,紅燈表示停止,綠燈表示通行,黃燈表示左轉(zhuǎn)和直行將要禁止通行,四個方向分別還安裝有倒計時的計時器。2.1.2設(shè)計要求東西方向和南北方向各有組指示燈,紅燈亮的時間為20S,黃燈亮的時間為5S,綠燈亮的時間為25S。三種燈亮滅的順序為紅燈、綠燈、黃燈。第三章交通燈控制器的設(shè)計過程3。1設(shè)計方案本設(shè)計課題用FPGA來實現(xiàn)智能交通燈的設(shè)計,本設(shè)計現(xiàn)要研究的問題主要有:智能交通燈的設(shè)計方案;各功能模塊的設(shè)計與實現(xiàn);如何用VHDL編寫源程序以及進行系統(tǒng)仿真。3.1。1框圖設(shè)計交通燈控制器設(shè)計的框圖中包括控制器、分頻器、顯示器、指示燈、譯碼器、位選器。當?shù)褂嫊r為零時,控制器改變交通燈的顏色,同時倒計時開始進入下一個倒計時。當有緊急情況出現(xiàn)的時候,四面的交通燈都會變?yōu)榧t燈,緊急情況的處理在設(shè)計中是依靠HOLD鍵來實現(xiàn)的.圖3—1—1-1是交通燈設(shè)計的設(shè)計框圖特殊情況特殊情況計時器位選器顯示器(東、西、南、北)譯碼器控制器指示燈圖3-1-1—1交通燈設(shè)計的設(shè)計框圖系統(tǒng)的紅、黃、綠燈顯示的總時間為50s,具體的亮燈時間和亮燈順序看表3—1-1-2表3-1—1-2交通燈亮燈順序與亮燈時間安排東西方向(A燈)A綠燈亮(20s)A黃燈亮(21—25s)A紅燈亮(26—50s)南北方向(B燈)B紅燈亮(0-25s)B綠燈亮(26—45s)B黃燈亮(46-50s)3。1.2工程流程圖創(chuàng)建一個新的工程創(chuàng)建一個新的工程創(chuàng)建VHDL語言文件保存輸入的程序?qū)⒊绦蜉斎胛募袑Τ绦蜻M行編譯,有錯誤的要進行修改、再編譯,直至沒有錯對程序進行波形的仿真進行圖形電路設(shè)計、保存、編譯、波形仿真、管腳鎖定進行硬件仿真圖3—1-2工程流程圖3.1。3時序圖的假象在時序圖中,上升沿有效,即為“1”時燈亮,好比RedA為上升沿(“1")時A方向的紅燈是亮的,相對的GreenB也為上升沿(“1”)B方向上綠燈是亮的。具體的時序顯示見圖3-2時序圖。GreenAGreenAYellowARedBYeelowBGreenBRedAAAAA圖3-2時序圖3。2模塊設(shè)計3.2.1主控制器模塊在QuartusⅡ按照1-1中的方法新建一個工程并新建一個文件項目后,在圖1-1—8程序編輯框中將主控制器的程序輸入后保存。接著需要對主控制器的程序進行編譯,編譯的步驟是點擊Project→SetasTop將文件置頂,具體的參考圖3-2-1-1置頂,接著點擊圖3-2-1—2的StartCompilation進行編譯。圖3-2-1-1置頂圖3-2-1-2編譯在編譯的過程中,出現(xiàn)了一些錯誤,在我編譯主控制器的程序時,出現(xiàn)的錯誤是沒有將CLOCK放入PROCESS()中,將程序中的錯誤一一改正后有時還會出現(xiàn)些Warning,有些Warning并不會影響后面的設(shè)計步驟.將上面的錯面都改正后,就會顯示圖3—2-1—3所顯示的對話框。下一步就是對程序進行時序仿真,圖3-2-1-3編譯成功程序編譯無措后在當前的工程下面新建一個文件,點擊File出現(xiàn)圖3-2-1-4新建文件對話框,選擇圖中顯示藍色的選項就會出現(xiàn)我們想要的界面,把鼠標移在圖3-2-1-5時序仿真編輯框中左邊的空白處,然后點擊右鍵,選擇INSERT→INSERTNODEORBUS選項出現(xiàn)另一個對話框,選擇對話框中的NODEFINDER后就會產(chǎn)生新的對話框,點擊LIST是在左下角的空白處會出現(xiàn)很多的引腳,我們選中需要的引腳后確定后,我們需要的引腳就會出現(xiàn)在時序仿真編輯中左邊的空白處,我們對輸入信號進行設(shè)定,若想讓輸出信號顯示為十六進制數(shù),我們可以選中輸出信號然后點擊鼠標的右鍵選擇VALUE→COUNTVALUE后出現(xiàn)的對話框中可以選擇自己需要顯示的進制類型和進制數(shù)的定時等。對輸出輸入信號編輯完成后保存。在菜單工具欄中選擇PROCESSING→SIMULATOORTOOL,出現(xiàn)圖3—2-1—6的對話框,按照對話框顯示的進行設(shè)定,點擊QENERATFUNCTIONAL…→START→REPORT,就會得出我們想要的圖3—2—1-7主控制器時序仿真圖。圖3-2-1-4新建文件對話框圖3—2—1-5仿真編輯框圖3—2-1-6仿真工具對話框圖3—2-1—7主控制器的仿真圖圖3-2-1—7中顯示的仿真結(jié)果和設(shè)計前預計的時序仿真圖的結(jié)果是相符合的。時序圖中的HOLD是保持信號,當HOLD信號為有效信號(“1”)時,則四個方向的路燈都是紅燈亮,當HOLD無效時,四個方向的信號燈會正常工作.RESET信號有效時,計數(shù)器的顯示就會重新從零開始。圖中四個方向的指示燈的亮滅順序是正確的。圖3—2—1-8主控制器的模塊主控制器的時序仿真完成后,一個程序的設(shè)計、仿真就已經(jīng)暫時結(jié)束了,下一步還要進行圖形的設(shè)計,在總的圖形設(shè)計前,需要先將每個程序都生成模塊,為之后的設(shè)計做好準備.點擊File→Create\Updade→CreateSymbolFilesforCurrentFile,完成這個操作過程后便會生成主控制器的模塊,具體的看圖3-2-1-8主控制器的模塊。模塊中主要有CLOCK、RESET、HOLD、NUMA、NUMB和六個指示燈的輸出。3.2.2分頻器模塊設(shè)計中需要用到1秒鐘的脈沖,分頻這個模塊就是為了改變頻率脈沖波,使20Mhz的頻率最終變?yōu)?hz的脈沖,這樣就可以得到一個周期是1秒鐘的脈沖,分頻器的程序見附錄。具體的程序編譯過程和仿真的過程和主控制模塊中談到的過程是相同的。按照上面談的步驟完成后就會得到圖3-2—2-1分頻模塊的時序仿真圖。圖3-2-2-1分頻模塊的仿真圖圖3-2—2-2分頻模塊分頻的程序經(jīng)過編譯和時序仿真圖后生成的模塊是圖3—2—2-2分頻模塊所顯示的20mhz的脈沖通過第一模塊時變?yōu)椋?hz,再經(jīng)過第二個模塊后變成1hz的脈沖。3。2.3提取顯示值模塊提取顯示值的功能是在10hz的速度下提取顯示值,得到的是顯示時間值的十位和個位。圖3-2-3-1提取顯示值的時序仿真圖中NUMIN是主控制器的輸出值,NUMA和NUMB兩個輸出端口是要顯示的值的高位和低位.高位的最大輸出值是為二的四位二進制數(shù),低位的最大輸出值是為九的四位二進制數(shù)。圖3—2-3-2是提取顯示值生成的模塊。提取顯示值的程序見文章的附錄.圖3—2-3-1提取顯示值的仿真圖仿真圖中,NUMB先從0開始計數(shù),當計到9時NUMA計為1,NUMB重新從0開始計數(shù),當計到9時NUMA會計為2,NUMB再次從0開始計數(shù),當NUMA(高位)計數(shù)到2時,NUMB的最大值輸出為5.圖3-2-3-2提取顯示值的模塊3。2.4動態(tài)掃描模塊LED顯示的工作原理是利用人類的視覺特性。七段LED數(shù)字顯示塊是由“a、b、c、d、e、f、g、dp”這幾段組成的,LED的顯示原理就是要看這八段中的哪幾段是亮的,那幾段是滅的.每段管子不是同時被點亮的并且點亮的時間都是極短的,又因為變化的時間很短暫,亮滅的過程中留下的余光會給人一種錯覺,人的眼睛覺得是一組靜態(tài)的顯示燈。具體的動態(tài)掃描的程序請看正文后的附錄。圖3-2—4—1是動態(tài)掃描的時序仿真圖,圖3—2-4-2是動態(tài)掃描生成的模塊.圖3-2-4-1動態(tài)掃描的時序仿真圖圖3-2-4-2動態(tài)掃描的模塊3.2.5位選器模塊位選程序的輸入和編譯完成后,對程序進行仿真,仿真的步驟依然和上面談到的一樣,下面兩幅圖一張是位選程序的時序仿真圖,另一幅是位選程序生成的模塊。見圖3-2-5-1和圖3—2-5—2。圖3-2-5—1位選時序仿真圖圖3-2—5-2位選模塊3。2.6譯碼器模塊譯碼器是將要顯示的數(shù)字轉(zhuǎn)換成驅(qū)動七段數(shù)碼管的信號,程序中的NUM與動態(tài)掃描模塊相連,將四位二進制數(shù)轉(zhuǎn)換為八位二進制數(shù),再通過LED8輸出。譯碼器的程序編輯和編譯步驟也和前面所說的相同.當譯碼器編譯成功后進行仿真,仿真的結(jié)果見圖3-2-6-1譯碼器的時序仿真.像時序仿真圖中顯示的一樣,當NUM輸入“0000”時LED8便會輸出“00111111”顯示數(shù)字“0”,當NUM輸入“0001"時LED8輸出“00000110”顯示數(shù)字“1"。圖3-2-6—2是譯碼器程序生成的模塊。圖3-2—6-1譯碼器的時序仿真圖圖3-2-6—2譯碼器模塊3.3圖形設(shè)計3。3。1圖形設(shè)計的生成將每個程序都編譯、仿真完成后,下一步就是要設(shè)計圖形仿真,在進行圖形的時序仿真前,要先進行圖形的編輯和編譯。要建立一個新工程和圖形編輯的文件的的過程是點擊File→New→BlockDiagram/Schemat(yī)icFile.(見圖3—3-1-1)圖3—3-1-1新建一個文件的對話框新建了一個文件以后,就要開始編輯圖形了,要把每一個模塊都找出來,選擇Assignment→Settings后出現(xiàn)圖3—3-1—2的對話框,在左邊找到libraries,單擊它以后會出現(xiàn)圖3-3-1-2右邊顯示的內(nèi)容,再點擊處可以找到之前生成的那些模塊所在的文件夾,把它們一次性添加在libraries中,這樣可以為后面圖形設(shè)計做好準備,全部添加完成后點擊“OK”,這樣在元件庫中就可以找到生成的那些模塊了.選擇Edit→InsertSymbol后出現(xiàn)圖3—3—1-3的對話框,在這里就可以顯示出上面生成的模塊和軟件中原本存在的元器件,按照設(shè)計中的需要選出模塊和元件。圖3—3-1—2libraries對話框圖3—3—1-3元件庫對話框圖3-3—1-4編譯對話框圖3—3-1-4中標明了每個快捷工具的用途,選擇合適的工具把選擇好的模塊和元件連接起來.然后將連接好的圖形文件保存以后進行編譯。3.3。2仿真結(jié)果圖3-3-2—1圖形設(shè)計的時序仿真圖圖形設(shè)計編譯完成以后按照程序的時序仿真的過程對圖形設(shè)計進行時序仿真,給CLK適當?shù)男盘?,并且要給輸入值定義正確的值,開始仿真后會出現(xiàn)圖3-3-2-1就是編譯后的時序仿真圖。圖形設(shè)計的時序仿真圖中主要顯示的是紅、黃、綠燈之間的亮滅關(guān)系和LED8顯示的數(shù)值變化過程,還有位選輸出端的變化,時序圖中可以很容易看出當計時數(shù)計數(shù)到某一個值的時候東西方向和南北方向是什么顏色的指示燈在工作.當A路的綠燈亮時,B路的紅燈亮,A路的綠燈亮20秒后,A路的黃燈亮5秒……由此可以很容易的看出指示燈的亮滅是正確的.3.4管腳的鎖定管腳鎖定是為了為硬件仿真做準備.當所有的設(shè)計都完成后,接著要對圖形設(shè)計進行管腳的鎖定。先確定設(shè)計時確定的器件類型和實際的硬件類型是不是一樣,選擇Assignments→Device,在出現(xiàn)的對話框中認真確定選擇的器件是不是正確的。接下來選擇Assignments→Pins進入圖3—4-1中,用鼠標雙擊Location就可以設(shè)定管腳了.圖3—4-2是在這次畢業(yè)設(shè)計中使用到的芯片ACEX1K-EP1K100QC208-3。圖3—4—3是完成編譯、時序仿真、管腳鎖定這些步驟后的圖形設(shè)計。圖3-4-1管腳鎖定對話框圖3-4-2芯片ACEX1K-EP1K100QC208-3圖3-4—3最終的圖形設(shè)計表3—4-1管腳和相應(yīng)的功能序號名稱功能管腳口1CLK時鐘信號792HOLD保持鍵73RESET復位鍵84RedAA路口的紅燈115GreenAA路口的綠燈136YellowAA路口的黃燈157RedBB路口的紅燈128GreenBB路口的綠燈149YellowBB路口的黃燈1610LED8LED數(shù)碼管24-3111SI位選36—39在這次畢業(yè)設(shè)計中,我們用的芯片是ACEX1K-EP1K100QC208-3,圖3-4-3就是設(shè)計所用的芯片,褐色小點是設(shè)計中鎖定的管腳。而表3—4-1是鎖定的管腳和相應(yīng)的功能.結(jié)論經(jīng)過了兩個多月的努力,畢業(yè)設(shè)計終于完成了.這次的畢業(yè)設(shè)計是在大學期間完全沒有接觸過的知識,在兩個月的時間里我已經(jīng)對FPGA有了一定的認識,又學到了新的知識.剛開始做這個課題時,我從知網(wǎng)和圖書館找了很多的資料,在對這些資料整理的過程中開始一點點的熟悉FPGA和VHDL語言,最初我連最基本的程序都看不懂,經(jīng)過努力后,我不僅可以看懂程序還可以利用QuartusⅡ軟件對程序進行編譯、仿真。這次畢業(yè)設(shè)計的經(jīng)歷提高了我的自學能力,當我遇到一個問題的時候,我會認真的查找出錯的地方,然后想辦法把它解決掉,一個程序的仿真結(jié)果出來后,我還會認真的查看仿真的結(jié)果是不是正確的。在做硬件實驗時,開始我反復琢磨了很久都沒有做出來,通過和老師同學的交流,我終于成功的做出了硬件的仿真。這次的畢業(yè)設(shè)計結(jié)果可以按照設(shè)計的正常運行.這次畢業(yè)設(shè)計告訴我,只要努力、認真,再難再陌生的東西都能夠做的出來.數(shù)字系統(tǒng)課程設(shè)計基于FPGA的交通控制燈設(shè)計姓名:學號:班級:摘要隨著社會的發(fā)展,城市規(guī)模的不斷擴大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一.有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進,設(shè)計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機技術(shù)的飛速發(fā)展,電子電路分析和設(shè)計方法有了很大的改進,電子設(shè)計自動化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設(shè)計提供了一定的技術(shù)基礎(chǔ)。本課程設(shè)計運用erilogHDL語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示,并最后進行了軟件實現(xiàn),達到了系統(tǒng)要求的功能.設(shè)計原理1.1設(shè)計要求設(shè)計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當前狀態(tài)剩余秒數(shù)主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s.能進行特殊狀態(tài)顯示,特殊狀態(tài)時東西、南北路口均顯示紅燈狀態(tài).用LED燈顯示倒計時,并且能實現(xiàn)總體清零功能,計數(shù)器由初始狀態(tài)開始計數(shù),對應(yīng)狀態(tài)的顯示燈亮。能實現(xiàn)特殊狀態(tài)的功能顯示,1.2設(shè)計思路和原理本次設(shè)計是針對十字路口,進行南北和東西直行情況下交通燈控制。設(shè)定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進入正常工作狀態(tài)后,當主干道上綠燈亮時,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復的直行這個過程.其過程如下圖所示:圖1。交通燈點亮時間控制說明1.3實現(xiàn)方法本次采用文本編輯法,即利用VerilogHDL語言描述交通控制器,通過狀態(tài)機計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示。設(shè)計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。VerilogHDL程序設(shè)計2.1整體設(shè)計根據(jù)上章設(shè)計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進行適當?shù)臅r間延時,根據(jù)狀態(tài)機的設(shè)計規(guī)范,本次設(shè)計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:圖2.交通燈控制狀態(tài)轉(zhuǎn)化說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起.進入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán).為實現(xiàn)控制與顯示的功能,需要設(shè)計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:圖3。交通燈控制系統(tǒng)結(jié)構(gòu)圖其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起.2。2具體設(shè)計根據(jù)整體設(shè)計要求,編寫各個功能部分VerilogHDL程序,設(shè)置各輸入輸出變量說明如下clk:為計數(shù)時鐘;qclk:為掃描顯示時鐘;en:使能信號,為1的話,則控制器開始工作;rst:復位信號,為1的話,控制及技術(shù)回到初始狀態(tài);hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;light1:控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的綠燈、黃燈和紅燈;light2:控制支干道方向四盞燈的亮滅;其中,light2[0]~light2[2],分別控制支干道方向的綠燈、黃燈和紅燈;num1:用于主干道方向燈的時間顯示,8位,可驅(qū)動兩個數(shù)碼管;num2:用于支干道方向燈的時間顯示,8位,可驅(qū)動兩個數(shù)碼管;counter:用于數(shù)碼管的譯碼輸出;st1,st2:數(shù)碼管掃描信號.輸入輸出及中間變量設(shè)置如下:moduletraffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);inputen,clk,qclk,rst,hold,rst1;outputst1,st2;output[7:0]num1,num2;output[6:0]counter;output[2:0]light1,light2;regtim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0]num1,num2;reg[7:0]red1,red2,green1,green2,yellow1,yellow2;二極管點亮控制該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩

溫馨提示

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

評論

0/150

提交評論