基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】

基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】

ID:463444

大小:1.75 MB

页数:45页

时间:2017-08-05

上传者:U-944
基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】_第1页
基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】_第2页
基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】_第3页
基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】_第4页
基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】_第5页
资源描述:

《基于FPGA的交通灯控制系统设计【开题报告+文献综述+毕业论文】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

本科毕业论文系列开题报告电气工程及其自动化基于FPGA的交通灯控制系统设计一、课题研究意义及现状随着社会经济的发展,城市交通问题越来越引起人们的关注。当今社会,人们平均生活水平提高,私家车也越来越多。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。实现路口交通灯系统的控制方法很多,继电器、可编程序控制器PLC、单片机等方案来实现,继电器价格便宜,但安装复杂,事故较多。PLC接线方便,容易检修,但价格昂贵。单片机的编程麻烦,可读性差,实时控制不太占优势,但成本低,控制方式比较灵活。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难FPGA普遍被认为是建构原型和开发设计的最快途径。FPGA硅芯片由于能够进行编程、除错、再编程和重复操作,还可透过其现场编程能力延长产品在市场上的寿命。FPGA入门套件是由FPGA供货商提供的完整设计解决方案,能让设计人员提高开发效率,实现最快的上市时间。FPGA既缩短了研发周期,又大大节约了成本。因此,基于FPGA设计的交通灯控制系统具有电路简单、可靠性强、运算速度高的特点。系统通过功能扩展、接口扩展可同时控制多个路口的红绿灯变换,并实现具有根据需要实时快速擦写应用程序的功能。本次毕业设计是设计一个基于FPGA的交通灯控制系统。要求交通灯控制系统实现自动控制和手动控制其红绿灯的变化,并结合人行道通行情况进行相关设置,除了指示灯提示,更增加了提示音。二、课题研究的主要内容和预期目标1.主要内容 结合实时现场设计一个交通等控制系统,其中主控部分应用FPGA芯片来实现。系统总体指标及功能要求:分别显示道路东西和南北通行和禁止的倒计时时间;设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒;交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果;红、绿、黄灯显示的次序应符合实际交通道路控制的要求;结合人行道通行情况进行相关设置(指示灯,声音等);其他相关设置,需综合考虑各个环节设计,体现优化。2.预期目标1)根据设计任务,结合实际过程应用确定:方向分为东南西北四个方向。东西方向的红灯和绿灯状态一样,南北方向的红绿灯状态一样。每个方向上,有四盏灯,分别是左转灯、红灯、绿灯、和黄灯。左拐灯亮表示左转车辆可以通行;红灯亮表示左转和直行车禁止通行;绿灯亮表示直行车辆和右转车辆可以通行;黄灯亮表示左转和直行的车辆即将禁止通行;倒计时显示器用来显示允许通行或禁止通行的时间倒计时。设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。结合人行道通行情况进行相关设置,除了指示灯提示,更增加了提示音。2)主控部分:考虑设计的系统主要由分频模块、倒计定时模块、主控制模块、报警提示模块和译码显示模块构成。其中分频模块主要将系统输入的基准时钟信号转换为1HZ的激励信号,驱动倒计定时模块和主控制模块。主控模块根据计数器的计数情况对交通灯的亮灭及持续时间进行控制,并通过分位电路将灯亮时间以倒计时的形式通过数码管显示出来。倒计定时模块作为外部LED显示模块倒计时初始值的预设与传递,报警提示模块用于主次干道闯红灯记录警示,译码显示模块是个外部LED的显示模块,显示红绿灯倒计时间。3)课题要求要求完成交通灯控制系统设的软件设计和调试,并最终完成软硬件结合通过,完成实现自动控制和手动控制其红绿灯的变化。运用模块化的思想设计实现交通灯控制控制系统设计的全部过程,包括模块的划分和相应模块的VHDL设计实现。我选择使用FPGA来制作交通灯控制系统,不但要求交通灯控制系统实现自动控制和手动控制其红绿灯的变化,并且要求结合人行道通行情况进行相关设置,更增加了提示音和指示灯提示。使用FPGA来制作交通灯控制系统,不但具有了FPGA的稳定性和成熟性,且具有控制能力。 4)如果条件允许,可以做出相应的控制模型,也可以增加一定的智能控制。三、课题研究的方法及措施1.研究方法先阅读相关资料,结合原有的设计方案,确定自己的实现方案。结合实施方案将系统主要分为:分频模块、倒计定时模块、主控制模块、报警提示模块和译码显示模块。其中分频模块主要将系统输入的基准时钟信号转换为1Hz的激励信号,驱动倒计定时模块和主控制模块。主控模块根据计数器的计数情况对交通灯的亮灭及持续时间进行控制,并通过分位电路将灯亮时间以倒计时的形式通过数码管显示出来。2.研究措施1)收集查阅相关资料,了解不同的数据采集卡设计实现方法,比较现有FPGA,CPLD的相关方案,确定本课题研究和实现方案,然后对方案中的各单元进行了必要的分析和研究。通过对交通灯控制系统的了解分析将系统分为分频模块、倒计定时模块、主控制模块、报警提示模块和译码显示模块。其中分频模块使系统工作于同步状态下,将外部提供的40M的晶振频率进行分频,得到我们所需要的时钟信号;倒计定时模块作为外部LED显示模块倒计时初始值的预设与传递;主控制模块负责控制整个系统控制信号的采集与使能信号的适时输出;报警提示模块用于主次干道闯红灯记录警示;译码显示模块是个外部LED的显示模块,显示红绿灯倒计时间。红灯绿灯黄灯倒计时显示倒计时显示红灯绿灯黄灯交警指挥台人行道人行道2)加入人工控制端,即当遇有需进行交通管制等情形时,可以由交通警察来手工控制路口信号灯的转换,紧急状态显示灯开启,只允许主干道通行。3)通过在QuartusⅡ软件中的模拟仿真,验证了该电路可以实现预定功能 ,并将整体程序下载到目标FPGA器件,使用相应的硬件电路相配合,进行硬件调试,也验证了该电路工作情况良好,与软件仿真的结果完全相符合,说明我们所设计的交通信号灯控制电路通过了软件仿真和硬件的测试预定功能。四、课题研究进度计划1.2010年10月15日至2010年12月3日查阅交通控制系统课题相关的资料;进行方案的考虑和设计;完成开题报告、中、英文翻译和文献综述。2.2010年12月4日至2010年12月31日确定交通控制系统最佳设计方案;推算和确定有关参数设计;设计出总体实现软件的构架。3.2011年1月1日至2011年3月31日对交通控制系统单元模块进行仿真,调节参数并通过仿真;然后实现总设计图的仿真通过;完成软硬件综合调试。5.2011年4月1日至2011年4月24日制作好交通控制系统硬件模型和软件程序,完成毕业设计论文;做好答辩用的PPT,并作好答辩准备。五、参考文献教师指定:[1]周润景等.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].北京:电子工业出版社,2007年8月.[2]杨晓慧等.基于FPGA的EDA/SOPC技术与VHDL[M].北京:国防工业出版社,2007年10月.[3]王诚等.AlteraFPGACPLD设计(基础篇)[M].北京:人民邮电出版社,2005年7月.[4]StephenBrown,ZvonkoVranesic.FundamentalsofDigitalLogicwithVerilogDesign(2ndEdition)[M].NewYork:McGraw-Hill,2007,5.[5]Ming-BoLin.DigitalSystemDesignsandPractices:UsingVerilogHDLandFPGAs[M].NewYork:McGraw-Hill,2008,8.[6]徐光辉.基于FPGA的嵌入式开发与应用[M].北京:电子工业出版社,2006年9月.[7]文畅.基于FPGA/CPLD和VHDL语言的交通灯控制系统设计[J].电脑知识与技术(学术交流),2007,06-08.自己选择: [1]瞿逐春.EDA技术综合应用实例与分析[M].西安:西安电子科技大学出版社,2004年11月.[2]杨少军.基于DSP的移频机车信号分析研究与实现[D].武汉:武汉大学,2006.[3]余俊.基于FPGA的IDE协议实现的研究[J].电子科技.2008年9月,12(8)144~156.[4]任晓东.CPLD/FPGA高级应用开发指南[M].北京:电子工业出版社,2003年9月. 毕业论文文献综述电气工程及自动化基于FPGA的交通灯控制系统摘要:用VHDL语言设计交通灯控制系统,并在MAX+PLUSII系统对FPGA芯片进行下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积小。体现了EDA技术在数字电路设计中的优越性。关键词:VHDL硬件描述语言;可编程逻辑器件;FPGA;交通灯控制系统随着社会经济的发展,城市交通问题越来越引起人们的关注。当今社会,人们平均生活水平提高,私家车也越来越多。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。实现路口交通灯系统的控制方法很多,继电器、可编程序控制器PLC、单片机等方案来实现,继电器价格便宜,但安装复杂,事故较多。PLC接线方便,容易检修,但价格昂贵。单片机的编程麻烦,可读性差,实时控制不太占优势,但成本低,控制方式比较灵活。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难FPGA是在PAL、EPLD等可编程器件的基础上进一步发展的产物,又叫现场可编程门阵列。它解决了原有可编程器件门电路数有限和定制电路不足的缺点,是作为专用集成电路领域中的一种半定制电路而出现的。FPGA的使用非常灵活,同一片FPGA通过不同的编程数据可以产生不同的电路功能。FPGA在通信、数据处理、仪器、军事和航空航天等众多领域得到了广泛应用。FPGA有着功耗和成本低的特点,它将会进入更多的应用领域。基于FPGA的设计具有串、并行工作方式和高可靠性、规模大、标准产品无需测试等优点。因此,在EDA技术的基础上,利用FPGA的相关知识设计了交通灯控制系统,可以根据实际情况对灯亮时间进行自由调整,利用QuartusII软件平台对设计系统进行仿真,并将整体程序下载到目标FPGA器件下进行模拟实现,结果表明系统能够自动控制交通灯转变[3]。 传统的十字路口交通控制灯,通常是事先经过交通流量的调查。运用统计的方法将两个方向红绿灯的延时预先设置好。然而实际上交通流量的变化往往是不确定的,有的路口再不同的时段甚至可能产生很多的差异。即使是经过长期运行、适用的方案,仍然会产生这样的现象:绿灯方向几乎没有什么车辆,而红灯方向却排着长队等候通过。这种流量变化的偶然性事无法建立准确模型的,统计的方法已经不能适应迅猛发展的交通现状,需要有一种能够根据流量变化情况自适应控制的交通灯,这个应用FPGA对交通控制灯实现模糊控制来解决这种现象。本次所设计的交通信号灯控制电路,主要是结合设计任务要求和确定的实现方案,假设某个十字路口是由一条主干道和一条次干道组成,在每个方向设置红绿黄3种信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮允许行驶中车辆有时间停考到禁止线以外[4]。一般十字路口的交通灯都是最基本的交通信号灯,只是起到定时转换通行方向的作用,它的工作过程如下:(1)系统工作后,首先南北红灯亮并维持25s;与此同时,东西绿灯亮,并维持20s时间,到20s时,东西绿灯闪亮,闪亮3s后熄灭。(2)在东西绿灯熄灭时,东西黄灯亮并维持2s,然后东西黄灯熄灭,东西红灯亮,同时南北红灯熄灭,南北绿灯亮。(3)东西红灯亮并维持30s;与此同时,南北绿灯亮并维持25s;然后,南北绿灯闪亮3s后熄灭。(4)南北绿灯熄灭时,南北黄灯亮维持2s后熄灭;同时南北红灯亮,东西绿灯亮。至此,结束一个工作循环。整个系统以Controll_jt为核心控制器,可分为分频模块、倒计定时模块、主控制模块、报警提示模块和译码显示模块五个组成结构。其中分频模块使系统工作于同步状态下,将外部提供的40M的晶振频率进行分频,得到我们所需要的时钟信号;倒计定时模块作为外部LED显示模块倒计时初始值的预设与传递;主控制模块负责控制整个系统控制信号的采集与使能信号的适时输出;报警提示模块用于主次干道闯红灯记录警示;译码显示模块是个外部LED的显示模块,显示红绿灯倒计时间[8]。主控制模块是整个程序的控制中心,用于接收定时模块的定时信息和传感器输入信号,并对信息整合判断后,输出两路红绿黄灯的显示信息和定时模块的使能信息.其中红绿灯信息高电平灯亮,低电平不亮,清零时灯同步量。在这最基本的交通灯上,可以增加一些特殊的控制,如: (1)在每个路口安装传感器,传感器收到的信息传递至FPGA。当车辆进入路口经过第一个传感器时,使统计数加1;经过第二个传感器2出路口时,使统计数减1,其差值就是该路口某个方向上车辆的滞留量(动态值),可以与其它方向的值进行比较,据此作为调整红绿灯时长的依据。这是智能的控制,也可以在编程的时候给这个时间定值,通过开关按钮来进行人工控制。当某个方向汽车滞留量大时,可人工控制绿灯延长亮的时间,尽可能使滞留的车都能通过该路口,避免造成交通阻塞。(2)在较大的十字路口,车行方向的交通信号灯一般都对应着人行道上的信号灯。一般人行道上的交通灯只有红绿两种,当东西车行道红灯亮时,南北人行道绿灯,行人可以通过。同理,南北方向车行道红灯亮时,东西人行道绿灯亮。在人行道交通灯控制系统中,可以增加盲人强过的智能控制。就是说有盲人要过马路时,按下特殊开关,强制使该方向变绿灯,相对应的车行道交通灯时序也要相应改变。一旦盲人通过马路,交通灯又恢复之前的正常的工作状态。(3)还可以增加急车强通的功能。所谓急车,就是指警车、救护车、消防车等特殊的车辆。当这些车执行任务,需强制通过路口时,就应该相应接通特殊开关,使急车方向一律绿灯,让急车通过。一旦急车通过,开关马上断开,信号灯有变为急车来时的正常时序控制。一旦两个方向同时来急车时,应先响应先来的一方。本系统借助CPLD/FPGA器件及其支撑软件,快速、明确地完成了对交通灯的控制功能!而且可以看到VHLD对设计的描述具有相对独立性,毋需通过门级原理图描述电路,而是针对目标进行功能描述,这种设计方法使设计人员摆脱了电路细节的束缚,效率高、可靠性好、成本低。这些都体现了EDA技术的优越性和广阔的应用前景。参考文献:[1]周润景等.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].北京:电子工业出版社,2007年8月[2]杨晓慧等.基于FPGA的EDA/SOPC技术与VHDL[M].北京:国防工业出版社,2007年10月[3]王诚等.AlteraFPGACPLD设计(基础篇)[M].北京:人民邮电出版社,2005年7月[4]StephenBrown,ZvonkoVranesic.FundamentalsofDigitalLogicwithVerilogDesign(2ndEdition)[M].NewYork:McGraw-Hill,2007,5.[5]Ming-BoLin.DigitalSystemDesignsandPractices:UsingVerilogHDLandFPGAs[M].NewYork:McGraw-Hill,2008,8.[6]徐光辉.基于FPGA的嵌入式开发与应用[M].北京:电子工业出版社,2006年9月.[7]任爱锋.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2004年10月. [8]谭会生,瞿逐春.EDA技术综合应用实例与分析[M].西安:西安电子科技大学出版社,2004年11月.[9]杨少军.基于DSP的移频机车信号分析研究与实现[D].武汉:武汉大学,2006.[10]文畅.基于FPGA/CPLD和VHDL语言的交通灯控制系统设计[J].电脑知识与技术(学术交流),2007,06-08.[11]廖长初著.PLC基础及应用,第2版[M].北京:机械工业出版社,2007年5月.[12]邹彦,庄严.EDA,技术与数字系统设计[M].北京:电子工业出版社,2007年4月.[13]潘新民.微型计算机控制技术实用教程[M].北京:电子工业出版社,2009年7月.[14]李朝青.单片机原理与接口技术[M].北京:北京航空航天大学出版社,2008年7月.[15]廖超平.EDA技术与VHDL实用教程[M].北京:高等教育出版社,2008年5月. 毕业设计(20__届)基于FPGA的交通灯控制系统设计 摘要智能交通控制系统是一个基于现代电子信息技术面向交通运输、车辆控制的服务系统。本文通过用PLC和单片机的方案对比以及根据交通灯控制系统的设计要求,确定了用FPGA模块化功能来实现。主要运用了主控制模块,55秒倒计时模块,5秒倒计时模块,倒计时时间选择驱动模块,倒计时时间选择模块,1KHz时钟信号模块,1Hz计数时钟信号模块,倒计时时间数据多路选择模块,动态显示驱动模块,显示数据多路选择模块,显示数据译码模块。利用QuartusII将每个模块进行仿真,保证功能正确。在保证功能正确以后,将所有模块连接起来,形成完整的设计,并用QuartusII再次仿真。仿真结果表明功能正确,符合设计要求。最后利用QuartusII将程序下载到AlteraFPGA芯片EP2C5T144C8中,实际结果表明电路工作正常,满足了设计要求。关键词:交通灯;FPGA;控制; AbstractIntelligenttrafficcontrolsystemisamodernelectronicinformationtechnologybasedonfortransportation,vehiclecontrolservicesystem.ThisarticlethroughthecomparisonwithschemeofPLCandsingle-chipmicrocontrollerandaccordingtothetherequirementsoftrafficlightscontrolsystemdesign,identifiedusingtheFPGAmodularfunctiontorealize.Mainlyutilizedmastercontrolmodule,55secondscountdownmodule,5secondscountdownmodule,countdowntimechoosingdrivermodules,countdowntimechoosingmodule,1KHzclocksignalmodule, 1Hzclockcountingsignalmodule,countdowntimedatamultiplechoicemodule,dynamicdisplaydrivermodules,displaydatamulti-channelchoosemodule,displaydatadecodingmodule.SimulattingeachmodulebyusingQuartusIIinordertoensurecorrectfunction.Thenputallmodulestogether,formingcompletedesign,anduseQuartusIItosimulatagain.Simulationresultsshowthatthefunctioniscorrect,conformancingtothedesignrequirements.Finally,usingtheQuartusIItodownloadtheprogramtoAlteraFPGAchipEP2C5T144C8,theactualresultsshowthatcircuitworkswell, satisfythedesignrequirements..Keywords:trafficlight;FPGA;control; 目录1 引言12 实现方案的确定22.1交通灯控制系统PLC设计方案22.2交通灯控制系统单片机设计方案32.3FPGA主控实现方案设计43 各功能模块的设计与实现73.1总体设计思路73.1.1系统组成框图73.1.2交通灯的状态转换图83.2功能模块设置及实现93.2.1主控制模块93.2.255秒倒计时模块103.2.35秒倒计时模块113.2.4倒计时时间选择驱动模块123.2.5倒计时时间选择模块133.2.61KHz时钟信号模块143.2.71Hz计数时钟信号模块143.2.8倒计时时间数据多路选择模块143.2.9动态显示驱动模块153.2.10显示数据多路选择模块163.2.11显示数据译码模块174 总体调试与结果说明184.1顶层电路184.2过程调试194.3硬件仿真效果205 总结和展望226致谢23参考文献24附录1程序代码25 1 引言随着人们生活水平的提高,拥有属于自己的车已经不属于什么难事了,但是车辆的增多,也给我们的出行带来了一些不便,如交通拥堵、交通事故频发、环境污染加剧和燃油损耗上升,其中最为关键的是交叉口的交通灯控制系统管理。而交叉口的通行能力又是决定道路通行的关键所在,若对城市交通网络的交叉口信号控制系统进行协调优化控制,可缓解拥堵区域的交通压力,使交通流量在整个城市范围内的分配趋于合理,降低或消除对道路的瓶颈影响,提高道路的通行能力和服务水平,通常最为常用的原则是车辆在交叉口的通过量最大或车辆在交叉口的延误最小。调闪亮子程序红灯绿灯黄灯倒计时显示倒计时显示红灯绿灯黄灯交警指挥台人行道人行道图1-1实际十字马路交通灯系统图1-1为实际生活中常见的交通灯控制系统模拟图。在十字路口上,如何自动可靠地实现交通灯的控制,并且在交通警察需要监督的时候,能够使交通灯与交通警察的监督很好地配合使用,以维持好日常生活交通秩序。很显然,在实际的系统中,最主要是系统的可靠性。随着微电子技术、半导体制造工艺的飞速发展,可编程逻辑器件的可靠性得到了很大提高,同时在成本方面也得到了很好的控制,选择可编程逻辑器件来实现交通灯控制系统是非常具有实际价值的[1]。 2 实现方案的确定实现路口交通灯系统的控制方法很多,下面结合实际设计需要,主要介绍PLC实现技术和单片机应用实现,并在此基础上确实基于FPGA的主控实现方案。2.1交通灯控制系统PLC设计方案所示基于PLC的交通灯系统例子要求实现“正常时序控制”及“急车强通控制”两种控制方式,其程序总流程图如图2-1所示。南北向控制东西向控制返回NNNN是否时状态S3?图2-1程序总流程图正常时序控制:南北向控制和东西向控制都是按正常时序顺序动作,控制相应信号灯循环发亮,它们的控制子程序流程图相似如图2-2所示。急通车控制分南北向急通车控制和东西向急通车控制两路,控制子程序流程图如图2-3所示。急车强通控制要求如下:急车强通信号受急车强通开关控制。无急车时,信号灯按正常时序控制。有急车来时,将急车强通开关接通,不管原来信号灯的状态如何,一律强制让急车来车方向的绿灯亮,使急车放行,直至急车通过为止。急车一过,将急车强通开关断开,信号灯的状态立即转为急车放行方向的绿灯闪亮3次,随后按正常时序控制[2]。南北红灯亮28S南北绿灯亮24S调闪亮子程序南北黄灯亮3S南北绿灯亮东西绿灯亮调闪亮子程序I/1I/2图2-2南北向控制子程序流程图图2-3急通车控制子程序流程图 交通灯控制采用PLC比传统的采用电子线路和继电器具有可靠性高、维护方便、使用简单、通用性强等特点,PLC还可以联成网络,根据实测各十字路口之间的距离、车流量和车速等,合理确定各路口信号灯之间的时差,把N台PLC联网到一台控制电脑上,以方便操作、管理和监控,从而极大地提高城市道路交通管理能力[3]。2.2交通灯控制系统单片机设计方案单片机也是常见的交通灯控制系统主控实现手段。采用单片机控制模块提供电源,用数码管与LED灯分别显示时间与提示信息。主程序流程图如图2-4所示,主要是一个死循环,不停的循环四个状态;按键子程序流程图如图2-5,它包含倒计时调整和紧急状态两个状态;另外,主程序中放了一个按键的判断指令,当有按键按下的时候,程序就自动的跳转到按键子程序处理。当检测到K2键按下的时候就自主返回到主程序。当出现紧急情况的时候,按下K3或者K4就切换到紧急状态,当紧急事件处理完毕的时候,按下K2,就可以返回正常状态。开始程序初始化是否时状态S1?按键是否按下?返回启动状态S1启动状态S2启动状态S3启动状态S4按键处理是否时状态S2?是否时状态S4?YYYYYNNNNN是否时状态S3?N图2-4主程序流程图 K1按K3按K4按进入时间调整S3+S4循环执行S1循环执行S3返回NNNNNNNYNYNYN图2-5按键子程序流程图由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。一般来讲,同样的逻辑,基于FPGA要比基于单片机要快很多,因为它们工作的原理是完全不同的。单片机是基于指令工作的,同样的激励到达单片机后,单片机首先要判断,然后读取相应的指令,最后作出相应,这每一步都是需要在单片机的时钟驱动下一步步的进行。而基于FPGA则是把相应的逻辑“暂时”固化为硬件电路了,它对激励作出的响应速度就是电信号从FPGA的一个管脚传播另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。因此,总的来说,基于FPGA要比基于单片机要快很多[4]。2.3FPGA主控实现方案设计结合已有的PLC实现和单片机应用实现的经验,并吸收两种设计的优势之处,再根据交通灯控制系统的设计要求和FPGA模块化功能实现,确定了以下方案,因每个方向相对的信号灯状态及倒计时显示器的显示完全一致,根据设计要求和系统所具有的功能,交通灯控制器系统框图如图2-6所示。 FPGA系统复位手动/自动红绿灯切换主控模块显示器报警器图2-6交通灯控制器系统框图确定的方案中,系统具有复位功能,能使系统重新开始计时;在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的,但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制。为此主体包括系统复位,手动/自动,红绿灯切换,主控模块,显示器,报警器。具体主控部分用FPGA来实现。AB图2-7 交通灯通行示意图结合实现方案,主要有东西、南北、南北左拐,东西左拐,跟手动控制5种工作方式,具体由M2~M0设定,具体如表2-1。表2-1交通灯工作方式表方式M2(0:自动,1:手动)M1(0:A向,1:B向)M0(O:直行,1:左拐)10002001 3010401151**当出现特殊情况时,可选择方式1到方式4中的任何一种方式,停止正常运行,进入特殊运行状态。此时交通灯按工作方式显示,计时电路停止计时,计时时间闪烁显示。当系统总复位时,控制电路和计时电路复位,信号灯全部熄灭[5]。 3 各功能模块的设计与实现3.1总体设计思路3.1.1系统组成框图结合设计任务要求和确定的实现方案,按照自顶向下的层次化设计方法,整个系统可分为4个模块,系统时序发生电路、红绿灯计数时间选择模块、定时控制电路、红绿灯信号译码电路,其系统组成方框图如图3-1所示。实现中这里假设某个十字路口是由一条主干道和一条次干道回合而成;在每个方向设置红绿黄3种信号灯,红灯亮禁止通行,绿灯亮允许通行;黄灯亮允许行驶中车辆有时间停考到禁止线以外[6]。FPGA时序发生模块(1kHz输入时钟)红绿灯计数时间选择模块红绿灯信号译码模块定时控制电路系统复位手动/自动红绿灯切换红东黄西绿向红南黄北绿向倒计时显示图3-1交通灯控制器系统组成框图时序发生模块是用来根据设定好的频率,按顺序的转换交通灯的颜色,然后根据时序发生模块来确定现在显示的是红灯,黄灯还是绿灯。根据所显示的灯的情况,利用定时控制电路来控制它所显示的时间,最后通过译码模块输出,呈现在我们面前。在自动控制模块时,绿灯亮为55秒,黄灯亮为5秒,红灯亮为60秒。其外部硬件电路方面包括:两组红绿灯(配合十字路口的双向指挥控制)、两级七段显示器(配合绿灯倒计时显示)、一组手动与自动控制开关(针对交通警察指挥交通控制使用)[7]。 3.1.2交通灯的状态转换图由分析交通灯的框图所的出来的结论,我们可以把交通灯的控制过程可以分为四个阶段,对应的输出有四种状态,分别为S0,S1,S2,S3,四个阶段的灯亮状态如表3-2。表3-2四个阶段的灯亮状态表状态灯亮情况格雷码S0状态主干道绿灯亮,支干道红灯亮00S1状态主干道黄灯亮,支干道红灯亮01S2状态主干道红灯亮,支干道绿灯亮11S3状态主干道红灯亮,支干道黄灯亮10当主干道是绿灯的通行的时候,支干道一定是不能通行所以是绿灯,所以我们如图3-2规定S0的状态。当主干道是黄灯的时候,是在提醒主干道的车即将不能通行也就是说现在还能通行,所以支干道上的车还是不能通行的显示的应该是红灯,所以我们如图3-2那样规定S1的状态。当主干道黄灯闪过以后就是红灯了,主干道方向车辆时禁止通行的,支干道上的车辆通行,所以显示的是绿灯,由此规定S2的状态。当经过一段时间后,支干道绿灯跳为黄灯,提醒支干道的车辆即将不能通行(说明还是能通行),所以主干道的车辆是不能通行的,即显示红灯,所我们由此规定S3的状态。当主干道方向55秒计时结束时,若支干道方向无车时,这时控制器应继续运行在S0状态,再运行55秒,等到下一次计时结束时再行判断;当主干道55秒计时结束,若支干道方向有车,则按照状态转换图进行跳转。同理,支干道也执行相同的处理[8]。S0绿灯S1黄灯S2红灯S3红灯图3-2主干道状态转换 当支干道开始绿灯亮时,规定必须保持支干道方向一直有车时,支干道方向的绿灯才能继续维持,否则在计数未结束但支干道无车时,执行从S2状态跳转到S3状态;若支干道有车一直维持到55秒计数结束,那么也要执行状态转换。S0红灯S3黄灯S2绿灯S1红灯图3-3支干道状态转换由上面的两个干道的状态转换图可知,两个方向的先设计成并列的,即都是按照倒计时信号进行状态跳转,然后再加入两者之间的限制关系和SIGNAL信号。3.2功能模块设置及实现结合前面的系统设计框图和状态设置,把主控部分分为主控制模块,55秒倒计时模块,5秒倒计时模块,倒计时时间选择驱动模块,倒计时时间选择模块,1KHz时钟信号模块,1Hz计数时钟信号模块,倒计时时间数据多路选择模块,动态显示驱动模块,显示数据多路选择模块,显示数据译码模块。系统采用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各个功能模块连接起来[9]。3.2.1主控制模块该模块主要完成根据外部输入信号Reset、SW控制输出,用于控制交通灯的信号Red1,Red2,Yellow1,Yellow2,Green1,Green2。这中间包含了必要的内部模块之间的信号EN_in(来自倒计时时间选择驱动模块)。其源代码见附录1,其仿真结果与编译后的结果如图3-4,3-5所示。 图3-4主控模块RST:总体复位,用于复位整个系统。复位后,系统将恢复到原始状态;SW1:模式选择,用于选择自动模式和人为监督模式。其中SW=1时为自动模式,系统不需要人为控制,SW=0时为人为监督模式,交通灯将不再工作。图3-5仿真结果当第一个00时主干道是红灯(如red1所示),支干道有绿灯跳为黄灯(如yellow2和green2所示);当01时,主干道变为绿灯(如green1所示),支干道变为红灯(如red2所示);当10时,主干道由绿灯转换为黄灯(如yellow1所示),支干道依旧是红灯(如red2所示),在10和11的衔接段跳为黄灯(如yellow2所示)。从图3-5可以简单地检查主控模块在逻辑上设计的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.255秒倒计时模块该模块主要完成55秒的倒计时,控制红灯的点亮时间。实际中在1分钟内还要有绿到黄灯的转换以提醒车辆与行人,所以选择了55秒作为绿灯的点亮时间。其源代码见附录1,其仿真结果与编译后的结果如图3-6,3-7所示。 图3-655秒倒计时模块C_CLK:技术时钟信号,计数器的全局计数时钟[10]。经过分频后,这个时钟信号频率为1Hz的方波信号,在时钟的上升沿,计数器响应。RST:计数器复位信号,低电平复位。复位后计数器恢复原始状态。即为全零状态,这是输出值为55.默认RST为高电平,工作在计数状态。C_EN:计数器的使能信号,在时钟信号下,这个信号为高电平时,计数器才工作于计数状态,否则计数器工作于保持状态。图3-7仿真结果C_out表示从一个状态转换到另一个状态;D_out1表示计时的十位数;D_out0表示计时器的个位数。从图3-7可以简单地检查55秒倒计时模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.35秒倒计时模块该模块主要完成5秒的倒计时,控制黄灯的点亮时间。实际中在1分钟内还要有红到黄灯的转换以提醒车辆与行人,所以选择了55秒作为红灯的点亮时间后,黄灯的点亮时间必定为5秒。其源代码见附录1,其仿真结果与编译后的结果如图3-8,3-9所示。图3-85秒倒计时模块 C_CLK:技术时钟信号,计数器的全局计数时钟。经过分频后,这个时钟信号频率为1Hz的方波信号,在时钟的上升沿,计数器响应。RST:计数器复位信号,低电平复位[11]。复位后计数器恢复原始状态。即为全零状态,这是输出值为05.默认RST为高电平,工作在计数状态。C_EN:计数器的使能信号,在时钟信号下,这个信号为高电平时,计数器才工作于计数状态,否则计数器工作于保持状态。图3-9仿真结果在图中可以看出当时间在00的时候,C_out有一个一秒钟的高电频,说明在这个时候指示灯的状态的转换,从D_out1和D_out0中可以看出这个是5秒的倒计时。从图3-9可以简单地检查5秒倒计时模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.4倒计时时间选择驱动模块该模块只要完成倒计时时间长短选择的功能,输入信号来自两个倒计时模块,当倒计数完成是产生一个脉冲用于驱动此模块产生00,01,10,11序列来驱动倒计时时间选择模块。其源代码见附录1,其编译后的结果如图3-10所示。图3-10倒计时时间选择驱动模块 EN_in1:高位驱动信号,来源于55秒计时的计时到信号,当计数器计时完成后,产生这个脉冲来驱动状态的变化。EN_in0:地位驱动信号,来源于5秒计时的计时信号,当计数器计时完成以后,产生这个脉冲来驱动状态的变化。3.2.5倒计时时间选择模块该模块主要完成55秒倒计时与5秒倒计时之间的选择功能,在实际中因为存在着红灯到黄灯再转换为绿灯的这样一个变化过程,而红黄绿灯的点亮时间不相同,一般是绿黄两灯的点亮时间刚好等于红灯,其中,绿灯亮55秒,黄灯亮5秒,红灯亮60秒。其源代码见附录1,其仿真结果与编译后的结果如图3-11,3-12所示。图3-11倒计时时间选择模块D-IN:状态变化输入信号,只要是“00,01,10,11”四种状态的变化,与倒计时时间长短的选择信号同步。图3-12仿真结果D_OUT1:时间选择高位输入,用于选择驱动55秒倒计时计时器。分别在状态输入为“00,10”这两种状态时,即对应绿灯点亮时间,输出高电平,使能55秒倒计时计数器。D_OUT0:时间选择地位输出,用于选择驱动5秒倒计时计时器。分别在状态输入为“01,11”这两种状态时,即对应黄灯点亮时间,输出高电平,使能5秒倒计时计数器[12]。从图3-12可以简单地检查倒计时时间选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。 3.2.61KHz时钟信号模块验板上10MHz的全局时钟信号经过分频得到1KHz的时钟信号,即完成一个10000分频的分频器。分频器的设计是时序设计的比较基础的知识,在实际系统中用得很多,设计过程与计数器的设计很类似。其源代码见附录1,其编译后的结果如图3-13所示。图3-131KHz时钟信号模块3.2.71Hz计数时钟信号模块该模块主要完成从模块1KHz中的1KHz时钟信号经过分频得到1Hz的计数时钟信号,即完成一个1000分频的分频器。设计过程与模块6的设计过程基本相同。其源代码见附录1,其编译后的结果如图3-14所示。图3-141Hz计数时钟信号模块Clk_in:时钟输入信号,来源于全局时钟信号10MHz的外部时钟输入。Clk_out:时钟输出信号,经过分频后输出1KHz的时钟信号,用于数码管的动态显示。3.2.8倒计时时间数据多路选择模块该模块主要完成两组不同倒计时时间数据的选择输出到后续显示模块中。其源代码见附录1,其仿真结果与编译后的结果如图3-15,3-16所示。 图3-15倒计时时间数据多路选择模块D_IN3:4为BCD码输入信号3,来源于5秒倒计时计数器的高位BCD码输出,取值范围为0-5。D_IN2:4为BCD码输入信号2,来源于5秒倒计时计数器的高位BCD码输出,取值范围为0-9。D_IN1:4为BCD码输入信号1,来源于55秒倒计时计数器的高位BCD码输出,通常的数字为0。D_IN0:4为BCD码输入信号0,来源于5秒倒计时计数器的高位BCD码输出,取值范围为0-5。SEL:状态选择输入信号,用于在不同的状态下选择不同的计时器的输出数值作为这个模块的输出。图3-16仿真结果D_OUT1:输出高位BCD码,在SEL的驱动使能下分别选择D_IN1或者D_IN3,当SEL=“00”或“10”时选择D-IN1;当SEL=“01”或“11”时选择D-IN3。D_OUT0:输出低位BCD码,在SEL的驱动使能下分别选择D_IN0或者D_IN2,当SEL=“00”或“10”时选择D-IN0;当SEL=“01”或“11”时选择D_IN2。从图3-16可以简单地检查倒计时时间数据多路选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.9动态显示驱动模块 该模块主要完成倒计时数码管的动态显示。动态显示即分时显示,但是时间间隔的选择既要保证人眼看起来是同时显示,即不会出现两位数字的断续显示,又要保证不会覆盖显示数字,即不会出现上个数字与下个数字之间的显示过快使得人眼来不及分辨[13]。其源代码见附录1,其仿真结果与编译后的结果如图3-17,3-18所示。图3-17动态显示驱动模块CLK:动态选择循环信号,此信号为1KHz的时钟信号。D_OUT:动态选择循环输出信号,在1KHz时钟信号的驱动下,产生“01,10”序列,用于选择数码管,以达到动态显示。图3-18仿真模块从图3-18可以简单地检查动态显示驱动模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析[14]。3.2.10显示数据多路选择模块该模块主要完成数码管显示数据的分时选择,以实现分时动态显示。其源代码见附录1,其仿真结果与编译后的结果如图3-19,3-20所示。图3-19显示数据多路选择模块SEL:状态输入信号,用于分时选择输入信号到输入端口。D_IN1:显示数据高位输入信号,为4位BCD码。D_IN0:显示数据低位输入信号,为4位BCD码。D_OUT1:显示数据输出,在SEL的驱动下,分别选择D_IN0于D_IN1。当SEL=“01”是,选择D_IN0;当SEL=“10”时,选择D_IN1;其余情况下输出为“00”。 图3-20仿真结果从图3-20可以简单地检查显示数据多路选择模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。3.2.11显示数据译码模块该模块主要完成4位BCD码到8位数码管显示数据的译码。译码后的8位数据分别对应数码管的数据段A、B、C、D、E、F、G、DP。其源代码见附录1,其仿真结果于编译后的结果如图3-21,3-22所示。图3-21显示数据译码模块Data_in:4为BCD码输入信号。Data_out:8为数码管显示数据输出信号,用于显示数据。图3-22仿真结果从图3-22可以简单地检查显示数据译码模块的逻辑上的正确性,同时也可以看到一些简单的延时信息。确认基本正确后,进行下面模块的设计与分析。 4 总体调试与结果说明4.1顶层电路在设计完各个模块后,需要将各个模块有机地组合成一个整体,最后来实现系统的功能在数字频率计的设计中,同时采用了电路原理图的设计以及VerilogHDL语言来编写的顶层电路[15]。电路原理图见图4-1,具体源代码见附录1,仿真图如图4-2所示。图4-1总系统电路图 图4-2仿真结果说明:当ga为高电平时表示a方向绿灯亮,同时rb为高电平表示b方向红灯亮;经过55秒,ga变为低电平表示,rb不变,ya变为高电平表示a方向绿灯灭黄灯亮,b方向仍为红灯;经过5秒,gb变为高电平表示b方向绿灯亮,ra为高电平表示a方向红灯亮;再经过5秒,gb变为低电平,ra不变,yb变为高电平表示b方向绿灯灭黄灯亮a方向仍为红灯。4.2过程调试图4-3PIN脚设置 4.3硬件仿真效果图4-41方向绿灯亮图4-4表示1方向绿灯亮,2方向红灯亮的过程。图4-51方向黄灯亮图4-5表示1方向黄灯,2方向红灯。 图4-61方向红灯亮图4-6表示1方向红灯,2方向绿灯。仿真的第一个状态为L.EDG2绿灯亮,L.EDR1红灯亮,说明主干道通行,支干道禁止通行,说明复合红绿灯的一个状态。经过秒表计时,经过55秒以后,显示第二个仿真图,L.EDG2熄灭,L.EDR2红灯亮,说明主干道方向为黄灯,志干道为红灯,表示主干道快要不能通行,支干道任然不能通行,复合设计的要求。经过第二次秒表计时,经过5秒以后,显示第三个仿真图,L.EDG3点亮,L.EDR2和L.EDR1分别熄灭,L.EDR0点亮,说明主干道为红灯,禁止通行,支干道为绿灯,主干道车辆通行,表明复合设计要求。依次类推,下面各个主、支干道的红绿黄灯的状态和闪烁的时间重复刚才那个状态。本次设计符合日常交通系统的运行原理,在调试版上运行正常。 5 总结和展望通过本次课题的研究,利用FPGA技术实现交通灯控制系统主控模块功能,是对传统交通灯控制系统设计的一种改进。在整个毕业设计当中,为了较好的完成这次毕业设计,查找资料、教材以及相应的软件。在图书馆找了大量资料,终于找全了这次毕业设计所需的资料。由于这次时间的紧迫和条件的不允许,还有比较多的东西没有做。比如说,人行道的设置并美誉完成;转弯优先道还没有做;状态之间相互转换的间隔时间的修改。本设计采用VerilogHDL硬件描述语言文本输入方式,在确立总体预期实现功能的前提下,分层次进行描述,其中所用到的数据均可依现场情况而设置,修改方便灵活。须注意的是,两模拟频率不能太高,否则将无法实现。并且,程序中还规定了两计数器的计数范围,与实际结合。数字化时代的到来给人们的生活带来了极大的改变,有理由相信随着数字化的深入,交通灯控制器的功能将日趋完善。而且,VerilogHDL语言对EDA产生的影响也是深远的,它缩短了电子产品的设计周期,为设计者提供了方便。 参考文献[1]周润景等.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].北京:电子工业出版社,2007,8.[2]杨晓慧等.基于FPGA的EDA/SOPC技术与VHDL[M].北京:国防工业出版社,2007,10.[3]王诚等.AlteraFPGACPLD设计(基础篇)[M].北京:人民邮电出版社,2005,7.[4]StephenBrown,ZvonkoVranesic.FundamentalsofDigitalLogicwithVerilogDesign(2ndEdition)[M].NewYork:McGraw-Hill,2007,5.[5]Ming-BoLin.DigitalSystemDesignsandPractices:UsingVerilogHDLandFPGAs[M].NewYork:McGraw-Hill,2008,8.[6]徐光辉.基于FPGA的嵌入式开发与应用[M].北京:电子工业出版社,2006,9.[7]文畅.基于FPGA/CPLD和VHDL语言的交通灯控制系统设计[J].电脑知识与技术(学术交流),2007,06-08.[8]瞿逐春.EDA技术综合应用实例与分析[M].西安:西安电子科技大学出版社,2004,11.[9]杨少军.基于DSP的移频机车信号分析研究与实现[D].武汉:武汉大学,2006.[10]余俊.基于FPGA的IDE协议实现的研究[J].电子科技.2008,9,12(8)144~156.[11]任晓东.CPLD/FPGA高级应用开发指南[M].北京:电子工业出版社,2003,9.[12]任爱锋.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2004,10.[13]廖超平.EDA技术与VHDL实用教程[M].北京:高等教育出版社,2008,5.[14]李朝青.单片机原理与接口技术[M].北京:北京航空航天大学出版社,2008,7.[15]谭会生,瞿逐春.EDA技术综合应用实例与分析[M].西安:西安电子科技大学出版社,2004,11. 附录1程序代码..................................................................主控制模块Modulecontrol(EN_in,SW1,RST,Red1,Red2,Yellow1,Yellow2,Green1,Green2);outputRed1;outputRed2;outputYellow1;outputYellow2;outputGreen1;outputGreen2;input[1:0]EN_in;inputSW1;inputRST;regRed1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;always@(EN_in,RST,SW1)beginif(SW1==0||RST==0){Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;elsebegincase(EN_in)2'b00:{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b010010;2'b01:{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b011000;2'b10:{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100001;2'b11:{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100100;default:{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;endcaseendendendmodule...............................................................55秒倒计时模块modulecounter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);outputC_out;output[3:0]D_OUT1;output[3:0]D_OUT0;inputC_CLK;inputRST;inputC_EN;reg[3:0]D_OUT1; reg[3:0]D_OUT0;regC_out;reg[3:0]CData1;reg[3:0]CData0;reg[7:0]DATA;always@(posedgeC_CLK)beginif(RST==0||C_EN==0)beginC_out<=1'b0;CData1<=4'b0000;CData0<=4'b0000;endelsebeginif(CData0==4'b0101&&CData1==4'b0101)beginCData1<=4'b0000;CData0<=4'b0000;C_out=1'b1;endelseif(CData0!=4'b1001)beginCData0<=CData0+1;C_out<=1'b0;endelseif(CData0==4'b1001&&CData1!=4'b0110)beginCData1<=CData1+1;CData0<=4'b0000;C_out<=1'b0;endelsebeginCData1<=4'b0000;CData0<=4'b0000;C_out=1'b1;endendendalwaysbeginDATA<=8'b01010101-((CData1<<4)+CData0);if(((DATA>>4)&4'b1111)>4'b0101) D_OUT1<=(DATA>>4)&4'b1111-4'b1111;elseD_OUT1<=(DATA>>4)&4'b1111;if((DATA&4'b1111)>4'b1001)D_OUT0<=(DATA&4'b1111)-4'b0110;elseD_OUT0<=DATA&4'b1111;endendmodule.................................................................5秒倒计时模块modulecounter05(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);outputC_out;output[3:0]D_OUT1;output[3:0]D_OUT0;inputC_CLK;inputRST;inputC_EN;reg[3:0]D_OUT1;reg[3:0]D_OUT0;regC_out;reg[3:0]CData1;reg[3:0]CData0;reg[7:0]DATA;always@(posedgeC_CLK)beginif(RST==0||C_EN==0)beginC_out<=1'b0;CData1<=4'b0000;CData0<=4'b0000;endelsebeginif(CData0!=4'b0101)beginCData0<=CData0+1;C_out<=1'b0;endelsebeginCData1<=4'b0000;CData0<=4'b0000;C_out=1'b1;end endendalwaysbeginDATA<=8'b00000101-((CData1<<4)+CData0);D_OUT1<=4'b0000;if((DATA&4'b1111)>4'b0101)D_OUT0<=DATA&4'b1111-4'b1011;elseD_OUT0<=DATA&4'b1111;endendmodule.........................................................倒计时时间选择驱动模块modulescan(EN_in1,EN_in0,sdata);output[1:0]sdata;inputEN_in1;inputEN_in0;reg[1:0]sdata;wireEN_in;assignEN_in=EN_in1|EN_in0;always@(posedgeEN_in)beginsdata<=sdata+2'b01;endendmodule.............................................................倒计时时间选择模块modulecountersel(D_IN,D_OUT1,D_OUT0);outputD_OUT1;outputD_OUT0;input[1:0]D_IN;regD_OUT1;regD_OUT0;alwaysbegincase(D_IN)2'b00:{D_OUT1,D_OUT0}<=2'b10;2'b01:{D_OUT1,D_OUT0}<=2'b01;2'b10:{D_OUT1,D_OUT0}<=2'b10;2'b11:{D_OUT1,D_OUT0}<=2'b01;default:{D_OUT1,D_OUT0}<=2'b00;endcaseendendmodule.............................................................1KHz时钟信号模块 modulefdiv1khz(clk_in,clk_out);outputclk_out;inputclk_in;regclk_out;integercnt=0;always@(posedgeclk_in)beginif(cnt<9999)//实际系统分频值//if(cnt<19)//仿真时的分频值begincnt=cnt+1;clk_out<=1'b0;endelsebegincnt=0;clk_out<=1'b1endendendmodule...........................................................1Hz计数时钟信号模块modulefdiv1hz(clk_in,clk_out);outputclk_out;inputclk_in;regclk_out;integercnt=0;always@(posedgeclk_in)beginif(cnt<999)//实际系统的分频值//if(cnt<9)//仿真时采用的分频值begincnt=cnt+1;clk_out<=1'b0;endelsebegincnt=0;clk_out<=1'b1;endendendmodule.....................................................倒计时时间数据多路选择模块moduledatamux(D_IN3,D_IN2,D_IN1,D_IN0,SEL,D_OUT1,D_OUT0);output[3:0]D_OUT1; output[3:0]D_OUT0;input[3:0]D_IN3;input[3:0]D_IN2;input[3:0]D_IN1;input[3:0]D_IN0;input[1:0]SEL;reg[3:0]D_OUT1;reg[3:0]D_OUT0;alwaysbegincase(SEL)2'b00:beginD_OUT0<=D_IN0;D_OUT1<=D_IN1;end2'b01:beginD_OUT0<=D_IN2;D_OUT1<=D_IN3;end2'b10:beginD_OUT0<=D_IN0;D_OUT1<=D_IN1;end2'b11:beginD_OUT0<=D_IN2;D_OUT1<=D_IN3enddefault:beginD_OUT0<=4'b0000;D_OUT1<=4'b0000;endendcaseendendmodule...............................................................动态显示驱动模块moduledispselect(CLK,D_OUT);output[1:0]D_OUT;inputCLK;reg[1:0]D_OUT;always@(posedgeCLK)beginif(D_OUT<2'b10)D_OUT<=D_OUT+2'b01elseD_OUT<=2'b01;endendmodule...........................................................显示数据多路选择模块 moduledispmux(SEL,D_IN1,D_IN0,D_OUT);output[3:0]D_OUT;input[3:0]D_IN1;input[3:0]D_IN0;input[1:0]SEL;reg[3:0]D_OUT;alwaysbegincase(SEL)2'b01:D_OUT<=D_IN0;2'b10:D_OUT<=D_IN1;default:D_OUT<=4'b0000;endcaseendendmodule...............................................................显示数据译码模块moduledispdecoder(data_in,data_out);output[7:0]data_out;input[3:0]data_in;reg[7:0]data_out;always@(data_inbegincase(data_in)4'b0000:data_out<=8'b11111100;//04'b0001:data_out<=8'b01100000;//14'b0010:data_out<=8'b11011010;//24'b0011:data_out<=8'b11110010;//34'b0100:data_out<=8'b01100110;//44'b0101:data_out<=8'b10110110;//54'b0110:data_out<=8'b10111110;//64'b0111:data_out<=8'b11100000;//74'b1000:data_out<=8'b11111110;//84'b1001:data_out<=8'b11100110;//9default:data_out<=8'b00000000;endcaseendendmodule......................................................................顶层电路moduletrafficlight(Reset,SW,CLK,Red1, Red2,Yellow1,Yellow2,Green1,Green2,SEG_Data,SEG_Sel);inputReset;inputSW;inputCLK;outputRed1;outputRed2;outputYellow1;outputYellow2;outputGreen1;outputGreen2;output[7:0]SEG_Data;output[1:0]SEG_Sel;wireSYNTHESIZED_WIRE_0;wireSYNTHESIZED_WIRE_1;wireSYNTHESIZED_WIRE_19;wireSYNTHESIZED_WIRE_3;wireSYNTHESIZED_WIRE_20;wire[1:0]SYNTHESIZED_WIRE_21;wireSYNTHESIZED_WIRE_7;wire[3:0]SYNTHESIZED_WIRE_9;wire[3:0]SYNTHESIZED_WIRE_10;wire[3:0]SYNTHESIZED_WIRE_11;wire[3:0]SYNTHESIZED_WIRE_12;wire[3:0]SYNTHESIZED_WIRE_14;wire[3:0]SYNTHESIZED_WIRE_15;wire[3:0]SYNTHESIZED_WIRE_16;wire[1:0]SYNTHESIZED_WIRE_17;assignSEG_Sel=SYNTHESIZED_WIRE_17;scanb2v_inst(.EN_in1(SYNTHESIZED_WIRE_0),.EN_in0(SYNTHESIZED_WIRE_1),.sdata(SYNTHESIZED_WIRE_21));counter05b2v_inst1(.C_CLK(SYNTHESIZED_WIRE_19),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_3),.C_out(SYNTHESIZED_WIRE_1),.D_OUT0(SYNTHESIZED_WIRE_11),.D_OUT1(SYNTHESIZED_WIRE_12));fdiv1hzb2v_inst11(.clk_in(SYNTHESIZED_WIRE_20),.clk_out(SYNTHESIZED_WIRE_19));fdiv1khzb2v_inst12(.clk_in(CLK),.clk_out(SYNTHESIZED_WIRE_20)); controlb2v_inst14(.SW1(SW),.RST(Reset),.EN_in(SYNTHESIZED_WIRE_21),.Red1(Red1),.Red2(Red2),.Yellow1(Yellow1),.Yellow2(Yellow2),.Green1(Green1),.Green2(Green2));counter55b2v_inst2(.C_CLK(SYNTHESIZED_WIRE_19),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_7),.C_out(SYNTHESIZED_WIRE_0),.D_OUT0(SYNTHESIZED_WIRE_9),.D_OUT1(SYNTHESIZED_WIRE_10));counterselb2v_inst3(.D_IN(SYNTHESIZED_WIRE_21),.D_OUT1(SYNTHESIZED_WIRE_7),.D_OUT0(SYNTHESIZED_WIRE_3));datamuxb2v_inst6(.D_IN0(SYNTHESIZED_WIRE_9),.D_IN1(SYNTHESIZED_WIRE_10),.D_IN2(SYNTHESIZED_WIRE_11),.D_IN3(SYNTHESIZED_WIRE_12),.SEL(SYNTHESIZED_WIRE_21),.D_OUT0(SYNTHESIZED_WIRE_15),.D_OUT1(SYNTHESIZED_WIRE_16));dispdecoderb2v_inst7(.data_in(SYNTHESIZED_WIRE_14),.data_out(SEG_Data));dispmuxb2v_inst8(.D_IN0(SYNTHESIZED_WIRE_15),.D_IN1(SYNTHESIZED_WIRE_16),.SEL(SYNTHESIZED_WIRE_17),.D_OUT(SYNTHESIZED_WIRE_14));dispselectb2v_inst9(.CLK(SYNTHESIZED_WIRE_20),.D_OUT(SYNTHESIZED_WIRE_17));endmodule

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭