EDA課程設計-交通燈.doc
《EDA課程設計-交通燈.doc》由會員分享,可在線閱讀,更多相關《EDA課程設計-交通燈.doc(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
交通信號燈控制電路設計 1、 概述 城市道路交叉口是城市道路網(wǎng)絡的基本節(jié)點,也是網(wǎng)絡交通流的瓶頸。目前,大部分無控制交叉口都存在高峰小時車流混亂、車速緩慢、延誤情況嚴重、事故多發(fā)、通行能力和服務水平低下等問題。特別是隨著城市車流量的快速增長,城市無控制道路交叉口的交通壓力越來越大。因此,做好基于EDA技術平臺的交叉口信號控制設計是緩解交通阻塞、提高城市道路交叉口車輛通行效率的有效方法。交通信號控制的目的是為城市道路交叉口(或交通網(wǎng)絡)提供安全可靠和有效的交通流,通常最為常用的原則是車輛在交叉口的通過量最大或車輛在交叉口的延誤最小。 交通信號燈控制電路是顯示主干道和支干道交替放行時間并用試驗箱左上角的彩燈來代替信號燈的一種實際電路。設計一個基于FPGA的紅綠燈交通信號控制器。假設某個十字路口是由一條主干道和一條次干道匯合而成,在每個方向設置紅綠黃三種信號燈,紅燈亮禁止通行,綠燈亮允許通行。黃燈亮允許行駛中車輛有時間停靠到禁止線以外。 本課程的基本原理是在合適的時鐘信號的控制下,使主干道與支道的紅黃綠燈循環(huán)顯示,用VHDL語言編輯文本程序,按設計要求連接好線以后,進行波形仿真,仿真結果正確后下載程序并對試驗箱進行調(diào)試,使其最終的顯示結果符合設計要求。 二、方案設計與論證 在硬件時鐘電路的基礎上,采用分頻器,輸出一個1S的時鐘信號,在時鐘信號的控制下,實現(xiàn)主干道和支干道紅綠燈交替顯示。 紅綠燈交通燈控制器層次設計: EDA技術的基本設計方法有電路級設計方法和系統(tǒng)級設計方法。電路級設計方法已經(jīng)不能適應新的形勢,本系統(tǒng)采用的是系統(tǒng)級層次設計方法,對整個系統(tǒng)進行方案設計和功能劃分,系統(tǒng)的關鍵電路用一片F(xiàn)PGA芯片實現(xiàn),首先用VHDL語言編寫各個功能模塊程序,最后通過綜合器和適配器生成最終的目標器件,然后用頂層原理圖將各功能模塊連接起來。下面給出各模塊的VHDL設計過程和仿真結果。 1、 系統(tǒng)時序發(fā)生電路clk_gen的VHDL設計 在紅綠燈交通信號控制系統(tǒng)中,大多數(shù)的情況是通過自動控制的方式指揮交通的。因此,為了避免意外事件的發(fā)生,電路必須給一個穩(wěn)定的時鐘(clock)才能讓系統(tǒng)正常運作。但為了配合高峰時段,防止交通擁擠,有時也必須使用手動控制,即讓交警能夠順利地指揮交通。Clk_gen電路最主要的功能就是產(chǎn)生一些額外的輸出信號,并將其用做后續(xù)幾個電路的使能(enable)控制與同步信號處理。 該電路的核心部分就是分頻電路,通過對外接信號發(fā)生器提供1kHz的時鐘信號進行1000分頻,得到一個周期為1秒的輸出使能信號ena_lhz(占空比1:1000)和flash_lhz(占空比1:1);4分頻后得到紅綠燈信號譯碼電路所需的頻率為250Hz的顯示使能信號ena_scan。 architecture one of fenpingqi is signal counter:integer range 0 to 4999999; Begin process (CLR,CLK) Begin if(CLK=1 and CLKevent) then if CLR=1 then counter<=0; elsif counter =4999999 then counter<=0; q<=not q; else counter<=counter+1; end if; end if; end process; end one; 2、 開關控制部分的ASM圖 i、j、k、分別代表開關狀態(tài);1表示開關閉合,為高電平;0表示開關斷開為低電平。當開關處于不同的狀態(tài)時,分別給變量G不同的值,用來實現(xiàn)控制通行時間。 X<=i&j&k X=001 X=010 X=100 G=29 G=39 G=49 y y y G=0 x<=i&j&k; cnt:process (clk) variable s:integer range 0 to 49; variable g:integer range 0 to 49; variable nclr,en:bit; Begin if x<="001"then g:=29; elsif x<="010"then g:=39; elsif x<="100"then g:=49; else g:=0; end if; 3、 信號燈轉換控制部分的ASM圖 Rm、Ym、Gm分別表示主干道紅、黃、綠;Rf、Yf、Gf分別表示支道紅、黃、綠; S表示燈亮的時間;nclr是計時器的清零端,低電平有清零;en是計時器的使能端,高電平使能。 Gm<=’1’ Rf<=’1’ S=G S=S+1 nclr=‘1’ en=‘1’ Ym<=’1’ Rf<=’1’ S=3 Rm<=’1’ Gf<=’1’ S=G S=3 Rm<=’1’ Yf<=’1’ y y y y S=S+1 nclr=‘1’ en=‘1’ nclr=‘0’ en=‘0’ nclr=‘0’ en=‘0’ if (clkevent and clk=1) then if nclr=0 then s:=0; elsif en=0 then s:=s; else s:=s+1; end if; case state is when a=>rm<=0;ym<=0;gm<=1; rf<=1;yf<=0;gf<=0; if s=g then state <=b;nclr:=0;en:=0; Else state<=a;nclr:=1;en:=1; end if; 3、狀態(tài)裝換 (1)開始設置為支路為綠燈、主路為紅燈,持續(xù)時間為30秒; (2)30秒后,支路由綠燈變?yōu)辄S燈,主路紅燈不變,持續(xù)時間為4秒; (3)4秒后,支路由黃燈變?yōu)榧t燈,主路由紅燈變?yōu)榫G燈,持續(xù)時間30秒; (4)30秒后,支路紅燈不變,主路由綠燈變?yōu)辄S燈,持續(xù)時間為4秒; (5)4秒后,支路由紅燈變?yōu)榫G燈,主路由黃燈變?yōu)榫G燈,持續(xù)時間為30秒; 隨時間,主、支系統(tǒng)依次循環(huán),可以自動切換,紅綠燈時間間隔可以手動設置,以適應不同需求。 case state is when a=>rm<=0;ym<=0;gm<=1; rf<=1;yf<=0;gf<=0; if s=g then state <=b;nclr:=0;en:=0; Else state<=a;nclr:=1;en:=1; end if; when b=>rm<=0;ym<=1;gm<=0; rf<=1;yf<=0;gf<=0; if s=3 then state <=c;nclr:=0;en:=0; Else state<=b;nclr:=1;en:=1; end if; when c=>rm<=1;ym<=0;gm<=0; rf<=0;yf<=0;gf<=1; if s=g then state <=d;nclr:=0;en:=0; Else state<=c;nclr:=1;en:=1; end if; when d=>rm<=1;ym<=0;gm<=0; rf<=0;yf<=1;gf<=0; if s=3 then state <=a;nclr:=0;en:=0; Else state<=d;nclr:=1;en:=1; end if; end case; 4、 總原理圖 1、電路連接圖 2、分頻器模塊 3、交通燈控制器模塊 4、波形仿真 仿真圖一 仿真圖二 5、 硬件仿真: 為了能對所設計的紅綠燈交通燈控制器電路進行硬件測試,應將其輸入輸出信號鎖定在開發(fā)系統(tǒng)的目標芯片引腳上,并重新編譯,然后對目標芯片進行編程下載,完成紅綠燈交通燈控制器的最終開發(fā),其硬件測試示意圖如圖6-62。不失一般性,本設計選用的EDA開發(fā)平臺為GW48電路模式為No.5,選擇目標器件為Cylone系列EP1C3T144C8芯片。 鎖定引腳時將CLK接至clock2(接受1kHz的時鐘頻率);內(nèi)部自復位信號同鍵3(PIO8)相連;手動、自動切換鈕(1:自動、0手動)接鍵4(PIO9);:紅綠燈狀態(tài)切換鍵(每按一次就切換一個狀態(tài))接鍵5(PIO13); R1接發(fā)光二級管D8(PIO23)用于指示南北路口紅燈;G1接發(fā)光二級管D7(PIO22)用于指示南北路口綠燈;Y1接發(fā)光二級管D6(PIO21)用于指示南北路口黃燈;R0接發(fā)光二級管D5(PIO20)用于指示東西路口紅燈;G0接發(fā)光二級管D4(PIO19)用于指示東西路口綠燈;Y0接發(fā)光二級管D3(PIO18)用于指示東西路口紅燈;NEXT_S 接發(fā)光二級管D1(PIO16)用于轉態(tài)指示。 引腳鎖定完成后,重新對該工程進行編譯,綜合適配后將配置數(shù)據(jù)下載入GW48實驗平臺的FPGA中(有關CLK等引腳在FPGA芯片EP1C6Q240C8引腳中的序號,請參見EDA書后的附錄的附表)。 選模式5,情況一(紅綠燈間隔30秒,黃綠間隔5秒),設定最右邊三個燈(從右到左)為支路燈:紅燈、綠燈、黃燈;緊接著為主路:紅燈、綠燈、黃燈(6號燈已壞順延到7號燈); 仿真圖片如下: 圖一:支路綠燈,主路紅燈 圖二:支路黃燈,主路紅燈 圖三:支路紅燈,主路綠燈 圖四:支路紅燈,主路黃燈 圖五:支路綠燈,主路紅燈 五、實驗目的 1. 熟練掌握VHDL 語言和MAX+ PLUSII 軟件的使用; 2. 理解狀態(tài)機的工作原理和設計方法; 3. 掌握利用EDA 工具進行自頂向下的電子系統(tǒng)設計方法 六、實驗步驟 1.將實驗系統(tǒng)上RS232接口與計算機串行口相連。 2.用VHDL將兩個方案的源程序輸入MAX+ PLUSII 軟件中。 3.編譯程序并進行引腳分配,最后將程序下載到器件中去。 七、結果分析 本次課程設計基本上滿足了任務的設計要求,可以通過開關手動設置主干道和支道每次通行的時間分別為為30s、40s、50s,從而控制通行時間長短的轉換;各個狀態(tài)之間的轉化及各個狀態(tài)的通行時間也可以滿足“主干道和支干道自動循環(huán)。主干道和支道每次通行的時間為30s,而在兩個狀態(tài)交換過程出現(xiàn)的"主黃,支紅"和"主紅,支黃"狀態(tài),持續(xù)時間都為4s”的設計要求。 但是設計也存在一定的缺陷,設計只能完成當開關i,j,k只有一個為高電平時使交通燈正常工作,,其他狀態(tài)時定義G=0,這時交通燈不能正常工作。例如當X=I&J&K=’101’,時,其波形仿真各個狀態(tài)時間通行時間長短會出現(xiàn)差錯,如下圖 然而,這種狀況在實際生活中是不允許出現(xiàn)的。其解決方法是:在各個when語句后增加一條if判斷語句,判斷如果g等于0,則保持原狀態(tài),如果g不等于0,則執(zhí)行原來方案中的狀態(tài)轉換語句。 八、硬件要求 主芯片EPF10K10LC84-4;6個LED燈(紅、黃、綠各兩個);四個開關。 九、心得體會 通過課程設計能提高學生對所學知識的綜合應用能力,能全面檢查并掌握所學內(nèi)容,在這學期的課程設計中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找資料,請教老師,以及不懈的努力,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,我們學會了很多學習的方法。 通過本學期的這次的課程設計與幾次實驗,我學會了VHDL語言的一些基本用法,應用了原來不會或者不熟練的句型,如process進程,也學會了一些基本功能的實現(xiàn)方法,如分頻,狀態(tài)控制等。雖然這次實驗遇到的問題不少,但是在老師以及同學的幫助下,我都順利地解決了,并為將來的實踐積累了寶貴的經(jīng)驗和教訓。通過經(jīng)常和老師、同學交流,以便及時發(fā)現(xiàn)自己在實驗中的紕漏和不足,促進進步。 EDA設計中程序調(diào)試最為重要,我在編完各模塊程序之后,編譯查錯最初有很多錯誤,有輸入錯誤,語法錯誤,通過反復的修改最終通過了編譯。必須注意工程名和實體名的一致,在仿真無誤的情況下把程序下載到是芯片中,進行硬件的調(diào)試。邏輯正確和仿真真確并不代表著實際實驗的正確,通常情況下,要適當?shù)卣{(diào)整邏輯以適應硬件。要特別注意仿真時出現(xiàn)的毛刺和偏差,到底是由于仿真設置不合理還是仿真結果確實有問題。 這次課程設計雖然結束了,也留下了很多遺憾,因為由于時間的緊缺和許多課業(yè)的繁忙,并沒有做到最好,但是,最起碼我們沒有放棄,它是我們的驕傲!相信以后我們會以更加積極地態(tài)度對待我們的學習、對待我們的生活。 實驗的順利完成,與老師的熱心指導是分不開的,最后十分感謝胡輝老師的認真負責的工作,讓我受益匪淺! 十、參考文獻 《EDA技術與實驗》 機械工業(yè)出版社 李國洪、胡輝、沈明山 《EDA技術實驗與課程設計》 清華大學出版社 曹新燕、周鳳臣、聶春燕 《EDA技術綜合應用實例與分析》 西安電子科技大學出版社 譚會生、翟遂春 附件 1、頂層設計代碼 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY JiaoTongDeng is port(clr,clk,i,j,k:in std_logic; rm,ym,gm,rf,yf,gf:out std_logic; recount:out std_logic; NEXT_S:out std_logic); end entity JiaoTongDeng; architecture JTD of JiaoTongDeng is component fenpingqi port(CLR,CLK:in std_logic; q:buffer std_logic); end component; component kongzhi port(clk,i,j,k:in std_logic; rm,ym,gm,rf,yf,gf:out std_logic); end component; component count_down port(clk,reset, ena_1Hz, recount: in std_logic; load: in std_logic_vector(7 downto 0); seg7:out std_logic_vector(15 downto 0); next_state: out std_logic); end component; signal Q, signal recount_1,signal next_state_1:std_logic; begin u1: fenpingqi port map(CLR=>clr,CLK=>clk,q=>Q); u2: kongzhi port map(i=>i,j=>j,k=>k,clk=>Q,rm=>rm,ym=>ym,gm=>gm1,rf=>rf, yf=>yf,gf=>gf); u3:count_down port map(RE,CLK,ena_1Hz_1,recount_1,load,S,next_state_1); NEXT_S<=next_state_1; end architecture JTD; 分頻器代碼 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fenpingqi is port (CLR,CLK:in std_logic ; q:buffer std_logic); end fenpingqi; architecture one of fenpingqi is signal counter:integer range 0 to 4999999; Begin process (CLR,CLK) Begin if(CLK=1 and CLKevent) then if CLR=1 then counter<=0; elsif counter =4999999 then counter<=0; q<=not q; else counter<=counter+1; end if; end if; end process; end one; 3、交通燈控制器代碼 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity kongzhi is port (clk,i,j,k:in std_logic; rm,ym,gm,rf,yf,gf:out std_logic); end kongzhi; architecture arc of kongzhi is type state_type is (a,b,c,d); signal state:state_type; signal x:std_logic_vector(2 downto 0); Begin x<=i&j&k; cnt:process (clk) variable s:integer range 0 to 49; variable g:integer range 0 to 49; variable nclr,en:bit; Begin if x<="001"then g:=29; elsif x<="010"then g:=39; elsif x<="100"then g:=49; else g:=0; end if; if (clkevent and clk=1) then if nclr=0 then s:=0; elsif en=0 then s:=s; else s:=s+1; end if; case state is when a=>rm<=0;ym<=0;gm<=1; rf<=1;yf<=0;gf<=0; if s=g then state <=b;nclr:=0;en:=0; Else state<=a;nclr:=1;en:=1; end if; when b=>rm<=0;ym<=1;gm<=0; rf<=1;yf<=0;gf<=0; if s=3 then state <=c;nclr:=0;en:=0; Else state<=b;nclr:=1;en:=1; end if; when c=>rm<=1;ym<=0;gm<=0; rf<=0;yf<=0;gf<=1; if s=g then state <=d;nclr:=0;en:=0; Else state<=c;nclr:=1;en:=1; end if; when d=>rm<=1;ym<=0;gm<=0; rf<=0;yf<=1;gf<=0; if s=3 then state <=a;nclr:=0;en:=0; Else state<=d;nclr:=1;en:=1; end if; end case; end if; end process cnt; end arc; 4、兩位七段譯碼輸出顯示代碼 LIBRAYR IEEE; USE IEEE.std_logic_1164.all; USE IEEE.std_logic_arith.all; USE IEEE.std_logic_unsigned.all; ENTITY count_down IS port(reset, clk, ena_1Hz, recount: in std_logic; load: in std_logic_vector(7 downto 0); seg7:out std_logic_vector(15 downto 0); next_state: out std_logic); end; ARCHITECTURE BEHAVIOR of count_down IS signal cnt_ff:std_logic_vector(7 downto 0); begin count:process(clk,reset) begin if (reset=1) then cnt_ff<="00000000"; seg7<="0000000000000000"; elsif (clkevent and clk=1) then if ena_1Hz=1 then if (recount=1) then cnt_ff<=load-1; else cnt_ff<=cnt_ff-1; end if; end if; case conv_integer(cnt_ff) is when 0=>seg7(15 downto 0)<="0011111100111111";--dt gfedcba(十位) dt gfedcba(個位) when 1=>seg7(15 downto 0)<="0011111100000110"; when 2=>seg7(15 downto 0)<="0011111101011011"; when 3=>seg7(15 downto 0)<="0011111101001111"; when 4=>seg7(15 downto 0)<="0011111101100110"; when 5=>seg7(15 downto 0)<="0011111101101101"; when 6=>seg7(15 downto 0)<="0011111101111101"; when 7=>seg7(15 downto 0)<="0011111100000111"; when 8=>seg7(15 downto 0)<="0011111101111111"; when 9=>seg7(15 downto 0)<="0011111101111011"; when 10=>seg7(15 downto 0)<="0000011000111111"; when 11=>seg7(15 downto 0)<="0000011000000110"; when 12=>seg7(15 downto 0)<="0000011001011011"; when 13=>seg7(15 downto 0)<="0000011001001111"; when 14=>seg7(15 downto 0)<="0000011001100110"; when 15=>seg7(15 downto 0)<="0000011001101101"; when 16=>seg7(15 downto 0)<="0000011001111101"; when 17=>seg7(15 downto 0)<="0000011000000111"; when 18=>seg7(15 downto 0)<="0000011001111111"; when 19=>seg7(15 downto 0)<="0000011001111011"; when 20=>seg7(15 downto 0)<="0101101100111111"; when 21=>seg7(15 downto 0)<="0101101100000110"; when 22=>seg7(15 downto 0)<="0101101101011011"; when 23=>seg7(15 downto 0)<="0101101101001111"; when 24=>seg7(15 downto 0)<="0101101101100110"; when 25=>seg7(15 downto 0)<="0101101101101101"; when 26=>seg7(15 downto 0)<="0101101101111101"; when 27=>seg7(15 downto 0)<="0101101100000111"; when 28=>seg7(15 downto 0)<="0101101101111111"; when 29=>seg7(15 downto 0)<="0101101101111011"; when 30=>seg7(15 downto 0)<="0100111100111111"; when 31=>seg7(15 downto 0)<="0100111100000110"; when 32=>seg7(15 downto 0)<="0100111101011011"; when 33=>seg7(15 downto 0)<="0100111101001111"; when 34=>seg7(15 downto 0)<="0100111101100110"; when 35=>seg7(15 downto 0)<="0100111101101101"; when 36=>seg7(15 downto 0)<="0100111101111101"; when 37=>seg7(15 downto 0)<="0100111100000111"; when 38=>seg7(15 downto 0)<="0100111101111111"; when 39=>seg7(15 downto 0)<="0100111101111011"; when others=>seg7(15 downto 0)<="0011111100111111"; end case; end if; end process; next_state <= 1 when cnt_ff=1 else 0; end BEHAVIOR;- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- EDA 課程設計 交通燈
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.jqnhouse.com/p-6707815.html