

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1概述</b></p><p><b> 1.1FPGA概述</b></p><p> 隨著世界范圍內(nèi)城市化和機(jī)動化進(jìn)程的加快,城市交通越來越成為一個全球化的問題。城市交通基礎(chǔ)設(shè)施供給滯后于高速機(jī)動化增長需求,道路堵塞日趨加重,交通事故頻繁,環(huán)境污染加劇等問題普遍存在。目前,全國大中城市普遍存在著道路擁擠、車輛堵
2、塞、交通秩序混亂的現(xiàn)象,交通事故頻發(fā),這給人民的生命財產(chǎn)安全帶來了極大的損失。如何解決城市交通問題已成為全社會關(guān)注的焦點(diǎn)和大眾的迫切呼聲。探究城市交通發(fā)展中存在問題的原因,無論是從宏觀上還是從微觀上分析,其根本原因在于城市交通系統(tǒng)的管理機(jī)制不適應(yīng)。城市交通控制系(UTC ,Urban Traffic Control System)是現(xiàn)代城市智能交通系統(tǒng)(IDJ ,Intelligent transport system)的組成之一,主要
3、用于城市道路交通的控制與管理。城市平交路口實(shí)現(xiàn)交通信號控制是城市交通管理現(xiàn)代化的基本標(biāo)志之一,是提高交通管理效能的重要技術(shù)手段。路口信號控制器是控制交叉路口交通信號的設(shè)備,它是交通信號控制的重要組成部分。各種交通控制方案,最終都要由路口信號控制器來實(shí)現(xiàn)。為了確保十字路口的行人和車輛順利、暢通地通過,往往采用電子控制的交通信號來進(jìn)行指</p><p> FPGA(現(xiàn)場可編程門陣列)和CPLD(復(fù)雜可編程邏輯器件)
4、都是可編程邏輯器件,他們是在PAL,GAL等邏輯器件的基礎(chǔ)上發(fā)展起來的。同以往的PAL,GAL相比較FPGA/CPLD的規(guī)模比較大,它可以替代幾十甚至幾千塊通用IC芯片。這樣的FPGA/CPLD上就是一個子系統(tǒng)部件。這種芯片收到世界范圍內(nèi)電子工程設(shè)計人員的廣泛關(guān)注和普遍歡迎。比較典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他們開發(fā)較早,占用了較大的PLD市場。</p><p>
5、; FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特點(diǎn)外,還具有以下幾個優(yōu)點(diǎn):</p><p> 隨著VLSI(超大集成電路)工藝的不斷提高單一芯片內(nèi)部可以容納上百萬個晶體管,F(xiàn)PGA/CPLD芯片的規(guī)模也越來越大,其單片邏輯門數(shù)已達(dá)上百萬門,它所實(shí)現(xiàn)的功能也越來越強(qiáng),同時也可以實(shí)現(xiàn)系統(tǒng)集成,即片上系統(tǒng)SOC。</p><p> FPGA/CPLD芯片在出廠之前都做
6、過百分之百的測試,不需要設(shè)計人員承擔(dān)芯片風(fēng)險和費(fèi)用,設(shè)計人員只需在自己的實(shí)驗(yàn)室就可以通過相關(guān)的軟硬件環(huán)境來完成芯片的最終功能設(shè)計。所以,F(xiàn)PGA/CPLD的資金投入就少,減少了潛在的花費(fèi)。</p><p> 用戶可以反復(fù)的編程,擦除,使用或者在外圍電路不動的情況下用不同軟件就可實(shí)現(xiàn)不同的功能。FPGA/CPLD軟件包中有各種輸入工具和仿真工具,及版圖設(shè)計工具和編程器等全線產(chǎn)品,電路設(shè)計人員在很短的時間內(nèi)就可完成
7、電路的輸入,編譯,優(yōu)化,仿真,直至最后芯片的制作。當(dāng)電路有少量的改動,更能顯示FPGA/CPLD的優(yōu)勢。</p><p> 1.2:FPGA設(shè)計交通燈的意義 </p><p> FPGA是一個功能強(qiáng)大的可編程邏輯芯片,采用FPGA設(shè)計ASIC電路,用戶不需要投片生產(chǎn),就能得到所需的芯片。FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。FPGA是ASIC電路中設(shè)計周期最短、開發(fā)費(fèi)用最低、風(fēng)險最小
8、的器件之一。FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。所以用FPGA完成交通燈的設(shè)計合理可行。</p><p> 1.3:硬件描述語言VHDL</p><p> 硬件描述語言HDL是EDA技術(shù)的重要組成部分,常見的HDL有下列幾種:VHDL、Verilog HDL、System Verilog、和System C。其中VHDL、Verilog在現(xiàn)在EDA
9、設(shè)計中使用最多,也得到幾乎所有的主流EDA工具的支持。</p><p> VHDL的英文全名是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,于1983年有美國國防部(DOD)發(fā)起創(chuàng)建,由IEEE(The Institute of Electrical and Electronics Engineers)進(jìn)一步發(fā)展并
10、在1987年作為“IEEE標(biāo)準(zhǔn)1076”發(fā)布。從此,VHDL成為硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本之后,各EDA公司相繼推出了自己的VHDL設(shè)計環(huán)境,或宣布自己的設(shè)計工具支持VHDL。此后VHDL在電子設(shè)計領(lǐng)域得到了廣泛應(yīng)用,并逐步取代了原有的非標(biāo)準(zhǔn)硬件描述語言。</p><p> VHDL語言具有很強(qiáng)的電路描述和建模能力,能從多個層次對數(shù)字系統(tǒng)進(jìn)行建模和描述,從而大大簡化了硬件設(shè)計
11、任務(wù),提高了設(shè)計效率和可靠性。</p><p> VHDL具有與具體硬件電路無關(guān)和設(shè)計平臺無關(guān)的特性,并且具有良好的電路行為描述和系統(tǒng)描述的能力,在語言易讀性和層次化結(jié)構(gòu)化設(shè)計方面表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。用VHDL進(jìn)行電子系統(tǒng)設(shè)計的一個很大優(yōu)點(diǎn)是設(shè)計者可以專心致力于其功能的實(shí)現(xiàn),而不需對不影響功能的與工藝有關(guān)的因素花費(fèi)過多的時間和精力。</p><p> 2系統(tǒng)分析與總體方案&l
12、t;/p><p><b> 2.1:系統(tǒng)介紹</b></p><p> 設(shè)計交通燈是為了自動控制各個十字路口倒計時器和交通信號燈,從而使行人和各種車輛能夠安全通過。本文設(shè)計要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環(huán)變化,并以倒計時方式指示干道通行或禁止的維持時間。硬件設(shè)計采用的是FPGA器件CycloneII系列EP2C5T144,要在硬件中實(shí)現(xiàn)交通燈的功能首
13、先要在軟件中仿真成功,然后設(shè)置芯片的管教和程序端口的對應(yīng)關(guān)系。,以及LED發(fā)光并將程序在QuartusⅡ軟件環(huán)境中設(shè)計、仿真。</p><p><b> 2.2:設(shè)計任務(wù)</b></p><p> 本論文通過設(shè)計一個十字路口的交通燈來形象指揮行人和車輛的安全通行。十字路口處,方向分為東西南北四個方向。東西方向的交通信號燈狀態(tài)保持一致,南北方向的交通信號燈狀態(tài)也保持
14、一致。其中每個方向有左轉(zhuǎn)燈、紅燈、綠燈和黃燈,共四盞。左轉(zhuǎn)燈亮說明車輛可以左轉(zhuǎn)通行;紅燈亮說明禁止車輛直行和左轉(zhuǎn);綠燈亮說明允許車輛直行和右轉(zhuǎn);黃燈亮說明即將禁止車輛直行和左轉(zhuǎn)。在每個方向上均設(shè)有一個倒計時顯示器,以顯示禁止或允許通行的倒計時間。十字路口交通燈如圖2-1所示</p><p><b> 圖2-1交通燈系統(tǒng)</b></p><p><b>
15、2.3系統(tǒng)設(shè)計仿真</b></p><p> 本畢業(yè)論文設(shè)計是基于QuartusII軟件,底層設(shè)計和頂層設(shè)計均采用VHDL進(jìn)行描述設(shè)計,同時為了使設(shè)計變得形象簡明,通過頂層設(shè)計生成了原理圖。</p><p><b> 2.4:系統(tǒng)分析</b></p><p> 通過分析可以知道,所要設(shè)計的十字路口交通燈控制電路要能夠使南北、東
16、西各四個燈(紅、黃、綠、左轉(zhuǎn)),四個燈能夠按順序依次亮滅。而且要求綠燈亮轉(zhuǎn)紅燈亮或者轉(zhuǎn)左轉(zhuǎn)燈亮之前要先轉(zhuǎn)黃燈亮5秒,左轉(zhuǎn)燈亮轉(zhuǎn)紅燈亮之前也要先轉(zhuǎn)黃燈亮5秒,紅燈亮可以直接轉(zhuǎn)綠燈或左轉(zhuǎn)燈亮(四種燈的循環(huán)順序如圖2-1所示)。還要求四種燈的點(diǎn)亮?xí)r間能夠以倒計時的形式顯示出來??梢杂肰HDL語言合理設(shè)計系統(tǒng)功能,使紅黃綠左轉(zhuǎn)燈的轉(zhuǎn)換有一個準(zhǔn)確的時間間隔和轉(zhuǎn)換順序。</p><p> 圖2-1 四種燈的循環(huán)順序<
17、/p><p> 使用基于FPGA的方法具有周期短、使用靈活、易于修改等明顯的優(yōu)點(diǎn)。而且,隨著FPGA器件,設(shè)計語言和電子設(shè)計自動化工具的發(fā)展和改進(jìn),越來越多的電子系統(tǒng)采用FPGA來設(shè)計。未來使用FPGA器件設(shè)計的產(chǎn)品將出現(xiàn)在各個領(lǐng)域。因此此次的交通燈控制器將基于FPGA的設(shè)計方案來實(shí)現(xiàn)所需要的功能。</p><p> 2.5:設(shè)計的總體方案</p><p> 根據(jù)
18、設(shè)計要求和系統(tǒng)所具有功能,并參考相關(guān)的文獻(xiàn)資料經(jīng)行方案設(shè)計畫出如下所示的十字路口交通燈控制器系統(tǒng)框圖,及為設(shè)計的總體方案!系統(tǒng)框圖由6部分組成,包括:分頻、控制、倒計時、紅綠燈顯示、譯碼、譯碼顯示等模塊??驁D如下圖2-2所示:</p><p> 圖2-2 系統(tǒng)的框圖</p><p> 在VHDL設(shè)計描述中,采用自頂向下的設(shè)計思路,該思路,首先要描述頂層的接口,上面的描述已經(jīng)規(guī)定了交通燈
19、控制的輸入輸出信號:輸入信號:復(fù)位開關(guān)信號reset;外部時鐘信號clk。LED七段顯示數(shù)碼管的輸出信號count1(6 downto 0),count2(6 downto 0),count3(6 downto 0),count4(6 downto 0);在自頂向下的VHDL設(shè)計描述中,通常把整個設(shè)計的系統(tǒng)劃分為幾個模塊,然后采用結(jié)構(gòu)描述方式對整個系統(tǒng)進(jìn)行描述。根據(jù)實(shí)驗(yàn)設(shè)計的結(jié)構(gòu)功能,來確定使用哪些模塊以及這些模塊之間的關(guān)系。通過上面的
20、分析,不難得知可以把交通燈控制系統(tǒng)劃分為4個模塊:時鐘分頻模塊,計數(shù)模塊,控制模塊,分位譯碼模塊。</p><p> 分頻電路:把555多諧振蕩器發(fā)出的較高頻率脈沖用分頻電路的到較第頻率的時鐘信號,本電路通過三次10分平分別得到10Hz、1Hz的時鐘信號。</p><p> 控制器電路:根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段譯碼管的分位譯碼電路。當(dāng)檢測到手動
21、控制信號(Con=’1’)時,執(zhí)行手動控制; </p><p> 計數(shù)器電路:這里需要的計數(shù)器的計數(shù)范圍為0~89。計到89后,下一個時鐘沿升為1時,開始下一輪計數(shù),此外當(dāng)系統(tǒng)復(fù)位信號(Reset=’1’)使計數(shù)器異步清‘0’。手動信號(Con=’1’)使系統(tǒng)清‘0’。</p><p> 分位譯碼電路:因?yàn)榭刂破鬏敵龅牡褂嫊r數(shù)值可能是1位或者2位十進(jìn)制數(shù),所以在七段數(shù)碼管的譯碼電路前要
22、加上分位電路(即將其分為2個1位的十進(jìn)制數(shù),如20分為2和0,7分為0和7)。七段數(shù)碼管的譯碼電路根據(jù)控制電路的控制信號,驅(qū)動交通燈的顯示,通過輸入二進(jìn)制數(shù)值,輸出信號點(diǎn)亮二極管,我們用的是共陽極數(shù)碼管,因此譯碼電路輸出邏輯數(shù)值‘0’點(diǎn)亮二極管,譯碼電路輸出邏輯數(shù)值‘1’熄滅二極管。</p><p> 3單元電路設(shè)計與仿真</p><p> 3.1分頻器模塊設(shè)計</p>
23、<p> 將頻率變?yōu)?Hz的脈沖波,從而得到周期為1s的脈沖波。其電路圖如圖3-1所示:</p><p><b> 圖3-1分頻器模塊</b></p><p> 實(shí)體:entity clk_10 is</p><p> port( clk : in std_logic;</p><p> c
24、lk_div10 : out std_logic);</p><p> end clk_10;</p><p><b> 功能:實(shí)現(xiàn)十分頻</b></p><p> 接口:clk—脈沖輸入</p><p> Clk-div10—十分頻后脈沖輸出</p><p> 仿真結(jié)果如下圖3-2:&
25、lt;/p><p> 圖3-2分頻器模塊仿真結(jié)果</p><p> 3.2 計數(shù)模塊的設(shè)計及仿真圖</p><p><b> 圖3-3計數(shù)器模塊</b></p><p> 實(shí)體:entity counter is</p><p> port( clk0:in std_logic;</
26、p><p> con:in std_logic;</p><p> reset:in std_logic;</p><p> countnum:buffer integer range 0 to 80);</p><p> end counter;</p><p> 功能:實(shí)現(xiàn)0到80的計數(shù)</p>
27、<p> clk0—脈沖輸入 </p><p> con—手動控制信號 </p><p> reset—復(fù)位信號 </p><p> countnum—計數(shù)輸出</p><p> 仿真波形如下圖3-4:</p><p> 圖3-4計數(shù)器模塊仿真結(jié)果</p><p
28、> 3.3 控制模塊的設(shè)計及仿真圖</p><p><b> 圖3-5控制模塊</b></p><p> 實(shí)體:entity controller is</p><p> Port ( clk1 : in std_logic;</p><p> con1 : in std_logic;</p>
29、<p> con2 : in std_logic;</p><p> countnum : in integer range 0 to 89;</p><p> numa,numb : out integer range 0 to 25;</p><p> ra,ga,ya,ga1 : out std_logic;</p><
30、;p> rb,gb,yb,gb1: out std_logic);</p><p> end controller;</p><p> 功能:控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段譯碼管的分位譯碼電路。</p><p> clk1—脈沖信號輸入 </p><p> con1—手動控制信號 </p>
31、<p> con2—狀態(tài)控制信號 </p><p> countnum—計數(shù)輸入</p><p> numa,numb—兩個方向的倒計時數(shù)值輸出 </p><p> ra,ga,ya,ga1,rb,gb,yb,gb1—發(fā)光二極管輸出</p><p> 仿真波形如下圖3-6:</p><p>
32、圖3-6控制模塊仿真結(jié)果</p><p> 3.4 分位模塊的設(shè)計與仿真圖</p><p><b> 圖3-7分位模塊</b></p><p> 實(shí)體:entity fenwei is</p><p> port ( numin:in integer range 0 to 25;</p><
33、p> numa,numb:out integer range 0 to 9 );</p><p> end fenwei;</p><p><b> 功能:</b></p><p> 把倒計時的數(shù)值分成2個1位的十進(jìn)制數(shù)。</p><p> numin:倒計時數(shù)值輸入 </p><p
34、> numa,numb—將數(shù)值分為2個1位的十進(jìn)制輸出</p><p> 仿真波形如下圖3-8:</p><p> 圖3-8分位模塊仿真</p><p> 3.5 譯碼模塊的設(shè)計及仿真圖</p><p><b> 圖3-9譯碼模塊</b></p><p> 實(shí)體:entity d
35、isplay is</p><p><b> port(</b></p><p> clk2:in std_logic;</p><p> bb: in std_logic_vector(3 downto 0);</p><p> ya:out std_logic;</p><p> y
36、b:out std_logic;</p><p> yc:out std_logic;</p><p> yd:out std_logic;</p><p> ye:out std_logic;</p><p> yf:out std_logic;</p><p> yg:out std_logic);<
37、;/p><p> end display;</p><p> 功能:根據(jù)控制電路的控制信號,驅(qū)動交通燈的顯示, 通過輸入二進(jìn)制數(shù)值,輸出信號點(diǎn)亮二極管。</p><p> bb[3..0]--BCD碼輸入</p><p> clk2—脈沖輸入 </p><p> ya,yb,yc,yd,ye,yf,yg—七段數(shù)碼
38、管顯示輸出</p><p> 仿真波形如下圖3-10:</p><p> 圖3-10譯碼模塊仿真</p><p> 3.6頂層文件的設(shè)計</p><p><b> 圖3-11頂層模塊</b></p><p> entity dingceng is</p><p&g
39、t; port(clkd,resetd,cond,con1d:in std_logic;</p><p> count1:out std_logic_vector(6 downto 0);</p><p> count2:out std_logic_vector(6 downto 0);</p><p> count3:out std_logic_vecto
40、r(6 downto 0);</p><p> count4:out std_logic_vector(6 downto 0);</p><p> reda,greena,yellowa,greena1: out std_logic;</p><p> redb,greenb,yellowb,greenb1: out std_logic);</p>
41、<p> end entity dingceng;</p><p><b> clkd—脈沖輸入</b></p><p> resetd—復(fù)位信號</p><p> con—手動控制信號</p><p> con1d—狀態(tài)控制信號</p><p> count1,coun
42、t2,count3,count4—七段數(shù)碼管顯示</p><p> reda,greena,yellowa,greena1,redb,greenb,yellowb,greenb1—發(fā)光二極管輸出</p><p><b> 4實(shí)驗(yàn)程序設(shè)計</b></p><p> 一個完整的VHDL語言程序通常包括實(shí)體(Entity)、構(gòu)造體、配置、包集合
43、(Package)和庫(Library)5個部分組成。下面結(jié)合實(shí)際的程序來加以說明。</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity dingc
44、eng is</p><p> port(clkd,resetd,cond,con1d:in std_logic;</p><p> count1:out std_logic_vector(6 downto 0);</p><p> count2:out std_logic_vector(6 downto 0);</p><p>
45、count3:out std_logic_vector(6 downto 0);</p><p> count4:out std_logic_vector(6 downto 0);</p><p> reda,greena,yellowa,greena1: out std_logic;</p><p> redb,greenb,yellowb,greenb1:
46、 out std_logic);</p><p> end entity dingceng;</p><p> architecture one of dingceng is</p><p> component clk_10</p><p> port(clk:in std_logic;</p><p>
47、 clk_div10 : out std_logic);</p><p> end component;</p><p> component counter</p><p><b> port</b></p><p> (clk0:in std_logic;</p><p> con:
48、in std_logic;</p><p> reset:in std_logic;</p><p> countnum:buffer integer range 0 to 89);</p><p> end component;</p><p> component controller</p><p>&l
49、t;b> port</b></p><p> ( clk1 : in std_logic;</p><p> con1 : in std_logic;</p><p> con2: in std_logic;</p><p> countnum : in integer range 0 to 89;</p&g
50、t;<p> numa,numb : out integer range 0 to 25;</p><p> ra,ga,ya,ga1: out std_logic;</p><p> rb,gb,yb,gb1 : out std_logic);</p><p> end component;</p><p> com
51、ponent fenwei </p><p> port ( numin:in integer range 0 to 25;</p><p> numa,numb:out integer range 0 to 9 );</p><p> end component;</p><p> component yima</p>
52、<p> port(clk2:in std_logic;</p><p> bb: in integer range 0 to 9;</p><p> ya:out std_logic;</p><p> yb:out std_logic;</p><p> yc:out std_logic;</p>&l
53、t;p> yd:out std_logic;</p><p> ye:out std_logic;</p><p> yf:out std_logic;</p><p> yg:out std_logic);</p><p> end component;</p><p> signal a,b,c:
54、std_logic;</p><p> signal ww:integer range 0 to 89;</p><p> signal yy1,yy2:integer range 0 to 25;</p><p> signal tt1,tt2,tt3,tt4:integer range 0 to 9;</p><p><b&g
55、t; begin</b></p><p> u0: clk_10 port map(clk=>clkd,clk_div10=>a);</p><p> u1: clk_10 port map(clk=>clkd,clk_div10=>b);</p><p> u2: clk_10 port map(clk=>b,cl
56、k_div10=>c);</p><p> u3:counter port </p><p> map(clk0=>c,con=>cond,reset=>resetd,countnum=>ww);</p><p> u4:controller port map </p><p> (clk1=>c,
57、con1=>cond,con2=>con1d,countnum=>ww,numa=>yy1,numb=>yy2,ra=>reda,ga=>greena,ya=>yellowa,ga1=>greena1,rb=>redb,gb=>greenb,yb=>yellowb,gb1=>greenb1);</p><p> u5:fenwei p
58、ort map(numin=>yy1,numa=>tt1,numb=>tt2);</p><p> u6:fenwei port map (numin=>yy2,numa=>tt3,numb=>tt4);</p><p><b> u7:yima</b></p><p> port map(clk2=&
59、gt;b,bb=>tt1,ya=>count1(0),yb=>count1(1),yc=>count1(2),yd=>count1(3),ye=>count1(4),yf=>count1(5),yg=>count1(6));</p><p> u8:yima port map (clk2=>b,bb=>tt2,ya=>count2(0),yb=&
60、gt;count2(1),yc=>count2(2),yd=>count2(3),ye=>count2(4),yf=>count2(5),yg=>count2(6));</p><p> u9:yima port map(clk2=>b,bb=>tt3,ya=>count3(0),yb=>count3(1),yc=>count3(2),yd=>c
61、ount3(3),ye=>count3(4),yf=>count3(5),yg=>count3(6));</p><p> u10:yima port map(clk2=>b,bb=>tt4,ya=>count4(0),yb=>count4(1),yc=>count4(2),yd=>count4(3),ye=>count4(4),yf=>coun
62、t4(5),yg=>count4(6));</p><p> end architecture one;</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p>&
63、lt;p> use ieee.std_logic_unsigned.all;</p><p> entity clk_10 is</p><p> port( clk : in std_logic;</p><p> clk_div10 : out std_logic);</p><p> end clk_10;&l
64、t;/p><p> architecture one of clk_10 is</p><p> signal clk_temp : std_logic;</p><p><b> begin</b></p><p> process(clk)</p><p> variable count
65、er : std_logic_vector(2 downto 0);</p><p> constant md : std_logic_vector(2 downto 0) := "101";</p><p><b> begin</b></p><p> if(clk'event and clk='1
66、') then</p><p> if(counter = md)then</p><p> counter := (others =>'0');</p><p> clk_temp <= not clk_temp;</p><p><b> end if;</b></p
67、><p> counter := counter + 1 ;</p><p><b> end if; </b></p><p> end process;</p><p> clk_div10 <= clk_temp;</p><p><b> end one;</b
68、></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity counter is</p><p><b> port</b></p><p> ( clk0:in std_logic
69、;</p><p> con:in std_logic;</p><p> reset:in std_logic;</p><p> countnum:buffer integer range 0 to 89);</p><p> end counter;</p><p> architecture one
70、of counter is</p><p><b> begin </b></p><p> process (reset,clk0)</p><p><b> begin</b></p><p> if reset='1' then</p><p>
71、 countnum <= 0;</p><p> elsif rising_edge( clk0 ) then </p><p> if con='1' then</p><p> countnum <= 0;</p><p><b> else</b></p>&l
72、t;p> if countnum=89 then</p><p> countnum <= 0;</p><p><b> else</b></p><p> countnum <= countnum + 1;</p><p><b> end if;</b></p
73、><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end one;</b></p><p> library ieee;</p&
74、gt;<p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity controller is</p><p><b> port</b></p><p> ( cl
75、k1 : in std_logic;</p><p> con1 : in std_logic;</p><p> con2 : in std_logic;</p><p> countnum : in integer range 0 to 89;</p><p> numa,numb : out integer range 0 to
76、 25;</p><p> ra,ga,ya,ga1 : out std_logic;</p><p> rb,gb,yb,gb1: out std_logic);</p><p> end controller;</p><p> architecture one of controller is</p><p&
77、gt; signal m : integer range 0 to 7;</p><p><b> begin</b></p><p> process ( clk1,con1,con2,countnum )</p><p> variable aa:std_logic_vector(7 downto 0);</p>&l
78、t;p><b> begin</b></p><p> if (clk1'event and clk1 = '1' )then</p><p> if con1 ='0' then</p><p> if countnum >= 65then</p><p>
79、 numb<=90-countnum;</p><p> numa <=90-countnum;</p><p> if countnum >= 70 then </p><p> aa := "00011000"; </p><p> else aa := "00101000&
80、quot;;</p><p> numa<= 70-countnum;</p><p><b> end if;</b></p><p> elsif countnum >= 45 then </p><p> numb <= 65-countnum;</p><p>
81、 numa <=65-countnum;</p><p> if countnum >= 50 then</p><p> aa := "10000100";</p><p> else aa := "10000010";</p><p> numb<= 50-count
82、num; </p><p><b> end if;</b></p><p> elsif countnum >= 20 then </p><p> numa <= 45-countnum;</p><p> numb <=45-countnum;</p><p>
83、 if countnum >= 25 then</p><p> aa := "01001000"; </p><p> else aa := "00101000";</p><p> numa <= 25-countnum;</p><p><b> end
84、if;</b></p><p> elsif countnum >= 0 then</p><p> numa <= 20-countnum;</p><p> numb <= 20-countnum;</p><p> if countnum >= 5 then</p><p
85、> aa := "10000100"; </p><p> else aa := "10000010";</p><p> numb <= 5-countnum; </p><p><b> end if;</b></p><p><b> end
86、 if;</b></p><p><b> else</b></p><p> if con1= '1' then </p><p> numa <= 0;</p><p> numb <= 0; </p><p> if con2 = '
87、;1' then</p><p> if m = 7 then </p><p><b> m <= 0;</b></p><p><b> else</b></p><p> m <= m + 1;</p><p><b> end
88、if;</b></p><p><b> end if;</b></p><p> if m = 0 then</p><p> aa := "01001000";</p><p> elsif m= 1 then</p><p> aa := &quo
89、t;00101000"; </p><p> elsif m=2 then</p><p> aa :="10000100"; </p><p> elsif m=3 then</p><p> aa := "10000010"; </p><p> elsi
90、f m=4 then</p><p> aa := "00011000"; </p><p> elsif m=5 then</p><p> aa := "00101000"; </p><p> elsif m=6 then</p><p> aa := &quo
91、t;10000001"; </p><p> elsif m=7 then</p><p> aa := "10000010";</p><p><b> end if;</b></p><p><b> end if;</b></p><p
92、><b> end if;</b></p><p><b> end if;</b></p><p> ra <= aa(7);</p><p> ga <= aa(6);</p><p> ya <= aa(5); </p><p> g
93、a1 <= aa(4);</p><p> rb <= aa(3);</p><p> gb <= aa(2);</p><p> yb <= aa(1);</p><p> gb1 <= aa(0); </p><p> end process;</p><
94、p><b> end one;</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fenwei is</p><p> port ( numin:in integer range 0 t
95、o 25;</p><p> numa,numb:out integer range 0 to 9 );</p><p> end fenwei;</p><p> architecture one of fenwei is</p><p><b> begin </b></p><p>
96、 process( numin )</p><p> variable numa1,numb1: integer range 0 to 9; </p><p><b> begin</b></p><p> if numin >= 20 then</p><p> numa1 :=2;</p>
97、<p> numb1 := numin - 20;</p><p> elsif numin >= 10 then</p><p> numa1 := 1;</p><p> numb1 := numin - 10;</p><p><b> else </b></p><
98、;p> numa1 := 0 ;</p><p> numb1 := numin ;</p><p><b> end if ;</b></p><p> numa <= numa1; </p><p> numb <= numb1;</p><p> end pro
99、cess ;</p><p><b> end one ;</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity display is</p><p><b> port
100、(</b></p><p> clk2:in std_logic;</p><p> bb: in std_logic_vector(3 downto 0);</p><p> ya:out std_logic;</p><p> yb:out std_logic;</p><p> yc:out
101、 std_logic;</p><p> yd:out std_logic;</p><p> ye:out std_logic;</p><p> yf:out std_logic;</p><p> yg:out std_logic);</p><p> end display;</p>&
102、lt;p> architecture one of display is</p><p> signal temp: std_logic_vector(6 downto 0);</p><p><b> begin</b></p><p> process(bb)</p><p><b> be
103、gin</b></p><p> case bb is</p><p> when "0000" => temp <= "1000000";</p><p> when "0001" => temp <= "1111001";</p>
104、<p> when "0010" => temp <= "0100100";</p><p> when "0011" => temp <= "0110000";</p><p> when "0100" => temp <= &quo
105、t;0011001";</p><p> when "0101" => temp <= "0010010";</p><p> when "0110" => temp <= "0000010";</p><p> when "0111&q
106、uot; => temp <= "1011000";</p><p> when "1000" => temp <= "0000000";</p><p> when "1001" => temp <= "0010000";</p>&l
107、t;p> when others => temp <= "1111111";</p><p><b> end case;</b></p><p> end process;</p><p> ya<=temp(0);</p><p> yb<=temp(1);
108、 </p><p> yc<=temp(2);</p><p> yd<=temp(3);</p><p> ye<=temp(4);</p><p> yf<=temp(5);</p><p> yg<=temp(6);</p><p><b>
109、; end one;</b></p><p><b> 程序仿真與分析</b></p><p><b> 5.1:仿真結(jié)果</b></p><p> 利用QUARTUSⅡ軟件對本程序進(jìn)行編譯,生成了可以進(jìn)行仿真定時分析以及下載到可編程器件的相關(guān)文件。仿真結(jié)果如圖5-1所示:</p><
110、;p><b> 圖5-1 仿真結(jié)果</b></p><p> 5.2:仿真結(jié)果分析</p><p> 在頂層設(shè)計中,cond是復(fù)位信號,輸入的時鐘頻率CLKd是經(jīng)過分頻器后,變?yōu)轭l率為1Hz的時鐘信號,周期為1s,用此時鐘信號來控制整個系統(tǒng)的步調(diào),與現(xiàn)實(shí)生活中交通燈的步調(diào)保持一致。</p><p> 通過設(shè)定clkd值以及cond
111、和conld的初值,就可以得到如上所示的仿真波形圖。由仿真波形圖可以看出波形是由conld初值信號觸發(fā)而顯示出各個狀態(tài)的。Cond高電平信號輸入時,所有交通燈都變?yōu)榧t燈狀態(tài)(符合任務(wù)書的要求)。由仿真波形圖還可以清楚的看出各時間段每個交通燈的狀態(tài),當(dāng)東西方向的綠燈亮?xí)r南北方向的紅燈亮,其中有黃燈閃5秒的過程,這符合我們的設(shè)計要求,也達(dá)到了我們所要的結(jié)果,從波形上看實(shí)驗(yàn)程序是可行的。</p><p> 要得到正確
112、的仿真波形圖就必須設(shè)定合適的時間信號clkd值。如果clkd值設(shè)置的太小則交通燈狀態(tài)變化得太快無法分辨,如果clk值設(shè)置得太大則交通燈狀態(tài)轉(zhuǎn)換緩慢,效果不明顯。</p><p><b> 6結(jié)論</b></p><p> 利用網(wǎng)絡(luò)和圖書館的有效資源,搜集并下載了大量的關(guān)于用FPGA做交通燈設(shè)計的資料;然后精心閱讀,在趙老師的指導(dǎo)督促下,并和周圍同學(xué)進(jìn)行有效學(xué)習(xí)和溝
113、通,最終確定了自己的設(shè)計方案;最后按照既定的設(shè)計方案,通過努力有步驟的實(shí)現(xiàn)了最終的畢業(yè)設(shè)計,實(shí)現(xiàn)了交通燈、倒計時器按預(yù)定狀態(tài)表5-1運(yùn)行,并指揮交通,本設(shè)計利用VerilogHDL程序編寫,以芯片EP1Q100QC208-3的FPGA試驗(yàn)箱為平臺為基礎(chǔ),在軟件和硬件上實(shí)現(xiàn)了交通燈控制器的設(shè)計,以雙色LED的變換模擬交通燈的紅綠兩個信號燈的變化,本設(shè)計綜合了多種通行模式,加入了人性化的聲音提示功能。因?yàn)橛布酒琁/O口數(shù)量的問題,在硬件測
114、試中精簡了一部分軟件中的功能,比如,取消了黃燈的顯示,由三行道改為了雙行道,倒計時顯示由閃爍的信號燈取代,只有一個方向有聲音提示等,不過這不代表本系統(tǒng)其他功能不能在軟件上仿真和實(shí)現(xiàn)。另外本設(shè)計的各模塊有的可以合并為一個模塊,比如黃燈插入模塊和紅黃綠譯碼模塊就可以合并為一個模塊。本設(shè)計雖然結(jié)束了,不過系統(tǒng)的完善是沒有終點(diǎn)的,但由于時間、設(shè)備、條件和水平等各方面因素有限,通過此次畢業(yè)設(shè)計,讓我加深了FPGA的理解,更</p>
115、<p><b> 7致謝語</b></p><p> 本論文是在指導(dǎo)老師趙威威老師悉心指導(dǎo)下完成的,趙威威淵博的專業(yè)知識,嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,精益求精的工作作風(fēng),誨人不倦的高尚師德對我影響深遠(yuǎn)。趙威威不僅授我以文還教我許多為人師表的道理,從選題到完成,每一步都是在指導(dǎo)老師的指導(dǎo)下完成的,傾注了老師的大量心血。在此,謹(jǐn)向?qū)煴硎境绺叩木匆夂椭孕牡母兄x!同時還要感謝應(yīng)用技術(shù)學(xué)院各位老師
116、,因?yàn)橛心銈兊膫鞯?、授業(yè)、解惑我猜學(xué)到了專業(yè)知識,并從你們身上學(xué)到了如何求學(xué)如何教學(xué)如何為人師表。在此還要感謝我的母校重慶三峽學(xué)院,是她提供了良好的學(xué)習(xí)環(huán)境和生活環(huán)境,讓我的大學(xué)生活豐富多彩,為我的人生留下精彩的一筆。另外感謝2009級電子信息工程的全體同窗,感謝他們的幫助支持,同窗之情我永生難忘。路漫漫其修遠(yuǎn)兮,吾將上下而求索。我會努力學(xué)習(xí)工作用優(yōu)異的成績回報關(guān)心、幫助和支持我的領(lǐng)導(dǎo)、老師、親人和朋友。</p><
117、p><b> 參考文件</b></p><p> 1.劉天浩. 基于CPLD交通燈控制系統(tǒng)的設(shè)研究[J]. 實(shí)驗(yàn)室科學(xué), 2010</p><p> 2.孟先軍. 基于泛布爾代數(shù)的交通信號控制系統(tǒng)研究與設(shè)計[D]. 武漢: 武漢理工大學(xué), 2007</p><p> 3.楊捷,蔣煒華,馬臨超.基于VHDL語言的交通燈控制器設(shè)計河南
118、機(jī)電高等??茖W(xué)校學(xué)報, 2008 </p><p> 4.莊建清, 徐瑋. 51單片機(jī)綜合學(xué)習(xí)系統(tǒng)DS1302時鐘應(yīng)用篇[J].電子制作, 2008 </p><p> 5.文暢. 基于FPGA/CPLD和VHDL語言的交通燈控制系統(tǒng)設(shè)計[J]. 電腦知識與術(shù), 2007</p><p> 6.張淑驊. 基于FPGA的交通燈的VHDL設(shè)計[J]. 電力與能源,
119、 2007</p><p> 7.潘松, 黃繼業(yè). EDA技術(shù)實(shí)用教程[M]. 北京: 科學(xué)大學(xué)出版社,2008. </p><p> 8.張紅潤. FPGA/CPLD應(yīng)用設(shè)計[M]. 北京: 北京航空航天大學(xué)出版社, 2009.</p><p> 9.吳慎將, 李黨娟. 智能交通燈控制器的設(shè)計[J]. 中國科技核心期刊, 2010</p>&
120、lt;p> 10.邱磊, 肖兵. 基于VHDL語言的立通燈控制器設(shè)計[J]. 福建電腦: 2004.</p><p> 11.王燦, 何淳, 吳亞龍, 谷明信, 程發(fā)銀. 智能交通燈控制系統(tǒng)的設(shè)計和仿真[J]. 重慶工商大學(xué)學(xué)報: 自然科學(xué)版, 2009</p><p> 12.王曉薇, 王慧. 基于GA的交叉路口自適應(yīng)模糊控制器設(shè)計[J]. 吉林大學(xué)學(xué)報: 自然科學(xué)版, 20
121、04</p><p> 13.王曉薇, 王慧. 基于GA的交叉路口自適應(yīng)模糊控制器優(yōu)化設(shè)計[J]. 公路交通科技, 2004, </p><p> 14.崔鵬. 基于CPLD的多相位交通信號控制器設(shè)計[D]. 長安: 長安大學(xué), 2008. </p><p><b> 附錄</b></p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通燈畢業(yè)設(shè)計論文
- 交通燈畢業(yè)設(shè)計論文
- 交通燈畢業(yè)設(shè)計論文
- plc交通燈畢業(yè)設(shè)計論文
- 畢業(yè)設(shè)計論文——plc交通燈
- 交通燈畢業(yè)設(shè)計論文 (2)
- 畢業(yè)設(shè)計----交通燈仿真設(shè)計論文
- 交通燈畢業(yè)設(shè)計
- 智能交通燈畢業(yè)設(shè)計論文正文
- 交通燈設(shè)計畢業(yè)設(shè)計
- 交通燈課程設(shè)計--基于fpga的交通燈設(shè)計
- 模擬交通燈 畢業(yè)設(shè)計
- 模擬交通燈畢業(yè)設(shè)計
- 畢業(yè)設(shè)計模擬交通燈
- 模擬交通燈畢業(yè)設(shè)計
- 交通燈畢業(yè)設(shè)計3
- 畢業(yè)設(shè)計---智能交通燈
- plc交通燈畢業(yè)設(shè)計
- plc交通燈畢業(yè)設(shè)計
- 模擬交通燈畢業(yè)設(shè)計
評論
0/150
提交評論