ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:391.96KB ,
资源ID:10259508      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10259508.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的交通灯控制器设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的交通灯控制器设计.docx

1、基于FPGA的交通灯控制器设计综合课程设计报告 基于FPGA的交通灯控制器设计学 院 :通信与电子学院 专业班级 :电子科学与技术班 姓 名 : 学 号 : 指导老师 : 摘 要近年来,随着科技的飞速发展,FPGA的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,FPGA往往作为一个核心部件来使用,正在不断的应用到实际生活中,并且根据具体硬件结构软硬件结合,加以完善。 交通灯控制器在城市交通监管中起着极其重要的作用。传统的交通灯控制器基本是通过单片机或者PLC实现。本文介绍基于FPGA技术和Quartus II开发平台实现十字路口交通灯控制器的的一种

2、方案,实现了通过信号灯对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。利用VHDL硬件描述语言描述各模块程序,并在Quartus II环下进行编译、仿真,生成顶层文件后下载在FPGA器件FLEX EPF10K10LC84上进行验证。验证结果表明,设计基本实现了交通灯控制器所要求的控制过程,包括倒计时时间显示功能、特殊状态控制功能和主、支干道的红、黄、绿灯交替显示功能,表明本文所述的的设计方案正确。 本文结合交通灯控制器的设计过程,简单介绍了硬件描述语言VHDL的结构模型和设计流程、 VHDL设计的优点及该语言在数字系统设计 中的美好前景和重要地位。

3、关键词:FPGA,交通灯控制器,Quartus,VerilogHDL 目 录摘要 1 FPGA/CPLD概述 12 系统分析与总体方案 32.1系统分析 32.2 设计的总体方案 33 硬件电路设计 43.1分频器设计 43.2 状态控制电路设计 43.3计数器设计 53.4译码显示电路设计 54 robei软件程序设计 64.1扫描显示模块 64.2状态转换模块 74.3总体设计 114.4测试文件 125 程序仿真与分析 125.1 仿真结果 125.2 仿真结果分析 146 心得体会 16参考文献 17附录 181 FPGA/CPLD概述随着世界范围内城市化和机动化进程的加快,城市交通越

4、来越成为一个全球化的问题。城市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日趋加重,交通事故频繁,环境污染加剧等问题普遍存在。目前,全国大中城市普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给人民的生命财产安全带来了极大的损失。如何解决城市交通问题已成为全社会关注的焦点和大众的迫切呼声。探究城市交通发展中存在问题的原因,无论是从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。城市交通控制系(UTC ,Urban Traffic Control System)是现代城市智能交通系统(IDJ ,Intelligent transport system)

5、的组成之一,主要用于城市道路交通的控制与管理。城市平交路口实现交通信号控制是城市交通管理现代化的基本标志之一,是提高交通管理效能的重要技术手段。路口信号控制器是控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。各种交通控制方案,最终都要由路口信号控制器来实现。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,EDA技术的发展和应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域的重要性日益突出。利用EDA技术设计交通灯来完成这个需求就显的更加迫切

6、,同样也是非常的实用和合理。FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在PAL,GAL等逻辑器件的基础上发展起来的。同以往的PAL,GAL相比较FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA/CPLD上就是一个子系统部件。这种芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎。比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他们开发较早,占用了较大的PLD市场。FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特点外,还具有以下几个优点:随着VLSI(超大集

7、成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA/CPLD芯片的规模也越来越大,其单片逻辑门数已达上百万门,它所实现的功能也越来越强,同时也可以实现系统集成,即片上系统SOC。FPGA/CPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承担芯片风险和费用,设计人员只需在自己的实验室就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,FPGA/CPLD的资金投入就少,减少了潜在的花费。用户可以反复的编程,擦除,使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。FPGA/CPLD软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人

8、员在很短的时间内就可完成电路的输入,编译,优化,仿真,直至最后芯片的制作。当电路有少量的改动,更能显示FPGA/CPLD的优势。在线可编程技术(ISP)使得使用FPGA/CPLD的产品可以做到远程升级。 2课程设计总体方案2.1系统分析 通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿),三个灯能够按顺序依次亮灭。而且要求绿灯亮转红灯亮之前要先转黄灯亮5秒,还要求三种灯的点亮时间能够以倒计时的形式显示出来。可以用verilog HDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。使用基于FPGA的方法具有周期短、使用灵活、易于修改

9、等明显的优点。而且,随着FPGA器件,设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。未来使用FPGA器件设计的产品将出现在各个领域。因此此次的交通灯控制器将基于FPGA的设计方案来实现所需要的功能。 2.2 设计的总体方案 根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图3.1所示:图2.2 系统的框图3 硬件电路设计3.1分频器设计 分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。具体实物模块如图:图3.1 分频器模块3.2 状态控制

10、电路设计状态控制器的作用是根据计数器的计数值控制各方向上发光二极管的亮、灭,当计时时间到达,状态控制器就响应,自动跳转到下一个状态。此外,当检测到特殊情况(EMI =1)发生时,无条件点亮红灯的二极管(急救灯按下EMI=1,则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。具体实物模块如图:图3.2控制电路模块3.3计数器设计这里需要的计数器的计数范围为0-80。计到80后,下一个时钟沿回复到0,开始下一轮计数。此外,当检测到特殊情况(EMI =1)发生是,计数器暂停

11、计数,而系统复位信号RESET则使计数器异步清零。图3.3计数器模块3.4译码显示电路设计根据状态控制器所控制的状态和计数器的计时时间,选择当前状态下的显示器,使显示器输出当前状态下的数码管亮、灭指令,其中数码管的显示采用动态扫描显示。具体实物模块如图:图3.4译码显示电路模块4 robei软件程序设计4.1扫描显示模块: /*扫描显示*/parameter _0 = 7b1000000,_1 = 7b1111001,_2 = 7b0100100,_3 = 7b0110000,_4 = 7b0011001,_5 = 7b0010010,_6 = 7b0000010,_7 = 7b1111000

12、,_8 = 7b0000000,_9 = 7b0011000;reg 6:0rTen_SMG_Data;initial beginrTen_SMG_Data = 7b0000000;endalways ( posedge clk or negedge nrst )if( !nrst )beginrTen_SMG_Data = 7b1111111;endelsecase( ten_data )4d0 : rTen_SMG_Data = _0;4d1 : rTen_SMG_Data = _1;4d2 : rTen_SMG_Data = _2;4d3 : rTen_SMG_Data = _3;4d4

13、 : rTen_SMG_Data = _4;4d5 : rTen_SMG_Data = _5;4d6 : rTen_SMG_Data = _6;4d7 : rTen_SMG_Data = _7;4d8 : rTen_SMG_Data = _8;4d9 : rTen_SMG_Data = _9;endcase/*/reg 6:0rOne_SMG_Data;initial beginrOne_SMG_Data = 7b0000000;endalways ( posedge clk or negedge nrst )if( !nrst )beginrOne_SMG_Data = 7b1111111;

14、endelsecase( one_data )4d0 : rOne_SMG_Data = _0;4d1 : rOne_SMG_Data = _1;4d2 : rOne_SMG_Data = _2;4d3 : rOne_SMG_Data = _3;4d4 : rOne_SMG_Data = _4;4d5 : rOne_SMG_Data = _5;4d6 : rOne_SMG_Data = _6;4d7 : rOne_SMG_Data = _7;4d8 : rOne_SMG_Data = _8;4d9 : rOne_SMG_Data = _9;endcase/*/assign ten_smg_da

15、ta = rTen_SMG_Data;assign one_smg_data = rOne_SMG_Data;/*/4.2状态转换模块:/*状态转换*/parameter state_0 = 2b00,state_1 = 2b01,state_2 = 2b10,state_3 = 2b11;reg 1:0CS;reg 1:0flag;reg 3:0count_H , count_L;reg 3:0count_H1 , count_L1;reg ECS;reg2:0light_zhu; /light_zhu0 ?light_zhu1 ?light_zhu2 ?reg2:0light_zhi; /

16、light_zhi0 ?light_zhi1 ?light_zhi2 ?initial beginCS = 2b00;flag = 2b00;ECS = 1;count_H = 4b0000;count_L = 4b0000;count_H1 = 4b0000;count_L1 = 4b0000;light_zhu = 3b000;light_zhi = 3b000;endalways ( posedge clk_1Hz or negedge nrst )if(!ECS)beginECS = 1;endelsebeginif( !nrst )beginCS = state_0;flag = 2

17、b00;state_0_init;endelsecase( CS )state_0: if( flag = 2b00 ) /状态0, 35sbeginif( !count_H & ( count_L = 4b0110 ) ) /5sbeginflag = 2b01;CS = state_1;state_1_init; /state_1endelse if( !count_L )begincount_L = 4b1001;count_H = count_H-1;endelsebegincount_L = count_L-1;endif( !count_L1 )begincount_L1 = 4b

18、1001;count_H1 = count_H1-1;endelsebegincount_L1 = count_L1-1;endendstate_1: if( flag = 2b01 ) /状态1,5sbeginif( !count_L )beginflag = 2b10;CS = state_2;state_2_init; /状态2endelsebegincount_L = count_L-1;count_L1=count_L;ECS = 0;endendstate_2: if( flag = 2b10 ) /状态2,25sbeginif( !count_H & ( count_L = 4b

19、0110 ) ) /5sbeginflag = 2b11;CS = state_3;state_3_init; /state_3endelse if( !count_L )begincount_L = 4b1001;count_H = count_H-1;endelsebegincount_L = count_L-1;endif( !count_L1 )begincount_L1 = 4b1001;count_H1 = count_H1-1;endelsebegincount_L1 = count_L1-1;endendstate_3: if( flag = 2b11 ) /状态3,5sbeg

20、inif( !count_L )beginflag = 2b00;CS = state_0;state_0_init; /状态0endelsebegincount_L = count_L-1;count_L1 = count_L;ECS = 0;endenddefault: beginflag =2b00;CS = state_0;endendcaseend/*/task state_0_init;begin/主干道绿灯45秒只干道count_H = 4b0100; /高位为4count_L = 4b0101; /低位为5count_H1 = 4b0101; /高位5count_L1 = 4b

21、0000; /低位0light_zhu = 3b100; /light_zhu0:0 , light_zhu1:0 , light_zhu2:1light_zhi = 3b001; /light_zhi0:0 , light_zhi1:0 , light_zhi2:1endendtask/*/*/task state_1_init;begin/黄灯5秒count_H = 4b0000; /高位为0count_L = 4b0101; /低位为5count_H1 = 4b0000;count_L1 = 4b0101;light_zhu = 3b010;light_zhi = 3b001;enden

22、dtask/*/task state_2_init;begin/主干道红灯25秒count_H = 4b0010; /高位为2count_L = 4b0101; /低位为5count_H1= 4b0010; /高位为3count_L1 = 4b0000; /低位为0light_zhu = 3b001;light_zhi = 3b100;endendtask/*/task state_3_init;begin/5秒黄灯count_H = 4b0000; /高位为0count_L = 4b0101; /地位为5count_H1 = 4b0000;count_L1 = 4b0101;light_zh

23、u = 3b001;light_zhi = 3b010;endendtask/*/assign one_data = count_L;assign ten_data = count_H;assign one_data1 = count_L1;assign ten_data1 = count_H1;assign led_zhu = light_zhu;assign led_zhi = light_zhi;/*/ 4.3总体设计:4.4测试文件:reg clk_signal;initial beginclk_signal=0;clk=0;nrst=0;#1nrst=1;#500 $finish;e

24、ndalways begin#1 clk_signal=clk_signal;clk=clk_signal;end5 程序仿真与分析5.1 仿真结果利用robei软件对本程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件。仿真结果如下图所示:总体:主干道:支干道:5.2 仿真结果分析通过写测试文件设置仿真时间,就可以得到如上所示的仿真波形图。由仿真波形图可以看出波形是由clk信号触发而显示出各个状态的。nrst低电平信号输入时,所有交通灯都变为红灯状态。由仿真波形图还可以清楚的看出各时间段每个交通灯的状态。要得到正确的仿真波形图就不许设定合适的时间信号clk值。如果clk值

25、设置的太小则交通灯状态变化得太快无法分辨,如果clk值设置得太大则交通灯状态转换缓慢,效果不明显。其次,要设定clk高低电平的时间,如果没有设定clk脉宽就不可能触发而得到仿真图。最后,就是要设置nrst高电平信号。心得体会首先在这里,要感谢詹华群老师的授课和小强同学的指导,感谢学院开设基于FPGA的交通灯控制器设计这门课程设计,给了我们一次充分锻炼,将理论知识付诸实践的机会。刚开始对FPGA都不怎么熟悉对robei软件也不怎么熟悉,还以为这次交通灯控制器的设计是跟我们做的EDA用QuartusII做的交通灯实验差不多,但经过一番了解还是发现有许多不同,只能说是相互关联。大学三年,我们学习了很

26、多工程技术的知识,做过一些专业实训和实验,但却经常性的忽视在这些课程中的课程设计这个关键环节,认为它们只不过是走过场,抄抄代码,写写报告就够了。其实不然,课程设计本身就是一次做项目的经历,它要求你严格按照项目规程操作,在时间和进度上,都要有项目意通过这段时间老师对本次课程设计的讲解和自己对robei的熟悉和学习,发现了自己EDA上的很多不足,发现了很多知识上的漏洞。同时也看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。这次课程设计让我学到了很多,不仅是巩固了先前学的quartus的使用,而且也学会了新的robei软件的使用,通过两个软件的对比更进一步加强了对FPGA工作原理的理

27、解、提升的自己对verilog的编程能力。还有一点是我们做任何事情都无法缺少的,那就是细心认真、耐心调试。很多知名的程序在正式发布之前都会有、等测试版本,为的就是在反复的试验中发现那些程序员无法发现的小BUG。此次设计我们就深深地体会到了,由于编程的时候没有做到足够的细心,导致一串代码弄混了。但是密密麻麻的英文字母混在一起,我始终没有发现。最终在调试的时候,就出现了问题。只知道出现了问题,就是不知道到问题的根源在哪里,好长时间都没有找出问题的所在。这也让我真正的明白了,科学的严谨性,它不允许出半点去对待差错,否则后果会是比较麻烦的。通过分析将交通灯控制系统分为四个模块:分频模块、计时模块、控制

28、模块和显示译码模块。信号灯在计数器的计数信号的控制下各个工作状态之间的转换非常明确,所以可利用状态机来对控制模块进行设计。计数器采用倒计时的方式,由于使用7段数码显示器来模拟时间显示,所以需要将计时模块的输出信号转化为数码显示器的驱动信号,中间涉及到十进制和二进制之间的转换。在设计中采用VerilogHDL语言设计交通灯控制系统,借助其功能强大的语言结构,简明的代码描述复杂控制逻辑设计,与工艺无关特性,在提高工作效率的同时达到求解目的,并可以通过VerilogHDL语言的综合工具进行相应硬件电路生成,具有传统逻辑设计方法所无法比拟的优越性。在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真却比较难实现正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序。实践证明,在编写一个较复杂的程序时,一开始一定要先把各个模块分析透彻,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1