十字路口交通燈課程設計實驗報告_第1頁
十字路口交通燈課程設計實驗報告_第2頁
十字路口交通燈課程設計實驗報告_第3頁
十字路口交通燈課程設計實驗報告_第4頁
十字路口交通燈課程設計實驗報告_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

常熟理工學院電科122班EDA課程設計報告PAGE第20頁共20頁EDA課程設計報告課程EDA課程設計題目十字路口交通燈控制系別物理與電子工程學院年級專業班級學號學生姓名指導教師張惠國設計時間2014.12.21~2014.12.26

目錄前言 3第一章VHDL系統概述 4第二章十字路口交通燈系統設計 62.1題目 62.2要求 6第三章方案設計與論證 63.1方案設計 63.2方案論證 7第四章詳細設計 104.1結構框圖 104.2實驗程序 10第五章實驗結果 17第六章總結與體會 19第七章參考文獻 19前言自從1858年英國人發明了原始的機械扳手交通燈之后,隨后的一百多年里,交通燈改變了交通路況,也在人們日常生活中占據了重要地位,隨著人們社會活動日益增加,經濟發展,汽車數量急劇增加,城市道路日漸擁擠,交通燈更加顯示出了它的功能,使得交通得到有效管制,對于交通疏導,提高道路導通能力,減少交通事故起到了顯著的效果。近年來,隨著汽車數量的猛增,我國大中型城市的城市交通,正面臨著嚴峻的考驗,從而導致交通問題日益嚴重,其主要表現如下:交通事故頻發,對人類生命安全造成極大威脅;交通擁堵嚴重,導致出行時間增加,能源消耗加大;空氣污染和噪聲污染程度日益加深等。日常的交通堵塞成為人們司空見慣而又不得不忍受的問題。在這種背景下,結合我國城市道路交通的實際情況,開發出真正適合我們自身特點的智能信號燈控制系統已經成為當前的主要任務。和諧的城市交通具有很重要的現實意義。城市交通是城市經濟生活的命脈,是衡量一個城市文明進步的標志,對于城市經濟的發展和人民生活水平的提高起著十分重要的作用。作為城市交通網的重要組成部分,交叉口是道路通行能力的瓶頸和交通阻塞及事故的多發地。城市的交通擁堵,大部分是由于交叉口的通行能力不足或沒有充分利用造成的,這導致車流中斷、事故增多、延誤嚴重。對交叉口實行科學的管理與控制是交通控制工程的重要研究課題,是保障交叉口的交通安全和充分發揮交叉口的通行能力的重要措施,是解決城市交通問題的有效途徑。所以,改變和完善我國現有的交通系統已成為當務之急。目前國內己有一些自主開發的城市交通控制系統,如公安部交通科學研究所研制開發的HT-UTCS系統,但它在整體性能上比國外同類系統仍有較大差距,只在一些中小城市得到一些應用。國內城市尤其是大城市引進的交通控制系統大部分為進口的SCOOT和SCATS以及京三系統等,這些系統皆是建立在機動車為主的道路交通條件基礎之上的被動型控制系統上的.由于我國交通流是混合交通流,和國外的交通流大不相同,因此,國外的這些交通控制系統在國內的使用效果不盡人意。所以國內的科研人員也在孜孜不倦的研究著更好的交通燈控制系統,大致研究可以分為兩類,其一是按固定配時方案運行,其二是由車輛檢測器提供的實時交通信息控制信號機運行的。如,基于時間分布的交通控制系統設計,它將一天分為N個不同的時間區間,應用計算機算出各個交通路口各時間段信號燈的最佳周期,在不同的時間區間賦予交通信號控制器不同的周期,以對應交通流量隨時間的分布。但在現實應用中,這種固定周期的交通信號燈的周期只在一天交通流量變化不大的路口可以得到較理想的效果,而交通流量呈周期變化的路口則無法兩者兼顧,其只能使某個時段達到較好的效果,在另外一個時刻則需要人工干預,不然可能產生交通堵塞。再如基于模糊邏輯的智能交通燈控制系統,是從禁行車輛等待時間的角度出發,綜合了各個方向車輛密度的因素,模仿交通帶察的行為而設計的。其控制器采用三變量輸入,輸出不再是時間變量,而是車輛通行的權限[3]。第一章VHDL系統概述VHDL語言是一種用于電路設計的高級語言。它在80年代的后期出現。最初是由美國國防部開發出來供美軍用來提高設計的可靠性和縮減開發周期的一種使用范圍較小的設計語言。VHDL翻譯成中文就是超高速集成電路硬件描述語言,主要是應用在數字電路的設計中。目前,它在中國的應用多數是用在FPGA/CPLD/EPLD的設計中。當然在一些實力較為雄厚的單位,它也被用來設計ASIC。VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風格以及語法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。硬件描述語言的主要優點:VHDL是一種全方位的硬件描述語言,包括系統行為級、寄存器傳輸級和邏輯門級多個設計層次,支持結構、數據流、行為3種描述形式的混合描述,因此VHDL幾乎覆蓋了以往各種硬件描述語言的功能,整個自頂向下或自底向上的電路設計過程都可以用VHDL來完成。VHDL在電子設計中具有以下優點:(1)全方位硬件描述—從系統到電路。VHDL具有功能強大的語言結構,可以用簡潔明確的代碼描述來進行復雜控制邏輯的設計,而且覆蓋面廣,方法靈活。(2)多種描述方式適應層次化設計。VHDL具有多層次描述系統硬件功能的能力。能進行系統級的硬件描述這是它最突出的優點。(3)VHDL語言的數據類型豐富語法嚴格清晰,串行和并行通用,物理過程清楚。(4)VHDL的設計不依賴于特定的器件,方便了工藝的轉換。(5)VHDL是一個標準語言,它的設計描述可以被不同的EDA工具所支持,可移植性強,易于共享和復用。同時,與其他的硬件描述語言相比,VHDL還具有以下特點:(1)VHDL具有更強的行為描述能力。強大的行為描述能力避開了具體的器件結構,是在邏輯行為上描述和設計大規模電子系統的重要保證。VHDL的寬范圍描述能力使它成為高層次設計的核心,從而決定了它成為系統設計領域最佳的硬件描述語言,并可進行系統的早期仿真以保證設計的正確性。(2)VHDL豐富的仿真語句和庫函數,使得在任何大系統的設計早期就能查驗設計系統功能的可行性,隨時可對設計進行仿真模擬。(3)VHDL語句的行為描述能力和程序結構,決定了它具有支持大規模設計的分解和已有設計的再利用功能。(4)對于用VHDL完成的一個確定的設計,可以利用EDA工具進行邏輯綜合和優化,并自動地把VHDL描述設計轉變成門級網表。(5)VHDL對設計的描述具有相對獨立性,設計者可以不懂硬件的結構,也不必管理最終設計實現的目標器件是什么,而進行獨立的設計。(6)用VHDL語言編寫的源程序便于文檔管理,用源代碼描述來進行復雜控制邏輯的設計,既靈活方便,又便于設計結果的交流、保存和重用。電子系統利用VHDL設計時,設計方法有系統行為級描述算法,寄存器傳輸級算法和結構級描述;VHDL源代碼是作為EDA綜合工具的輸入代碼,因此有效的VHDL建模風格是控制綜合結果的最為有效的手段。要建立VHDL源代碼,設計者必須了解VHDL與綜合結果的關系。綜合算法不同,對于同樣的硬件描述,可能會得到不同的綜合結果。即使最后綜合出的電路都能實現相同的邏輯功能,其電路的復雜程度和時延特性都會有很大的差別,甚至某些額外的電路還使得系統運行效率達不到要求。為此,下面列舉出了利用VHDL進行程序設計時的一些重要的、典型的優化方法。描述方法的合理選用用VHDL進行設計,其最終綜合出的電路的復雜程度除取決于設計要求實現的功能的難度外,還受設計工程師對電路的描述方法的影響。最常見的使電路復雜化的原因之一是設計中存在許多本不必要的類似LATCH的結構。而且由于這些結構通常都由大量的觸發器組成,不僅使電路更復雜,工作速度降低,而且由于時序配合的原因可能導致不好的結果。第二章十字路口交通燈系統設計2.1題目十字路口交通燈控制2.2要求1、顯示十字路口東西、南北兩個方向的紅、黃、綠燈的指示狀態。2、用兩組紅、黃、綠三色燈作為兩個方向的紅、黃、綠燈。3、用兩組數碼管作為東西和南北方向的倒計時顯示。第三章方案設計與論證3.1方案設計在交通信號燈的設計中,系統功能設計要求主干道和支干道各設有一個綠、黃、紅指示燈。如圖所示:圖4-1路口交通管理示意圖主干道綠燈亮時,支干道紅燈亮,反之亦然,兩者交替允許通行。主干道每次放行34s,支干道每次放行24s。每次由綠燈變為紅燈的過程中,亮光的黃燈作為過渡,黃燈的時間為4s。能實現正常的倒計時顯示功能。能實現總體清理功能,計數器由初始狀態開始計數,對應狀態的指示燈亮。交通燈的四種狀態如下:四種狀態燈色狀態1狀態2狀態3狀態4東西南北東西南北東西南北東西南北綠燈(時間/s)0300035000紅燈(時間/s)3005003505黃燈(時間/s)00500005圖4-2交通信號燈的4種狀態綠燈與黃燈倒計時顯示在同一個數碼管顯示中,二者相加正好與紅燈顯示的數碼管時間相同有四種狀態,狀態1主干道綠燈亮30秒,支干道紅燈亮30;狀態2主干道黃燈亮5秒,支干道紅燈亮5秒;狀態3主干道紅燈亮35秒,支干道綠燈亮35秒;狀態4主干道紅燈亮5秒,支干道黃燈亮5秒。外部硬件電路方面主要包括:兩組紅綠燈、兩組LED顯示器。軟件方面包括:(1)電路合成模塊的概念:將交通燈信號系統劃分成若干個小電路,編寫每一個模塊的VHDL程序代碼,并將各個小電路相連接。這樣可以增加程序的調試速度,同時也能夠將工作細分,以提高編程速度。3.2方案論證由交通信號燈系統結構圖如下,該系統由4個子電路組成。其中包括:時鐘發生電路;計數秒數選擇電路;倒計時控制電路;紅綠燈信號控制電路。圖4-3交通信號燈系統結構圖(1)第一模塊:clk時鐘秒脈沖發生電路在紅綠燈交通信號系統中,大多數的情況是通過自動控制的方式指揮交通的。因此,為了避免意外事件的發生,電路必須給出一個穩定的時鐘(clock)才能讓系統正常的工作。因此,hld1時鐘發生電路最主要的功能就是產生一些穩定的輸出信號,并將其用做后面幾個電路的使能控制與同步信號。模塊說明:系統輸入信號:clk:由外部信號發生器提供1kHZ的時鐘信號;rst:系統內部自復位信號。系統輸出信號:clock_1buffer:輸出為1HZ的頻率clock_2buffer:掃描輸出信號頻率(2)第二模塊:計數秒數選擇電路計數電路最主要的功能就是記數負責顯示倒數的計數值,對下一個模塊提供狀態轉換信號。模塊說明:系統輸入信號:clk:接收由clk電路的提供的1hz的時鐘脈沖信號;系統輸出信號:light:產生顯示電路狀態轉換信號data0:倒計數值秒數個位變化控制信號data1:倒計數值秒數十位變化控制信號data2:次倒計數值秒數個位變化控制信號;data3:次倒計數值秒數十位變化控制信號;(3)第三模塊:紅綠燈狀態轉換電路本電路負責紅綠燈的轉換。模塊說明:系統輸入信號:clk:接收由clk電路的提供的1hz的時鐘脈沖信號;states:接收計數秒數選擇電路狀態轉換信號;系統輸出信號:light:負責紅綠燈的狀態顯示。(4)第四模塊:時間顯示電路本電路負責紅綠燈的計數時間的顯示。模塊說明:系統輸入信號:data0:倒計數值秒數十位變化控制信號;data1:倒計數值秒數個位變化控制信號;data2:次倒計數值秒數十位變化控制信號;data3:次倒計數值秒數個位變化控制信號;系統輸出信號:led7S0:負責主紅綠燈的顯示秒數十位。led7S1:負責主紅綠燈的顯示秒數個位。led7S2:負責支干紅綠燈的顯示秒數十位。led7S3:負責支干紅綠燈的顯示秒數個位。我們本次的程序共由3個進程組成,第一個進程為frequent:process(clk_in)分頻程序,將clk信號分頻后產生1秒信號;第二個進程為time:process(rst,clk)記時狀態,構成兩個帶有預置數功能的十進制計數器;第三個進程為process(clk2)動態掃描顯示數碼管,產生次態信號和信號燈輸出信號,以及每一個狀態的時間值。最終驗證了十字路口交通燈的系統設計。第四章詳細設計4.1結構框圖圖5-1交通信號燈控制器程序原理框圖4.2實驗程序libraryieee;庫說明useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjiaotongdengis實體名稱port(clk_in:instd_logic;端口定義:時鐘信號 rst:instd_logic;--復位信號 weima:outstd_logic_vector(7downto0);weima顯示 light:outstd_logic_vector(5downto0);指示燈顯示 LED7S:outSTD_LOGIC_vector(6downto0));段碼顯示endjiaotongdeng;architecturearcofjiaotongdengis結構體typestatesis(green_red,yellow_red,red_green,red_yellow);定義了一個新的類型 signalstate:states;signalnx_state:states:=green_red;定義下一狀態signaldata0:integerrange0to3;支干道十位初始值范圍signaldata1:integerrange0to9;支干道個位初始值范圍signaldata2:integerrange0to3;主干道十位初始值范圍signaldata3:integerrange0to9;主干道個位初始值范圍 signalclock_1buffer:std_logic;signalcount_1time:integerrange0to39999999;時鐘技術范圍 signalclk:std_logic;--1m時鐘 signalclock_2buffer:std_logic;signalcount_2time:integerrange0to200;時鐘技術范圍 signalclk2:std_logic;--動態顯示輸出時鐘signalsec0:integerrange0to3;支干道十位顯示值范圍 signalsec1:integerrange0to9;支干道個位顯示值范圍signalsec2:integerrange0to3;主干道十位顯示值范圍signalsec3:integerrange0to9;主干道個位顯示值范圍signalLED7S0:STD_LOGIC_VECTOR(6downto0);支干道十位數字段碼儲存signalLED7S1:STD_LOGIC_VECTOR(6downto0);支干道個位數字段碼儲存signalLED7S2:STD_LOGIC_VECTOR(6downto0);主干道十位數字段碼儲存 signalLED7S3:STD_LOGIC_VECTOR(6downto0);主干道個位數字段碼儲存beginfrequent:process(clk_in)分頻程序 begin if(clk_in'eventandclk_in='1')then count_1time<=count_1time+1; count_2time<=count_2time+1; if(count_1time=39999999)then4MHZ翻轉一次,1s定時 clock_1buffer<=notclock_1buffer; count_1time<=0; endif; if(count_2time=100)then clock_2buffer<=notclock_2buffer; count_2time<=0; endif; clk<=clock_1buffer;輸出為1HZ的頻率 clk2<=clock_2buffer;掃描輸出信號頻率 endif;endprocess;time:process(rst,clk)記時狀態begin if(rst='0')then--復位定義初始值 sec0<=3; sec1<=9; sec2<=3; sec3<=4; state<=green_red;數碼管的初始值,初始狀態 elsif(rising_edge(clk))then1m時鐘頻率轉換 if(((sec0=0)and(sec1=0))or((sec2=0)and(sec3=0)))then若支干道十位為0,個位為0或者主干道十位為0,個位為0就跳轉到下一個狀態 state<=nx_state;數碼管置下一狀態的初始值? sec2<=data2; sec3<=data3; sec0<=data0; sec1<=data1; else sec1<=sec1-1; sec3<=sec3-1;主干道個位減一 if((sec2/=0)and(sec3=0))then主干道十位不為0,個位為0則十位減一,個位附為9 sec2<=sec2-1; sec3<=9; endif; if((sec0/=0)and(sec1=0))then支干道十位不為0,個位為0則十位減一,個位附為9sec0<=sec0-1;sec1<=9; endif; endif; endif;casestateis whengreen_red=>light<="001100";--主干道綠燈亮,支干道紅燈亮(狀態一) nx_state<=yellow_red; data2<=0;--下一狀態的初始值設置data3<=4; data0<=0; data1<=4;whenyellow_red=>light<="010100";--主干道黃燈亮,支干道紅燈亮(狀態二) nx_state<=red_green;data2<=2;data3<=9; data0<=2; data1<=4;whenred_green=>light<="100001";--主干道紅燈亮,支干道綠燈亮(狀態三) nx_state<=red_yellow;data2<=0;data3<=4; data0<=0; data1<=4;whenred_yellow=>light<="100010";--主干道紅燈亮,支干道黃燈亮(狀態四) nx_state<=green_red;data2<=3;data3<=4; data0<=3; data1<=9; endcase;支干道十位計數值七段數碼管譯碼 casesec0is WHEN0=>LED7S0<=not"1000000";0 WHEN1=>LED7S0<=not"1111001";1 WHEN2=>LED7S0<=not"0100100";2 WHEN3=>LED7S0<=not"0110000";3 WHENothers=>LED7S0<=not"1111111";其余狀態為不顯示 ENDcase;支干道個位計數值七段數碼管譯碼 casesec1is WHEN0=>LED7S1<=not"1000000";0 WHEN1=>LED7S1<=not"1111001";1 WHEN2=>LED7S1<=not"0100100";2 WHEN3=>LED7S1<=not"0110000";3 WHEN4=>LED7S1<=not"0011001";4 WHEN5=>LED7S1<=not"0010010";5 WHEN6=>LED7S1<=not"0000010";6 WHEN7=>LED7S1<=not"1111000";7 WHEN8=>LED7S1<=not"0000000";8 WHEN9=>LED7S1<=not"0010000";9 ENDcase;主干道十位計數值七段數碼管譯碼 casesec2is WHEN0=>LED7S2<=not"1000000";0 WHEN1=>LED7S2<=not"1111001";1 WHEN2=>LED7S2<=not"0100100";2 WHEN3=>LED7S2<=not"0110000";3WHENothers=>LED7S2<=not"1111111";其余狀態不顯示 ENDcase;主干道個位計數值七段數碼管譯碼 casesec3is WHEN0=>LED7S3<=not"1000000";0 WHEN1=>LED7S3<=not"1111001";1 WHEN2=>LED7S3<=not"0100100";2 WHEN3=>LED7S3<=not"0110000";3 WHEN4=>LED7S3<=not"0011001";4 WHEN5=>LED7S3<=not"0010010";5 WHEN6=>LED7S3<=not"0000010";6 WHEN7=>LED7S3<=not"1111000";7 WHEN8=>LED7S3<=not"0000000";8 WHEN9=>LED7S3<=not"0010000";9 ENDcase; ENDprocess;process(clk2)動態掃描顯示數碼管 variablec:integerrange0to3;--動態掃描 variablewm:STD_LOGIC_VECTOR(7downto0);--動態掃描位碼儲存 variablefc:integerrange0to2;--動態掃描頻率設計 variableLED7:STD_LOGIC_VECTOR(6downto0);數碼管七段段碼儲存beginif(clk2'eventandclk2='1')then fc:=fc+1; if(fc=2)then fc:=0; c:=c+1; if(c=4)then c:=0; endif; endif; endif; casecis when0=>wm:="00100000";LED7:=LED7S0; when1=>wm:="00010000";LED7:=LED7S1; when2=>wm:="00001000";LED7:=LED7S2; when3=>wm:="00000100";LED7:=LED7S3; whenothers=>NULL; endcase; weima<=wm;位碼輸出 LED7S<=LED7;段碼輸出 ENDprocess

溫馨提示

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

評論

0/150

提交評論