fpga交通燈畢業(yè)設(shè)計論文_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論