基于FPGA的交通燈控制器設(shè)計(jì)50002_第1頁
基于FPGA的交通燈控制器設(shè)計(jì)50002_第2頁
基于FPGA的交通燈控制器設(shè)計(jì)50002_第3頁
基于FPGA的交通燈控制器設(shè)計(jì)50002_第4頁
基于FPGA的交通燈控制器設(shè)計(jì)50002_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 數(shù)字系統(tǒng)課程設(shè)計(jì) 基于FPGA的交通控制燈設(shè)計(jì)姓名:學(xué)號:班級:摘要隨著社會的發(fā)展,城市規(guī)模的不斷擴(kuò)大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當(dāng)然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進(jìn),設(shè)計(jì)方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計(jì)算機(jī)技術(shù)的飛速發(fā)展,電子電路分析和設(shè)計(jì)方法有了很大的改進(jìn),電子設(shè)計(jì)自動化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設(shè)計(jì)提供了

2、一定的技術(shù)基礎(chǔ)。本課程設(shè)計(jì)運(yùn)用erilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計(jì)數(shù)法,實(shí)現(xiàn)設(shè)計(jì)所要求的交通燈控制及時(shí)間顯示,并最后進(jìn)行了軟件實(shí)現(xiàn),達(dá)到了系統(tǒng)要求的功能.設(shè)計(jì)原理1。1設(shè)計(jì)要求設(shè)計(jì)一個(gè)交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù)主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時(shí)間為5s。能進(jìn)行特殊狀態(tài)顯示,特殊狀態(tài)時(shí)東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計(jì)時(shí),并且能實(shí)現(xiàn)總體清零功能,計(jì)數(shù)器由初始狀態(tài)開始計(jì)數(shù),對應(yīng)狀態(tài)的顯示燈亮.能

3、實(shí)現(xiàn)特殊狀態(tài)的功能顯示,1.2設(shè)計(jì)思路和原理本次設(shè)計(jì)是針對十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向?yàn)橹鞲傻婪较?,根?jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個(gè)方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個(gè)循環(huán)完成。循環(huán)往復(fù)的直行這個(gè)過程.其過程如下圖所示:圖1.交通燈點(diǎn)亮?xí)r間控制說明1。3實(shí)現(xiàn)方法本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計(jì)數(shù)法,實(shí)現(xiàn)設(shè)計(jì)所要求的交通燈控制及時(shí)間

4、顯示.設(shè)計(jì)中用兩組紅黃綠LED模擬兩個(gè)方向上的交通燈,用4個(gè)7段數(shù)碼管分別顯示兩個(gè)方向上的交通燈剩余時(shí)間,控制時(shí)鐘由試驗(yàn)箱上頻率信號提供。 Verilog HDL程序設(shè)計(jì)2。1整體設(shè)計(jì)根據(jù)上章設(shè)計(jì)原理,交通燈控制的關(guān)鍵是各個(gè)狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r(shí)間延時(shí),根據(jù)狀態(tài)機(jī)的設(shè)計(jì)規(guī)范,本次設(shè)計(jì)了三個(gè)狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:圖2.交通燈控制狀態(tài)轉(zhuǎn)化說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時(shí)主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時(shí)主干道紅燈及支干道綠燈亮起.進(jìn)入10狀態(tài)兩路黃燈亮起.結(jié)束一個(gè)循環(huán),從00狀態(tài)重新開始循環(huán)。為

5、實(shí)現(xiàn)控制與顯示的功能,需要設(shè)計(jì)交通燈點(diǎn)亮順序控制程序,倒數(shù)計(jì)時(shí)程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:圖3。交通燈控制系統(tǒng)結(jié)構(gòu)圖其中rst為復(fù)位信號,clk為時(shí)鐘信號,hold為特殊情況控制信號,輸入hold時(shí)兩個(gè)方向紅燈無條件亮起。2.2 具體設(shè)計(jì)根據(jù)整體設(shè)計(jì)要求,編寫各個(gè)功能部分Verilog HDL程序,設(shè)置各輸入輸出變量說明如下clk:為計(jì)數(shù)時(shí)鐘;qclk:為掃描顯示時(shí)鐘;en:使能信號,為1 的話,則控制器開始工作;rst:復(fù)位信號,為1的話,控制及技術(shù)回到初始狀態(tài);hoid:特殊情況控制信號,為1的話,則兩個(gè)方向無條件顯示為紅燈;light1:控制主干道

6、方向四盞燈的亮滅;其中,light10light2,分別控制主干道方向的綠燈、黃燈和紅燈;light2:控制支干道方向四盞燈的亮滅;其中,light20 light22,分別控制支干道方向的綠燈、黃燈和紅燈;num1:用于主干道方向燈的時(shí)間顯示,8 位,可驅(qū)動兩個(gè)數(shù)碼管;num2:用于支干道方向燈的時(shí)間顯示,8 位,可驅(qū)動兩個(gè)數(shù)碼管;counter:用于數(shù)碼管的譯碼輸出;st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設(shè)置如下:module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);i

7、nput en,clk,qclk,rst,hold,rst1;output st1,st2;output7:0 num1,num2;output6:0counter;output2:0 light1,light2;reg tim1,tim2,st1,st2;reg1:0state1,state2,ste;reg2:0light1,light2;reg3:0num;reg6:0counter;reg7:0 num1,num2;reg7:0 red1,red2,green1,green2,yellow1,yellow2;1. 二極管點(diǎn)亮控制該部分程序的作用是根據(jù)計(jì)數(shù)器的計(jì)數(shù)值控制發(fā)光二極管的亮、滅

8、,以及輸出倒計(jì)時(shí)數(shù)值給七段數(shù)碼管的譯碼電路.此外,當(dāng)檢測到特殊情況(hold=1)發(fā)生時(shí),無條件點(diǎn)亮紅燈的二極管,當(dāng)檢測到復(fù)位信號,兩個(gè)方向計(jì)數(shù)與控制回復(fù)到00狀態(tài).因?yàn)橹?、支干道兩個(gè)方向二極管點(diǎn)亮的順序與延遲時(shí)間不同,顧編寫兩個(gè)獨(dú)立的部分來控制,具體程序如下:1)主干道方向always (posedge clk )begin if(rst) /復(fù)位與特殊情況控制 beginlight1<=3b001;num1=green1; end else if(hold) beginlight1=3b100; num1=green1; end else if(en) begin /使能有效開始控制

9、計(jì)數(shù) if(!tim1) / begin /主干道交通燈點(diǎn)亮控制 tim1<=1; case(state1) 2'b00:begin num1=green1;light1=3b001;state1<=2b01;end 2b01:begin num1=yellow1;light1=3'b010;state1<=2'b11;end 2'b11:begin num1=red1;light1=3b100;state1=2b10;end 2b10:begin num1<=yellow1;light1<=3b010;state1<=2b0

10、0;end default:light1=3b100; endcase end2)支干道方向always (posedge clk )begin if(rst) /復(fù)位與特殊情況控制 begin light2=3'b100; num2<=red2; end else if(hold) begin light2<=3'b100; num2<=red2; end else if(en) begin if(!tim2) begin tim2=1; case(state1) 2b00:begin num2<=red2;light2=3'b100;stat

11、e2<=2b01;end 2'b01:begin num2=yellow1;light2=3b010;state2=2b11;end 2b11:begin num2<=green2;light2=3'b001;state2=2'b10;end 2'b10:begin num2<=yellow2;light2=3b010;state2<=2b00;end default:light2=3'b100; endcase end2. 倒數(shù)計(jì)時(shí)該部分程序完成二極管發(fā)光時(shí)延的計(jì)數(shù),并將計(jì)數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個(gè)狀態(tài),計(jì)數(shù)器的初值

12、都被重置,以實(shí)現(xiàn)不同顏色二極管不同的時(shí)延要求。本次設(shè)計(jì)直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計(jì)數(shù),未采用分位器的設(shè)計(jì)。因?yàn)橹?、支干道上?jì)數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:always (posedge clk )beginelse begin /倒數(shù)計(jì)時(shí) if(num1>0) if(num13:0=0) beginnum13:0=4'b1001; num17:4=num17:4-1; end else num13:0=num13:01; if(num1=1) tim1=0; end end else begin light1=3'b010; num1=

13、2b00; tim1=0; endend3. 數(shù)碼管的譯碼及掃描顯示該段程序主要完成4個(gè)7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個(gè)方向上的剩余時(shí)間。譯碼的時(shí)鐘頻率要低,為Hz級.掃描的時(shí)鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示:always (posedge qclk)begin /數(shù)碼管掃描 if(rst1) begin st1=0; st2=0; end else begin case(st2,st1) 2b00:begin num=num13:0;st2,st1=2b01; end 2b01:begin num<=num17:4;st2,st1

14、=2'b10; end 2'b10:begin num=num23:0;st2,st1=2'b11; end 2b11:begin num=num27:4;st2,st1=2b00; end endcase endendalways (posedge qclk)begin /數(shù)碼管譯碼顯示case(num)4'b0000: counter=7b0111111; /04b0001: counter<=7b0000110; /14b0010: counter<=7b1011011; /24'b0011: counter<=7'b10

15、01111; /34'b0100: counter=7'b1100110; /44'b0101: counter=7b1101101; /54b0110: counter=7'b1111101; /64'b0111: counter=7'b0000111; /74b1000: counter=7b1111111; /84b1001: counter<=7'b1101111; /9default: counter<=7b0111111; /0endcaseendendmodule總體程序見程序清單所示仿真與硬件調(diào)試3。1 波形仿

16、真在Quarturs軟件下創(chuàng)建工程,新建編輯設(shè)計(jì)文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時(shí)間,時(shí)鐘周期,輸入輸出端口,進(jìn)行波形仿真.具體仿真波形圖及說明如下所示:仿真截止時(shí)間:100us;時(shí)鐘:clk 1us,qclk 0.1us1. 正常工作時(shí)波形仿真圖圖4. 正常工作時(shí)波形仿真圖圖形說明波形仿真主要完成了控制與計(jì)數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時(shí),計(jì)數(shù)器置初值,高電平時(shí)開始正常控制與計(jì)數(shù).控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計(jì)數(shù)器num1和num2從“00110101"開始遞減計(jì)數(shù),計(jì)數(shù)

17、至“00000000”時(shí),進(jìn)入下一個(gè)狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計(jì)數(shù)器num1和num2從“00000101”開始計(jì)數(shù)遞減,計(jì)數(shù)至”00000000”時(shí)進(jìn)入下一個(gè)狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮.Counter根據(jù)num1,num2變化隨時(shí)鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個(gè)完整周期。2。 特殊情況仿真波形圖5. 特殊情況仿真波形圖形說明當(dāng)hold輸入高電平時(shí),在時(shí)鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為"100",表示兩路紅

18、燈均亮起3。 復(fù)位情況仿真波形圖6。 復(fù)位情況仿真波形圖形說明當(dāng)rst輸入高電平時(shí),在時(shí)鐘上升沿控制下,計(jì)數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計(jì)數(shù)器num1和num2從“00110101”開始遞減計(jì)數(shù)。3.2 硬件調(diào)試完成時(shí)序仿真確認(rèn)無誤后,進(jìn)行實(shí)驗(yàn)箱管腳設(shè)置,注意設(shè)置完成后一定要再進(jìn)行一次全局仿真,使程序真正對應(yīng)于硬件輸出輸出。具體連接說明如下所示輸入變量:rst、clk、qclk、hold、en其中en,hold,rst接”01”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計(jì)數(shù)時(shí)鐘clk接實(shí)驗(yàn)箱上1Hz時(shí)鐘,掃描顯示時(shí)鐘qclk接125Khz時(shí)鐘.輸出變量:lig

19、ht12:0、light22:0、counter6:0、st1、st2其中l(wèi)ight10 、light20分別接綠色的發(fā)光二極管;light11、light21 分別接黃色的發(fā)光二極管;light12、light22分別接紅色的發(fā)光二極管.counter0counter6,分別接七段數(shù)碼管的af,st1、st2分別接試驗(yàn)箱上”416”譯碼器的低兩位.完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復(fù)位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況.程序清單module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,lig

20、ht2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output7:0 num1,num2;output6:0counter;output2:0 light1,light2;reg tim1,tim2,st1,st2;reg1:0state1,state2,ste;reg2:0light1,light2;reg3:0num;reg6:0counter;reg7:0 num1,num2;reg7:0 red1,red2,green1,green2,yellow1,yellow2;always (en )if(!e

21、n)begin /設(shè)置計(jì)數(shù)初值green1=8b00110101;red1<=8'b00100101;yellow1=8b00000101;green2=8'b00100101;red2=8b00110101;yellow2=8b00000101;endalways (posedge clk )begin if(rst) /復(fù)位與特殊情況控制 begin light1<=3'b001; num1=green1; end else if(hold) begin light1<=3'b100; num1=green1; end else if(en

22、) begin /使能有效開始控制計(jì)數(shù) if(!tim1) /開始控制 begin /主干道交通燈點(diǎn)亮控制 tim1=1; case(state1) 2b00:begin num1=green1;light1=3b001;state1=2b01;end 2b01:begin num1=yellow1;light1=3b010;state1=2'b11;end 2b11:begin num1<=red1;light1<=3'b100;state1=2'b10;end 2'b10:begin num1=yellow1;light1=3'b010;

23、state1=2'b00;end default:light1<=3b100; endcase end else begin /倒數(shù)計(jì)時(shí) if(num10) if(num13:0=0) begin num13:0=4'b1001; num17:4<=num17:41; end else num13:0<=num13:01; if(num1=1) tim1=0; end end else begin light1=3b010; num1=2b00; tim1<=0; end endalways (posedge clk )begin if(rst) /復(fù)位

24、與特殊情況控制 begin light2=3b100; num2=red2; end else if(hold) begin light2<=3b100; num2<=red2; end else if(en) begin if(!tim2) begin tim2=1; case(state1) 2b00:begin num2=red2;light2<=3b100;state2=2b01;end 2b01:begin num2<=yellow1;light2=3b010;state2=2b11;end 2b11:begin num2<=green2;light2&

25、lt;=3b001;state2=2'b10;end 2'b10:begin num2=yellow2;light2=3'b010;state2<=2b00;end default:light2<=3'b100; endcase end else begin /倒數(shù)計(jì)時(shí) if(num20) if(num23:0=0) begin num23:0=4'b1001; num27:4=num27:41; end else num23:0=num23:01; if(num2=1) tim2=0; end end else begin tim2<

26、=0; state2<=2b00; light2<=3b010; end end always (posedge qclk)begin /數(shù)碼管掃描 if(rst1) begin st1=0; st2=0; end else begin case(st2,st1) 2b00:begin num<=num13:0;st2,st1=2'b01; end 2'b01:begin num<=num17:4;st2,st1<=2b10; end 2'b10:begin num=num23:0;st2,st1<=2b11; end 2b11:be

27、gin num=num27:4;st2,st1=2b00; end endcase endendalways (posedge qclk)begin /數(shù)碼管譯碼顯示case(num)4b0000: counter=7'b0111111; /04b0001: counter=7'b0000110; /14b0010: counter=7b1011011; /24b0011: counter=7'b1001111; /34b0100: counter=7'b1100110; /44'b0101: counter=7b1101101; /54b0110: c

28、ounter=7'b1111101; /64b0111: counter=7b0000111; /74b1000: counter<=7b1111111; /84b1001: counter=7b1101111; /9default: counter=7b0111111; /0endcaseendendmodule總結(jié)在設(shè)計(jì)中采用V erilog HDL語言設(shè)計(jì)交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語言結(jié)構(gòu), 簡明的代碼描述復(fù)雜控制邏輯設(shè)計(jì), 與工藝無關(guān)特性, 在提高工作效率的同時(shí)達(dá)到求解目的, 并可以通過V erilog HDL 語言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計(jì)方法所無法比擬的優(yōu)越性。在設(shè)計(jì)過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計(jì)數(shù)器無法正常計(jì)數(shù),就是控制輸出無法進(jìn)入到下一個(gè)狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實(shí)踐證明,在編寫一個(gè)較復(fù)雜的程序時(shí),一開始一定要畫流程圖,弄清楚各個(gè)功能及實(shí)現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時(shí)候要尤其要注意語言的規(guī)范,如本次設(shè)計(jì)中編寫的V erilog在Quartus8。1中可以正常

溫馨提示

  • 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

提交評論