(推荐下载)基于FPGA的智能交通灯设计附VHDL语言程序_第1页
(推荐下载)基于FPGA的智能交通灯设计附VHDL语言程序_第2页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(完整 word 版)基于 FPGA 的智能交通灯设计附 VHDL 语言程序编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我 们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(完整word版)基于FPGA的智能交通灯设计附VHDL语言程序)的内容能够给您的工作和学习带来便利。同时也 真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步, 以下为(完整word版)基于FPGA的智能交通灯设计附VHDL语言程序的全部内容。目录第一章

2、设计原理.1仁1使用VHDL语言实现对FPGA器件的编程.12使用的设计工具.1仁2。1硬件部分.1仁2.2软件部分.11.3软件框图.2仁4红绿灯拓展模块.2第二章程序设计及分析.32。1分频器器件的设计.32.2数码管显示驱动器件的设计.42。3顶层器件设计.42。3. 1按键消抖.42。3.2数码管扫描显示.52.3。3 24小时时钟.62.3。4改变时间设定.62.3。5交通灯主控程序.7第三章使用说明及实验结果.83.1使用说明.83. 2实验结果.9第四章结论与体会.12附录程序源码.13第一章设计原理1o 1使用VHDL语言实现对FPGA器件的编程FPGA(Field Progr

3、ammabIe Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电 路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克 服了原有可编程器件门电路数有限的缺点。对于目前的FPGA器件,可以使用硬件描述语言(VeClog或VHDL)完成电路 设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流.这些可编辑元件可以被用来实现一些基本的逻辑门电路 (比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程 式.1.2使用的设计工具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个数码管以及5个按键,同时将丰富的I/O口用排针进行了 引出。从系统资源以及运行速度的方面考虑,均足以完成智能交通灯的设计。1o 2o 2软件部分Quartus II是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、Ver i logHDL以及AHDL (Alt

5、era Hardware支持Descr ipt ion Language)等多种 设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置 的完整PLD设计流程。VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。具有 设计灵活、支持广泛、易于修改、独立于器件的设计或工艺等优秀的特性十分适合于对FPGA器件进行编程。1 3软件框图本系统包含一个顶层以及两个子器件(分频器以及数码管显示驱动)。分频器将系统时钟分为1000Hz, 1Hz等待信号供顶层程序使用。顶层包含了整个系统数码管亠图1o 1关彳处直扌顶层*Processl:按铤5消抖.数码管模式选择(s6Proce

6、ss2:按铤1 2 3 4消抖、改变预设时间(s2 s3 s4 s5)Process3:红绿:灯点亮控制丿Process4:红绿灯左控卅序Processo:数码管扫描计时Process6:数码管不冋模式卜的显/jProcess?: 24小时时钟卩匚LED灯,丁ED分频瓠Processl:分出Ims的时钟信号卩Process2:分出50ms的时钟信号卩Process3:分出Is的时钟佶号卩Process4:分出lmin的时钟佶号卩Processor分岀lh的时钟佶号数码管显示驱动Processl:根据输入的移型信号以 及位选信号驱动数码管显示-0, 1 293, 4 596: 71 8, 9,

7、AB, C, D, E 21 o 4红绿灯拓展模块为了达到更好的人机交互效果, 本系统将红绿灯在电路板上通过不同的颜色 的LED进行实物化。模块原理图如下:PCB设计如下:第二章程序设计及分析2o 1分频器器件的设计本系统将分频器单独设置为一个器件,目的是便于对时间倍率进行修改以及 方便调用。具体思路如下:(以1ms为周期的输出信号为例)process (clk_in)一一1ms系统时圭中输入beginif rising_edge (elk in) then-当检测到时钟信号为上丹沿时if (data_ms=25000) ehen-由计数需实现分频的功能,-由SOM/(25000*2)得到信号

8、翻转周期。-修改的判断値就可以实现不同的分频比data ms=0;Q_ms=not Q_ms;-茁暂存状态重进行翻转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顶层器件设计2.3.1按键消抖本系统对于按键采取了消抖的处理办法,可以有效的增加稳定性消抖的实现 原理基于计数器,当检测到有按键按下则开始计数,当计数达到设定值时给出按 键按下的信号并执行相应功能,其中key5实现模式选

9、择,其余按键实现对时间 设定的更改。process (sysclk:, key5)-按键 5 消抖+数码管模式选择(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数码管扫描显示实验板采用了四个共阳的数码管,若需要让每个数码管都显示不一样的内容, 则需要对数码管进行扫描显示。本系统采用1000Hz的频率对数码管进行扫描显 不,实际效果可以稳定的显不而不会出现闪烁的现象。程序设计方面采用

11、了两个process,分别对数码管位选进行扫描以及输入段 选信号pxoce3s (tirtp_si. data_counc_5eg) -生成数 码管位选扫描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)数码管扫描各模式显示样式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、小时时钟为了实现白天与夜间的模式切换效果,需要加入24小时制的时钟.本系统对于 时钟的实现依然基于计数器。具体流程如下:对分频器输出的分钟信号进行检测,当检测到上升沿时执行计数,当达到该 位最大值时执行进位与清零。process (sysciK)一一24小时时神计数beginif rising_edge |tnp_sig_min) then辎入信号为分时,当分即输入信号为上升沿时術发da* a_itin_low then分轴怅位达到駅大伯,执行邊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改变时间设定本程序实现了对行人通行时间,汽车通行时间以及夜间时间段的设定。设定 方式为由按键实现加减。主要代码已经内嵌于按键消抖程序中。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 (-数码管int_in二tmp_seg7data, data_out = seg7data);process (sysclk, key5) -按键5消抖+数码管模式选择

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消抖+改变设定时间(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;行人通行led_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;行人通行led_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) -生成数码管位选扫描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)数码管扫描各模式显示样式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,白天黑夜设定时间显示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小时时钟计数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时触发 _data_min_low二data一min_low+1; if(da

35、ta_min_low二9)then data_min_low二0;输入信号为分钟,当分钟输入信号为上升沿开始计数一分钟低位达到最大值,执行进位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系统时钟输入beg i nif r ising_edge (clk_in) then-当检测到时钟信号为上升沿时if(data_ms=25000) then -由计数器实现分频的功能,-由50M/ (25000*2)得到信号翻

38、转周期。修改data_ms的判断值就 可以实现不同的分频比data_ms二0;Q_ms=not Q_ms;对暂存状态量进行翻转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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论