《基于FPGA的交通灯控制器设计4(完整资料).doc》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制器设计4(完整资料).doc(89页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于FPGA的交通灯控制器设计4(完整资料)(可以直接使用,可编辑 优秀版资料,欢迎下载)引 言随着城乡的经济发展,车辆的数量在迅速的增加,交通阻塞的问题已经严重影响了人们的出行。现在的社会是一个数字化程度相当高的社会,很多的系统设计师都愿意把自己的设计设计成集成电路芯片,芯片可以在实际中方便使用。随着A技术的发展,嵌入式通用及标准FPG器件的呼之欲出,片上系统(SOC)已经近在咫尺。FG/CLD以其不可替代的地位及伴随而来的极具知识经济特征的IP芯片产业的崛起,正越来越受到业内人士的密切关注.FPA就是在这样的背景下诞生的,它在数字电路中的地位也越来越高,这样迅速的发展源于它的众多特点.交通
2、等是保障交通道路畅通和安全的重要工具,而控制器是交通灯控制的主要部分,它可以通过很多种方式来实现。在这许许多多的方法之中,使用A和VDL语言设计的交通灯控制器,比起其他的方法显得更加灵活、易于改动,并且它的设计周期性更加短。城市中的交通事故频繁发生,威胁着人们的生命健康和工作生活,交通阻塞问题在延迟出行时间的同时,还会造成更多的空气污染和噪声污染。在这种情况下,根据每个道路的实际情况来设置交通灯,使道路更加通畅,这对构建和谐畅通的城市交通有着十分重要的意义。第一章软件介绍1。Quarus介绍本次毕业设计是基于FP下的设计,FGA是现场可编程门阵列,FPGA开发工具种类很多、智能化高、功能非常的
3、强大。可编程Qurtus是一个为逻辑器件编程提供编程环境的软件,它能够支持HDL、VerilogHD语言的设计。在该软件环境下,设计者可以实现程序的编写、编译、仿真、图形设计、图形的仿真等许许多多的功能。在做交通灯控制器设计时选择的编程语言是VHL语言。在这里简单的介绍一下Qus的基本部分。图-1-1是一幅启动界面的图片.在设计前需要对软件进行初步的了解,在图中已经明显的标出了每一部分的名称。图 1-1-1 启动界面开始设计前我们需要新建一个工程,首先要在启动界面上的菜单栏中找到Fie,单击它选择它下拉菜单中的“ewroject izrd”时会出现图所显示的对话框,把项目名称按照需要填好后单击
4、ext,便会进入图1-13 显示的界面。图1-2 创建工程框图-13芯片选择框根据自己选择的实验设备选择好相应的芯片型号点击Nex,进入下一个步骤当出现图1-15时,点击“Finis”后这个工程就建立好了。图 14 仿真器选择框图1-1- 对话框 建好工程后开始进行设计,首先在图1-中单击fle后选择new,接着会出现图1-7,在交通灯控制器的设计中我们选择的是VL Fil,当出现图1-1-8时就可以把编辑的程序敲入编辑器中。图116 工程建好后的界面图1-1-7 新建文件类型选择框图1 程序编辑框在第一章中对artus软件的使用做一个简单介绍,设计中的编译和仿真步骤在后面的几章中会做出介绍。
5、第二章交通灯控制器设计的概述2. 控制器设计描述2.11 设计任务要求设计交通灯控制器,分别在四个方向都安装红、黄、绿三种颜色的交通指示灯,红灯表示停止,绿灯表示通行,黄灯表示左转和直行将要禁止通行,四个方向分别还安装有倒计时的计时器。2。1.2 设计要求东西方向和南北方向各有组指示灯,红灯亮的时间为20S,黄灯亮的时间为5,绿灯亮的时间为25S。三种灯亮灭的顺序为红灯、绿灯、黄灯。第三章 交通灯控制器的设计过程3。1 设计方案本设计课题用FPGA来实现智能交通灯的设计,本设计现要研究的问题主要有:智能交通灯的设计方案;各功能模块的设计与实现;如何用HD编写源程序以及进行系统仿真。31。1框图
6、设计交通灯控制器设计的框图中包括控制器、分频器、显示器、指示灯、译码器、位选器。当倒计时为零时,控制器改变交通灯的颜色,同时倒计时开始进入下一个倒计时.当有紧急情况出现的时候,四面的交通灯都会变为红灯,紧急情况的处理在设计中是依靠D键来实现的。图 31-1-1是交通灯设计的设计框图特殊情况计 时 器位选器显示器(东、西、南、北)译码器控制器指示灯图 3-1交通灯设计的设计框图系统的红、黄、绿灯显示的总时间为50s,具体的亮灯时间和亮灯顺序看 表311-2表311-2 交通灯亮灯顺序与亮灯时间安排东西方向(A灯)绿灯亮(0s)A黄灯亮(212s)红灯亮(2650s)南北方向(B灯)B红灯亮(02
7、s) 绿灯亮(26-45s)B黄灯亮(60)3。 工程流程图创建一个新的工程创建VHDL语言文件保存输入的程序将程序输入文件中对程序进行编译,有错误的要进行修改、再编译,直至没有错对程序进行波形的仿真进行图形电路设计、保存、编译、波形仿真、管脚锁定进行硬件仿真图-12 工程流程图。3 时序图的假象 在时序图中,上升沿有效,即为“时灯亮,好比ed为上升沿( “1” )时方向的红灯是亮的,相对的reenB也为上升沿( “” )B方向上绿灯是亮的。具体的时序显示见图 时序图。GreenAYellowARedBYeelowBGreenBRedAAAAA图-2时序图 。2 模块设计32.1 主控制器模块
8、在Qartu按照11中的方法新建一个工程并新建一个文件项目后,在图-8程序编辑框中将主控制器的程序输入后保存。接着需要对主控制器的程序进行编译,编译的步骤是点击rjectSt as T将文件置顶,具体的参考图31-1置顶,接着点击图32-12 的Start ompitin 进行编译。图311置顶图21-2编译在编译的过程中,出现了一些错误,在我编译主控制器的程序时,出现的错误是没有将CK放入PRCSS()中,将程序中的错误一一改正后有时还会出现些Wrnig,有些aning并不会影响后面的设计步骤。将上面的错面都改正后,就会显示图-13 所显示的对话框。下一步就是对程序进行时序仿真,图-23 编
9、译成功 程序编译无措后在当前的工程下面新建一个文件,点击Fil出现图3214新建文件对话框,选择图中显示蓝色的选项就会出现我们想要的界面,把鼠标移在图32-1-5 时序仿真编辑框中左边的空白处,然后点击右键,选择INTINERTNODEOBUS选项出现另一个对话框,选择对话框中的NODE FINDER后就会产生新的对话框,点击LIST是在左下角的空白处会出现很多的引脚,我们选中需要的引脚后确定后,我们需要的引脚就会出现在时序仿真编辑中左边的空白处,我们对输入信号进行设定,若想让输出信号显示为十六进制数,我们可以选中输出信号然后点击鼠标的右键选择VAUCOUNT VALE后出现的对话框中可以选择
10、自己需要显示的进制类型和进制数的定时等。对输出输入信号编辑完成后保存。在菜单工具栏中选择PROCESSINGSIMUAORTOOL,出现图32-16的对话框,按照对话框显示的进行设定,点击QENATFNCTIOASTRRPT,就会得出我们想要的图-2-1主控制器时序仿真图。图3214 新建文件对话框图3-1-5 仿真编辑框图-26 仿真工具对话框图317 主控制器的仿真图图21-7中显示的仿真结果和设计前预计的时序仿真图的结果是相符合的。时序图中的HLD是保持信号,当HLD信号为有效信号( “1” )时,则四个方向的路灯都是红灯亮,当HOLD无效时,四个方向的信号灯会正常工作。RSET信号有效
11、时,计数器的显示就会重新从零开始。图中四个方向的指示灯的亮灭顺序是正确的。图3- 主控制器的模块主控制器的时序仿真完成后,一个程序的设计、仿真就已经暂时结束了,下一步还要进行图形的设计,在总的图形设计前,需要先将每个程序都生成模块,为之后的设计做好准备。点击FileteUpadCreae Symbl les for Curent File,完成这个操作过程后便会生成主控制器的模块,具体的看图3-2-18 主控制器的模块。模块中主要有CLOC、ESET、HLD、NUM、NMB和六个指示灯的输出.3.2.分频器模块设计中需要用到1秒钟的脉冲,分频这个模块就是为了改变频率脉冲波,使0hz的频率最终变
12、为1hz的脉冲,这样就可以得到一个周期是1秒钟的脉冲,分频器的程序见附录.具体的程序编译过程和仿真的过程和主控制模块中谈到的过程是相同的。按照上面谈的步骤完成后就会得到图22-1 分频模块的时序仿真图。图2-1 分频模块的仿真图图3-2 分频模块 分频的程序经过编译和时序仿真图后生成的模块是图322-2 分频模块所显示的20h的脉冲通过第一模块时变为10hz,再经过第二个模块后变成1h的脉冲.3。2.3 提取显示值模块 提取显示值的功能是在10的速度下提取显示值,得到的是显示时间值的十位和个位。图3231 提取显示值的时序仿真图中NUIN是主控制器的输出值,NU和UM两个输出端口是要显示的值的
13、高位和低位。高位的最大输出值是为二的四位二进制数,低位的最大输出值是为九的四位二进制数.图3-2-2 是提取显示值生成的模块.提取显示值的程序见文章的附录.图32-3-1 提取显示值的仿真图仿真图中,NMB先从0开始计数,当计到9时N计为1,NUMB重新从0开始计数,当计到9时NUMA会计为2,NM再次从开始计数,当NUMA(高位)计数到2时,UM的最大值输出为5。图32-2 提取显示值的模块3.。4动态扫描模块ED显示的工作原理是利用人类的视觉特性。七段ED数字显示块是由“a、c、d、g、p”这几段组成的,LED的显示原理就是要看这八段中的哪几段是亮的,那几段是灭的。每段管子不是同时被点亮的
14、并且点亮的时间都是极短的,又因为变化的时间很短暂,亮灭的过程中留下的余光会给人一种错觉,人的眼睛觉得是一组静态的显示灯。具体的动态扫描的程序请看正文后的附录。图3241 是动态扫描的时序仿真图,图2-42是动态扫描生成的模块。图3241 动态扫描的时序仿真图图 动态扫描的模块3.2.5位选器模块 位选程序的输入和编译完成后,对程序进行仿真,仿真的步骤依然和上面谈到的一样,下面两幅图一张是位选程序的时序仿真图,另一幅是位选程序生成的模块.见图35-1和图3-252.图2-51位选时序仿真图图3-252 位选模块.6 译码器模块 译码器是将要显示的数字转换成驱动七段数码管的信号,程序中的NM与动态
15、扫描模块相连,将四位二进制数转换为八位二进制数,再通过LE输出.译码器的程序编辑和编译步骤也和前面所说的相同.当译码器编译成功后进行仿真,仿真的结果见图36-1 译码器的时序仿真。像时序仿真图中显示的一样,当输入“000时LED便会输出“01111”显示数字“0”,当U输入“000” 时LED输出“00010”显示数字“1”。图3-6-2 是译码器程序生成的模块。图326-1 译码器的时序仿真图图32-62译码器模块.3 图形设计3.3。1 图形设计的生成将每个程序都编译、仿真完成后,下一步就是要设计图形仿真,在进行图形的时序仿真前,要先进行图形的编辑和编译.要建立一个新工程和图形编辑的文件的
16、的过程是点击FileeBock Diagra/Shmaic e.(见图3-1-1)图3- 新建一个文件的对话框新建了一个文件以后,就要开始编辑图形了,要把每一个模块都找出来,选择ssignmetSttigs后出现图3-12 的对话框,在左边找到lbraes,单击它以后会出现图3-2右边显示的内容,再点击处可以找到之前生成的那些模块所在的文件夹,把它们一次性添加在ibraris中,这样可以为后面图形设计做好准备,全部添加完成后点击“OK”,这样在元件库中就可以找到生成的那些模块了。选择EdiInser ybo后出现图333的对话框,在这里就可以显示出上面生成的模块和软件中原本存在的元器件,按照设
17、计中的需要选出模块和元件。图312 ibraries对话框图-313 元件库对话框图-4 编译对话框图3-4 中标明了每个快捷工具的用途,选择合适的工具把选择好的模块和元件连接起来。然后将连接好的图形文件保存以后进行编译。3。2 仿真结果图-31 图形设计的时序仿真图图形设计编译完成以后按照程序的时序仿真的过程对图形设计进行时序仿真,给CL适当的信号,并且要给输入值定义正确的值,开始仿真后会出现图3就是编译后的时序仿真图。图形设计的时序仿真图中主要显示的是红、黄、绿灯之间的亮灭关系和E8显示的数值变化过程,还有位选输出端的变化,时序图中可以很容易看出当计时数计数到某一个值的时候东西方向和南北方
18、向是什么颜色的指示灯在工作。当A路的绿灯亮时,B路的红灯亮,A路的绿灯亮20秒后,路的黄灯亮5秒由此可以很容易的看出指示灯的亮灭是正确的。4 管脚的锁定管脚锁定是为了为硬件仿真做准备。当所有的设计都完成后,接着要对图形设计进行管脚的锁定。先确定设计时确定的器件类型和实际的硬件类型是不是一样,选择AsinmetsDevie,在出现的对话框中认真确定选择的器件是不是正确的。接下来选择AsinmensPins进入图41中,用鼠标双击Location就可以设定管脚了。图342 是在这次毕业设计中使用到的芯片CXKE1K100QC2083.图-43是完成编译、时序仿真、管脚锁定这些步骤后的图形设计。图3
19、-4 管脚锁定对话框图34- 芯片ACEX1K-P1K100QC208图3-4 最终的图形设计表4-1 管脚和相应的功能序号名称功能管脚口1CK时钟信号792HOLD保持键73REET复位键84RAA路口的红灯11nAA路口的绿灯1YellowA路口的黄灯157RdB路口的红灯2renBB路口的绿灯149YelwB路口的黄灯LED8L数码管311I位选39在这次毕业设计中,我们用的芯片是AEX1K-EP1K100QC208-,图34就是设计所用的芯片,褐色小点是设计中锁定的管脚。而表341是锁定的管脚和相应的功能。结 论经过了两个多月的努力,毕业设计终于完成了.这次的毕业设计是在大学期间完全没
20、有接触过的知识,在两个月的时间里我已经对FPGA有了一定的认识,又学到了新的知识。刚开始做这个课题时,我从知网和图书馆找了很多的资料,在对这些资料整理的过程中开始一点点的熟悉FGA和VHDL语言,最初我连最基本的程序都看不懂,经过努力后,我不仅可以看懂程序还可以利用Quarus软件对程序进行编译、仿真。这次毕业设计的经历提高了我的自学能力,当我遇到一个问题的时候,我会认真的查找出错的地方,然后想办法把它解决掉,一个程序的仿真结果出来后,我还会认真的查看仿真的结果是不是正确的。在做硬件实验时,开始我反复琢磨了很久都没有做出来,通过和老师同学的交流,我终于成功的做出了硬件的仿真.这次的毕业设计结果
21、可以按照设计的正常运行。这次毕业设计告诉我,只要努力、认真,再难再陌生的东西都能够做的出来.FPGA课程设计交通灯控制器通信工程学院电科01班罗超(1)第一部分 技术规范1。1功能描述:实现一个由一条主干道和一条支干道的汇合点形成的十字路口的交通灯控制器,具体功能:(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2) 主干道处于长允许通行状态,而支干道有车来时才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯.而支干道允许通行亮绿灯时,主干道亮红灯。(3) 当主干道、支干道均有车时,两者交替允许通行,主干道每次通行 秒,支干道每次通行25 秒,在每次由绿灯向红灯转换的过程中,要
22、亮 秒的黄灯作为过渡,并进行减计时显示。每个周期结束时都要进行支干道是否有车的检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。1。2系统总体框图:根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如下图所示的交通信号灯控制器的系统框图。时钟分频模块交通灯控制模块 扫描显示译码模块clkrstcarsignal计时模块数码管段码sel数码管位码segLED灯I/O管脚的描述名称方向电平位宽功能clnut。31系统时钟信号(1KHZ)carsignalnpt3。3V1检测支路是否有车rstIut3V1复位信号leutput3。LE
23、D灯slOtput3。3V数码管段码sOutput。3V4数码管位码 表一:系统总体/O管脚的描述注:其中系统时钟的频率选为10KHZ,复位采取同步复位方式,且低有效.支干道检测到有车时,arial=1;否则,cariga=0。方案核心:在交通灯控制器的设计中,交通灯控制及计时模块是本设计的关键模块。第二部分总体设计方案交通灯2.系统详细框图:在系统总体框图的基础上进一步详细设计,得到如下系统详细框图.rstLED灯carsignalclk显示控制单元定时模块显示单元交通灯控制模块时钟分频模块译码单元数码管显示 图三:系统详细框图注:系统总体O管脚描述请查看技术规范。2具体模块设计时钟分频模块
24、系统的动态扫描需要0HZ的脉冲,而系统时钟计时模块需要HZ的脉冲.分频模块主要为系统提供所需的时钟计时脉冲。该模块将10KH的脉冲信号进行分频,产生的方波(占空比为50%),作为系统时钟计时信号。clk时钟分频模块rstclk_out 图四:时钟分频模块框图/O管脚描述如下:名称方向电平位宽功能clkiput3V1系统时钟(10KH)rtnput3V复位信号cl_ooutut3。31分频后时钟信号(1Z) 表二:时钟分频模块I/O端口描述注:系统时钟的频率为10KHZ,分频后的时钟信号为1H(占空比为0%).复位信号为同步复位,且低有效.2。交通灯控制及计时模块控制模块JTH:根据主干道、支干
25、道输入信号以及时钟信号CLK,发出主、支干道指示灯的控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统的状态机,控制其他部分协调工作。计时模块分别实现45s,25s,5的定时,根据主、支干道输入信号和时钟信号以及交通灯控制器发出的使能信号按要求进行定时用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间.控制模块采用状态机进行设计,可以定义出种状态,分别为S0:主干道绿灯,支干道红灯且没有车辆行驶;S1:主干道绿灯,支干道红灯且支干道有车辆驶入;S:主干道黄灯,支干道红灯;S:主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯。利用AE语句定义状态的转换方式
26、及时间的变换方式,达到主干道绿灯亮5秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求.clk_outcarsignalrstled交通灯控制模块count_H_1count_L_1count_H_2count_H_2图五:交通灯控制及计数模块I/O管脚描述如下:名称方向电平位宽功能l_outInut3。3V分频后时钟信号(1HZ)stnp3.3V1复位信号(同步复位)arsigalIpt33V1检测信号(低有效)conH_1utpu.3V4主干道时间高位译码counLOtut3.V4主干道时间低位译码out_H_2utpt3。3V支干道时间高位译码coun_uut3.3支干道时间低位译码ledOp
27、u3。3V6LD灯 表三:交通灯控制模块I/O端口描述系统的状态图如下所示carsignal =0 S0 S3carsignal =1 S1 S2S0:主干道绿灯,支干道红灯S:主干道黄灯,支干道红灯2:主干道红灯,支干道绿灯S3:主干道红灯,支干道黄灯3。扫描显示译码模块扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。rstclksegsel扫描显示译码模块count_H_1count_L_1count_H_2count_H_2图六:扫描显示译码模块框图该模块的O管脚描述如下:名称方向电平位宽功能lkInpt。3V系统时钟信号(KHZ
28、)rsnu33V1复位信号(低有效)count1It3。34主干道时间高位译码t_1nt33V4主干道时间低位译码cunt_H_2Input3.V4支干道时间高位译码co_LInput3.3V4支干道时间低位译码selOutpu3V7数码管段码egOuput3.3V3数码管位码表四:扫描显示译码模块I/O端口描述第三部分仿真结果 Mdsm 前仿真uaru2后仿真第四部分 源代码分频模块:moulefenpiqi(clk,rst,cl_od);nput cl,rst;otpuclkodd;reg clk_odd;rg13:0cnt;paramer N 10;lys (oegeclk)if(! t
29、)bgincount = 1b;kod = 1b0;endelse i ( count N/2-1)bgn on = coun 1b1; endelsebegin cut= 1b0;ckodd = ck_dd; enendmoule控制及计时模块:odulecontrl(led,cr,rs,clk,coun_H_1,ont_L_1,ounH_2,cnt_L_2);outut3:countH_1,count_L_1,oun_H_2,count_L_2;outpu 5:0ed;inpu clk,s,car;r 5: led;reg3:0cont_H_,countL_,cunt_2,on_L2;re
30、 1:0te;aamerS0=2b0, S=01, 2=2b10, 3=b1; alway(posedgclkor egdge t)i(!rs)bgined6b010100;ste=0;cou_H_1=b0;cout_L_1=4b000; count_H_24b000;count_=000; end else bginca(sta)S0:einBegif(!car)begin led=6b01000; /ont_H_1=4b00;cunt_L14b0101;/??? ount_1=4b011;cunt_=4b; end else gi if(ontH_1 = 4b011) bn oun_4b1
31、;count_L140101; cont_4101;unt_L_24b000; end ee f(count_L_=0) i(cot_H_1=0) ein =6b00100; co_H_=b00;count_L_1=010; state=S1; i(cotL_2=0) gin outH_2=cnt_211; count_=4b1001; end elseg countL_=count_L_2b1;d end els egi co_H_1=countH_1-1b; cont_L_=4b1001; f(ct_L2=0) en coun_H_2=ct_H_1b1; countL2=4b1001; e
32、n lsebein countL2countL_21b1; end end elebin oun_L=countL_-; if(count_L_2=) begin count_H2=cuntH21b; count_L2=4b1001; end elsbegi counL_2=count_2-1; end end endend / begin (!a)bgincoutH_2b0101;count_L_=4b000; end elif(cun_L_2=) begin cu_H_=count_H_21b; cnt_L_24b100;end esebgin coun_L=count_L-1b; e end /d /*f(cunt_L_1=0) bi f(coun10) gi ed=6b10; count_H_1=b0000;cout_1=4b0100; state=S1; endls begincot_H_1ont_H_11b1;count_L_=101; ndnd elsebein cont_1=count_11b1;endif(!car)bein count_2010;cont_=4b0000; endele if(ou_2=0)bgincunt_H2cn_H2-1b;count_L_2=