《西工大數(shù)電 課程設(shè)計——交通燈》由會員分享,可在線閱讀,更多相關(guān)《西工大數(shù)電 課程設(shè)計——交通燈(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
西北工業(yè)大學(xué)
課 程 設(shè) 計 報 告
題 目:交通信號燈控制電路
學(xué)院: 航 海 學(xué) 院
班級: 03051001班
學(xué)生〔學(xué)號〕:
學(xué)生〔學(xué)號〕:
日期: 2013 年 1 月
摘要
Verilog HDL 作為一種規(guī)的硬件描述語言,被廣泛應(yīng)用于數(shù)字電子系統(tǒng)設(shè)計。它允許設(shè)計者進(jìn)展各種級別的邏輯設(shè)計,也可以進(jìn)展數(shù)字邏輯系統(tǒng)的仿真驗證、時序分析、邏輯綜合操作。本文介紹了應(yīng)用Verilog HD
2、L語言自頂向下的設(shè)計方法設(shè)計交通燈控制系統(tǒng),使其實現(xiàn)道路交通的正常運(yùn)轉(zhuǎn),突出了其作為硬件描述語言的良好的可讀性、可移植性和易理解等優(yōu)點(diǎn)。通過Quartus Ⅱ完成了程序的編寫、編譯與仿真,生成頂層文件后下載到芯片CycloneⅢ EP3C16F484C6芯片上,在DE0開發(fā)板上進(jìn)展驗證。驗證結(jié)果明確,該設(shè)計可以完成交通燈控制的相關(guān)要求。
關(guān)鍵詞:交通信號燈控制 Verilog HDL Quartus Ⅱ DE0
目錄
一、課程設(shè)計目的
二、設(shè)計任務(wù)與要求
三、方案設(shè)計
四、模塊設(shè)計
五、程序代碼
六、開發(fā)板驗證
七、遇到問題與解決
3、方法
八、總結(jié)
九、參考文獻(xiàn)
十、附錄〔管腳對應(yīng)關(guān)系〕
一、 課程設(shè)計目的
設(shè)計目的:
初步了解掌握硬件描述語言,體會自頂向下的設(shè)計思想,鍛煉查閱資料與知識應(yīng)用的能力。
二、 設(shè)計任務(wù)與要求
設(shè)計任務(wù):
設(shè)計一個十字路口的交通燈控制電路,要求甲車道和乙車道兩條交叉道路上的車輛交替運(yùn)行
設(shè)計要求:
1、南北和東西方向各有一組綠、黃、紅燈用于指揮交通,綠燈、黃燈和紅燈的持續(xù)時間分別為20秒、5秒和25秒;
2、當(dāng)有特殊情況〔如消防車、救護(hù)車等〕時,兩個方向均為紅燈亮,計時停止,當(dāng)特殊情況完畢后,控制器恢復(fù)原來狀態(tài),繼續(xù)正常運(yùn)行;
4、
3、用兩組數(shù)碼管,以倒計時方式顯示兩個方向允許通行的時間。
三、 方案設(shè)計
任務(wù)分析:
東西〔A車道〕和南北〔B車道〕方向各有一組綠、黃、紅燈用于指揮交通〔如圖1、2〕,綠燈、黃燈和紅燈的持續(xù)時間分別為 25秒、5 秒和 30 秒。
A
B
圖1 十字路口交通燈模型
25s 30s 55s 60s
A方向 綠燈亮 黃燈亮 紅
5、燈亮
B方向 紅燈亮 綠燈亮 黃燈亮
圖2 計數(shù)值與交通燈亮滅的關(guān)系
如果有特殊情況發(fā)生,兩個方向均亮紅燈,因此,可以設(shè)計如下五個狀態(tài),其關(guān)系為:
狀態(tài)
亮燈情況
車輛行駛狀況
持續(xù)時間〔秒〕
下一狀態(tài)
A車道
B車道
S0
紅亮
紅亮
特殊狀況,兩方向均禁止通行
S(?)
S1
綠亮
紅亮
A方向通行,B車道禁止通行
20
S2
S2
黃亮
紅亮
A車道緩行,B車道禁止通行
5
S3
S3
紅亮
綠亮
6、
A車道禁止通行,B車道通行
20
S4
S4
紅亮
黃亮
A車道禁止通行,B車道緩行
5
S1
S〔?〕即返回暫停前一狀態(tài)
正常工作 特殊情況
S2
S1
S0
S3
S4
設(shè)計思想:
根據(jù)設(shè)計要求,考慮用4個模塊實現(xiàn):基頻分頻模塊、60進(jìn)制計數(shù)器、交通控制、分位譯碼顯示模塊。整個電路以一個50MHz的晶振為時鐘源,由分頻得到所需時鐘1Hz。設(shè)計一個技術(shù)圍是0~59的計數(shù)器和一個根據(jù)計數(shù)值做出相應(yīng)反映的計數(shù)器,并且對于計數(shù)值以兩組數(shù)碼
7、管來顯示,這就需要相應(yīng)的譯碼電路。對于特殊情況,要設(shè)計特殊的對待方式,當(dāng)進(jìn)入此方式時兩個方向的紅燈點(diǎn)亮。
四、 模塊設(shè)計
1〕分頻模塊
由于實驗板只能提供50MHz的時鐘信號,而電路中需要使用較低頻率的時鐘,經(jīng)分配產(chǎn)生1Hz頻率送給交通控制器和計數(shù)器。
2〕計數(shù)器
本設(shè)計主要是由計數(shù)器來實現(xiàn)交通燈的亮滅關(guān)系。當(dāng)檢測到特殊情況時,計數(shù)器暫停。
3〕交通控制器
根據(jù)計數(shù)器的數(shù)值控制發(fā)光二級管亮滅,輸出倒計時數(shù)值給譯碼管的分位電路。
4〕分位譯碼顯示
交通燈時鐘輸出兩組時間,數(shù)碼管顯示。
五、 程序
8、代碼
module
trafficlight(clk50M,hold,RedA,GreenA,YellowA,RedB,GreenB,YellowB,AG,AL,BG,BL);
input clk50M,hold;
output reg RedA,GreenA,YellowA,RedB,GreenB,YellowB;
output reg[6:0]AG,AL,BG,BL;
// clk50M輸入時鐘信號
//hold突發(fā)情況信號
// RedA,GreenA,YellowA輸出A方向燈信號
// RedB,GreenB,YellowB輸出B方向燈信號
//AG、AL輸出A方
9、向倒計時十位與個位
//BG、BL輸出B方向倒計時十位與個位
wire[3:0]DispAG,DispAL,DispBG,DispBL;
reg[5:0]NumA,NumB;
integer num;
reg clk1;
integer count;
//分位子模塊
assign DispAG[3:0]=NumA/10, //A 方向十位
DispAL[3:0]=NumA%10; //A 方向個位
assign DispBG[3:0]=NumB/10, //B 方向十位
DispBL[3:0]=NumB%10; //B
10、方向個位
// 50MHz分頻為1Hz
always (posedge clk50M)
begin
if(num==50000000)num=0;
else num=num+1;
if(num>25000000)clk1=1;
else clk1=0;
end
//數(shù)碼管顯示輸出,低電平有效
always (DispAG)
case(DispAG)
11、
4'b0000:AG=7'b1000000;
4'b0001:AG=7'b1111001;
4'b0010:AG=7'b0100100;
4'b0011:AG=7'b0110000;
4'b0100:AG=7'b0011001;
4'b0101:AG=7'b0010010;
4'b0110:AG=7'b0000010;
4'b0111:AG=7'b1111000;
4'b1000:AG=7'b0000000;
4'b1001:AG=7'b00100
12、00;
endcase
always (DispAL)
case(DispAL)
4'b0000:AL=7'b1000000;
4'b0001:AL=7'b1111001;
4'b0010:AL=7'b0100100;
4'b0011:AL=7'b0110000;
4'b0100:AL=7'b0011001;
4'b0101:AL=7'b0010010;
4'b0110:AL=7'b0000010;
4'b0111:AL=7'b1111000;
4'b1000:AL
13、=7'b0000000;
4'b1001:AL=7'b0010000;
endcase
always (DispBG)
case(DispBG)
4'b0000:BG=7'b1000000;
4'b0001:BG=7'b1111001;
4'b0010:BG=7'b0100100;
4'b0011:BG=7'b0110000;
4'b0100:BG=7'b0011001;
4'b0101:BG=7'b0010010;
4'b0110:BG=7'b0000010;
4'b
14、0111:BG=7'b1111000;
4'b1000:BG=7'b0000000;
4'b1001:BG=7'b0010000;
endcase
always (DispBL)
case(DispBL)
4'b0000:BL=7'b1000000;
4'b0001:BL=7'b1111001;
4'b0010:BL=7'b0100100;
4'b0011:BL=7'b0110000;
4'b0100:BL=7'b0011001;
4'b0101:BL=7'b0010010;
15、 4'b0110:BL=7'b0000010;
4'b0111:BL=7'b1111000;
4'b1000:BL=7'b0000000;
4'b1001:BL=7'b0010000;
endcase
//60進(jìn)制計數(shù)器
always ( posedge clk1)
begin
if(hold)count=count;
else if(count==59)count=0;
else count=count+1
end
//交
16、通燈控制
always (posedge clk1)
begin
if(hold)
begin
RedA=1'b1;GreenA=1'B0;YellowA=1'B0;
RedB=1'b1;GreenB=1'B0;YellowB=1'B0;
end
else if(count<25)
begin
NumA<=25-count;
NumB<=30-count;
R
17、edA=1'b0;GreenA=1'B1;YellowA=1'B0;
RedB=1'b1;GreenB=1'B0;YellowB=1'B0;
end
else if(count<30)
begin
NumA<=30-count;
NumB<=30-count;
RedA=1'b0;GreenA=1'B0;YellowA=1'B1;
RedB=1'b1;GreenB=1'B0;YellowB=1'B0;
18、
end
else if(count<55)
begin
NumA<=60-count;
NumB<=55-count;
RedA=1'b1;GreenA=1'B0;YellowA=1'B0;
RedB=1'b0;GreenB=1'B1;YellowB=1'B0;
end
else if(count<60)
begin
NumA<=60-c
19、ount;
NumB<=60-count;
RedA=1'b1;GreenA=1'B0;YellowA=1'B0;
RedB=1'b0;GreenB=1'B0;YellowB=1'B1;
end
end
endmodule
六、 程序仿真
仿真波形如圖1、2、3
圖1 交通燈控制
圖2 數(shù)碼管顯示
圖3 特殊情況
七、 開發(fā)板驗證
在程序在DE0板上實現(xiàn)了預(yù)期功能。
A方向:
紅燈〔LEDG0〕黃燈〔LEDG1〕綠燈
20、(LEDG2)
數(shù)碼管HEX1顯示倒計數(shù)十位,數(shù)碼管HEX0顯示倒計數(shù)個位
B方向:
紅燈 (LEDG9) 黃燈(LEDG8) 綠燈(LEDG7)
數(shù)碼管HEX3顯示倒計數(shù)十位,數(shù)碼管HEX2顯示倒計數(shù)個位
hold: SW[0]
〔后附管腳對應(yīng)〕
八、 遇到問題與解決方法
1) 編程過程中,由于局部模塊代碼類似,進(jìn)展了粘貼復(fù)制,不同處卻沒有修改,導(dǎo)致仿真不能得到預(yù)期波形。經(jīng)仔細(xì)檢查修改代碼后,問題得到了解決。
2) 程序下載到開發(fā)板后,發(fā)現(xiàn)數(shù)碼管全顯示“0〞,LED燈沒有亮滅變換,分析后發(fā)現(xiàn)原先代碼中的分頻模塊存在問題,沒有將頻率降至1Hz,修改相關(guān)
21、代碼后,問題得到解決。
九、 總結(jié)
通過本次設(shè)計,初步了解掌握了硬件描述語言,體會了自頂向下的設(shè)計思想,對FPGA的應(yīng)用有了一定了解。同時,鍛煉了查閱資料與知識應(yīng)用的能力,極提高了學(xué)習(xí)熱情。
另外,在課設(shè)過程中,通過對遇到問題的思考與解決,更加深了對相關(guān)知識的了解,也使自己更加的細(xì)心。
十、 參考文獻(xiàn)
【1】 賀敬凱,Verilog HDL數(shù)字設(shè)計教程 ,電子科技大學(xué)〔2010〕
【2】 夏宇聞,數(shù)字系統(tǒng)設(shè)計Verilog實現(xiàn),高等教育〔2002〕
十一、 附錄
管腳對應(yīng)關(guān)系
12 / 12