基于FPGA設計——交通燈_第1頁
基于FPGA設計——交通燈_第2頁
基于FPGA設計——交通燈_第3頁
基于FPGA設計——交通燈_第4頁
基于FPGA設計——交通燈_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、FPGA課程設計 交通燈控制器通信工程學院電科0701班羅超(17)第一部分 技術規(guī)范 1.1功能描述:實現一個由一條主干道和一條支干道的匯合點形成的十字路口的交通燈控制器,具體功能:(1) 主、支干道各設有一個綠、黃、紅指示燈,兩個顯示數碼管。(2) 主干道處于長允許通行狀態(tài),而支干道有車來時才允許通行。當主干道允許通行亮綠燈時,支干道亮紅燈。而支干道允許通行亮綠燈時,主干道亮紅燈。(3) 當主干道、支干道均有車時,兩者交替允許通行,主干道每次通行45 秒,支干道每次通行25 秒,在每次由綠燈向紅燈轉換的過程中,要亮5 秒的黃燈作為過渡,并進行減計時顯示。每個周期結束時都要進行支干道是否有車

2、的檢測,若有車則進行下一個周期,若沒有,則主干道亮綠燈,支干道亮紅燈,直到檢測到支干道有車。1.2系統總體框圖:根據設計要求和系統所具有的功能,并參考相關的文獻資料,經行方案設計,可以畫出如下圖所示的交通信號燈控制器的系統框圖。時鐘分頻模塊交通燈控制模塊 掃描顯示譯碼模塊clkrstcarsignal計時模塊數碼管段碼sel數碼管位碼segLED燈I/O管腳的描述名稱方向電平位寬功能 clkInput3.3V1系統時鐘信號(10KHZ)carsignal Input3.3V1檢測支路是否有車rst Input3.3V1復位信號led Output3.3V6LED燈sel Output3.3V7

3、數碼管段碼 seg Output3.3V4數碼管位碼 表一:系統總體I/O管腳的描述注:其中系統時鐘的頻率選為10KHZ,復位采取同步復位方式,且低有效。支干道檢測到有車時, carsignal=1;否則,carsignal=0。方案核心:在交通燈控制器的設計中,交通燈控制及計時模塊是本設計的關鍵模塊。第二部分總體設計方案交通燈2.1系統詳細框圖:在系統總體框圖的基礎上進一步詳細設計,得到如下系統詳細框圖。rstLED燈carsignalclk顯示控制單元定時模塊顯示單元交通燈控制模塊時鐘分頻模塊譯碼單元數碼管顯示 圖三:系統詳細框圖注:系統總體I/O管腳描述請查看技術規(guī)范。2.2具體模塊設計

4、1.時鐘分頻模塊系統的動態(tài)掃描需要10KHZ的脈沖,而系統時鐘計時模塊需要1HZ的脈沖。分頻模塊主要為系統提供所需的時鐘計時脈沖。該模塊將10KHZ的脈沖信號進行分頻,產生1S的方波(占空比為50%),作為系統時鐘計時信號。clk時鐘分頻模塊rstclk_out 圖四:時鐘分頻模塊框圖I/O管腳描述如下:名稱方向電平位寬功能clkinput3.3V1系統時鐘(10KHZ)rstinput3.3V1復位信號clk_outoutput3.3V1分頻后時鐘信號(1HZ) 表二:時鐘分頻模塊I/O端口描述注:系統時鐘的頻率為10KHZ,分頻后的時鐘信號為1HZ(占空比為50%)。復位信號為同步復位,且

5、低有效。2.交通燈控制及計時模塊控制模塊JTDKZH:根據主干道、支干道輸入信號以及時鐘信號CLK,發(fā)出主、支干道指示燈的控制信號,同時向各個定時單元、顯示控制單元發(fā)出使能控制信號產生系統的狀態(tài)機,控制其他部分協調工作。計時模塊分別實現45s,25s,5s的定時,根據主、支干道輸入信號和時鐘信號以及交通燈控制器發(fā)出的使能信號按要求進行定時用來設定主干道和支干道計時器的初值,并為掃描顯示譯碼模塊提供倒計時時間??刂颇K采用狀態(tài)機進行設計,可以定義出5種狀態(tài),分別為S0:主干道綠燈,支干道紅燈且沒有車輛行駛;S1:主干道綠燈,支干道紅燈且支干道有車輛駛入;S2:主干道黃燈,支干道紅燈;S3:主干道

6、紅燈,支干道綠燈;S4:主干道紅燈,支干道黃燈。利用CASE語句定義狀態(tài)的轉換方式及時間的變換方式,達到主干道綠燈亮45秒,支干道綠燈亮25秒,黃燈亮5秒的設計要求。clk_outcarsignalrstled交通燈控制模塊count_H_1count_L_1count_H_2count_H_2圖五:交通燈控制及計數模塊I/O管腳描述如下:名稱方向電平位寬功能clk_outInput3.3V1分頻后時鐘信號(1HZ)rstInput3.3V1復位信號(同步復位)carsignalInput3.3V1檢測信號(低有效)count_H_1Output3.3V4主干道時間高位譯碼count_L_1O

7、utput3.3V4主干道時間低位譯碼count_H_2Output3.3V4支干道時間高位譯碼count_L_2Output3.3V4支干道時間低位譯碼ledOutput3.3V6LED燈 表三:交通燈控制模塊I/O端口描述 系統的狀態(tài)圖如下所示carsignal =0 S0 S3carsignal =1 S1 S2 S0:主干道綠燈,支干道紅燈S1:主干道黃燈,支干道紅燈S2:主干道紅燈,支干道綠燈S3:主干道紅燈,支干道黃燈3.掃描顯示譯碼模塊掃描顯示譯碼模塊可以根據控制信號,驅動交通信號燈以及倒計時數碼管的顯示,其中數碼管的顯示采用動態(tài)掃描顯示。rstclksegsel掃描顯示譯碼模塊

8、count_H_1count_L_1count_H_2count_H_2 圖六:掃描顯示譯碼模塊框圖該模塊的I/O管腳描述如下:名稱方向電平位寬功能clkInput3.3V1系統時鐘信號(10KHZ)rstInput3.3V1復位信號(低有效)count_H_1Input3.3V4主干道時間高位譯碼count_L_1Input3.3V4主干道時間低位譯碼count_H_2Input3.3V4支干道時間高位譯碼count_L_2Input3.3V4支干道時間低位譯碼selOutput3.3V7數碼管段碼segOutput3.3V3數碼管位碼表四:掃描顯示譯碼模塊I/O端口描述第三部分仿真結果 M

9、odelsim 前仿真 Quartus2后仿真第四部分 源代碼分頻模塊:module fenpinqi(clk,rst,clk_odd);input clk,rst;output clk_odd;reg clk_odd;reg13:0 count;parameter N = 10;always (posedge clk)if(! rst)begin count <= 1'b0;clk_odd <= 1'b0;endelse if ( count < N/2-1)begin count <= count + 1'b1; endelsebegin c

10、ount <= 1'b0;clk_odd <= clk_odd; endendmodule控制及計時模塊:modulecontrol(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);output3:0count_H_1,count_L_1,count_H_2,count_L_2;output 5:0led;input clk,rst,car;reg 5:0 led;reg3:0count_H_1,count_L_1,count_H_2,count_L_2;reg 1:0state;parameter S0=2

11、'b00, S1=2'b01, S2=2'b10, S3=2'b11; always(posedge clk or negedge rst)if(!rst)beginled=6'b010100;state=S0;count_H_1=4'b0000;count_L_1=4'b0000; count_H_2=4'b0000;count_L_2=4'b0000; end else begincase(state)S0:beginBeginif(!car)begin led=6'b010100; /count_H_1=4&

12、#39;b0100;count_L_1=4'b0101;/? count_H_1=4'b0111;count_L_1=4'b0111; end else begin if(count_H_1 = 4'b0111) begin count_H_1=4'b0100;count_L_1=4'b0101; count_H_2=4'b0101;count_L_2=4'b0000; end else if(count_L_1=0) if(count_H_1=0) begin led=6'b001100; count_H_1=4'

13、;b0000;count_L_1=4'b0100; state<=S1; if(count_L_2=0) begin count_H_2<=count_H_2-1'b1; count_L_2<=4'b1001; end elsebegin count_L_2<=count_L_2-1'b1;end end else begin count_H_1<=count_H_1-1'b1; count_L_1<=4'b1001; if(count_L_2=0) begin count_H_2<=count_H_2-

14、1'b1; count_L_2<=4'b1001; end elsebegin count_L_2<=count_L_2-1'b1; end end elsebegin count_L_1<=count_L_1-1'b1; if(count_L_2=0) begin count_H_2<=count_H_2-1'b1; count_L_2<=4'b1001; end elsebegin count_L_2<=count_L_2-1'b1; end end end end /* begin if(!car

15、) begin count_H_2=4'b0101;count_L_2=4'b0000; end elseif(count_L_2=0) begin count_H_2<=count_H_2-1'b1; count_L_2<=4'b1001;end elsebegin count_L_2<=count_L_2-1'b1; end end */end /* if(count_L_1=0) begin if(count_H_1=0) begin led=6'b001100; count_H_1=4'b0000;count_L

16、_1=4'b0100; state<=S1; endelse begin count_H_1<=count_H_1-1'b1;count_L_1<=4'b1001; endend elsebegin count_L_1<=count_L_1-1'b1;end if(!car) begin count_H_2=4'b0101;count_L_2=4'b0000; end else if(count_L_2=0) begin count_H_2<=count_H_2-1'b1; count_L_2<=4&#

17、39;b1001; end else begin count_L_2<=count_L_2-1'b1; end S1: beginif(count_L_1=0)begin if(count_H_1=0) begin led=6'b100010; count_H_1=4'b0010;count_L_1=4'b1001; count_H_2=4'b0010;count_L_2=4'b0100; state<=S2; endelsebegin count_H_1<=count_H_1-1'b1; count_H_2<=c

18、ount_H_2-1'b1; endendelsebegin count_L_1<=count_L_1-1'b1; count_L_2<=count_L_2-1'b1; end end S2:begin if(count_L_2=0) begin if(count_H_2=0) begin led=6'b100001; count_H_2=4'b0000;count_L_2=4'b0100; state<=S3; elsebegin count_H_2<=count_H_2-1'b1; count_L_2=4

19、9;b1001; end end else begincount_L_2<=count_L_2-1'b1;end if(count_L_1=0) begin begin count_H_1<=count_H_1-1'b1; count_L_1=4'b1001; end endelse begin count_L_1<=count_L_1-1'b1; end end S3:begin if(count_L_2=0) begin if(count_H_2=0) begin led=6'b010100; count_H_1=4'b01

20、00;count_L_1=4'b1001; count_H_2=4'b0100;count_L_2=4'b0100; state<=S0; end elsebegin count_H_1<=count_H_1-1'b1; count_H_2<=count_H_2-1'b1; end end else begin count_L_1<=count_L_1-1'b1; count_L_2<=count_L_2-1'b1; end endcaseend endmodule掃描譯碼顯示模塊:modulesaomiao

21、(rst,clk,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);input rst,clk;input3:0count_H_1,count_L_1,count_H_2,count_L_2;output 6:0sel;output 3:0seg;reg 6:0sel;reg 3:0seg;reg 15:0 count;reg 1:0 cnt; reg 3:0 data; reg clk_odd;always(posedge clk or negedge rst) begin if(!rst)begincount<=0; clk_odd&l

22、t;=0;end else if(count=16'd2) begin clk_odd<=clk_odd; count<=0; end else count<=count+1'b1; end always (negedge rst or posedge clk_odd)/?1msif (!rst)begincnt<=2'b00;endelse cnt<=cnt+1'b1; always(negedge rst or posedge clk) if(!rst) begin/ sel = 7'b0000000 ;seg = 4&

23、#39;b1111 ;endelse begincase (cnt)2'b00: beginseg =4'b1110 ; data=count_H_1;end 2'b01: begiseg= 4'b1101 ;/ ?data=count_L_1; end 2'b10:begin / ? seg= 4'b1011 ; data=count_H_2; end 2'b11: begin/ ? seg= 4'b0111 ; data=count_L_2;end default : begin / sel = 8'b0000000

24、;seg = 4'b0000 ;endendcaseendalways (data or seg)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

25、=7'b1110000;4'b1000:sel=7'b1111111;4'b1001:sel=7'b1111011;default:sel=7'b1111110; endcaseend endmodule頂層模塊: module jiaotongdeng(clk,rst,car,led,sel,seg,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);input clk,rst,car;output 3:0 seg;output 6:0 sel;output 5:0 led;output 3:0count_H_1,count_L_1,count_H_2,count_L_2;output clk_odd;wire 3:0count_H_1,count_L_1,count_H_2,count_L_2;wire clk_odd;saomiao ee(rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);control rr(led,car,rst,clk_odd,cou

溫馨提示

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

評論

0/150

提交評論