第一篇:基于FPGA的交通燈控制器設(shè)計
數(shù)字系統(tǒng)課程設(shè)計
基于FPGA的交通控制燈設(shè)計
姓名:
學(xué)號:
班級:
摘要
隨著社會的發(fā)展,城市規(guī)模的不斷擴(kuò)大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當(dāng)然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進(jìn),設(shè)計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機(jī)技術(shù)的飛速發(fā)展,電子電路分析和設(shè)計方法有了很大的改進(jìn),電子設(shè)計自動化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設(shè)計提供了一定的技術(shù)基礎(chǔ)。本課程設(shè)計運(yùn)用erilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示,并最后進(jìn)行了軟件實現(xiàn),達(dá)到了系統(tǒng)要求的功能。
設(shè)計原理
1.1設(shè)計要求
設(shè)計一個交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù) 主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進(jìn)行特殊狀態(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è)計是針對十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向為主干道方向,根據(jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環(huán)完成。循環(huán)往復(fù)的直行這個過程。其過程如下圖所示:
0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s
圖1.交通燈點亮?xí)r間控制說明
1.3實現(xiàn)方法
本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計數(shù)法,實現(xiàn)設(shè)計所要求的交通燈控制及時間顯示。設(shè)計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數(shù)碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。
Verilog HDL程序設(shè)計
2.1整體設(shè)計
根據(jù)上章設(shè)計原理,交通燈控制的關(guān)鍵是各個狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r間延時,根據(jù)狀態(tài)機(jī)的設(shè)計規(guī)范,本次設(shè)計了三個狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:
狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010
圖2.交通燈控制狀態(tài)轉(zhuǎn)化
說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時主干道紅燈及支干道綠燈亮起。進(jìn)入10狀態(tài)兩路黃燈亮起。結(jié)束一個循環(huán),從00狀態(tài)重新開始循環(huán)。
為實現(xiàn)控制與顯示的功能,需要設(shè)計交通燈點亮順序控制程序,倒數(shù)計時程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:
holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖
其中rst為復(fù)位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。
2.2 具體設(shè)計
根據(jù)整體設(shè)計要求,編寫各個功能部分Verilog HDL程序,設(shè)置各輸入輸出變量說明如下 clk: 為計數(shù)時鐘; qclk:為掃描顯示時鐘;
en: 使能信號,為1 的話,則控制器開始工作; rst: 復(fù)位信號,為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è)置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,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;
1.二極管點亮控制
該部分程序的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段數(shù)碼管的譯碼電路。此外,當(dāng)檢測到特殊情況(hold=‘1’)發(fā)生時,無條件點亮紅燈的二極管,當(dāng)檢測到復(fù)位信號,兩個方向計數(shù)與控制回復(fù)到00狀態(tài)。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 1)主干道方向 always @(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)
begin //使能有效開始控制計數(shù)
if(!tim1)//
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end 2)支干道方向
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)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
2.倒數(shù)計時
該部分程序完成二極管發(fā)光時延的計數(shù),并將計數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個狀態(tài),計數(shù)器的初值都被重置,以實現(xiàn)不同顏色二極管不同的時延要求。本次設(shè)計直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計數(shù),未采用分位器的設(shè)計。因為主、支干道上計數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:
always @(posedge clk)begin else begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end end
3.數(shù)碼管的譯碼及掃描顯示
該段程序主要完成4個7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示
仿真與硬件調(diào)試
3.1 波形仿真
在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設(shè)計文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時間,時鐘周期,輸入輸出端口,進(jìn)行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖
圖4.正常工作時波形仿真圖
圖形說明
波形仿真主要完成了控制與計數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時,計數(shù)器置初值,高電平時開始正??刂婆c計數(shù)。控制發(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數(shù)器num1和num2從“00110101”開始遞減計數(shù),計數(shù)至“00000000”時,進(jìn)入下一個狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數(shù)器num1和num2從“00000101”開始計數(shù)遞減,計數(shù)至”00000000”時進(jìn)入下一個狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個完整周期。
2.特殊情況仿真波形
圖5.特殊情況仿真波形
圖形說明
當(dāng)hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為”100”,表示兩路紅燈均亮起
3.復(fù)位情況仿真波形
圖6.復(fù)位情況仿真波形
圖形說明
當(dāng)rst輸入高電平時,在時鐘上升沿控制下,計數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計數(shù)器num1和num2從“00110101”開始遞減計數(shù)。3.2 硬件調(diào)試
完成時序仿真確認(rèn)無誤后,進(jìn)行實驗箱管腳設(shè)置,注意設(shè)置完成后一定要再進(jìn)行一次全局仿真,使程序真正對應(yīng)于硬件輸出輸出。具體連接說明如下所示
輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計數(shù)時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。
輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中l(wèi)ight1[0]、light2[0]分別接綠色的發(fā)光二極管;light1[1]、light2[1] 分別接黃色的發(fā)光二極管;light1[2]、light2[2]分別接紅色的發(fā)光二極管。counter[0]~counter[6],分別接七段數(shù)碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。
完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復(fù)位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況。
程序清單
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,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;
always @(en)if(!en)begin //設(shè)置計數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end
always @(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)
begin //使能有效開始控制計數(shù)
if(!tim1)//開始控制
begin //主干道交通燈點亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1)tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
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)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
else
begin //倒數(shù)計時
if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
end
else num2[3:0]<=num2[3:0]-1;
if(num2==1)tim2<=0;
end
end
else
begin
tim2<=0;
state2<=2'b00;
light2<=3'b010;
end
end
always @(posedge qclk)begin //數(shù)碼管掃描
if(rst1)
begin
st1=0;
st2=0;
end else
begin
case({st2,st1})
2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end
2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end
2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end
2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end
endcase
end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule
總結(jié)
在設(shè)計中采用V erilog HDL語言設(shè)計交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語言結(jié)構(gòu), 簡明的代碼描述復(fù)雜控制邏輯設(shè)計, 與工藝無關(guān)特性, 在提高工作效率的同時達(dá)到求解目的, 并可以通過V erilog HDL 語言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計方法所無法比擬的優(yōu)越性。
在設(shè)計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數(shù)器無法正常計數(shù),就是控制輸出無法進(jìn)入到下一個狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實踐證明,在編寫一個較復(fù)雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規(guī)范,如本次設(shè)計中編寫的V erilog在Quartus8.1中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個問題時我總結(jié)了一些經(jīng)驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當(dāng)?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯時進(jìn)行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調(diào)試。
完成仿真后進(jìn)行,進(jìn)行試驗箱上的硬件調(diào)試,該步驟主要是要求細(xì)心,按照引腳清單,逐一完成連線,本次設(shè)計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達(dá)到期望的效果。注意觀察實物的現(xiàn)象,看是否滿足設(shè)計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達(dá)到滿意的效果。
通過這次課程設(shè)計,熟悉了簡單EDA設(shè)計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設(shè)計中學(xué)到的東西應(yīng)用到今后的工作學(xué)習(xí)中。
參考資料
[1] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的V erilog HDL設(shè)計技術(shù) [M ].北京: 北京航空航天大學(xué)出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學(xué)出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機(jī)械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機(jī)的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動交換系統(tǒng)測試[J ].電信科學(xué), 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學(xué)出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(chǔ)(數(shù)字部分)[M ].北京: 高等教育出版社, 1988
第二篇:基于FPGA的(帶有緊急情況處理的)交通燈控制器的設(shè)計.
學(xué)號成績 評語
《現(xiàn)代數(shù)字系統(tǒng)設(shè)計》課程論文
題目基于FPGA的(帶有緊急情況處理的交通燈控制器的設(shè)計 作者班級
院別信息與通信工程專業(yè)電子信息工程完成時間 2011年5月12日 目錄 1 概述(2 1.1 交通燈控制器的簡介(2 1.2論文主要完成的工作(2 2 系統(tǒng)硬件設(shè)計(2 2.1系統(tǒng)設(shè)計方案(2 2.2 主控模塊(3 2.2.1 FPGA簡介(3 2.2.2 主控芯片ACEX1K 系列的EP1K10TC100-3的介紹:(4 2.3 顯示模塊(4 2.3.1 發(fā)光二極管簡介(4 2.3.2 八段數(shù)碼管簡介:(4 3 系統(tǒng)軟件設(shè)計(5
3.1 軟件整體設(shè)計(5 3.2 控制模塊(6 3.2.1 交通燈狀態(tài)機(jī)、倒計時(6 3.2.2 交通燈主要模塊的狀態(tài)機(jī)及倒計時的流程圖(PFD(7 3.3 顯示模塊(8 4 系統(tǒng)測試與總結(jié)(9 4.1 系統(tǒng)測試結(jié)果(9 4.2本次設(shè)計的心得體會(9 參考文獻(xiàn)(10 附錄(11 1.控制模塊源程序(11 2.顯示模塊源程序(13 1 概述
1.1 交通燈控制器的簡介
如今是個現(xiàn)代化的社會,交通燈在日常生活中起著至關(guān)重要的作用。交通燈是城市交通監(jiān)管系統(tǒng)的做要組成部分,為管理交通工具和行人的動向,保障道路安全通暢的一類固定不動的必不可少的工具。在今天,交通燈控制器安裝在各個路口上,它成為疏通交通最常見最有效的手段。
基于FPGA的交通燈設(shè)計方法具有設(shè)計的靈活性,易于修改,設(shè)計周期短等縱多優(yōu)點。隨著設(shè)計語言、電子設(shè)計自動化和FPGA期間的不斷發(fā)展,基于FPGA 期間 的不斷完善和發(fā)展。在不遠(yuǎn)的將來。由FPGA設(shè)計的產(chǎn)品將越來越普遍。而此次交通燈控制器的設(shè)計采用基于Verilog HDL語言和FPGA的方法來實現(xiàn)所要求的功能。
1.2論文主要完成的工作
設(shè)計一個交通燈控制器,模擬現(xiàn)實生活中的交通燈,并能對緊急情況作出處理。對系統(tǒng)進(jìn)行模塊劃分、定義各模塊的具體功能。再用Verilog HDL語言編寫程序?qū)崿F(xiàn)各個模塊應(yīng)有的功能。
創(chuàng)建頂層文件,搭建電路,下載到FPGA芯片中。調(diào)試并觀察結(jié)果。
詳細(xì)介紹本次設(shè)計過程中所涉及的硬件、軟件原理及各個模塊的設(shè)計方式。深刻體會設(shè)計過程中所思,所想,所學(xué)。撰寫心得體會。2 系統(tǒng)硬件設(shè)計 2.1系統(tǒng)設(shè)計方案
利用狀態(tài)機(jī)來實現(xiàn)對交通燈的控制,對十字路口的紅、綠、黃和左拐燈進(jìn)行控制,并通過數(shù)碼管進(jìn)行顯示倒計時。
系統(tǒng)方案圖如下圖(1所示: 圖(1交通燈控制
2.頂層原理框圖如圖(2所示: 圖(2頂層原理系統(tǒng)圖 2.2 主控模塊 2.2.1 FPGA 簡介
FPGA ,即現(xiàn)場可編程門陣列,它是在GAL、PAL、CPLD 燈可編程期間的基礎(chǔ)上發(fā)展的產(chǎn)物。它是作為專門繼承領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了頂置電路的不足,又克服了原有可編程邏輯門電路數(shù)有限的缺點。FPGA 采用了邏輯單元陣列LCA 這樣一個新概念,內(nèi)部包括可配置模塊CLB、輸出輸入模塊IOB R1Y G1R2 L G2 L2 A 方向
B 方向 紅綠燈顯示 控制 模 塊 倒計時 譯 碼 器 譯碼 顯 示
和內(nèi)部連線三個部分。
FPGA的基本特點有:1.采用FPGA設(shè)計ASIC電路,用戶不需要投片生產(chǎn)就可以得到合適的芯片。2.FPGA可做其它全定制或半定制ASIC電路的中試樣片。
3.FPGA內(nèi)部有I/O引腳。
4.FPGA是ASIC電路中設(shè)計周期最短、開發(fā)費(fèi)用最低、風(fēng)險最小的器件之一。
5.FPGA采用高速CHMOS工藝,功耗低,可與CMOS、TTL 兼容??梢哉f,FPGA芯片是小批量系統(tǒng)提高集成度、可靠性的最佳選擇。
2.2.2 主控芯片ACEX1K 系列的EP1K10TC100-3的介紹: ACEX 系列是當(dāng)今Altera CPLD 中應(yīng)用前景最好的器件系列之一[1,2],該系列的FPGA 由邏輯陣列塊LAB(Logic array block、嵌入式陣列塊EAB(embedded array block、快速互聯(lián)以及IO 單元構(gòu)成,每個邏輯陣列塊包含8 個邏輯單元LE(logic element和一個局部互聯(lián)。每個邏輯單元則由一個4 輸入查找表(LUT、一個可編程觸發(fā)器、快速進(jìn)位鏈、級連鏈組成,多個LAB 和多個EAB 則可通過快速通道互相連接[3]。EAB 是ACEX 系列器件在結(jié)構(gòu)設(shè)計上的一個重要部件,他是輸入端口和輸出端口都帶有觸發(fā)器的一種靈活的RAM 塊,其主要功能是實現(xiàn)一些規(guī)模不太大的 FIFO、ROM、RAM 和雙端口RAM 等。
2.3 顯示模塊 2.3.1 發(fā)光二極管簡介
發(fā)光二極管,它是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化成光能;常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦?。?dāng)給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P 區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與N區(qū)的電子和P區(qū)的空穴復(fù)合,產(chǎn)生自發(fā)輻射的熒光。不同的半導(dǎo)體材料中電子和空穴所處的能量狀態(tài)不同。當(dāng)電子和空穴復(fù)合時釋放出的能量多少不同,釋放出的能量越多,則發(fā)出的光的波長越短。由鎵(Ga與砷(AS、磷(P的
化合物制成的二極管,當(dāng)電子與空穴復(fù)合時能輻射出可見光,因而可以用來制成發(fā)光二極管。在電路及儀器中作為指示燈,或者組成文字或數(shù)字顯示。磷砷化鎵二極管發(fā)紅光,磷化鎵二極管發(fā)綠光,碳化硅二極管發(fā)黃光。
2.3.2 八段數(shù)碼管簡介: 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示;按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陰極為高電平時,相應(yīng)字
段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。數(shù)碼管可以采用動態(tài)方式也可以采用靜態(tài)方式驅(qū)動。系統(tǒng)軟件設(shè)計 3.1 軟件整體設(shè)計 頂層文件圖下圖(3所示:
圖(3交通燈頂層文件圖 3.2 控制模塊
3.2.1 交通燈狀態(tài)機(jī)、倒計時
1.狀態(tài)機(jī):用兩個進(jìn)程分別控制兩個方向的交通燈。引入有限狀態(tài)機(jī)控制交通燈 的狀態(tài)轉(zhuǎn)化,即綠燈->黃燈->左拐燈->紅燈。復(fù)位時紅燈亮。
2.倒計時:用兩個減法計數(shù)器實現(xiàn)倒計時,當(dāng)某個剩余時間減到0則切換狀態(tài)。各個狀態(tài)交通燈保持的時間分配:A向紅、黃、綠、左拐燈分別為 50S,5S,40S,15S, A向紅、黃、綠、左拐燈分別為65S,5S,30S,15S。
3.緊急情況:當(dāng)有救護(hù)車或者其它一些情況時,救護(hù)車或特定車輛需優(yōu)先通過十 字路口,此時交通等的狀態(tài)為:A,B方向都為紅燈亮,并且剩余時間 為20s.交通燈狀態(tài)機(jī)及倒計時模塊如下圖(4所示:
CLK 同步時鐘1HZ 用于準(zhǔn)確及時 EN 使能信號
EMERGE 緊急信號有車輛需優(yōu)先通過十字路口 LAMPA 0~3分別控制A方向的左拐、綠、黃和紅燈 LAMPB 0~3分別控制B方向的左拐、綠、黃和紅燈 ACOUNT 用于A方向的時間顯示,驅(qū)動兩個數(shù)碼管 BCOUNT 用于B方向的時間顯示
圖(4交通燈控制模塊圖
3.2.2 交通燈主要模塊的狀態(tài)機(jī)及倒計時的流程圖(PFD 主要模塊流程圖如下圖(5所示: 圖(5交通燈控制模塊PFD 圖 開始 是否使能? 設(shè)定定時時間和 方式 有無緊急情況?
A,B 方向都紅燈亮起 計時時間到30S A 方向綠燈亮40S ,接著黃燈亮5S ,再接著左拐燈亮15,然后黃燈亮5S ,同時 B 方向一直是紅燈亮65S B 方向綠燈亮30S ,接著黃燈亮5S ,再接著左拐燈亮15,然后黃燈亮5S ,同時B 方向一直是紅燈亮55S 結(jié)束
回到初態(tài),A ,B 方向都紅燈亮,都顯示為00 有 是 否 無 是 否
3.3 顯示模塊
7位數(shù)碼管采用動態(tài)掃描顯示,經(jīng)位選信號譯碼后選擇一位數(shù)碼管,段暄信號為A、B、C、D、E、F、G。
位選掃描模塊圖如下圖(6所示: CLK 時鐘信號 1KHz 用于控制后面的譯碼顯示模塊使用動態(tài)掃描方式顯示SEL 選擇信號
圖(6位選掃描模塊圖
段選掃描模塊圖如下圖(7所示: ACOUNT 用于A方向的時間顯示 BCOUNT 用于B方向的時間顯示 SEL 位選信號
OUT 輸出信號用來控制數(shù)碼管所顯示的字符
圖(7段選掃描模塊圖
顯示譯碼模塊圖如下圖(8所示: OUT 控制數(shù)碼管所顯示的字符 A,B,C,D,E,F,G 驅(qū)動八段數(shù)碼管顯示
圖(8顯示譯碼模塊圖 4 系統(tǒng)測試與總結(jié) 4.1 系統(tǒng)測試結(jié)果
由于交通燈這個設(shè)計仿真的結(jié)果不是很一目了然,再就是本人對仿真軟件的了解不夠,不能消除毛刺,影響觀瞻。所以我就沒有吧實驗仿真圖截下來,我在設(shè)計過程中,也通過仿真驗證了實驗結(jié)果的正確性。為了得到確定的結(jié)果,我把該頂層文件所組成的原理圖文件下載到FPGA芯片和正確搭建電路后,就可以觀察到交通等預(yù)期的結(jié)果了。
復(fù)位時紅燈全亮,復(fù)位后相應(yīng)燈亮的次序和相應(yīng)的剩余時間都十分準(zhǔn)確。剛啟動時,A方向綠燈亮40S,接著黃燈亮5S,再接著左拐燈亮15,然后黃燈亮5S,同時B方向一直是紅燈亮65S。再是,B方向綠燈亮30S,接著黃燈亮5S,再接著左拐燈亮15,然后黃燈亮5S,同時B方向一直是紅燈亮55S。之后就一直重復(fù)以上行為。完全模擬了現(xiàn)實生活中的十字路口的交通燈。
擴(kuò)展的功能情況為:不論何時,只要有緊急情況出現(xiàn)時,交通燈A,B方向都是紅燈亮起,并且倒計時20S。使其能正常通過十字路口。20S過后交通燈回到正常狀態(tài)。
4.2本次設(shè)計的心得體會
通過一個學(xué)期EDA的學(xué)習(xí),我學(xué)到了很多東西。一直以來,我對各種變成都有濃厚的興趣。而此次EDA的課程不僅要求學(xué)習(xí)者有一定的編程能力,還需要有一定 的硬件實驗的動手能力。EDA課程吸引我最大的地方在于,它不僅可以仿真,而且還可以下載到FPGA芯片中看到實實在在的效果。當(dāng)看到自己的學(xué)習(xí)成果的那一刻的滿足感最能激勵我的學(xué)習(xí)熱情。
跟著老師認(rèn)真學(xué)習(xí)了一學(xué)期的EDA課程,我真的受益匪淺。老師幽默的,認(rèn)真負(fù)責(zé)的實踐性強(qiáng)的教學(xué)工作,不僅使我編程能力有了一定的提高,實踐動手能力有了很大的提升。我學(xué)會了怎樣有效地調(diào)試電路,準(zhǔn)確分析問題所在,得到正確的解決方法。在此次設(shè)計過程中,我認(rèn)真編寫了所有模塊的程序,經(jīng)調(diào)試無誤后,創(chuàng)建頂層原理圖文件。再下載到FPGA中并正確搭建電路。本來我所設(shè)計的交通燈控制器是沒有緊急情況處理功能的,但我覺得一個成熟的交通燈控制器應(yīng)該要有此項功能。因此為了更好的達(dá)到設(shè)計目的。我修改了控制模塊的程序,添加了此項功能。在文檔的編寫過程中,我學(xué)會了獨立摸索,不斷進(jìn)步,精益求精。我認(rèn)真思考,怎樣才能把文檔寫得更加規(guī)范,更加符合設(shè)計要求。我不斷地添加新內(nèi)容,如繪制頂層原理圖,最主要模塊的即控制模塊的程序流程圖,使自己的設(shè)計思路更加容易被理解。
當(dāng)然在這門課程的學(xué)習(xí)和設(shè)計過程中,我也發(fā)現(xiàn)了自己的一些不足。例如,對仿真軟件的學(xué)習(xí)不夠,我雖然做了仿真,但是效果不理想,有很多毛刺,還有一段時間的延時。我會在將來的學(xué)習(xí)過程中加以改正。
EDA的設(shè)計是很靈活的,如果你要想增加一些功能或者是修改須實現(xiàn)的功能,只需要修改相關(guān)的源程序或原理圖即可。隨著設(shè)計語言、電子設(shè)計自動化和FPGA期間的不斷發(fā)展,基于FPGA期間的不斷完善和發(fā)展。我相信,在不遠(yuǎn)的將來。由FPGA設(shè)計的產(chǎn)品將越來越普遍。
本課程雖然結(jié)束了,但是這種使用的技能將仍然存在我的學(xué)習(xí),工作生活中。我相信,這是一種很實用的技能。我以后還會不斷強(qiáng)化這種技能。希望可以基于FPGA設(shè)計出更多更實用的東西。
參考文獻(xiàn)
[1]王金明《數(shù)字系統(tǒng)設(shè)計與Verilog HDl》(第四版電子工業(yè)出版社 2011
年1月
[2]湖南理工學(xué)院實驗室《專業(yè)實驗輔導(dǎo)教材》 2010年10月 附錄
1.控制模塊源程序 /* 信號定義 CLK 同步時鐘 EN 使能信號
LAMPA 0~3分別控制A方向的左拐、綠、黃和紅燈 LAMPB 0~3分別控制B方向的左拐、綠、黃和紅燈 ACOUNT 用于A方向的時間顯示,驅(qū)動兩個數(shù)碼管 BCOUNT 用于B方向的時間顯示 */ module traffic(CLK, EN, LAMPA,EMERGE, LAMPB, ACOUNT, BCOUNT;output[7:0] ACOUNT, BCOUNT;output[3:0] LAMPA, LAMPB;input CLK, EN,EMERGE;//EMERGE信號模擬緊急情況,如有救護(hù)車要通過十字路口
reg[3:0] LAMPA, LAMPB;reg[7:0] numa, numb;// 剩余時間 reg tempa, tempb;// 切換狀態(tài)
reg[2:0] counta, countb;// 狀態(tài)量
reg[7:0] ared, ayellow, agreen, aleft, // 保持時間 bred, byellow, bgreen, bleft;assign ACOUNT = numa;assign BCOUNT = numb;/**************** 設(shè)置燈的計數(shù)初值 ****************/ always @(EN begin if(!EN begin ared <= 8'h55;ayellow <= 8'h5;agreen <= 8'h40;aleft <= 8'h15;bred <= 8'h65;byellow <= 8'h5;bgreen <= 8'h30;bleft <= 8'h15;end end /**************************** 控制A方向燈*************************/ always @(posedge CLK begin
if(EN // 正常情況 if(EMERGE//緊急情況 counta <=5;else //無緊急情況的正常運(yùn)行狀態(tài) begin if(!tempa // 切換狀態(tài) begin tempa <= 1;case(counta // 控制亮燈的順序
0: begin numa<=agreen;LAMPA<=2;counta<=1;end 1: begin numa<=ayellow;LAMPA<=4;counta<=2;end 2: begin numa<=aleft;LAMPA<=1;counta<=3;end 3: begin numa<=ayellow;LAMPA<=4;counta<=4;end 4: begin numa<=ared;LAMPA<=8;counta<=0;end 5: begin LAMPA <= 8;numa<=8'h20;counta<=0;end // 緊急情況時,A,B向都紅燈亮,并且持續(xù)時間都為20s,時間到轉(zhuǎn)為正常情況
default: LAMPA <= 8;// 紅燈亮 endcase end
else // 倒計時 begin if(numa > 1 if(numa[3:0] == 0 begin numa[3:0] <= 4'b1001;numa[7:4] <= numa[7:4]1;if(numa == 2 tempa <= 0;end end else // 返回初態(tài) begin LAMPA <= 4'b1000;counta <= 0;tempa <= 0;end end /*************************** 控制B方向的燈 ************************/ always @(posedge CLK
begin if(EN if(EMERGE//緊急情況 countb=5;else //無緊急情況的正常運(yùn)行狀態(tài) begin if(!tempb begin tempb <= 1;case(countb // 控制亮燈的順序
0: begin numb<=bred;LAMPB<=8;countb<=1;end 1: begin numb<=bgreen;LAMPB<=2;countb<=2;end 2: begin numb<=byellow;LAMPB<=4;countb<=3;end 3: begin numb<=bleft;LAMPB<=1;countb<=4;end 4: begin numb<=byellow;LAMPB<=4;countb<=0;end 5: begin LAMPB <= 8;numb<=8'h20;countb<=0;end //緊急情況時, A,B方向都紅燈亮,并且持續(xù)時間都為20s,時間到轉(zhuǎn)為正常情況
default: LAMPA <= 8;// 紅燈亮 endcase
end else begin // 倒計時 if(numb > 1 if(numb[3:0] == 0 begin numb[3:0] <= 4'b1001;numb[7:4] <= numb[7:4]1;if(numb == 2 tempb <= 0;end end else begin LAMPB <= 4'b1000;countb <= 0;tempb <= 0;end end endmodule
2.顯示模塊源程序(1位選掃描模塊源程序: /*四進(jìn)制計數(shù)器*/ module count4(clk, out;input clk;output[1:0] out;reg[1:0] out;always @(posedge clk begin if(out == 3 out <= 0;else out <= out + 1;end Y1 endmodule(2段選掃描模塊源程序: /*行為描述的16選4段選*/ module mux16_4(out,ACOUNT,BCOUNT,sel;
output[3:0] out;reg[3:0] out;input[7:0] ACOUNT;input[7:0] BCOUNT;input[1:0] sel;always @(ACOUNT or BCOUNT or sel case(sel 2'b00: out<=ACOUNT[7:4];2'b01: out<=ACOUNT[3:0];2'b10: out<=BCOUNT[7:4];2'b11: out<=BCOUNT[3:0];default out<=1'bx;endcase endmodule(3顯示譯碼模塊源程序: /*數(shù)碼管顯示電路*/ module decode4_7(a,b,c,d,e,f,g,out;input[3:0] out;output reg a,b,c,d,e,f,g;
always @(* begin case(out 4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111110;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'b1111110;endcase end endmodule
第三篇:交通燈控制器設(shè)計實驗報告
設(shè)計性實驗項目名稱
交通燈控制器設(shè)計
實驗項目學(xué)時:3學(xué)時
實驗要求:■ 必修
□ 選修
一、實驗?zāi)康?/p>
1、學(xué)習(xí)與日常生活相關(guān)且較復(fù)雜數(shù)字系統(tǒng)設(shè)計;
2、進(jìn)一步熟悉EDA實驗裝置和QuartusⅡ軟件的使用方法;
3、學(xué)習(xí)二進(jìn)制碼到BCD碼的轉(zhuǎn)換;
4、學(xué)習(xí)有限狀態(tài)機(jī)的設(shè)計應(yīng)用。
二、實驗原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對于同一個路口又 有很多不同的顯示要求,比如十字路口,車輛如果只要東西和南北方向通行就很 簡單,而如果車子可以左右轉(zhuǎn)彎的通行就比較復(fù)雜,本實驗僅針對最簡單的南北 和東西直行的情況。
要完成本實驗,首先必須了解交通路燈的燃滅規(guī)律。本實驗需要用到實驗箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規(guī)律為:初始態(tài)是兩個路口的紅燈全亮之后,主干道的綠燈亮,鄉(xiāng)間道路的紅燈亮,主干道方向通車,延時一段時間后,鄉(xiāng)間公路來車,主干道綠燈滅,黃燈開始閃爍。閃爍若干次后,主干道紅燈亮,而同時鄉(xiāng)間公路的綠燈亮,延時一段時間后,鄉(xiāng)間公路的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到主干道方向,重復(fù)上述過程。
三、設(shè)計要求
完成設(shè)計、仿真、調(diào)試、下載、硬件測試等環(huán)節(jié),在型EDA實驗裝置上實現(xiàn)一個由一條主干道和一條鄉(xiāng)間公路的匯合點形成的十字交叉路口的交通燈控制器功能,具體要求如下:
1、有MR(主紅)、MY(主黃)、MG(主綠)、CR(鄉(xiāng)紅)、CY(鄉(xiāng)黃)、CG(鄉(xiāng)綠)六盞交通燈需要控制;
2、交通燈由綠轉(zhuǎn)紅前有4秒亮黃燈的間隔時間,由紅轉(zhuǎn)綠沒有間隔時間;
3、鄉(xiāng)間公路右側(cè)各埋有一個串連傳感器,當(dāng)有車輛準(zhǔn)備通過鄉(xiāng)間公路時,發(fā)出請求信號S=1,其余時間S=0;
4、平時系統(tǒng)停留在主干道通行(MGCR)狀態(tài),一旦S信號有效,經(jīng)主道黃燈4秒(MYCR)狀態(tài)后轉(zhuǎn)入鄉(xiāng)間公路通行(MRCG)狀態(tài),但要保證主干道通行大于一分鐘后才能轉(zhuǎn)換;
5、一旦S信號消失,系統(tǒng)脫離MRCG狀態(tài),即經(jīng)鄉(xiāng)道黃燈4秒(MRCY)狀態(tài)進(jìn)入MGCR狀態(tài),即使S信號一直有效,MRCG狀態(tài)也不得長于20秒鐘;
6、控制對象除紅綠燈之外,還包括分別在主干道和鄉(xiāng)間公路各有一個兩位十進(jìn)制倒計時數(shù)碼管顯示。
四、主要儀器設(shè)備
1、微機(jī)
1臺
1套 1套
2、QuartusII集成開發(fā)軟件
3、EDA實驗裝置
五、實驗步驟
源程序:
0module traffic1(clk,s,rst,light,sel,SG);input clk,s,rst;output[5:0] light;
output [2:0]sel;output [7:0]SG;reg [5:0] light;reg clk1;reg [3:0] sc;
reg [7:0] count;reg [7:0] cnt,SG;reg [2:0] sel;reg [3:0]a;parameter s0=0,s1=1,s2=2,s3=3,s4=4;initial
begin
count<=8'b01100000;
light<=6'b001100;
sc=s0;
end
always @(posedge clk)begin
begin cnt=cnt+1;
if(cnt==100)begin clk1=1'b1;cnt=0;end
else clk1=1'b0;//100分頻,CLK為數(shù)碼管掃描頻率,CLK1為計數(shù)頻率
if(sel<7)sel=sel+1;else sel=6;
end //sel為數(shù)碼管選擇
begin
case(sel)
7: a=count[3:0];//0數(shù)碼管為個位
6: a=count[7:4];//1數(shù)碼管為十位
default: a=0;
endcase
case(a)
0:SG<=8'b00111111;1:SG<=8'b00000110;
2:SG<=8'b01011011;3:SG<=8'b01001111;
4:SG<=8'b01100110;5:SG<=8'b01101101;
6:SG<=8'b01111101;7:SG<=8'b00000111;
8:SG<=8'b01111111;9:SG<=8'b01101111;//8段譯碼值
default: SG=8'b11111111;
endcase
end end
always @(posedge clk1 or negedge rst)
begin
if(!rst)begin count = 0;sc=s3;end // count set nothing but else 0
else if(count == 0)
begin
case(sc)
s0: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc=s4;count = 8'b01100000;end end
s1: begin count = 8'b00100000;sc=s2;light=6'b100001;end
s2: begin count = 8'b00000100;sc=s3;light=6'b100010;end
s3: begin count = 8'b01100000;sc=s0;light=6'b001100;end
s4: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc = s4;count = 8'b01100000;light<=6'b001100;end end
default begin sc=s0;count =8'h60;end
endcase
end
else
if((sc==s2)&(s==0))begin sc=s3;count = 8'b00000100;light=6'b100010;end
else
if((sc==s4)&(s==1))begin sc=s1;count = 8'b00000100;light=6'b010100;end
else if(count[3:0] == 4'b0000)
begin count = count-7;end
else
begin count = count-1;end
end endmodule
管腳鎖定
六、波形仿真
主干道60s倒計時
s信號為1時
七、實驗心得
通過本次實驗,讓我進(jìn)一步掌握了軟件quartus的使用流程,一開始實驗時波形仿真是正確的,但在電路上實現(xiàn)時主干道亮黃燈時,鄉(xiāng)間道路亮的是綠燈,這顯然是不對的,后面發(fā)現(xiàn)是管腳鎖定時出現(xiàn)了問題,改回來之后就沒問題了。管腳鎖定時不能粗心,不然很容易出現(xiàn)問題。
曹軍
生醫(yī)121班
第四篇:FPGA交通燈實驗報告
交通燈實驗報告
一,實驗?zāi)康?/p>
實現(xiàn)兩路信號燈交替亮起,并利用兩組數(shù)碼管分別對兩路信號進(jìn)行倒計時。
兩路信號時間分別為:
V:綠燈(30S)
H:紅燈(35S)
黃燈(5s)
綠燈(30S)
紅燈(35S)
黃燈(5S)
二,實驗步驟 建立工程
可在歡迎界面點擊“Creat a New Project”進(jìn)入工程建立界面,亦可關(guān)閉歡迎界面,點擊菜單欄的“File”,點擊“New Project Wizard”進(jìn)入建立工程界面。右側(cè)為建立工程界面,點擊next。
在此界面選定工程路徑,取好工程名,點擊“Next”。注意:路徑中不能有中文,工程名也不能有中文。
一直點擊“Next”進(jìn)入器件設(shè)置界面,DE2-70開發(fā)工具采用的Cyclone II系列的EP2C70F896C6N。點擊“Finish”,完成工程建立
1、點擊“File”,點擊“New” 選擇“Verilog HDL” 2,點擊主界面工具欄中的 選擇“Verilog HDL”
3、寫入verilog代碼。
代碼如下:
module traffic(Clk_50M,Rst,LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V,Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL,led15);
parameter S1=2'b00;parameter S2=2'b01;parameter S3=2'b10;parameter S4=2'b11;
input Clk_50M,Rst;output LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;output[6:0] Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL;output led15;
//-------------div for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always@(posedge Clk_50M or negedge Rst)begin
if(!Rst)
begin
Cnt_1Hz<=1;
Clk_1Hz<=1;
end
else
begin
if(Cnt_1Hz>=25000000)
end
//-----------div for 1Hz------end-----reg[7:0] Cnt30,CntH,CntV,CntHH,CntVV;reg[7:0] CntDis,CntDiss;//-----------30 counter and seg7---start---reg LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;always@(posedge Clk_1Hz)begin
end
begin
Cnt_1Hz<=1;
Clk_1Hz<=~Clk_1Hz;
end
else
Cnt_1Hz<=Cnt_1Hz + 1;
case(state)
S1:
end
always@(posedge Clk_1Hz)begin
case(stateV)
S1:
begin
if(CntV>=30)
CntV<=1;
begin
if(Cnt30>=30)
Cnt30<=1;
else
Cnt30<=Cnt30 + 1;S2:
begin
if(Cnt30>=5)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;S3:
begin
if(Cnt30>=30)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;S4:
begin
if(Cnt30>=5)
Cnt30<=1;end
else
Cnt30<=Cnt30 + 1;end endcase
else
CntV<=CntV + 1;
S2: begin
end
end if(CntV>=5)
CntV<=1;
else
CntV<=CntV + 1;end
S3:
begin
if(CntV>=35)
CntV<=1;
else
CntV<=CntV + 1;end endcase always@(posedge Clk_1Hz)begin
case(stateH)
S1:
end
always@(negedge Clk_50M or negedge Rst)begin
begin
if(CntH>=35)
CntH<=1;
else
CntH<=CntH + 1;
S2:
begin
if(CntH>=30)
CntH<=1;end
else
CntH<=CntH + 1;end
S3:
begin
if(CntH>=5)
CntH<=1;
else
CntH<=CntH + 1;end endcase
case(state)
S1:
end always@(negedge Clk_50M or negedge Rst)begin
case(state)
S1:
end
//16進(jìn)制計數(shù)器轉(zhuǎn)換為用于顯示的10進(jìn)制計數(shù)器 always@(posedge Clk_50M)begin
if(CntVV>29)
begin
CntDis[7:4]<=3;
CntDis[3:0]<=CntVV20;end else if(CntVV>9)begin
CntDis[7:4]<=1;
CntDis[3:0]<=CntVV30;end else if(CntHH>19)begin
CntDiss[7:4]<=2;
CntDiss[3:0]<=CntHH10;end else
CntDiss<=CntHH;
end
if(Cnt30>=5)
end
end S3:
begin
state<=S4;
end S4:
begin
state<=S1;
end default:
begin
state<=S1;
end endcase
if(Cnt30>=30)
if(Cnt30>=5)always@(posedge Clk_1Hz)begin
case(state)
S1:
end
always@(posedge Clk_50M or negedge Rst)
begin
stateH<=S1;
stateV<=S1;
end S2:
begin
stateH<=S1;
stateV<=S2;
end S3:
begin
stateH<=S2;
stateV<=S3;
end S4:
begin
stateH<=S3;
stateV<=S3;
end endcase begin
if(!Rst)
begin
LedR_H<=0;
else
LedG_H<=0;LedY_H<=0;
LedR_V<=0;
LedG_V<=0;end LedY_V<=0;
begin
case(state)
S1:
begin
LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;end
S2:
begin
LedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;end
S3:
begin
LedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;end
S4:
begin LedR_H<=0;LedG_H<=0;
end
LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;end
default:
begin
end LedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;end
endcase assign led15=state;
endmodule
module SEG7_LUT input [3:0] iDIG;output reg
always @(iDIG)begin
case(iDIG)4'h1: oSEG = 7'b1111001;
//---t----4'h2: oSEG = 7'b0100100;// |
| 4'h3: oSEG = 7'b0110000;// lt rt
4'h4: oSEG = 7'b0011001;// |
| 4'h5: oSEG = 7'b0010010;//---m----4'h6: oSEG = 7'b0000010;// |
| 4'h7: oSEG = 7'b1111000;// lb rb 4'h8: oSEG = 7'b0000000;// |
| 4'h9: oSEG = 7'b0011000;//---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;[6:0] oSEG;[6:0] oSEG;(oSEG,iDIG);
end
4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcase endmodule 編譯工程
保存文件,將文件放在所建工程所在路徑下 點擊主界面工具欄中的圖標(biāo)
也可點擊菜單欄中“Processing”,點擊“Start Compilation”
分配關(guān)鍵如下:
Clk_50M Input PIN_AD15 LedG_H Output PIN_AD9 LedG_V Output PIN_AJ6 LedR_H Output PIN_AJ7)LedR_V Output PIN_AJ5)LedY_H Output PIN_AD8 LedY_V Output PIN_AK5 Rst Input PIN_AA23 Seg7_HH[6] Output PIN_G1 Seg7_HH[5] Output PIN_H3 Seg7_HH[4] Output PIN_H2 Seg7_HH[3] Output PIN_H1 Seg7_HH[2] Output PIN_J2 Seg7_HH[1] Output PIN_J1 Seg7_HH[0] Output PIN_K3
Seg7_HL[6] Seg7_HL[5] Seg7_HL[4] Seg7_HL[3] Seg7_HL[2] Seg7_HL[1] Seg7_HL[0] Seg7_VH[6] Seg7_VH[5] Seg7_VH[4] Seg7_VH[3] Seg7_VH[2] Seg7_VH[1] Seg7_VH[0] Seg7_VL[6] Seg7_VL[5] Seg7_VL[4] Seg7_VL[3] Seg7_VL[2] Seg7_VL[1] Seg7_VL[0] Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output PIN_E4 PIN_F4 PIN_G4 PIN_H8 PIN_H7 PIN_H4 PIN_H6 PIN_AD17 PIN_AF17 7 PIN_AE17 7 PIN_AG16 PIN_AF16 7 PIN_AE16 7 PIN_AG13 PIN_AD12 PIN_AD11 PIN_AF10 8 PIN_AD10 PIN_AH9 8 PIN_AF9 8 PIN_AE8 8
燒寫代碼
在管腳配置完成后,還需將工程再編譯一次,成功后,點擊主界面工具欄中的亦可點擊主界面菜單欄中“Tools”,點擊“Programmer”
進(jìn)入代碼燒寫界面后,點擊“Start”,當(dāng)“Progress”為100%時,表示燒寫完成,這是可觀察DE2-70板現(xiàn)象
獲得預(yù)期的效果,兩組的信號紅黃綠燈交替切換,計數(shù)器記為零時信號燈切換狀態(tài),紅燈35s,黃燈5s,綠燈30s。三,心得體會
通過本次實驗初步了解了EDA技術(shù),熟悉了FPGA開發(fā)板的開發(fā)流程,鍛煉了動手能力。
第五篇:基于FPGA的交通燈控制電路的設(shè)計
編號:
EDA技術(shù)
實訓(xùn)(論文)說明書
題 目: 交通燈控制電路的設(shè)計 院(系): 信息與通信學(xué)院 專 業(yè): 電子信息工程 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師:
2013年月日
桂林電子科技大學(xué)實訓(xùn)說明書用紙
摘要
EDA工具對于電子設(shè)計人員來說極其重要,它可以在電子設(shè)計的各個階段、層次進(jìn)行計算機(jī)模擬驗證,確保設(shè)計的準(zhǔn)確性,可縮短設(shè)計周期,降低設(shè)計成本。交通燈可以實現(xiàn)十字路口紅綠燈的自動控制。基于FPGA的交通燈設(shè)計系統(tǒng)具有可靠性強(qiáng)、實時快速擦寫、運(yùn)算速度高、故障率低、電路簡單,且體積小的特點。本設(shè)計采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實現(xiàn)兩種方式實現(xiàn)并驗證交通燈的功能。關(guān)鍵詞:交通燈、EDA、FPGA
桂林電子科技大學(xué)實訓(xùn)說明書用紙
Abstract EDA tools for electronic design personnel is very important, it can be in the electronic design of each stage, levels of computer simulation verification, to ensure the accuracy of the design, can shorten the design cycle, reduce design cost.The traffic light can realize intersection traffic light automatic control.Based on the FPGA of traffic light design system has the reliability, real-time fast operation speed is high, integration.it, low failure rate, circuit is simple, and the characteristics of small volume.This design USES is Altera company CycloneII series of EP2C5T144 chip as the core minimum system, it can be convenient to the actual traffic lights embedded application system, can complete the simple logic control, data acquisition, signal processing, mathematical calculations, etc;Use QuartusII software as a development platform, Using the top-down design idea of system modular design and comprehensive, and through the waveform simulation and hardware realization two ways to realize and verify the function of the traffic lights.Key words: traffic lights;EDA;FPGA
桂林電子科技大學(xué)實訓(xùn)說明書用紙
引言
“EDA技術(shù)”是一門實踐性和實用性都很強(qiáng)的課程,學(xué)習(xí)的目的在于應(yīng)用。本設(shè)計實訓(xùn)是配合“EDA技術(shù)”課堂教學(xué)的一個重要的實踐教學(xué)環(huán)節(jié),在本課程設(shè)計指導(dǎo)書中列舉了一些常用的小型設(shè)計系統(tǒng),旨在起到鞏固課堂和書本上所學(xué)知識,加強(qiáng)綜合能力,提高系統(tǒng)設(shè)計水平,啟發(fā)創(chuàng)新思想的效果。
1設(shè)計任務(wù)與要求
1.1本綜合設(shè)計實訓(xùn)任務(wù)的內(nèi)容和要求
① 用EDA實訓(xùn)儀上的4只八段數(shù)碼管分別顯示道路東西和南北通行和禁止的倒計時時間。
② 能設(shè)置道路東西和南北兩側(cè)通行和禁止的倒計時時間,最大設(shè)置時間為99秒,最小設(shè)置時間為1秒。
③ 交通燈用紅、綠、黃三種發(fā)光二極管(LED)顯示控制的結(jié)果。④ 紅、綠、黃燈顯示的次序應(yīng)符合實際交通道路控制的要求。系統(tǒng)概述及設(shè)計原理
2.1 系統(tǒng)的主要功能
交通燈控制電路是用于城市交通疏導(dǎo)的管理系統(tǒng),它是現(xiàn)代城市交通監(jiān)控指揮系統(tǒng)中最重要的組成部分。交通信號燈指揮著人和各種車輛的安全運(yùn)行,實現(xiàn)紅、黃、綠燈的自動指揮是城鄉(xiāng)交通管理現(xiàn)代化的重要課題。在城鄉(xiāng)街道的十字交叉路口,為了保證交通秩序和行人安全,一般在每條道路上各有一組紅、黃、綠交通信號燈。交通燈控制電路自動控制十字路口兩組紅、黃、綠交通燈的狀態(tài)轉(zhuǎn)換,指揮各種車輛和行人安全通行,實現(xiàn)十字路口城鄉(xiāng)交通管理自動化。設(shè)計一個十字路口交通控制器,方向分為東南西北四個方向。東西方向的紅綠燈狀態(tài)一樣,南北方向的紅綠燈狀態(tài)一樣。每個方向上,有四盞燈,分別是左轉(zhuǎn)燈、紅燈、綠燈和黃燈。左拐燈亮表示左轉(zhuǎn)車輛可以通行;紅燈亮表示左轉(zhuǎn)和直行車輛禁行;綠燈亮表示直行車輛和右轉(zhuǎn)的車輛可以通行;黃燈亮表示左轉(zhuǎn)和直行的車輛即將禁行。
本論文簡要介紹了FPGA器件的特點和設(shè)計意義,以QuartusII軟件為開發(fā)平臺,通過VHDL硬件描述語言以及原理圖的輸入方式來設(shè)計交通燈。交通燈控制器用于自動控制十字路口交通燈和計時器。
系統(tǒng)的主要功能模塊方框圖如圖2-1所示
桂林電子科技大學(xué)實訓(xùn)說明書用紙
圖2-1 系統(tǒng)主要功能模塊
2.2交通燈的設(shè)計原理
交通燈控制電路的原理框圖如圖1.3所示。其中,clkgen是分頻器,將EDA實訓(xùn)儀主板提供的20MHz的主頻經(jīng)20000000分頻后,得到電路所需的1Hz(秒)時鐘。Cnt10de(兩個)是十進(jìn)制減法計數(shù)器,產(chǎn)生道路東西和南北通行和禁止的倒計時時間。Contr是控制電路,控制整個系統(tǒng)的工作??刂破鹘邮盏褂嫊r的結(jié)果,當(dāng)?shù)褂嫊r歸0時,改變電路的控制模式,輸出倒計時的初始時間和交通燈亮滅控制信號。
圖2-2 交通燈控制電路的原理圖 系統(tǒng)各個模塊的的設(shè)計與仿真
3.1 分頻器模塊的設(shè)計
由于采用的FPGA芯片的時鐘頻率是50MHz,需要將其分頻為1Hz。該模塊即是實現(xiàn)50M的分頻,將頻率變?yōu)?Hz的脈沖波,從而得到周期為1s的脈沖波。如果要真正的實現(xiàn)分頻50M,在仿真結(jié)果圖中是很難觀察的,甚至是沒有辦法驗證的,故在仿真過程中,將分頻的倍數(shù)變小,變?yōu)?0分頻,這樣從圖中可容易的得到并驗證對時鐘輸入信號的20分頻,如圖3-1所示,Reset是復(fù)位信號,CLK_50MHz是輸入時鐘頻率,CLK_1Hz是
桂林電子科技大學(xué)實訓(xùn)說明書用紙
輸出時鐘頻率,從圖中可以看出,輸出頻率CLK_1Hz確實是輸入時鐘頻率CLK_50MHz的20分頻。
圖3-1 分頻器仿真圖
3.2 狀態(tài)控制模塊的設(shè)計
狀態(tài)控制模塊根據(jù)輸入CLK_1Hz的脈沖信號輸出不同的STATUS值,下游的模塊依據(jù)STATUS的值來確定紅綠燈的狀態(tài);于此同時對倒計時信號賦初值。在狀態(tài)控制模塊仿真圖中,輸入信號CLK是一個頻率為1Hz的時鐘脈沖信號,RESET是復(fù)位信號;輸出信號STATUS是狀態(tài)轉(zhuǎn)換信號,控制著下游交通信號燈顯示模塊的顯示情況;LOAD_EW、LOAD_SN是東西、南北方向倒計時開始控制信號,DJS_EW、DJS_SN是東西、南北方向倒計時間信號。其仿真結(jié)果圖如圖3-2所示,由圖可得,STATUS共有000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6)共6個狀態(tài),80s為紅燈和左轉(zhuǎn)燈的倒計時間,45s為綠燈的倒計時間,5s是黃燈的倒計時間,和狀態(tài)轉(zhuǎn)換表的狀態(tài)一致。
圖3-2 狀態(tài)控制模塊仿真圖
3.3 交通燈信號燈顯示模塊的設(shè)計
交通信號燈顯示模塊根據(jù)輸入的STATUS信號,輸出對應(yīng)的紅綠黃燈信號,并直接驅(qū)動交通信號燈的亮滅。在交通燈信號燈顯示模塊程序仿真結(jié)果圖中,STATUS為輸入信號,而它依賴于狀態(tài)控制模塊產(chǎn)生的信號STATUS信號,一種六種狀態(tài),依次為000(S1)、001(S2)、010(S3)、011(S4)、100(S5)、101(S6);EW_LRGY(8位)是東西方向上交通信號燈的狀態(tài),SN_LRGY(8位)是南北方向上交通信號燈的狀態(tài),依次為左轉(zhuǎn)、紅、綠、黃,對應(yīng)著EW_LRGY、SN_LRGY的前四位,‘1’表示點亮,‘0’表示熄滅,后四位均為0,表示四個燈的陰極接負(fù)極。例如,在STATUS為001時,對應(yīng)的是東西方向紅燈亮,南北方向綠燈亮,仿真結(jié)果符合預(yù)期,完全正確。其仿真圖如3-3所示:
圖3-3 信號燈顯示模塊仿真圖
桂林電子科技大學(xué)實訓(xùn)說明書用紙
3.4東西方向倒計時模塊設(shè)計
東西方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_EW為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_EW_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實生活中的時間保持一致。其仿真結(jié)果如圖3-4所示,由圖可得,該模塊首先將80秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-4 東西方向倒計時仿真圖
3.5 南北方向倒計時模塊設(shè)計
南北方向倒計時模塊用來接收狀態(tài)控制模塊的輸出并作為初值,每檢測到一個CLK脈沖信號,就進(jìn)行減一動作,最后把減一結(jié)果輸出。在該模塊仿真圖中,CLK為1Hz的輸入信號,LOAD_SN為計數(shù)器的裝載信號,當(dāng)其為高電平時,將輸入信號DJS_SN_IN的值裝載到計數(shù)器中,并開始進(jìn)行減一操作,每遇一個CLK脈沖,進(jìn)行一次減一操作,并將結(jié)果輸出,由于輸入的時鐘頻率是1Hz,所以顯示的時間間隔是1s,與現(xiàn)實生活中的時間保持一致。其仿真結(jié)果如圖3-5所示,由圖可得,該模塊將45秒的倒計時信號裝載進(jìn)去,并進(jìn)行減一操作。
圖3-5南北方向倒計時仿真圖
3.6 譯碼模塊設(shè)計
譯碼模塊程序用來將輸入的兩位倒計時數(shù)值,分解成兩個整形數(shù)值,以此供后面的譯碼顯示模塊譯碼顯示。在譯碼程序TO_8421_BCD模塊仿真圖中,DJS_EW_OUT,DJS_SN_OUT為上一倒計時模塊的輸出信號,其范圍在0~80,所有倒計時的范圍都包含其內(nèi);DJS_EW_OUT_SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW為輸出信號,其范圍為0~9,代表了各個方向的倒計時的十位和個位,且數(shù)碼管所有顯示數(shù)字的范圍均在其內(nèi)。例如圖中DJS_EW_OUT的值不斷變化,相應(yīng)的依次將其分解為十位(DJS_EW_OUT_SW)和個位(DJS_EW_OUT_GW),并依次遞減,仿真結(jié)果符合預(yù)期,完全正確。仿真結(jié)果如圖3-6所示:
桂林電子科技大學(xué)實訓(xùn)說明書用紙
圖3-6 譯碼仿真結(jié)果圖
3.7 譯碼顯示模塊設(shè)計
譯碼顯示模塊將上一模塊譯碼模塊輸出的四個一位數(shù)譯碼成相對應(yīng)的七位數(shù)碼管段碼,完成倒計時的譯碼和顯示。在譯碼顯示模塊仿真圖中,DJS_ EW_OUT_ SW,DJS_EW_OUT_GW,DJS_SN_OUT_SW,DJS_SN_OUT_GW是四位的輸入信號,也是上一模塊TO_8421_BCD的輸出信號,它們的范圍為數(shù)字0~9,DJS_EW_ OUT_SW1,DJS_ EW_ OUT_GW1,DJS_SN_OUT_SW1,DJS_SN_OUT_GW1對應(yīng)的是相應(yīng)的七位數(shù)碼管顯示段碼的值。圖中輸出信號的值隨著輸入信號的變化而相應(yīng)的變化,例如DJS_EW_OUT_SW為7,DJS_EW_OUT_GW為5時,DJS_EW_OUT_SW1為00000111(a、b、c、d、e、f、g依次對應(yīng)著1110000,最高位的0表示是數(shù)碼管的類型是共陰的),表示數(shù)碼管顯示7,DJS_EW_OUT_GW1為01101101,表示數(shù)碼管顯示5。仿真完全正確,符合預(yù)期。其仿真結(jié)果如圖3-7所示:
圖3-7 譯碼顯示模塊仿真圖
3.8 頂層文件模塊設(shè)計
頂層設(shè)計采用VHDL語言描述方式實現(xiàn),并在工程文件仿真過后通過工具菜單自動生成原理圖文件,從而是設(shè)計原理更加清晰明朗。
在頂層設(shè)計VHDL描述中,共包含7個元件,分別是:
1、分頻器模塊,2、狀態(tài)控制模塊,3、交通信號燈顯示模塊,4、東西方向倒計時模塊設(shè)計,5、南北方向倒計時模塊設(shè)計,6、譯碼模塊設(shè)計,7、譯碼顯示模塊設(shè)計。這7個模塊經(jīng)過程序設(shè)計、編譯仿真,結(jié)果均能夠達(dá)到設(shè)計要求。最后在頂層設(shè)計中,通過元件例化語句將這7個模塊連接起來,生成頂層文件。在頂層設(shè)計中,RESET是復(fù)位信號,輸入的時鐘頻率CLK是50MHz,經(jīng)過分頻50M的分頻器后,變?yōu)轭l率為1Hz的時鐘信號,周期為1s,用此時鐘信號來控制整個系統(tǒng)的步調(diào),與現(xiàn)實生活中交通燈的步調(diào)保持一致。EW_LRGY、SN_LRGY分別為東西和南北方向上交通信號燈的狀態(tài),EW_DJS_DISPLAY、SN_DJS_DISPLAY為東西
桂林電子科技大學(xué)實訓(xùn)說明書用紙
和南北方向紅綠燈倒計時間。另外,所有的數(shù)碼管和二極管均為共陰極顯示。例如,在EW_LRGY為01000000(即東西方向紅燈亮)、SN_LRGY為10000000(即南北方向左轉(zhuǎn)燈亮)時,EW_DJS_DISPLAY的前八位表示倒計時的十位,后八位表示倒計時的個位;圖中EW_DJS_DISPLAY的前八位都是00000111表示7,后八位01111101表示6,后八位01101101表示5,后八位01100110表示4;SN_DJS_DISPLAY的前八位是01001111表示3,后八位01011011表示2,后八位00000110表示1,后八位00111111表示0,以上表明紅綠燈和倒計時時間顯示符合預(yù)期。仿真結(jié)果如圖3-8所示:
圖3-8 頂層文件波形仿真圖 實訓(xùn)心得體會
本次EDA技術(shù)實訓(xùn)的交通燈采用的是Altera公司CycloneII系列的EP2C5T144芯片作為核心最小系統(tǒng),它可以方便嵌入到實際的交通燈應(yīng)用系統(tǒng)中,可以完成簡單的邏輯控制、數(shù)據(jù)采集、信號處理、數(shù)學(xué)計算等功能;使用QuartusII軟件作為開發(fā)平臺;采用自頂向下的設(shè)計思路對系統(tǒng)進(jìn)行模塊化設(shè)計和綜合,并通過波形仿真和硬件實現(xiàn)兩種方式實現(xiàn)并驗證交通燈的功能。為期兩周的實訓(xùn),我利用網(wǎng)絡(luò)和圖書館的有效資源,搜集并下載了大量的關(guān)于用FPGA做交通燈設(shè)計的資料;然后精心閱讀,在老師的指導(dǎo)督促下,并和周圍同學(xué)進(jìn)行有效學(xué)習(xí)和溝通,最終確定了自己的設(shè)計方案;最后按照既定的設(shè)計方案,通過努力有步驟的實現(xiàn)了交通燈的設(shè)計。
通過此次實訓(xùn)設(shè)計,讓我加深了FPGA的理解,更加熟練了VHDL語言,同時,我深深體會到了通過FPGA設(shè)計數(shù)字電路的方便、簡潔的特點,這讓我相信未來數(shù)字電路的應(yīng)用必將更加廣泛。另外,我還體會到:從事開發(fā)設(shè)計工作,一定要保持個勤奮、踏實、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度,這樣才能更好的完成工作。最后,我覺得在交通燈控制系統(tǒng)設(shè)計中還可以增加一些實用功能,如:
1、針對弱視或色盲人群進(jìn)行聲音提示;
2、在遇到突發(fā)狀況時,可以將紅綠燈改為緊急模式控制;
3、當(dāng)有119、120等特種車輛通過時,系統(tǒng)可轉(zhuǎn)為特種車放行,其他車輛禁行。
但是這次實訓(xùn)我也發(fā)現(xiàn)自己的很多不足之處。在設(shè)計過程中我發(fā)現(xiàn)自己考慮問題很不全面,自己的專業(yè)知識掌握的很不牢靠,所掌握的編程語句還不夠,很多程序都看不懂,我希望自己的這些不足之處能在今后的工作和學(xué)習(xí)中得到改善。而且,通過這次實訓(xùn),我懂得了學(xué)習(xí)的重要性,學(xué)會了堅持和努力,這將為以后的學(xué)習(xí)做出了最好的榜樣!
桂林電子科技大學(xué)實訓(xùn)說明書用紙
還有光有知識是不行的,還得有能力、有技術(shù),單干也是不行的,要適當(dāng)尋求合作,那樣才能更好實現(xiàn)我們的價值。在實訓(xùn)中及社會上,我們都要懂得虛心地向別人學(xué)習(xí),即使你覺得自己很厲害,但總有一些東西你是不懂的,所以不懂要多向別人請教,這樣才能更好地提高自己的水平和能力,全面發(fā)展自己。
桂林電子科技大學(xué)實訓(xùn)說明書用紙
謝 辭
在這短短的兩周EDA實訓(xùn)中,在這期間同學(xué)們都在努力學(xué)習(xí),認(rèn)真做自己各自的實訓(xùn)。在此我要特別感謝各位指導(dǎo)老師們對我的指導(dǎo),還有各位同學(xué)對我的幫助,尤其感謝老師在百忙之中抽出時間為我們講解設(shè)計原理,同時,還要感謝和我一起努力的各位同學(xué),在他們對我的幫助很我自己的努力下,我才能順利地完成這次實訓(xùn)。
這次實訓(xùn)我受匪頗多,但這多是得益于老師無微不至的關(guān)心和細(xì)心的教導(dǎo)。在實訓(xùn)中,讓我學(xué)到了不少知識,給了我一次復(fù)習(xí)學(xué)過的知識的機(jī)會,鞏固了基礎(chǔ)知識。也多虧同學(xué)們的無私的幫助和支持,在我無助的時候還是他們伸出他們的友愛之手,幫我渡過難關(guān),在此我也真心的多謝他們默默的幫助。最后再次對老師們說聲:謝謝!
桂林電子科技大學(xué)實訓(xùn)說明書用紙
參考文獻(xiàn)
[1] 潘松,黃繼業(yè).EDA技術(shù)實用教程(第三版).北京:科學(xué)出版社,2010.1 [2] 劉江海,涂傳威,陳瑋.EDA技術(shù)課程設(shè)計.武漢:華中科技大學(xué)出版社,2009.5 [3] 夏路易.基于EDA的電子技術(shù)課程設(shè)計.北京:電子工業(yè)出版社,2009.1 [4] 王金明,周順.數(shù)字系統(tǒng)設(shè)計與VHDL.北京:電子工業(yè)出版社,2010.5 [5] 鄒彥,莊嚴(yán),鄒寧.EDA技術(shù)與數(shù)字系統(tǒng)設(shè)計.北京:電子工業(yè)出版社,2007.4 [6] 林明權(quán),馬維旻.VHDL數(shù)字控制系統(tǒng)設(shè)計范例.北京:電子工業(yè)出版社,2003.1