基于FPGA的交通灯控制课程设计_第1页
基于FPGA的交通灯控制课程设计_第2页
基于FPGA的交通灯控制课程设计_第3页
基于FPGA的交通灯控制课程设计_第4页
基于FPGA的交通灯控制课程设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、XXXXXX学院题目:基于FPGA的交通灯控制课程设计学院:信息工程学院班级:设计人:指导教师:设计时间:2016年6月16日目录一.摘要.1二.概述.11.FPGA的应用.1三.系统总体设计.2 1.设计任务.2 2.系统设计流程.2四.硬件设计.4 1.控制模块.5 2.时钟分频模块.5 3.分位译码模块.5 4.计数模块.6五.实验程序设计.6六.程序仿真与分析.13 1.仿真结果.13 2.仿真结果分析.14七.心得体会.14八.参考文献.15九.附录.15一.摘要 EDA工具对于电子设计人员来说极其重要,它可以在电子设计的各个阶段、层次进行计算机模拟验证,确保设计的准确性,可缩短设计

2、周期,降低设计成本。目前交通灯广泛应用于道路交通建设中。交通灯可以实现十字路口红绿灯的自动控制。本文设计一个十字路口交通灯控制电路,要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。为了对交通灯系统进行精确控制,采用FPGA实验板,在Quartus软件环境下,分别实现脉冲发生模块、状态定时模块、交通灯显示模块、时间显示模块,进行仿真实验和硬件下载,获得的测试结果满足设计要求。 基于FPGA的交通灯设计系统具有可靠性强、实时快速擦写、运算速度高、故障率低、电路简单,且体积小的特点。使用QuartusII软件作为开发平台;采用自顶向下的设计思路对系

3、统进行模块化设计和综合,并通过波形仿真和硬件实现两种方式实现并验证交通灯的功能。二.概述 FPGA(FieldProgrammableGateArray),即现场可编程门阵列,它是在可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。随着电子技术的发展,特别是大规模集成电路和计算机技术的研制和发展,让电子产品设计有了更好的应用市

4、场,实现方法也有了更多的选择,而电子电路的设计却变得越来越复杂,使用“语言”进行电子设计已成为一种趋势。现代电子系统设计方法是设计师自己设计芯片来实现电子系统的功能,将传统的固件选用及电路板设计工作放在芯片设计中进行。在这些专业化软件中,EDA(Electronic Design Automation)具有一定的代表性,EDA技术是一种基于芯片的现代电子系统设计方法。基于EDA技术的现场可编程门阵列(FPGA),在数字系统设计和控制电路中越来越受到重视。VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。基于E

5、DA技术的现场可编程门阵列(FPGA)电路,提出现场可编程门阵列(FPGA)是近年来迅速发展的大规模可编程专用集成电路(ASIC),在数字系统设计和控制电路中越来越受到重视。VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。目前以硬件描述语言所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。1.FPGA的应用FPGA的应用可分为三个层面:电路设计,产品设计,系统设计。a.电路设计 连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领域也是FPGA应用的基石

6、。事实上在电路设计中应用FPGA要求开发者要具备相应的硬件知识(电路知识)和软件应用能力(开发工具)。b.产品设计 把相对成熟的技术应用到某些特定领域开发出满足行业需要并能被行业客户接受的产品。这方面主要是FPGA技术和专业技术的结合问题,重点在性能,FPGA技术在这个领域是一个实现手段,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计。c.系统级的应用 系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统如用Xilinx V-4, V-5系列的FPGA,实现内嵌POWER PC CPU, 然后再配合各种外

7、围功能,这个平台上跑LINIX等系统这个系统也就支持各种标准外设和功能接口了,这对于快速构成FPGA大型系统来讲是很有帮助的。三.系统总体设计1.设计任务设计一个十字路口交通控制器,方向分为东南西北四个方向。东西方向的红绿灯状态一样,南北方向的红绿灯状态一样。每个方向上,有四盏灯,分别是左转灯、红灯、绿灯和黄灯。左拐灯亮表示左转车辆可以通行;红灯亮表示左转和直行车辆禁行;绿灯亮表示直行车辆和右转的车辆可以通行;黄灯亮表示左转和直行的车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间倒计时。2.系统设计流程提出系统设计要求需求分析模块化方案设计底层电路设计-模块方案设计顶层电路设计-原理

8、图描述+各模块连接功能仿真FPGA整体方案编译仿真FPGA整体方案设计完成硬件连接和运行时序仿真FPGA整体方案设计实现 系统分析通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2-1所示)。还要求四种灯的点亮时间能够以倒计时的形式显示出来。可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。经分析,系统的总体结构可以描述下述的方框图:

9、Hold倒计时数字及闪烁控制信号七段数码管七段数码管驱动电路Reset分频电路分位译码电路红、黄、绿发光二极管控制器计数器在FPGA设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:复位开关信号reset;外部时钟信号clk。LED七段显示数码管的输出信号count1(6downto0),count2(6downto0),count3(6downto0),count4(6downto0);在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确

10、定使用哪些模块以及这些模块之间的关系。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。 时钟分频模块:把555多谐振荡器发出的较高频率脉冲用分频电路的到较第频率的时钟信号,本电路通过三次10分平分别得到10Hz、1Hz的时钟信号。控制器电路:根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。当检测到手动控制信号(Con=1)时,执行手动控制;计数器电路:这里需要的计数器的计数范围为089。计到89后,下一个时钟沿升为1时,开始下一轮计数,此外当系统复位信号(Reset=1)使计数器异步清0。手动信

11、号(Con=1)使系统清0。分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如20分为2和0,7分为0和7)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阳极数码管,因此译码电路输出逻辑数值0点亮二极管,译码电路输出逻辑数值1熄灭二极管。四.硬件设计1.控制模块控制模块的作用是根据计数器的数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到特殊情况(EMI =1)发生时,无条件点亮红灯的二极管(急

12、救灯按下EMI=1,则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。2.时钟分频模块分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。将频率变为1Hz的脉冲波,从而得到周期为1s的脉冲波。3.分位译码模块(1)因为控制输出的倒计时数值可能是1位或2位十进制数,所以七段数码管的译码电路前要加上分位电路(即将其分为两个1位的十进制数,如25分为2和5)。(2)分位模块输出的计数值将十位数和个位数分别存到数组里,这样就可以得到两个路口倒

13、计时时间显示的十位和个位信号。4.计数模块实现计数为0-80计数,计数到80后,下一个时钟沿回复到0,开始下一计数。此外当检测到特殊情况(hold=“1”)发生时,计数器暂停计数,无条件点亮红色的发光二极管。而系统复位信号Reset则使计数器异步清零。五.实验程序设计1.顶层模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydingcengisport(clkd,resetd,cond,con1d:instd_logic;count1:outstd_logic_vector(6downto

14、0); 七段数码管显示count2:outstd_logic_vector(6downto0); 七段数码管显示count3:outstd_logic_vector(6downto0); 七段数码管显示count4:outstd_logic_vector(6downto0); 七段数码管显示reda, yellowa,greena,lifta:out std_logic; a发光二极管输出redb, yellowb,greenb,liftb:out std_logic); b 发光二极管输出endentitydingceng;architectureoneofdingcengis2.实体定义c

15、omponent clk_10脉冲输入port(clk:instd_logic;) - 时钟频率为250KHz.clk_div10:outstd_logic); -十分频后脉冲输出endcomponent;componentcounter3.计数模块port(clk0:instd_logic;) -脉冲信号输入con:instd_logic; -手动控制信号reset:instd_logic; -复位信号countnum:buffer integerrange0to89); -0-89计数输出。endcomponent;a4.控制模块componentcontrollerport(clk1:i

16、nstd_logic;)-脉冲信号输入con1:instd_logic; - 手动控制信号con2:instd_logic; -状态控制信号countnum:inintegerrange0to89 0-89计数输入;numa,numb:outintegerrange0to25; -东西、南北两个方向的倒计时数值输出ra,ga,ya,la:outstd_logic); - ra,ga,ya,la发光二极管输出rb,gb,yb,lb:outstd_logic); - rb,gb,yb,lb 发光二极管输出endcomponent;a5.分位模块componentfenweiport(numin:i

17、nintegerrange0to25; - 倒计时数值输入numa,numb:outintegerrange0to9); -将数值分为2个1位的十进制输出endcomponent;componentyimaport(clk2:instd_logic;bb:inintegerrange0to9;ya:outstd_logic; -BCD码输出yb:outstd_logic; -BCD码输出yc:outstd_logic; -BCD码输出yd:outstd_logic; -BCD码输出ye:outstd_logic; -BCD码输出yf:outstd_logic; -BCD码输出yg:outstd

18、_logic); -BCD码输出endcomponent;signala,b,c,d:std_logic;signalww:integerrange0to89;signalyy1,yy2:integerrange0to25;signaltt1,tt2,tt3,tt4:integerrange0to9;beginu0:clk_10portmap(clk=clkd,clk_div10=a);u1:clk_10portmap(clk=clkd,clk_div10=b);u2:clk_10portmap(clk=b,clk_div10=c);u3:counterportmap(clk0=c,con=c

19、ond,reset=resetd,countnum=ww);u4:controllerportmap(clk1=c,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);u5:fenweiportmap(numin=yy1,numa=tt1,numb=tt2);u6:fenweiportmap(numin=yy2,numa=tt3,numb=tt4);u7:yimaportmap(c

20、lk2=b,bb=tt1,ya=count1(0),yb=count1(1),yc=count1(2),yd=count1(3),ye=count1(4),yf=count1(5),yg=count1(6);u8:yima),yf=count2(5),yg=count2(6);u9:yima3(4),yf=count3(5),yg=count3(6);u10:yima4(4),yf=count4(5),yg=count4(6);endarchitectureone;b1.实体定义libraryieee;useieee.std_logic_1164.all; useieee.std_logic_

21、arith.all;useieee.std_logic_unsigned.all;entityclk_10is-脉冲输入port(clk:instd_logic; - 时钟频率为250KHzclk_div10:outstd_logic); -十分频后脉冲输出endclk_10; -脉冲输出architectureoneofclk_10issignalclk_temp:std_logic;beginprocess(clk)variablecounter:std_logic_vector(2downto0);constantmd:std_logic_vector(2downto0):=101;be

22、ginif(clkeventandclk=1)thenif(counter=md)thencounter:=(others=0);clk_tempb,bb=tt4,ya=count4(0),yb=count4(1),yc=count4(2),yd=count4(3),ye=countportmap(clk2=b,bb=tt3,ya=count3(0),yb=count3(1),yc=count3(2),yd=count3(3),ye=countportmap(clk2=b,bb=tt2,ya=count2(0),yb=count2(1),yc=count2(2),yd=count2(3),ye

23、=count2(4)clk_div10=clk_temp;endone;b2.计数模块libraryieee;useieee.std_logic_1164.all;entitycounterisport(clk0:instd_logic;) -脉冲信号输入con:instd_logic; -手动控制信号reset:instd_logic; -复位信号countnum:bufferintegerrange0to89); -复位信号endcounter; architectureoneofcounterisbeginprocess(reset,clk0)beginifreset=1thencoun

24、tnum=0;elsifrising_edge(clk0)thenifcon=1thencountnum=0;elseifcountnum=89thencountnum=0;elsecountnum=65thennumb=90-countnum;numa=70thenaa:=00011000;elseaa:=00101000;numa=45thennumb=65-countnum;numa=50thenaa:=10000100;elseaa:=10000010;numb=20thennuma=45-countnum;numb=25thenaa:=01001000;elseaa:=0010100

25、0;numa=0thennuma=20-countnum;numb=5thenaa:=10000100;elseaa:=10000010;numb=5-countnum;endif;endif;elseifcon1=1thenuma=0;numb=0;ifcon2=1thenifm=7thenm=0;elsem=m+1;endif;endif;ifm=0thenaa:=01001000;elsifm=1thenaa:=00101000;elsifm=2thenaa:=10000100;elsifm=3thenaa:=10000010;elsifm=4thenaa:=00011000;elsif

26、m=5thenaa:=00101000;elsifm=6thenaa:=10000001;elsifm=7thenaa:=10000010;endif;endif;endif;endif;ra=aa(7);ga=aa(6);ya=aa(5);ga1=aa(4);rb=aa(3);gb=aa(2);yb=aa(1);gb1=20thennuma1:=2;numb1:=numin-20;elsifnumin=10thennuma1:=1;numb1:=numin-10;elsenuma1:=0;numb1:=numin;endif;numa=numa1;numbtemptemptemptempte

27、mptemptemptemptemptemptemp=1111111;endcase;endprocess;ya=temp(0);yb=temp(1);yc=temp(2);yd=temp(3);ye=temp(4);yf=temp(5);yg=temp(6);endone;六.程序仿真与分析1仿真结果利用QUARTUS软件对本程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件。仿真结果如图所示:2仿真结果分析 通过设定clk值以及start和EMI的初值,就可以得到仿真波形图。EMI高电平信号输入时,所有交通灯都变成红灯状态。由仿真波形图还可以清楚的看出各时间段每个交通灯

28、的状态。要得到正确的仿真波形图就不许设定合适的时间信号clk值。如果clk值设置的太小则交通灯状态变化的太快无法分辨,如果clk值设置的太大则交通灯状态转换缓慢,效果不明显。其次,要设定start初值,如果没有设定start初值就不可能触发而得到仿真图。最后,就是要设置一EMI高电平信号来检测紧急情况下的交通灯的状态。七.心得体会通过这次的FPGA课程设计,我发现了自己的很多不足,发现了很多知识上的漏洞,同时也看到了自己的实践经验还是比较缺乏,理论联系实际的能力还需提高。这次课程设计让我学到了很多,不仅巩固了先前学的FPGA技术的理论知识,而且也培养了我的动手能力。”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论