下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、(完整 word 版)基于 FPGA 的智能交通燈設(shè)計附 VHDL 語言程序編輯整理:尊敬的讀者朋友們:這里是精品文檔編輯中心,本文檔內(nèi)容是由我和我的同事精心編輯整理后發(fā)布的,發(fā)布之前我 們對文中內(nèi)容進行仔細校對,但是難免會有疏漏的地方,但是任然希望(完整word版)基于FPGA的智能交通燈設(shè)計附VHDL語言程序)的內(nèi)容能夠給您的工作和學習帶來便利。同時也 真誠的希望收到您的建議和反饋,這將是我們進步的源泉,前進的動力。本文可編輯可修改,如果覺得對您有幫助請收藏以便隨時查閱,最后祝您生活愉快業(yè)績進步, 以下為(完整word版)基于FPGA的智能交通燈設(shè)計附VHDL語言程序的全部內(nèi)容。目錄第一章
2、設(shè)計原理.1仁1使用VHDL語言實現(xiàn)對FPGA器件的編程.12使用的設(shè)計工具.1仁2。1硬件部分.1仁2.2軟件部分.11.3軟件框圖.2仁4紅綠燈拓展模塊.2第二章程序設(shè)計及分析.32。1分頻器器件的設(shè)計.32.2數(shù)碼管顯示驅(qū)動器件的設(shè)計.42。3頂層器件設(shè)計.42。3. 1按鍵消抖.42。3.2數(shù)碼管掃描顯示.52.3。3 24小時時鐘.62.3。4改變時間設(shè)定.62.3。5交通燈主控程序.7第三章使用說明及實驗結(jié)果.83.1使用說明.83. 2實驗結(jié)果.9第四章結(jié)論與體會.12附錄程序源碼.13第一章設(shè)計原理1o 1使用VHDL語言實現(xiàn)對FPGA器件的編程FPGA(Field Progr
3、ammabIe Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電 路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克 服了原有可編程器件門電路數(shù)有限的缺點。對于目前的FPGA器件,可以使用硬件描述語言(VeClog或VHDL)完成電路 設(shè)計,可以經(jīng)過簡單的綜合與布局,快速的燒錄至FPGA上進行測試,是現(xiàn)代IC設(shè)計驗證的技術(shù)主流.這些可編輯元件可以被用來實現(xiàn)一些基本的邏輯門電路 (比如AND、OR、XOR、NOT)或者更復雜一些的組合功能比如解碼器或數(shù)學方程 式.1.2使用的設(shè)計工具1.2O
4、1硬件部分Cyc I one i i是一款FPGA器件,于2004年由AI tera公司推出.Cyc I one I I FPGA的成本比第一代Cyclone器件低30%,邏輯容量大了三倍多,同時具有豐富 的I/O引腳實驗板采用EP2C5T144C8芯片并配有SDRAM芯片,時鐘頻率為50MHz。 同時,實驗板包含4個數(shù)碼管以及5個按鍵,同時將豐富的I/O口用排針進行了 引出。從系統(tǒng)資源以及運行速度的方面考慮,均足以完成智能交通燈的設(shè)計。1o 2o 2軟件部分Quartus II是Altera公司的綜合性PLD/FPGA開發(fā)軟件,原理圖、VHDL、Ver i logHDL以及AHDL (Alt
5、era Hardware支持Descr ipt ion Language)等多種 設(shè)計輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計輸入到硬件配置 的完整PLD設(shè)計流程。VHDL語言是一種用于電路設(shè)計的高級語言。它在80年代的后期出現(xiàn)。具有 設(shè)計靈活、支持廣泛、易于修改、獨立于器件的設(shè)計或工藝等優(yōu)秀的特性十分適合于對FPGA器件進行編程。1 3軟件框圖本系統(tǒng)包含一個頂層以及兩個子器件(分頻器以及數(shù)碼管顯示驅(qū)動)。分頻器將系統(tǒng)時鐘分為1000Hz, 1Hz等待信號供頂層程序使用。頂層包含了整個系統(tǒng)數(shù)碼管亠圖1o 1關(guān)彳處直扌頂層*Processl:按鋌5消抖.數(shù)碼管模式選擇(s6Proce
6、ss2:按鋌1 2 3 4消抖、改變預設(shè)時間(s2 s3 s4 s5)Process3:紅綠:燈點亮控制丿Process4:紅綠燈左控卅序Processo:數(shù)碼管掃描計時Process6:數(shù)碼管不冋模式卜的顯/jProcess?: 24小時時鐘卩匚LED燈,丁ED分頻瓠Processl:分出Ims的時鐘信號卩Process2:分出50ms的時鐘信號卩Process3:分出Is的時鐘佶號卩Process4:分出lmin的時鐘佶號卩Processor分岀lh的時鐘佶號數(shù)碼管顯示驅(qū)動Processl:根據(jù)輸入的移型信號以 及位選信號驅(qū)動數(shù)碼管顯示-0, 1 293, 4 596: 71 8, 9,
7、AB, C, D, E 21 o 4紅綠燈拓展模塊為了達到更好的人機交互效果, 本系統(tǒng)將紅綠燈在電路板上通過不同的顏色 的LED進行實物化。模塊原理圖如下:PCB設(shè)計如下:第二章程序設(shè)計及分析2o 1分頻器器件的設(shè)計本系統(tǒng)將分頻器單獨設(shè)置為一個器件,目的是便于對時間倍率進行修改以及 方便調(diào)用。具體思路如下:(以1ms為周期的輸出信號為例)process (clk_in)一一1ms系統(tǒng)時圭中輸入beginif rising_edge (elk in) then-當檢測到時鐘信號為上丹沿時if (data_ms=25000) ehen-由計數(shù)需實現(xiàn)分頻的功能,-由SOM/(25000*2)得到信號
8、翻轉(zhuǎn)周期。-修改的判斷値就可以實現(xiàn)不同的分頻比data ms=0;Q_ms=not Q_ms;-茁暫存狀態(tài)重進行翻轉(zhuǎn)elsedata ms=daca ms+二;end if;end If;Glk_ouv_ms daca_ _ouc dataout dataout dataout dataout dataout NULLend case;end process;圖2. 22. 3頂層器件設(shè)計2.3.1按鍵消抖本系統(tǒng)對于按鍵采取了消抖的處理辦法,可以有效的增加穩(wěn)定性消抖的實現(xiàn) 原理基于計數(shù)器,當檢測到有按鍵按下則開始計數(shù),當計數(shù)達到設(shè)定值時給出按 鍵按下的信號并執(zhí)行相應功能,其中key5實現(xiàn)模式選
9、擇,其余按鍵實現(xiàn)對時間 設(shè)定的更改。process (sysclk:, key5)-按鍵 5 消抖+數(shù)碼管模式選擇(s6variab:Lw COUNT 1 : integer range 0 to 1000000;beginif key5=l0 thenif RISING_EDGE(sysclk) thenif COUNTKL000000 thenCOUNT 1: =COUNT1+1 ;else COUNTl:=COUfTTl;end if;if COUNT1=999999 thendata_mode = d.ata_mo de+1;else dat.a_mocie dataoutdataou
10、t=when2=dataoutdataoutdataoutdataoutdataout-IOOOOOIO;when7dacaouc=r,11111000r,;when3dataoucdataour=,10010000r,;0 0 1212 3 3 4 4 5 5 6 67 7 didi 9 9process(intern)begincase int in xs2o 3o 2數(shù)碼管掃描顯示實驗板采用了四個共陽的數(shù)碼管,若需要讓每個數(shù)碼管都顯示不一樣的內(nèi)容, 則需要對數(shù)碼管進行掃描顯示。本系統(tǒng)采用1000Hz的頻率對數(shù)碼管進行掃描顯 不,實際效果可以穩(wěn)定的顯不而不會出現(xiàn)閃爍的現(xiàn)象。程序設(shè)計方面采用
11、了兩個process,分別對數(shù)碼管位選進行掃描以及輸入段 選信號pxoce3s (tirtp_si. data_counc_5eg) -生成數(shù) 碼管位選掃描beginif xising_ed.ge (t-iRp_sig_ms) then data_count_seg = dara_counr_seg+l:if(data_count_seg = 4) then data_conn.t_seg = 0;end if;end if;end process;圖2.4process (sysclk)數(shù)碼管掃描各模式顯示樣式beginif (data_mode = 0) then-if (data cou
12、nt seg = 0) then-位選掃描輸入seg7com =r0111r,;-位迭tmp_seg7daca = data_min_low;段選 elsif (data_coun.t_seg = 1) then seg7com =r,1011r;tmp seg7daca = data min high;elsif (data_coun.t_seg = 2) Chen seg7com =rf1101r,;tmp_seg7data = data_h_low;elseseg7com =r,1110r,;tmp seg7data = data h high;end if;圖2。52. 3. 3 24
13、小時時鐘為了實現(xiàn)白天與夜間的模式切換效果,需要加入24小時制的時鐘.本系統(tǒng)對于 時鐘的實現(xiàn)依然基于計數(shù)器。具體流程如下:對分頻器輸出的分鐘信號進行檢測,當檢測到上升沿時執(zhí)行計數(shù),當達到該 位最大值時執(zhí)行進位與清零。process (sysciK)一一24小時時神計數(shù)beginif rising_edge |tnp_sig_min) then輜入信號為分時,當分即輸入信號為上升沿時術(shù)發(fā)da* a_itin_low then分軸悵位達到駅大伯,執(zhí)行邊1立data_min_iow =o;淸瑟daLa_min_hlgh=dac a_min_high1;if (daoa_nin_high - S) th
14、en満一小時進位綸小時data xiin lew =D;濟窓data min high r=0:data_h_low = da*a_h_low+i;dauah = daua_n+l;if (datc_h_low - 9 ) then小時佞位游進檢給小時高位daca nin low =0;-瘠壽daa nin high =0;daca_h_low =0;daa_n_nign =data_n_nigh-ri ;end if;end if;ir(data_n = 2)tren daa min low -G;da*a itin high =C; daa h low =0;da匸a_h_hi0h =0:
15、 da匚a n - data time nightin or data h data time nightout) *hcn一一白天黑夜別生f night =1;elseniaht =0; end ir; end pxcccos;2o 3.4改變時間設(shè)定本程序?qū)崿F(xiàn)了對行人通行時間,汽車通行時間以及夜間時間段的設(shè)定。設(shè)定 方式為由按鍵實現(xiàn)加減。主要代碼已經(jīng)內(nèi)嵌于按鍵消抖程序中。if (keyOjchenif(datamode = 2)chendata timc cp data time cp+1;elsif(datamode =3)thendata_tiine_niahtouc = data_c
16、ime_niahtout+2; end if;eni ir;if(key2=l0)Chenif (data_nvode = 2) chendata time cn tmp_sig_s. cIk_out_ms=tmp_s ig_ms.clk_out_min二tmp_sig_min, clk_ out_h = tinp_sig_h cIk_out_50ms二tmp_s i g_50ms);dis: seg7led PORT MAP (-數(shù)碼管int_in二tmp_seg7data, data_out = seg7data);process (sysclk, key5) -按鍵5消抖+數(shù)碼管模式選擇
17、(s6)var i abIe COUNT1 : i nteger range 0 to 1000000; beg i ni f key5二O thenif RISING EDGE (syscIk) thenif C0UNT1 1000000 thenC0UNT1: =C0UNT1+1;else C0UNT1:二C0UNT1;end if;if C0UNT1=999999 thendata mode二data_mode+1;eIse data jnode二data_mode;end if;end if;else C0UNT1:=0;END if;17i f (datajnode二4)thenda
18、ta_mode二0;end if;end process ;process (sysclk)-按鍵1 2 3 4消抖+改變設(shè)定時間(s2 s3 s4 s5)var i abIe COUNT1 : i nteger range 0 to 1000000;beg i nif key1=,O or key2二O or key3=O or key4= O theni f r i s i ng_edge (syscIk) thenif C0UNT11000000 thenC0UNT1:=C0UNT1+1;else C0UNT1:=C0UNT1;end if;if C0UNT1=999999 thenif
19、 (key1=,O) theni f (data_mode二2)thendata time cp= data time_cp+1;eIs i f (data mode =3)thendata_time_nightout二data_time_nightout+1; end if;end i f;if (key2=,O) theni f (data_mode二2)thendata_time_cp = data_time_cpT;eIs i f (data_mode =3) thendata t i me_n i ghtout二data_t i me_n i ghtout1; end i f;end
20、 if;if (key3=0,)theni f (data_mode = 2) thendata_time_pp二data_time_pp+1;eIs i f (data_mode =3)thendata t i me_n i ght i n二data_t i me_n i ght i n+1 ;end if;end i f;if(key4=,O)thenif (data_mode = 2)thendata_time_pp二data_time_pp1;eIs i f (data mode =3) thendata t i me n i ght i n二data_t ime_n i ght i
21、nT; end if;end if;end if;end if;else COUNT1:二0;end i f;end process;process (syscIk)beg i nif (led一c二0) then led c r二;led_c_gU 01; led_c_y二0;eIs i f (led_c = 1) then1 ed,c_r = 0* ;1 ed_c_g=*r;1 ed_.c_y二o*;e 1se1 ed_c_r=*0;1 ed_c_g二0;1 ed_.c_y八endif;if(led_p = 0) then Ied_p_r = T ; Ied_p_g二,O;e I seIe
22、d_p_r二O;Ied_p_g = T;end if;end process;process (syscIk)beginif r i sing_edge (tmp_sig一s) then data timecount=data time count+1;17紅綠燈點亮定義紅綠燈主控程序18i f (n i ght= 11)then-if(key_flag二1) thenif (data time count二data time cp) thenled_p =0;-進入黃燈led_c二2;data mode led =3:9end if;i f (data_time_count二(data_ti
23、me_cp+3) ) then led_p =1;行人通行l(wèi)ed_c二0;data mode Ied二2;end if;i f(data t i me count二(data_t ime cp+3+data t ime_pp)then led_p =0;一-車通行Ied_c =1;key_flag二0;data time count =0:9data mode led = 0;MMend i f;e I seled_pled_cdata_mode_led=0;end if;end if;if (night0)then-白天模式i f (data_time一count二data_time_cp)
24、thenled_p二0;-進入黃燈Ied_c二2;data_mode一led=3;end if;i f (data_time_count二(data_time_cp+3) )thenled_p =1;行人通行l(wèi)ed_c=0;data_mode_led=2;end if;i f (data_t i me_count= (data t i me_cp+3+data t i me pp) ) thenI ed_p =0;-車通行Ied_c =1;黑夜模式二0;=1;19data_t i me_count二0;data_mode_led=1;end if;end if;end if;if(key6=,
25、0 and key_flag = 0)then datatime_count二0; data_mode_led=1;end i f;if (key6=01) then key_flag =1;end i f;end process;process (tmp_s i g_ms, data_count_seg) -生成數(shù)碼管位選掃描beg i ni f r i si ng_edge (tmp_s ig_ms) thendata_count_seg二data_count_seg+1;if (data_count_seg二4) thendata_count_seg = 0;end if;end if;
26、end process; process (syscI k)數(shù)碼管掃描各模式顯示樣式beg i ni f (data mode二0)then-一-模式0,時命顯示i f (data_count_seg = 0) then-位選掃描輸入seg7com二”0111n;位選tmpseg7da ta =data_m inflow;段選eIsif (data_count_seg二then seg7com =1011n;tmp一seg7data = datajnin_high;elsif (data_count_seg = 2) thenseg7com二”01;tmp seg7data = data hl
27、ow;e I seseg7com = 10”;tmp一seg7data = data_h_high;end if;e I s i f (data mode二1 ) then-20模式r,紅綠燈剩余時間顯示i f (data_mode_led = 0) then-夜間模式一直車走,顯示i f (data_count_seg = 0) then seg7com 0111n;tmpseg7data =16;eIs i f (data_count_seg = 1) then seg7com二1011” ;tmpseg7data =16;elsif (data_count_seg = 2) then s
28、eg7com =n110r*; tmp_seg7data二16; e I seseg7com=”1110;tmpseg7data =16;end if;elsif (data_mode一I ed = 1) then-車通行剩余時間if (data_count_seg二0) thenseg7com二0111;tmp_seg7data二(data一time一cp data_time_count)rem 10; elsif (data_count_seg二1) thenseg7com =1011n;tmp_seg7data = (data_time_cp - data_time_count) / 1
29、0; elsif (data_count_seg = 2) thenseg7com =1101n;tmp_seg7data =16;e I seseg7com =n1110;tmp_seg7data =16;end if;elsif (data_mode_Ied = 2) then-人通行剩余時間i f (data_count_seg = 0)then seg7com二0111” ; tmpseg7data =( data一time一cp+3+data_time一pp )data time count) rem 10;elsif (data_count_seg = 1)thenseg7com二
30、1011n;tmp_seg7data二 (data_t ime_cp+3+data_t i me_pp )data_time_count)/ 10;elsif (data_count_seg二2)then seg7com =n1101; tmp_seg7data二16;seseg7com =n1110,f;tmp_seg7data二16;end if;e I se-黃燈則顯示00if (data_count_seg二0) then seg7com二0111n;tmp_seg7data = 0;elsif (data_count_seg二thenseg7com=1011” ;tmp一seg7da
31、ta二0;elsif (data_count_seg = 2) then seg7com =n1101H;tmp_seg7data=16;e I seseg7com二”1110n;tmp_seg7data=16;end if;end if;elsif (data_mode二2) then-模式2,紅綠火T時間顯示i f (data_count_seg二0)then seg7com二”0111;tmp_seg7data二data_time_pp rem 10; elsif (data_count_seg = 1) then seg7com =1011;tmp_seg7data二data_time
32、_pp / 10; elsif (data.count_seg = 2) then seg7com =1101n;tmp_seg7data = data_time_cp rem 10;e I seseg7com =1110;tmp_seg7data二data_time_cp /10;end if;e I se- 模式3,白天黑夜設(shè)定時間顯示if (data_count_seg二0) then seg7com二”0111n;tmp_seg7data二data_time_nightin rem 10; elsif (data_count_seg二1)then seg7com =1011n;tmp_
33、seg7data二data_time_nightin / 10; elsif (data_count_seg二2) then seg7com二”1101” ;tmp_seg7data二data_time_nightout rem 10;22e I seseg7com =,1110n;tmp_seg7data二data_time_nightout / 10; end if;end if;end process;process (sysc I k) -24小時時鐘計數(shù)data mi n_h i gh=data_m i n h i gh+1;i f (data_min_high = 5) then滿
34、一小時進位給小時data_min_low =0;清零data_mi n_h i gh=0;data_h_low二data一h_low+1; data h = data_h+1;if (data_h_low = 9 ) then -小時低位滿進位給小時高位data_m inflow二0;-清零data_m i n_h igh二0;data_h_low二0;data_h_h i gh二data一h_h i gh+1;end if;end if;begi nif rising一edge (tmp一sig_min) then時觸發(fā) _data_min_low二data一min_low+1; if(da
35、ta_min_low二9)then data_min_low二0;輸入信號為分鐘,當分鐘輸入信號為上升沿開始計數(shù)一分鐘低位達到最大值,執(zhí)行進位if(data_h = 24)then data_min_low二0; data min_h igh二0;data_h_low二0; data_h_high二0;滿24小時,全部清零23end i f;i f (data h白天黑夜判斷night =二data_time_night in ordata_hdata一t i me一n i ghtout) thenseV;0;24分頻器器件I ibrary ieee;USE ieee.std_logic_11
36、64Oa I I;ENTITY clkdiv ISPORT ( clk_in: IN STD一LOGIC;時鐘信號輸入clk_out_ms: OUT STD_LOGIC;時鐘信號輸岀clk_out_s: OUT STD_LOGIC;時鐘信號輸岀cIk out min: OUT STD LOGIC;elk out h: OUT STD LOGIC;MMcIk out_50ms : OUT STD LOG IC);end clkdiv;arch i tecture d i v of clkdiv i sms: integer range 0 to 1000000; s:i nteger range
37、 0 to 100000000: min:integer range 0 to 100;h: integer range 0 to 100;50ms: i nteger range 0 to 10000000;SIGNAL Qjns, Q_s. Q_min, Q _h, Q 50ms:std_logic; beg i n process (c I k_ i n) 1 ms系統(tǒng)時鐘輸入beg i nif r ising_edge (clk_in) then-當檢測到時鐘信號為上升沿時if(data_ms=25000) then -由計數(shù)器實現(xiàn)分頻的功能,-由50M/ (25000*2)得到信號翻
38、轉(zhuǎn)周期。修改data_ms的判斷值就 可以實現(xiàn)不同的分頻比data_ms二0;Q_ms=not Q_ms;對暫存狀態(tài)量進行翻轉(zhuǎn)e I sedata ms二data_ms+1;night =(/;end if;end process;END main;SIGNALdataSIGNALdataSIGNALdataSIGNALdataSIGNAL data25end if;end if;elk out ms=Q ms;end process;process (clkn) -50ms當前輸岀為實際時間(最終沒有用到)beginif r ising_edge (clk_in) thenif(data_50ms=1250000 ) then此句 為你想要的分頻比,in/out二data*2+1 ;data=(in/out -1)/2data_50ms=0;Q_50ms二not Q一50ms;e I sedata_50ms二data_50ms+1;en
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人抵押車輛借款合同編制要點
- 2025版公寓水電維修合同范本(1000字系列)12篇
- 2025版關(guān)鍵信息基礎(chǔ)設(shè)施保密協(xié)議合同3篇
- 二零二五年油茶林生態(tài)環(huán)境保護與修復合作協(xié)議3篇
- 2025年度個人信用保證反擔保承諾書示例4篇
- 2025年汽車配件代購合同示范文本4篇
- 個性化2024版中介服務居間合同樣本一
- 2025年度二零二五年度國際貿(mào)易保理業(yè)務合作協(xié)議4篇
- 個人貨款定金擔保合同2024年版3篇
- 二零二五版數(shù)據(jù)中心網(wǎng)絡安全審計與整改服務協(xié)議3篇
- 醫(yī)學脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實踐路徑
- 人教版(2024新版)七年級上冊英語期中+期末學業(yè)質(zhì)量測試卷 2套(含答案)
- 2024年湖北省中考數(shù)學試卷(含答案)
- 油煙機清洗安全合同協(xié)議書
- 2024年云南省中考數(shù)學試題(原卷版)
- 污水土地處理系統(tǒng)中雙酚A和雌激素的去除及微生物研究
- 氣胸病人的護理幻燈片
- 《地下建筑結(jié)構(gòu)》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過程質(zhì)量控制
評論
0/150
提交評論