eda課程設計交通燈控制器的設計_第1頁
eda課程設計交通燈控制器的設計_第2頁
eda課程設計交通燈控制器的設計_第3頁
eda課程設計交通燈控制器的設計_第4頁
eda課程設計交通燈控制器的設計_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

EDA課程設計報告題目交通燈控制器的設計

摘要交通燈信號控制器通常要實現自動控制和手動控制其紅綠燈的變化,基于FPGA設計的交通燈信號控制器電路簡單、可靠性好。本設計可控制2個路口的紅、黃、綠三盞燈.讓其按特定的規律進行變化。利用QuartusⅡ對設計結果進行仿真,發現系統工作性能良好。據此設計而成的硬件電路,也實現了控制要求。關鍵詞:交通燈自動控制手動控制目錄摘要 11.概述 31.1課程設計目的 31.2課程設計題目及要求 31.3實驗環境 32.系統總體設計 42.2系統組成 43.系統層次化設計與軟件仿真 53.1系統時序發生電路 53.1.2系統時序發生電路clk_gen的仿真輸出波形和元件符號 63.2紅綠燈計數時間選擇模塊 73.2.1VHDL源代碼: 73.2.2計數時間選擇模塊traffic_mux的仿真輸出波形和元件符號 83.3定時控制電路 83.3.1VHDL源代碼: 93.3.2定時控制電路count_down的仿真輸出波形和元件符號 103.4紅綠燈信號譯碼電路 103.4.1VHDL源代碼 113.4.2信號譯碼電路 143.5紅綠燈交通控制器頂層電路 153.5.1VHDL源代碼: 153.5.2交通控制器頂層電路Traffic_TOP的仿真輸出波形和元件符號 174.系統硬件仿真 195.結論與體會 21參考文獻 221.概述1.1課程設計目的此次課程設計是根據《VHDL程序設計》這門課程開設的綜合設計課程,要求學生利用VHDL編程語言,基于EDA開發平臺Quartus=2\*ROMAN錯誤!未找到引用源。,設計相應的數字系統,通過對系統進行編程、仿真、調試與實現,體驗設計的全過程,進一步加深對所學根底知識的理解,培養學生將理論知識應用于實踐的能力、學生自學與創新能力和分析解決實際問題的能力。培養學生設計、繪圖、計算機應用、文獻查閱、實驗研究、報告撰寫等根本技能;提高學生獨立分析和解決工程實際問題的能力;增強學生的團隊協作精神、創新意識、嚴肅認真的治學態度和嚴謹求實的工作作風。1.2課程設計題目及要求交通燈控制器的設計:隨著各種交通工具的開展和交通指揮的需要,交通燈的誕生大大改善了城市交通狀況。要求設計一個交通燈控制器,假設某個交通十字路口是由一條主干道和一條次干道集合而成,在每個方向設置紅綠黃燈3種信號燈,紅燈亮禁止通行,綠燈亮允許通行。黃燈亮允許車輛有時間停靠到禁止線以外。在自動控制模式時,主干道〔東西〕每次放行時間為30s,次干道〔南北〕每次放行時間為20s,主干道紅燈、次干道黃燈、主干道黃燈、次干道紅燈持續時間為5s。綠燈轉為紅燈時,要求黃燈先亮5s,才能變換運行車道。要求交通燈控制器有復位功能,并要求所有交通燈的狀態變化在時鐘脈沖上升沿處。1.3實驗環境軟件仿真采用QuartusII6.0;硬件仿真采用KFH-1型CPLD/FPGA實驗開發系統;2.系統總體設計根據設計要求和系統所具有的功能,并參考相關的文獻資料,經行方案設計,可以畫出如下述所示的交通信號燈控制器的系統流程圖與系統框圖。我們選擇按照自頂向下的層次化設計方法,整個系統可分為4個模塊,系統時序發生電路、紅綠燈計數時間選擇模塊、定時控制電路、紅綠燈信號譯碼電路。2.2系統組成其中系統時序發生電路最主要的功能就是產生一些額外的輸出信號,它們是為紅綠燈信號譯碼電路提供的頻率39kHz的掃描信號,為定時控制電路提供的使能〔enable〕控制信號,為紅綠燈信號譯碼電路提供的占空比為50%的秒閃爍信號;紅綠燈計數時間選擇模塊是負責輸出顯示器需要的值〔即倒數的秒數值〕,作為定時控制電路的倒計時秒數,在該模塊中可設置東西路口河南北路口的信號燈維持秒數;定時控制電路功能就是負責接收紅綠燈計數時間選擇模塊輸出的值〔即倒數的秒數值〕,然后將其轉換成BCD碼,利用七段顯示器顯示出來,讓新人能清楚的知道再過多久就會變成紅燈;紅綠燈信號譯碼電路除了負責控制路口紅綠燈的顯示外,最主要的功能就是能夠利用開關來切換手動與自動的模式,讓交警能夠通過外部輸入的方式指揮交通的,但為了配合頂峰時段,防止交通擁擠,有時還必須使用手動紅字,即讓交警執行指揮交通。為了系統正常運作,整個控制器采用同步工作方式,由外接信號發生器〔該電路的設計可參見本章〕提供1Hz的時鐘信號CLK。3.系統層次化設計與軟件仿真EDA技術的根本設計方法有電路設計方法和系統設計方法。電路級設計方法已經不能適應新的形勢,本系統采用的是系統級層次設計方法,對整個系統進行方案設計和功能劃分,系統的關鍵電路用一片FPGA芯片實現,首先用VHDL語言編寫各個功能模塊程序,最后通過綜合器和適配器生成最終的目標器件,然后用頂層原理圖將各功能模塊連接起來。下面給出各模塊的VHDL設計過程和仿真結果。3.1系統時序發生電路在紅綠燈交通信號控制系統中,大多數的情況是通過自動控制的方式指揮交通的。因此,為了防止意外事件的發生,電路必須有一個穩定的時鐘〔clock〕才能讓系統正常工作。但為了配合頂峰時段,防止交通擁擠,有時也必須使用手動可能工資,即讓交警能夠順利的指揮交通。CLK_gen電路最主要的功能就是產生一些額外的輸出信號,并將其用作后續幾個電路的使用〔enable〕控制與同步信號處理。該電路的核心局部就是分頻電路,通過對外接信號發生器提供1Hz的時鐘信號進行1000分頻,得到一個周期1s的輸出使能信號ena_1Hz〔占空比1:1000〕和flash_Hz〔占空比1:1〕;1024分頻后得到紅綠燈信號譯碼電路所需要的頻率為39kHz的顯示使能信號ena_scan。VHDL源代碼:LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;USEIEEE.std_logic_unsigned.all;ENTITYclk_genISPort(reset:instd_logic;clk:instd_logic;ena_scan:outstd_logic;ena_1Hz:outstd_logic;flash_1Hz:outstd_logic);end;ARCHITECTUREBEHAVIORofclk_genISCONSTANTscan_bit:positive:=10;CONSTANTscan_val:positive:=1024;CONSTANTtwo_Hz_bit:positive:=15;CONSTANTtwo_Hz_val:positive:=19532;signalclk_scan_ff:std_logic_vector(scan_bit-1downto0);signalclk_2Hz_ff:std_logic_vector(two_Hz_bit-1downto0);signalena_s,ena_one,ena_two:std_logic;beginscan:process(clk,reset)beginifreset='1'thenclk_scan_ff<="000000000";ena_s<='0';elsif(clk'eventandclk='1')thenifclk_scan_ff>=scan_val-1thenclk_scan_ff<="000000000";ena_s<='1';elseclk_scan_ff<=clk_scan_ff+1;ena_s<='0';endif;endif;endprocess;ena_scan<=ena_s;two_Hz:process(reset,clk,ena_s)beginifreset='1'thenena_one<='0';ena_two<='0';clk_2Hz_ff<="0000000000000";elsif(clk'eventandclk='1')thenifena_s='1'thenifclk_2Hz_ff>=two_Hz_val-1thenclk_2Hz_ff<="0000000000000";ena_two<='1';ena_one<=notena_one;elseclk_2Hz_ff<=clk_2Hz_ff+1;ena_two<='0';endif;endif;endif;endprocess;ena_1Hz<=ena_oneandena_twoandena_s;flash_1Hz<=ena_one;endBEHAVIOR;系統時序發生電路clk_gen的仿真輸出波形和元件符號系統時序發生電路clk_gen的仿真輸出波形圖3-1系統時序發生電路CLK_GEN3.2紅綠燈計數時間選擇模塊當過馬路的時候,綠燈的一方又是會附加一個顯示器告訴行人,目前還剩下幾秒信號燈將變成紅燈。因此,traffic_mux電路最主要的功能就是負責輸出顯示器需要的值〔即倒數的秒值數〕,作為定時控制電路的技術秒數。該電路的核心局部就是數據選擇電路,利用選擇語句case_when〔單輸入,多輸出〕實現4選1,其選擇輸入信號sign_state是紅綠燈信號譯碼電路產生的4種狀態信號,狀態轉換輸出表如表3-2所示。狀態sign_state東西路口南北路口時間〔s〕00〔狀態0〕東西路口為通行狀態,此時東西路口綠燈亮南北路口紅燈亮3001〔狀態1〕東西路口為過渡狀態,此時東西路口黃燈亮南北路口紅燈亮510〔狀態2〕東西路口紅燈亮南北路口為通行狀態,此時南北路口綠燈亮2011〔狀態3〕東西路口紅燈亮南北路口為過渡狀態,此時南北路口黃燈亮5表3-2紅綠燈計數時間狀態轉換表VHDL源代碼:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYtraffic_muxISPORT(reset,clk,ena_scan,recount:instd_logic;sign_state:instd_logic_vector(1downto0);load:outstd_logic_vector(7downto0));end;ARCHITECTUREBEHAVIORoftraffic_muxISCONSTANTyellow0_time:integer:=5;CONSTANTgreen0_time:integer:=30;CONSTANTyellow1_time:integer:=5;CONSTANTgreen1_time:integer:=20;beginload_time:process(reset,clk)beginifreset='1'thenload<="00000000";elsif(clk'eventandclk='1')thenif(ena_scan='1'andrecount='1')thenCASEsign_stateISWHEN"00"=>load<=CONV_STD_LOGIC_VECTOR(green0_time,8);WHEN"01"=>load<=CONV_STD_LOGIC_VECTOR(yellow0_time,8);WHEN"10"=>load<=CONV_STD_LOGIC_VECTOR(green1_time,8);WHENOTHERS=>load<=CONV_STD_LOGIC_VECTOR(yellow1_time,8);ENDCASE;ENDIF;ENDIF;ENDPROCESS;ENDBEHAVIOR;計數時間選擇模塊traffic_mux的仿真輸出波形和元件符號計數時間選擇模塊traffic_mux的仿真輸出波形3.3定時控制電路該電路的核心局部是可置數的減法計數器電路和七段譯碼輸出顯示電路。可置數的減法計數器電路是利用if_then_else語句完成,兩位七段譯碼輸出顯示電路則利用case_when語句通過查表的方式構成。VHDL源代碼:LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;USEIEEE.std_logic_unsigned.all;ENTITYcount_downISPort(reset,clk,ena_1Hz,recount:instd_logic;load:instd_logic_vector(7downto0);seg7:outstd_logic_vector(15downto0);next_state:outstd_logic);end;ARCHITECTUREBEHAVIORofcount_downISsignalcnt_ff:std_logic_vector(7downto0);begincount:process(clk,reset)beginif(reset='1')thencnt_ff<="00000000";seg7<="0000000000000000";elsif(clk'eventandclk='1')thenifena_1Hz='1'thenif(recount='1')thencnt_ff<=load-1;elsecnt_ff<=cnt_ff-1;endif;endif;caseconv_integer(cnt_ff)isendcase;endif;endprocess;next_state<='1'whencnt_ff=1else'0';endBEHAVIOR;定時控制電路count_down的仿真輸出波形和元件符號定時控制電路count_down的仿真輸出波形3.4紅綠燈信號譯碼電路在紅綠燈交通燈信號系統中,大多數的情況是通過自動控制的方式指揮交通的。但為了配合頂峰時段,防止交通擁擠,有時還必須使用手動控制,即讓交警自行指揮交通。因此,traffic_fsm電路除了負責監控路口紅綠燈之外,最主要的功能就是能夠利用開關來切手動與自動的模式,讓交警能夠通過外部輸入的方式來控制紅綠燈信號系統的運作。輸出信號:recount〔產生重新計數的輸出使能控制信號〕、sign_state〔產生的輸出狀態信號共2位,4種狀態〕、red〔負責紅燈的顯示,共2位,4種狀態〕、green〔負責綠燈的顯示,共2位,4種狀態〕、yelllow〔負責黃燈的顯示,共2位,4種狀態〕。設南北路口紅黃綠3色燈為r0、y0、g0,東西路口的紅黃綠3色燈為r1、y1、g1,自動操作模式和手動操作模式信號燈顯示的真值表如表3-2、表3-3所示。信號燈顯示的真值表CLKresetena_1hznext_stagestate狀態sign_stagerecountlightstate11XXr0g1001010010state2011r0g1->roy1011011000010r0g1000010010state3011r0y1->g0r1101100001010r0y1010011000state4011g0r1->y0r1111100100010g0r1100100001state5011y0r1->r0g1001010010010y0r1110100100state6011others000110000表中定義了一些進程〔process〕間整體共享的電路內部傳遞信號,以整合所有功能,它們是:state信號〔設定紅綠燈電路的狀態,在該程序里定義8種狀態〕、st_transfer〔在手動模式下判斷是否轉態的控制信號〕、light[5:0]〔在自動模式下該信號為是否轉態的控制信號,其位數從高到低分別表示red1、red0、yellow1、yellow0、green1、green0〕。VHDL源代碼:LIBRARYIEEE;USEIEEE.std_logic_1164.all;USEIEEE.std_logic_arith.all;USEIEEE.std_logic_unsigned.all;ENTITYtraffic_CONISPort(reset,clk,ena_scan,ena_1Hz,flash_1Hz,a_m,st_butt,next_state:instd_logic;recount:outstd_logic;sign_state:outstd_logic_vector(1downto0);red:outstd_logic_vector(1downto0);green:outstd_logic_vector(1downto0);yellow:outstd_logic_vector(1downto0));end;ARCHITECTUREBEHAVIORoftraffic_CONIStypeSreg0_typeis(r0g1,r0y1,g0r1,y0r1,y0y1,y0g1,g0y1,r0r1);signalstate:Sreg0_type;signalst_transfer:std_logic;signallight:std_logic_vector(5downto0);beginrebounce:process(reset,clk,ena_scan,st_butt)variablerebn_ff:std_logic_vector(5downto0);beginif(st_butt='1'orreset='1')thenrebn_ff:="111111";st_transfer<='0';elsif(clk'eventandclk='1')thenif(ena_scan='1')thenif(rebn_ff>=3)thenrebn_ff:=rebn_ff-1;st_transfer<='0';elsif(rebn_ff=2)thenrebn_ff:=rebn_ff-1;st_transfer<='1';elserebn_ff:=rebn_ff;st_transfer<='0';endif;endif;endif;endprocess;CON:process(clk,ena_1Hz,reset)beginIf(reset='1')thenstate<=r0g1;sign_state<="00";recount<='1';elseif(clk'eventandclk='1')thencaseSTATEiswhenr0g1=>if(a_m='1'andena_1Hz='1')thenif(next_state='1')thenrecount<='1';state<=r0y1;sign_state<="01";elserecount<='0';state<=r0g1;endif;elsif(a_m='0'andena_scan='1')thenif(st_transfer='0')thenrecount<='1';state<=r0g1;elserecount<='1';state<=r0y1;sign_state<="01";endif;endif;whenr0y1=>if(a_m='1'andena_1Hz='1')thenif(next_state='1')thenrecount<='1';state<=g0r1;sign_state<="10";elserecount<='0';state<=r0y1;endif;elsif(a_m='0'andena_scan='1')thenif(st_transfer='0')thenrecount<='1';state<=r0y1;elserecount<='1';state<=g0r1;sign_state<="10";endif;endif;wheng0r1=>if(a_m='1'andena_1Hz='1')thenif(next_state='1')thenrecount<='1';state<=y0r1;sign_state<="11";elserecount<='0';state<=g0r1;endif;elsif(a_m='0'andena_scan='1')thenif(st_transfer='0')thenrecount<='1';state<=g0r1;elserecount<='1';state<=y0r1;sign_state<="11";endif;endif;wheny0r1=>if(a_m='1'andena_1Hz='1')thenif(next_state='1')thenrecount<='1';state<=r0g1;sign_state<="00";elserecount<='0';state<=y0r1;endif;elsif(a_m='0'andena_scan='1')thenif(st_transfer='0')thenrecount<='1';state<=y0r1;elserecount<='1';state<=r0g1;sign_state<="00";endif;endif;whenothers=>state<=r0g1;recount<='0';sign_state<="00";endcase;endif;endif;endprocess;light<="010010"when(state=r0g1)else"011000"when(state=r0y1)else"100001"when(state=g0r1)else"100100"when(state=y0r1)else"010010"when(state=r0g1)else"110000";red<=light(5downto4);yellow<=light(3downto2);green<=light(1downto0);endBEHAVIOR;信號譯碼電路信號譯碼電路traffic_CON的仿真輸出波形在源程序中,利用類別的定義格式Typetype_nameistype_mark,將所有紅綠燈交通信號系統發生的狀況利用類別〔type〕的定義格式一一列舉出來〔程序中共定義了8種情況〕,信號線state的設置的目的是將sreg0_type定義的8種狀況轉換成位的方式表示。程序包含兩個進程debounce、con。進程debounce是抖動去除電路,其重點在于st_transfer何時為1.當外部按下st_butt鍵時〔即st_buff=0〕,內部的計數器rebn_ff開始計數〔3f-02〕,在rebn_ff尚未數到02秒時,st_butt鍵被松開,那么狀態將不會改變。假設是由于電路效應引起開關誤動作,開關抖動的速度是非常快的〔約小于1ms〕,故電路不會有誤動作的產生,也就到達了這個抖動消除的目的。進程con是紅綠燈狀態控制器和紅綠燈閃爍控制器。3.5紅綠燈交通控制器頂層電路紅綠燈交通燈控制器頂層電路分為4個模塊,它們是系統時序發生電路clk_gen,紅綠燈計數時間選擇模塊traffic_mux,定時控制電路count_down,紅綠燈信號譯碼電路traffic_CON,圖3-51所示的是頂層電路原理圖。本節所要做的工作就是將所有的子電路全部連接起來,進行時序分析正確無誤后,再下載FPGA,以便進行硬件電路的測試工作。圖3-51紅綠燈交通控制器頂層電路原理圖利用元件例化的方法,將Traffic_TOP設置為頂層文件。按圖3-51將4個子電路連接起來。VHDL源代碼:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYtraffic_TOPISPORT(RE:instd_logic;clk:instd_logic;K1:instd_logic;K2:instd_logic;recount:outstd_logic;NEXT_S:outstd_logic;R:outstd_logic_vector(1downto0);G:outstd_logic_vector(1downto0);Y:outstd_logic_vector(1downto0);S:outstd_logic_vector(15downto0));ENDtraffic_TOP;architecturebehaveoftraffic_TOPiscomponentclk_genPORT(reset:instd_logic;clk:instd_logic;ena_scan:outstd_logic;ena_1Hz:outstd_logic;flash_1Hz:outstd_logic);endcomponent;componenttraffic_muxPORT(reset:instd_logic;clk:instd_logic; ena_scan:instd_logic; recount:instd_logic;sign_state:instd_logic_vector(1downto0);load:outstd_logic_vector(7downto0));endcomponent;componentcount_downPort(reset:instd_logic; clk:instd_logic; ena_1Hz:instd_logic; recount:instd_logic;load:instd_logic_vector(7downto0);seg7:outstd_logic_vector(15downto0);next_state:outstd_logic);endcomponent;componenttraffic_CONPort(reset:instd_logic; clk:instd_logic; ena_scan:instd_logic; ena_1Hz:instd_logic; flash_1Hz:instd_logic; a_m:instd_logic; st_butt:instd_logic; next_state:instd_logic;recount:outstd_logic;sign_state:outstd_logic_vector(1downto0);red:outstd_logic_vector(1downto0);green:outstd_logic_vector(1downto0);yellow:outstd_logic_vector(1downto0));endcomponent;signalena_scan_1:std_logic;signalena_1Hz_1:std_logic;signalflash_1Hz_1:std_logic;signalrecount_1:std_logic;signalnext_state_1:std_logic;signalsign_state_1:std_logic_vector(1downto0);signalload:std_logic_vector(7downto0);beginu1:clk_genportmap(RE,clk,ena_scan_1,ena_1Hz_1,flash_1Hz_1);u2:traffic_muxportmap(RE,clk,ena_scan_1,recount_1,sign_state_1,load);u3:count_downportmap(RE,clk,ena_1Hz_1,recount_1,load,S,next_state_1);u4:traffic_CONportmap(RE,clk,ena_scan_1,ena_1Hz_1,flash_1Hz_1,K1,K2,next_state_1,recount_1,sign_state_1,R,G,Y);NEXT_S<=next_state_1;Endbehave;交通控制器頂層電路Traffic_TOP的仿真輸出波形和元件符號交通控制器頂層電路的仿真輸出波形圖3-54中,控制器輸入信號有以下幾種。eq\o\ac(○,1)CLK:由外界信號發生器提供1Hz的時鐘脈沖信號。eq\o\ac(○,2)RE:系統內部自復位信號。eq\o\ac(○,3)K1:手動、自動切換鈕〔1:自動,0:手動〕。eq\o\ac(○,4)K2:紅綠燈狀態切換鍵〔每按一次就切換一個狀態〕〔使用在手動模式下〕。輸出信號有以下幾種:eq\o\ac(○,1)NEXT_S:當計數器計時完畢時,產生一個脈沖信號,作為轉態觸發信號。eq\o\ac(○,2

溫馨提示

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

評論

0/150

提交評論