版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的交通灯控制器设计4(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)
引言基于FPGA的交通灯控制器设计4(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)随着城乡的经济发展,车辆的数量在迅速的增加,交通阻塞的问题已经严重影响了人们的出行。现在的社会是一个数字化程度相当高的社会,很多的系统设计师都愿意把自己的设计设计成集成电路芯片,芯片可以在实际中方便使用。随着EDA技术的发展,嵌入式通用及标准FPGA器件的呼之欲出,片上系统(SOC)已经近在咫尺。FPGA/CPLD以其不可替代的地位及伴随而来的极具知识经济特征的IP芯片产业的崛起,正越来越受到业内人士的密切关注.FPGA就是在这样的背景下诞生的,它在数字电路中的地位也越来越高,这样迅速的发展源于它的众多特点.交通等是保障交通道路畅通和安全的重要工具,而控制器是交通灯控制的主要部分,它可以通过很多种方式来实现。在这许许多多的方法之中,使用FPGA和VHDL语言设计的交通灯控制器,比起其他的方法显得更加灵活、易于改动,并且它的设计周期性更加短。城市中的交通事故频繁发生,威胁着人们的生命健康和工作生活,交通阻塞问题在延迟出行时间的同时,还会造成更多的空气污染和噪声污染。在这种情况下,根据每个道路的实际情况来设置交通灯,使道路更加通畅,这对构建和谐畅通的城市交通有着十分重要的意义。第一章软件介绍1。1QuartusⅡ介绍本次毕业设计是基于FPGA下的设计,FPGA是现场可编程门阵列,FPGA开发工具种类很多、智能化高、功能非常的强大。可编程QuartusⅡ是一个为逻辑器件编程提供编程环境的软件,它能够支持VHDL、VerilogHDL语言的设计。在该软件环境下,设计者可以实现程序的编写、编译、仿真、图形设计、图形的仿真等许许多多的功能。在做交通灯控制器设计时选择的编程语言是VHDL语言。在这里简单的介绍一下QuartusⅡ的基本部分。图1-1-1是一幅启动界面的图片.在设计前需要对软件进行初步的了解,在图中已经明显的标出了每一部分的名称。图1-1-1启动界面开始设计前我们需要新建一个工程,首先要在启动界面上的菜单栏中找到File,单击它选择它下拉菜单中的“NewProjectWizard”时会出现图1—1—2所显示的对话框,把项目名称按照需要填好后单击Next,便会进入图1-1-3显示的界面。图1-1-2创建工程框图1-1—3芯片选择框根据自己选择的实验设备选择好相应的芯片型号点击Next,进入下一个步骤当出现图1-1—5时,点击“Finish”后这个工程就建立好了。图1-1-4仿真器选择框图1-1-5对话框建好工程后开始进行设计,首先在图1-1-6中单击file后选择new,接着会出现图1-1-7,在交通灯控制器的设计中我们选择的是VHDLFile,当出现图1-1-8时就可以把编辑的程序敲入编辑器中。图1-1—6工程建好后的界面图1-1-7新建文件类型选择框图1—1-8程序编辑框在第一章中对QuartusⅡ软件的使用做一个简单介绍,设计中的编译和仿真步骤在后面的几章中会做出介绍。第二章交通灯控制器设计的概述2.1控制器设计描述2.1.1设计任务要求设计交通灯控制器,分别在四个方向都安装红、黄、绿三种颜色的交通指示灯,红灯表示停止,绿灯表示通行,黄灯表示左转和直行将要禁止通行,四个方向分别还安装有倒计时的计时器。2。1.2设计要求东西方向和南北方向各有组指示灯,红灯亮的时间为20S,黄灯亮的时间为5S,绿灯亮的时间为25S。三种灯亮灭的顺序为红灯、绿灯、黄灯。第三章交通灯控制器的设计过程3。1设计方案本设计课题用FPGA来实现智能交通灯的设计,本设计现要研究的问题主要有:智能交通灯的设计方案;各功能模块的设计与实现;如何用VHDL编写源程序以及进行系统仿真。3.1。1框图设计交通灯控制器设计的框图中包括控制器、分频器、显示器、指示灯、译码器、位选器。当倒计时为零时,控制器改变交通灯的颜色,同时倒计时开始进入下一个倒计时.当有紧急情况出现的时候,四面的交通灯都会变为红灯,紧急情况的处理在设计中是依靠HOLD键来实现的。图3—1-1-1是交通灯设计的设计框图特殊情况特殊情况计时器位选器显示器(东、西、南、北)译码器控制器指示灯图3—1—1-1交通灯设计的设计框图系统的红、黄、绿灯显示的总时间为50s,具体的亮灯时间和亮灯顺序看表3—1-1-2表3-1-1-2交通灯亮灯顺序与亮灯时间安排东西方向(A灯)A绿灯亮(20s)A黄灯亮(21—25s)A红灯亮(26—50s)南北方向(B灯)B红灯亮(0—25s)B绿灯亮(26-45s)B黄灯亮(46—50s)3。1.2工程流程图创建一个新的工程创建一个新的工程创建VHDL语言文件保存输入的程序将程序输入文件中对程序进行编译,有错误的要进行修改、再编译,直至没有错对程序进行波形的仿真进行图形电路设计、保存、编译、波形仿真、管脚锁定进行硬件仿真图3-1-2工程流程图3。1.3时序图的假象在时序图中,上升沿有效,即为“1"时灯亮,好比RedA为上升沿(“1”)时A方向的红灯是亮的,相对的GreenB也为上升沿(“1”)B方向上绿灯是亮的。具体的时序显示见图3—2时序图。GreenAGreenAYellowARedBYeelowBGreenBRedAAAAA图3-2时序图3。2模块设计3.2.1主控制器模块在QuartusⅡ按照1—1中的方法新建一个工程并新建一个文件项目后,在图1-1-8程序编辑框中将主控制器的程序输入后保存。接着需要对主控制器的程序进行编译,编译的步骤是点击Project→SetasTop将文件置顶,具体的参考图3—2—1-1置顶,接着点击图3—2-1-2的StartCompilation进行编译。图3-2—1-1置顶图3—2—1-2编译在编译的过程中,出现了一些错误,在我编译主控制器的程序时,出现的错误是没有将CLOCK放入PROCESS()中,将程序中的错误一一改正后有时还会出现些Warning,有些Warning并不会影响后面的设计步骤。将上面的错面都改正后,就会显示图3-2-1-3所显示的对话框。下一步就是对程序进行时序仿真,图3-2-1—3编译成功程序编译无措后在当前的工程下面新建一个文件,点击File出现图3—2—1-4新建文件对话框,选择图中显示蓝色的选项就会出现我们想要的界面,把鼠标移在图3-2-1-5时序仿真编辑框中左边的空白处,然后点击右键,选择INSERT→INSERTNODEORBUS选项出现另一个对话框,选择对话框中的NODEFINDER后就会产生新的对话框,点击LIST是在左下角的空白处会出现很多的引脚,我们选中需要的引脚后确定后,我们需要的引脚就会出现在时序仿真编辑中左边的空白处,我们对输入信号进行设定,若想让输出信号显示为十六进制数,我们可以选中输出信号然后点击鼠标的右键选择VALUE→COUNTVALUE后出现的对话框中可以选择自己需要显示的进制类型和进制数的定时等。对输出输入信号编辑完成后保存。在菜单工具栏中选择PROCESSING→SIMULATOORTOOL,出现图3-2-1-6的对话框,按照对话框显示的进行设定,点击QENERATFUNCTIONAL…→START→REPORT,就会得出我们想要的图3-2-1—7主控制器时序仿真图。图3—2-1—4新建文件对话框图3-2-1-5仿真编辑框图3-2—1—6仿真工具对话框图3-2—1-7主控制器的仿真图图3—2—1-7中显示的仿真结果和设计前预计的时序仿真图的结果是相符合的。时序图中的HOLD是保持信号,当HOLD信号为有效信号(“1”)时,则四个方向的路灯都是红灯亮,当HOLD无效时,四个方向的信号灯会正常工作。RESET信号有效时,计数器的显示就会重新从零开始。图中四个方向的指示灯的亮灭顺序是正确的。图3—2-1-8主控制器的模块主控制器的时序仿真完成后,一个程序的设计、仿真就已经暂时结束了,下一步还要进行图形的设计,在总的图形设计前,需要先将每个程序都生成模块,为之后的设计做好准备。点击File→Create\Updade→CreateSymbolFilesforCurrentFile,完成这个操作过程后便会生成主控制器的模块,具体的看图3-2-1-8主控制器的模块。模块中主要有CLOCK、RESET、HOLD、NUMA、NUMB和六个指示灯的输出.3.2.2分频器模块设计中需要用到1秒钟的脉冲,分频这个模块就是为了改变频率脉冲波,使20Mhz的频率最终变为1hz的脉冲,这样就可以得到一个周期是1秒钟的脉冲,分频器的程序见附录.具体的程序编译过程和仿真的过程和主控制模块中谈到的过程是相同的。按照上面谈的步骤完成后就会得到图3—2—2-1分频模块的时序仿真图。图3-2—2-1分频模块的仿真图图3-2-2—2分频模块分频的程序经过编译和时序仿真图后生成的模块是图3—2—2-2分频模块所显示的20mhz的脉冲通过第一模块时变为10hz,再经过第二个模块后变成1hz的脉冲.3。2.3提取显示值模块提取显示值的功能是在10hz的速度下提取显示值,得到的是显示时间值的十位和个位。图3—2—3—1提取显示值的时序仿真图中NUMIN是主控制器的输出值,NUMA和NUMB两个输出端口是要显示的值的高位和低位。高位的最大输出值是为二的四位二进制数,低位的最大输出值是为九的四位二进制数.图3-2-3-2是提取显示值生成的模块.提取显示值的程序见文章的附录.图3—2-3-1提取显示值的仿真图仿真图中,NUMB先从0开始计数,当计到9时NUMA计为1,NUMB重新从0开始计数,当计到9时NUMA会计为2,NUMB再次从0开始计数,当NUMA(高位)计数到2时,NUMB的最大值输出为5。图3—2-3-2提取显示值的模块3.2。4动态扫描模块LED显示的工作原理是利用人类的视觉特性。七段LED数字显示块是由“a、b、c、d、e、f、g、dp”这几段组成的,LED的显示原理就是要看这八段中的哪几段是亮的,那几段是灭的。每段管子不是同时被点亮的并且点亮的时间都是极短的,又因为变化的时间很短暂,亮灭的过程中留下的余光会给人一种错觉,人的眼睛觉得是一组静态的显示灯。具体的动态扫描的程序请看正文后的附录。图3-2-4-1是动态扫描的时序仿真图,图3-2-4-2是动态扫描生成的模块。图3—2—4-1动态扫描的时序仿真图图3—2-4—2动态扫描的模块3.2.5位选器模块位选程序的输入和编译完成后,对程序进行仿真,仿真的步骤依然和上面谈到的一样,下面两幅图一张是位选程序的时序仿真图,另一幅是位选程序生成的模块.见图3—2—5-1和图3-2-5-2.图3—2-5-1位选时序仿真图图3-2—5-2位选模块3.2.6译码器模块译码器是将要显示的数字转换成驱动七段数码管的信号,程序中的NUM与动态扫描模块相连,将四位二进制数转换为八位二进制数,再通过LED8输出.译码器的程序编辑和编译步骤也和前面所说的相同.当译码器编译成功后进行仿真,仿真的结果见图3—2—6-1译码器的时序仿真。像时序仿真图中显示的一样,当NUM输入“0000"时LED8便会输出“00111111”显示数字“0”,当NUM输入“0001”时LED8输出“00000110”显示数字“1”。图3-2-6-2是译码器程序生成的模块。图3-2-6-1译码器的时序仿真图图3-2-6—2译码器模块3.3图形设计3.3。1图形设计的生成将每个程序都编译、仿真完成后,下一步就是要设计图形仿真,在进行图形的时序仿真前,要先进行图形的编辑和编译.要建立一个新工程和图形编辑的文件的的过程是点击File→New→BlockDiagram/SchematicFile.(见图3-3—1-1)图3-3-1-1新建一个文件的对话框新建了一个文件以后,就要开始编辑图形了,要把每一个模块都找出来,选择Assignment→Settings后出现图3-3-1—2的对话框,在左边找到libraries,单击它以后会出现图3-3—1-2右边显示的内容,再点击处可以找到之前生成的那些模块所在的文件夹,把它们一次性添加在libraries中,这样可以为后面图形设计做好准备,全部添加完成后点击“OK”,这样在元件库中就可以找到生成的那些模块了。选择Edit→InsertSymbol后出现图3—3—1—3的对话框,在这里就可以显示出上面生成的模块和软件中原本存在的元器件,按照设计中的需要选出模块和元件。图3—3-1—2libraries对话框图3-3—1-3元件库对话框图3—3-1—4编译对话框图3-3—1-4中标明了每个快捷工具的用途,选择合适的工具把选择好的模块和元件连接起来。然后将连接好的图形文件保存以后进行编译。3。3。2仿真结果图3-3—2-1图形设计的时序仿真图图形设计编译完成以后按照程序的时序仿真的过程对图形设计进行时序仿真,给CLK适当的信号,并且要给输入值定义正确的值,开始仿真后会出现图3-3—2—1就是编译后的时序仿真图。图形设计的时序仿真图中主要显示的是红、黄、绿灯之间的亮灭关系和LED8显示的数值变化过程,还有位选输出端的变化,时序图中可以很容易看出当计时数计数到某一个值的时候东西方向和南北方向是什么颜色的指示灯在工作。当A路的绿灯亮时,B路的红灯亮,A路的绿灯亮20秒后,A路的黄灯亮5秒……由此可以很容易的看出指示灯的亮灭是正确的。3.4管脚的锁定管脚锁定是为了为硬件仿真做准备。当所有的设计都完成后,接着要对图形设计进行管脚的锁定。先确定设计时确定的器件类型和实际的硬件类型是不是一样,选择Assignments→Device,在出现的对话框中认真确定选择的器件是不是正确的。接下来选择Assignments→Pins进入图3—4—1中,用鼠标双击Location就可以设定管脚了。图3—4—2是在这次毕业设计中使用到的芯片ACEX1K-EP1K100QC208—3.图3-4—3是完成编译、时序仿真、管脚锁定这些步骤后的图形设计。图3-4-1管脚锁定对话框图3—4-2芯片ACEX1K-EP1K100QC208-3图3-4—3最终的图形设计表3—4-1管脚和相应的功能序号名称功能管脚口1CLK时钟信号792HOLD保持键73RESET复位键84RedAA路口的红灯115GreenAA路口的绿灯136YellowAA路口的黄灯157RedBB路口的红灯128GreenBB路口的绿灯149YellowBB路口的黄灯1610LED8LED数码管24—3111SI位选36—39在这次毕业设计中,我们用的芯片是ACEX1K-EP1K100QC208-3,图3-4—3就是设计所用的芯片,褐色小点是设计中锁定的管脚。而表3—4—1是锁定的管脚和相应的功能。结论经过了两个多月的努力,毕业设计终于完成了.这次的毕业设计是在大学期间完全没有接触过的知识,在两个月的时间里我已经对FPGA有了一定的认识,又学到了新的知识。刚开始做这个课题时,我从知网和图书馆找了很多的资料,在对这些资料整理的过程中开始一点点的熟悉FPGA和VHDL语言,最初我连最基本的程序都看不懂,经过努力后,我不仅可以看懂程序还可以利用QuartusⅡ软件对程序进行编译、仿真。这次毕业设计的经历提高了我的自学能力,当我遇到一个问题的时候,我会认真的查找出错的地方,然后想办法把它解决掉,一个程序的仿真结果出来后,我还会认真的查看仿真的结果是不是正确的。在做硬件实验时,开始我反复琢磨了很久都没有做出来,通过和老师同学的交流,我终于成功的做出了硬件的仿真.这次的毕业设计结果可以按照设计的正常运行。这次毕业设计告诉我,只要努力、认真,再难再陌生的东西都能够做的出来.FPGA课程设计——交通灯控制器通信工程学院电科0701班罗超(17)第一部分技术规范1。1功能描述:实现一个由一条主干道和一条支干道的汇合点形成的十字路口的交通灯控制器,具体功能:(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2)主干道处于长允许通行状态,而支干道有车来时才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯.而支干道允许通行亮绿灯时,主干道亮红灯。(3)当主干道、支干道均有车时,两者交替允许通行,主干道每次通行45秒,支干道每次通行25秒,在每次由绿灯向红灯转换的过程中,要亮5秒的黄灯作为过渡,并进行减计时显示。每个周期结束时都要进行支干道是否有车的检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。1。2系统总体框图:根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如下图所示的交通信号灯控制器的系统框图。时钟分频模块交通灯控制模块时钟分频模块交通灯控制模块扫描显示译码模块clkrstcarsignal计时模块数码管段码sel数码管位码segLED灯名称方向电平位宽功能clkInput3。3V1系统时钟信号(10KHZ)carsignalInput3。3V1检测支路是否有车rstInput3.3V1复位信号ledOutput3。3V6LED灯selOutput3。3V7数码管段码segOutput3。3V4数码管位码表一:系统总体I/O管脚的描述注:其中系统时钟的频率选为10KHZ,复位采取同步复位方式,且低有效.支干道检测到有车时,carsignal=1;否则,carsignal=0。方案核心:在交通灯控制器的设计中,交通灯控制及计时模块是本设计的关键模块。第二部分总体设计方案交通灯2.1系统详细框图:在系统总体框图的基础上进一步详细设计,得到如下系统详细框图.rstLED灯carsignalclk显示控制单元定时模块显示单元交通灯控制模块时钟分频模块rstLED灯carsignalclk显示控制单元定时模块显示单元交通灯控制模块时钟分频模块译码单元译码单元数码管显示数码管显示图三:系统详细框图注:系统总体I/O管脚描述请查看技术规范。2。2具体模块设计1.时钟分频模块系统的动态扫描需要10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲.分频模块主要为系统提供所需的时钟计时脉冲。该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。clkclk时钟分频模块rstclk_out图四:时钟分频模块框图I/O管脚描述如下:名称方向电平位宽功能clkinput3.3V1系统时钟(10KHZ)rstinput3.3V1复位信号clk_outoutput3。3V1分频后时钟信号(1HZ)表二:时钟分频模块I/O端口描述注:系统时钟的频率为10KHZ,分频后的时钟信号为1HZ(占空比为50%).复位信号为同步复位,且低有效.2。交通灯控制及计时模块控制模块JTDKZH:根据主干道、支干道输入信号以及时钟信号CLK,发出主、支干道指示灯的控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统的状态机,控制其他部分协调工作。计时模块分别实现45s,25s,5s的定时,根据主、支干道输入信号和时钟信号以及交通灯控制器发出的使能信号按要求进行定时用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间.控制模块采用状态机进行设计,可以定义出5种状态,分别为S0:主干道绿灯,支干道红灯且没有车辆行驶;S1:主干道绿灯,支干道红灯且支干道有车辆驶入;S2:主干道黄灯,支干道红灯;S3:主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯。利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求.clk_outclk_outcarsignalrstled交通灯控制模块count_H_1count_L_1count_H_2count_H_2图五:交通灯控制及计数模块I/O管脚描述如下:名称方向电平位宽功能clk_outInput3。3V1分频后时钟信号(1HZ)rstInput3.3V1复位信号(同步复位)carsignalInput3.3V1检测信号(低有效)count_H_1Output3.3V4主干道时间高位译码count_L_1Output3.3V4主干道时间低位译码count_H_2Output3。3V4支干道时间高位译码count_L_2Output3.3V4支干道时间低位译码ledOutput3。3V6LED灯表三:交通灯控制模块I/O端口描述系统的状态图如下所示carsignal=0carsignal=0S0S3carsignal=1S3carsignal=1S1S2S2S0:主干道绿灯,支干道红灯S1:主干道黄灯,支干道红灯S2:主干道红灯,支干道绿灯S3:主干道红灯,支干道黄灯3。扫描显示译码模块扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。rstrstclksegsel扫描显示译码模块count_H_1count_L_1count_H_2count_H_2图六:扫描显示译码模块框图该模块的I/O管脚描述如下:名称方向电平位宽功能clkInput3。3V1系统时钟信号(10KHZ)rstInput3.3V1复位信号(低有效)count_H_1Input3。3V4主干道时间高位译码count_L_1Input3.3V4主干道时间低位译码count_H_2Input3.3V4支干道时间高位译码count_L_2Input3.3V4支干道时间低位译码selOutput3.3V7数码管段码segOutput3.3V3数码管位码表四:扫描显示译码模块I/O端口描述第三部分仿真结果Modelsim前仿真Quartus2后仿真第四部分源代码分频模块:modulefenpinqi(clk,rst,clk_odd);inputclk,rst;outputclk_odd;regclk_odd;reg[13:0]count;parameterN=10;always@(posedgeclk)if(!rst)begincount<=1’b0;clk_odd〈=1'b0;endelseif(count〈N/2-1)begincount〈=count+1’b1;endelsebegincount〈=1'b0;clk_odd〈=~clk_odd;endendmodule控制及计时模块:modulecontrol(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);output[3:0]count_H_1,count_L_1,count_H_2,count_L_2;output[5:0]led;inputclk,rst,car;reg[5:0]led;reg[3:0]count_H_1,count_L_1,count_H_2,count_L_2;reg[1:0]state;parameterS0=2'b00,S1=2’b01,S2=2’b10,S3=2'b11;always@(posedgeclkornegedgerst)if(!rst)beginled=6'b010100;state=S0;count_H_1=4’b0000;count_L_1=4'b0000;count_H_2=4’b0000;count_L_2=4'b0000;endelsebegincase(state)S0:beginBeginif(!car)beginled=6'b010100;//count_H_1=4’b0100;count_L_1=4’b0101;//???count_H_1=4'b0111;count_L_1=4'b0111;endelsebeginif(count_H_1==4'b0111)begincount_H_1=4’b0100;count_L_1=4'b0101;count_H_2=4'b0101;count_L_2=4'b0000;endelseif(count_L_1=0)if(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state<=S1;if(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4’b1001;endelsebegincount_L_2<=count_L_2-1'b1;endendelsebegincount_H_1<=count_H_1-1’b1;count_L_1<=4’b1001;if(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4’b1001;endelsebegincount_L_2<=count_L_2-1'b1;endendelsebegincount_L_1<=count_L_1-1’b1;if(count_L_2==0)begincount_H_2<=count_H_2-1’b1;count_L_2〈=4'b1001;endelsebegincount_L_2〈=count_L_2-1’b1;endendendend/*beginif(!car)begincount_H_2=4'b0101;count_L_2=4’b0000;endelseif(count_L_2==0)begincount_H_2<=count_H_2—1'b1;count_L_2<=4'b1001;endelsebegincount_L_2<=count_L_2-1’b1;endend*/end/*if(count_L_1==0)beginif(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state<=S1;endelsebegincount_H_1〈=count_H_1—1'b1;count_L_1〈=4'b1001;endendelsebegincount_L_1<=count_L_1—1'b1;endif(!car)begincount_H_2=4'b0101;count_L_2=4’b0000;endelseif(count_L_2==0)begincount_H_2<=count_H_2-1'b1;count_L_2〈=4’b1001;endelsebegincount_L_2〈=count_L_2—1'b1;endS1:beginif(count_L_1==0)beginif(count_H_1==0)beginled=6'b100010;count_H_1=4'b0010;count_L_1=4'b1001;count_H_2=4’b0010;count_L_2=4'b0100;state〈=S2;endelsebegincount_H_1<=count_H_1—1’b1;count_H_2<=count_H_2—1'b1;endendelsebegincount_L_1〈=count_L_1-1'b1;count_L_2〈=count_L_2-1'b1;endendS2:beginif(count_L_2==0)beginif(count_H_2==0)beginled=6'b100001;count_H_2=4'b0000;count_L_2=4'b0100;state〈=S3;elsebegincount_H_2<=count_H_2-1'b1;count_L_2=4'b1001;endendelsebegincount_L_2<=count_L_2—1'b1;endif(count_L_1==0)beginbegincount_H_1<=count_H_1-1’b1;count_L_1=4’b1001;endendelsebegincount_L_1〈=count_L_1-1'b1;endendS3:beginif(count_L_2==0)beginif(count_H_2==0)beginled=6'b010100;count_H_1=4’b0100;count_L_1=4'b1001;count_H_2=4'b0100;count_L_2=4'b0100;state<=S0;endelsebegincount_H_1〈=count_H_1—1’b1;count_H_2<=count_H_2-1’b1;endendelsebegincount_L_1<=count_L_1-1’b1;count_L_2<=count_L_2—1’b1;endendcaseendendmodule扫描译码显示模块:modulesaomiao(rst,clk,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);inputrst,clk;input[3:0]count_H_1,count_L_1,count_H_2,count_L_2;output[6:0]sel;output[3:0]seg;reg[6:0]sel;reg[3:0]seg;reg[15:0]count;reg[1:0]cnt;reg[3:0]data;regclk_odd;always@(posedgeclkornegedgerst)beginif(!rst)begincount<=0;clk_odd〈=0;endelseif(count==16'd2)beginclk_odd<=~clk_odd;count〈=0;endelsecount〈=count+1’b1;endalways@(negedgerstorposedgeclk_odd)//????1msif(!rst)begincnt〈=2'b00;endelsecnt〈=cnt+1’b1;always@(negedgerstorposedgeclk)if(!rst)begin//sel=7’b0000000;seg=4'b1111;endelsebegincase(cnt)2'b00:beginseg=4'b1110;data=count_H_1;end2'b01:begiseg=4'b1101;//?????data=count_L_1;end2'b10:begin//?????seg=4'b1011;data=count_H_2;end2'b11:begin//?????seg=4'b0111;data=count_L_2;enddefault:begin//sel=8'b0000000;seg=4'b0000;endendcaseendalways@(dataorseg)begincase(data)4’b0000:sel=7'b1111110;4'b0001:sel=7'b0110000;4’b0010:sel=7'b1101101;4’b0011:sel=7'b1111001;4'b0100:sel=7’b0110011;4’b0101:sel=7’b1011011;4'b0110:sel=7’b1011111;4'b0111:sel=7’b1110000;4'b1000:sel=7’b1111111;4'b1001:sel=7'b1111011;default:sel=7'b1111110;endcaseendendmodule顶层模块:modulejiaotongdeng(clk,rst,car,led,sel,seg,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);inputclk,rst,car;output[3:0]seg;output[6:0]sel;output[5:0]led;output[3:0]count_H_1,count_L_1,count_H_2,count_L_2;outputclk_odd;wire[3:0]count_H_1,count_L_1,count_H_2,count_L_2;wireclk_odd;saomiaoee(rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);controlrr(led,car,rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2);fenpinqitt(clk,rst,clk_odd);endmodule激励模块:`defineTRUE1'b1`defineFALSE1'b0modulestimulus;wire[3:0]SEG;wire[6:0]SEL;wire[5:0]LED;wire[3:0]count_H_1,count_L_1,count_H_2,count_L_2;wireclk_odd;regCAR_ON_CNTRY_RD;regCLOCK,RST;jiaotongdengjiaotongdeng1(CLOCK,RST,CAR_ON_CNTRY_RD,LED,SEL,SEG,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);initial$monitor($time,”led=%b,sel=%b,seg=%b",LED,SEL,SEG);initialbeginCLOCK=`FALSE;forever#5CLOCK=~CLOCK;endinitialbeginRST=`FALSE;repeat(2)@(negedgeCLOCK);RST=`TRUE;endinitialbeginCAR_ON_CNTRY_RD=1'b0;repeat(20)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1'b1;repeat(500)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1’b0;repeat(500)@(negedgeCLOCK);CAR_ON_CNTRY_RD=1'b1;repeat(2400)@(negedgeCLOCK);$stop;endendmodule引言随着城乡的经济发展,车辆的数量在迅速的增加,交通阻塞的问题已经严重影响了人们的出行.现在的社会是一个数字化程度相当高的社会,很多的系统设计师都愿意把自己的设计设计成集成电路芯片,芯片可以在实际中方便使用。随着EDA技术的发展,嵌入式通用及标准FPGA器件的呼之欲出,片上系统(SOC)已经近在咫尺。FPGA/CPLD以其不可替代的地位及伴随而来的极具知识经济特征的IP芯片产业的崛起,正越来越受到业内人士的密切关注。FPGA就是在这样的背景下诞生的,它在数字电路中的地位也越来越高,这样迅速的发展源于它的众多特点.交通等是保障交通道路畅通和安全的重要工具,而控制器是交通灯控制的主要部分,它可以通过很多种方式来实现.在这许许多多的方法之中,使用FPGA和VHDL语言设计的交通灯控制器,比起其他的方法显得更加灵活、易于改动,并且它的设计周期性更加短。城市中的交通事故频繁发生,威胁着人们的生命健康和工作生活,交通阻塞问题在延迟出行时间的同时,还会造成更多的空气污染和噪声污染.在这种情况下,根据每个道路的实际情况来设置交通灯,使道路更加通畅,这对构建和谐畅通的城市交通有着十分重要的意义.第一章软件介绍1.1QuartusⅡ介绍本次毕业设计是基于FPGA下的设计,FPGA是现场可编程门阵列,FPGA开发工具种类很多、智能化高、功能非常的强大。可编程QuartusⅡ是一个为逻辑器件编程提供编程环境的软件,它能够支持VHDL、VerilogHDL语言的设计。在该软件环境下,设计者可以实现程序的编写、编译、仿真、图形设计、图形的仿真等许许多多的功能。在做交通灯控制器设计时选择的编程语言是VHDL语言。在这里简单的介绍一下QuartusⅡ的基本部分.图1-1-1是一幅启动界面的图片.在设计前需要对软件进行初步的了解,在图中已经明显的标出了每一部分的名称。图1-1—1启动界面开始设计前我们需要新建一个工程,首先要在启动界面上的菜单栏中找到File,单击它选择它下拉菜单中的“NewProjectWizard”时会出现图1-1—2所显示的对话框,把项目名称按照需要填好后单击Next,便会进入图1-1-3显示的界面。图1-1-2创建工程框图1-1—3芯片选择框根据自己选择的实验设备选择好相应的芯片型号点击Next,进入下一个步骤当出现图1-1-5时,点击“Finish"后这个工程就建立好了。图1-1-4仿真器选择框图1-1-5对话框建好工程后开始进行设计,首先在图1-1-6中单击file后选择new,接着会出现图1-1—7,在交通灯控制器的设计中我们选择的是VHDLFile,当出现图1—1-8时就可以把编辑的程序敲入编辑器中.图1-1-6工程建好后的界面图1—1-7新建文件类型选择框图1-1-8程序编辑框在第一章中对QuartusⅡ软件的使用做一个简单介绍,设计中的编译和仿真步骤在后面的几章中会做出介绍。第二章交通灯控制器设计的概述2.1控制器设计描述2.1.1设计任务要求设计交通灯控制器,分别在四个方向都安装红、黄、绿三种颜色的交通指示灯,红灯表示停止,绿灯表示通行,黄灯表示左转和直行将要禁止通行,四个方向分别还安装有倒计时的计时器。2.1.2设计要求东西方向和南北方向各有组指示灯,红灯亮的时间为20S,黄灯亮的时间为5S,绿灯亮的时间为25S。三种灯亮灭的顺序为红灯、绿灯、黄灯。第三章交通灯控制器的设计过程3。1设计方案本设计课题用FPGA来实现智能交通灯的设计,本设计现要研究的问题主要有:智能交通灯的设计方案;各功能模块的设计与实现;如何用VHDL编写源程序以及进行系统仿真。3.1。1框图设计交通灯控制器设计的框图中包括控制器、分频器、显示器、指示灯、译码器、位选器。当倒计时为零时,控制器改变交通灯的颜色,同时倒计时开始进入下一个倒计时。当有紧急情况出现的时候,四面的交通灯都会变为红灯,紧急情况的处理在设计中是依靠HOLD键来实现的.图3—1—1-1是交通灯设计的设计框图特殊情况特殊情况计时器位选器显示器(东、西、南、北)译码器控制器指示灯图3-1-1—1交通灯设计的设计框图系统的红、黄、绿灯显示的总时间为50s,具体的亮灯时间和亮灯顺序看表3—1-1-2表3-1—1-2交通灯亮灯顺序与亮灯时间安排东西方向(A灯)A绿灯亮(20s)A黄灯亮(21—25s)A红灯亮(26—50s)南北方向(B灯)B红灯亮(0-25s)B绿灯亮(26—45s)B黄灯亮(46-50s)3。1.2工程流程图创建一个新的工程创建一个新的工程创建VHDL语言文件保存输入的程序将程序输入文件中对程序进行编译,有错误的要进行修改、再编译,直至没有错对程序进行波形的仿真进行图形电路设计、保存、编译、波形仿真、管脚锁定进行硬件仿真图3—1-2工程流程图3.1。3时序图的假象在时序图中,上升沿有效,即为“1”时灯亮,好比RedA为上升沿(“1")时A方向的红灯是亮的,相对的GreenB也为上升沿(“1”)B方向上绿灯是亮的。具体的时序显示见图3-2时序图。GreenAGreenAYellowARedBYeelowBGreenBRedAAAAA图3-2时序图3。2模块设计3.2.1主控制器模块在QuartusⅡ按照1-1中的方法新建一个工程并新建一个文件项目后,在图1-1—8程序编辑框中将主控制器的程序输入后保存。接着需要对主控制器的程序进行编译,编译的步骤是点击Project→SetasTop将文件置顶,具体的参考图3-2-1-1置顶,接着点击图3-2-1—2的StartCompilation进行编译。图3-2-1-1置顶图3-2-1-2编译在编译的过程中,出现了一些错误,在我编译主控制器的程序时,出现的错误是没有将CLOCK放入PROCESS()中,将程序中的错误一一改正后有时还会出现些Warning,有些Warning并不会影响后面的设计步骤.将上面的错面都改正后,就会显示图3—2-1—3所显示的对话框。下一步就是对程序进行时序仿真,图3-2-1-3编译成功程序编译无措后在当前的工程下面新建一个文件,点击File出现图3-2-1-4新建文件对话框,选择图中显示蓝色的选项就会出现我们想要的界面,把鼠标移在图3-2-1-5时序仿真编辑框中左边的空白处,然后点击右键,选择INSERT→INSERTNODEORBUS选项出现另一个对话框,选择对话框中的NODEFINDER后就会产生新的对话框,点击LIST是在左下角的空白处会出现很多的引脚,我们选中需要的引脚后确定后,我们需要的引脚就会出现在时序仿真编辑中左边的空白处,我们对输入信号进行设定,若想让输出信号显示为十六进制数,我们可以选中输出信号然后点击鼠标的右键选择VALUE→COUNTVALUE后出现的对话框中可以选择自己需要显示的进制类型和进制数的定时等。对输出输入信号编辑完成后保存。在菜单工具栏中选择PROCESSING→SIMULATOORTOOL,出现图3—2-1—6的对话框,按照对话框显示的进行设定,点击QENERATFUNCTIONAL…→START→REPORT,就会得出我们想要的图3—2—1-7主控制器时序仿真图。图3-2-1-4新建文件对话框图3—2—1-5仿真编辑框图3—2-1-6仿真工具对话框图3—2-1—7主控制器的仿真图图3-2-1—7中显示的仿真结果和设计前预计的时序仿真图的结果是相符合的。时序图中的HOLD是保持信号,当HOLD信号为有效信号(“1”)时,则四个方向的路灯都是红灯亮,当HOLD无效时,四个方向的信号灯会正常工作.RESET信号有效时,计数器的显示就会重新从零开始。图中四个方向的指示灯的亮灭顺序是正确的。图3—2—1-8主控制器的模块主控制器的时序仿真完成后,一个程序的设计、仿真就已经暂时结束了,下一步还要进行图形的设计,在总的图形设计前,需要先将每个程序都生成模块,为之后的设计做好准备.点击File→Create\Updade→CreateSymbolFilesforCurrentFile,完成这个操作过程后便会生成主控制器的模块,具体的看图3-2-1-8主控制器的模块。模块中主要有CLOCK、RESET、HOLD、NUMA、NUMB和六个指示灯的输出。3.2.2分频器模块设计中需要用到1秒钟的脉冲,分频这个模块就是为了改变频率脉冲波,使20Mhz的频率最终变为1hz的脉冲,这样就可以得到一个周期是1秒钟的脉冲,分频器的程序见附录。具体的程序编译过程和仿真的过程和主控制模块中谈到的过程是相同的。按照上面谈的步骤完成后就会得到图3-2—2-1分频模块的时序仿真图。图3-2-2-1分频模块的仿真图图3-2—2-2分频模块分频的程序经过编译和时序仿真图后生成的模块是图3—2—2-2分频模块所显示的20mhz的脉冲通过第一模块时变为10hz,再经过第二个模块后变成1hz的脉冲。3。2.3提取显示值模块提取显示值的功能是在10hz的速度下提取显示值,得到的是显示时间值的十位和个位。图3-2-3-1提取显示值的时序仿真图中NUMIN是主控制器的输出值,NUMA和NUMB两个输出端口是要显示的值的高位和低位.高位的最大输出值是为二的四位二进制数,低位的最大输出值是为九的四位二进制数。图3—2-3-2是提取显示值生成的模块。提取显示值的程序见文章的附录.图3—2-3-1提取显示值的仿真图仿真图中,NUMB先从0开始计数,当计到9时NUMA计为1,NUMB重新从0开始计数,当计到9时NUMA会计为2,NUMB再次从0开始计数,当NUMA(高位)计数到2时,NUMB的最大值输出为5.图3-2-3-2提取显示值的模块3。2.4动态扫描模块LED显示的工作原理是利用人类的视觉特性。七段LED数字显示块是由“a、b、c、d、e、f、g、dp”这几段组成的,LED的显示原理就是要看这八段中的哪几段是亮的,那几段是灭的.每段管子不是同时被点亮的并且点亮的时间都是极短的,又因为变化的时间很短暂,亮灭的过程中留下的余光会给人一种错觉,人的眼睛觉得是一组静态的显示灯。具体的动态扫描的程序请看正文后的附录。图3-2—4—1是动态扫描的时序仿真图,图3—2-4-2是动态扫描生成的模块.图3-2-4-1动态扫描的时序仿真图图3-2-4-2动态扫描的模块3.2.5位选器模块位选程序的输入和编译完成后,对程序进行仿真,仿真的步骤依然和上面谈到的一样,下面两幅图一张是位选程序的时序仿真图,另一幅是位选程序生成的模块。见图3-2-5-1和图3—2-5—2。图3-2-5—1位选时序仿真图图3-2—5-2位选模块3。2.6译码器模块译码器是将要显示的数字转换成驱动七段数码管的信号,程序中的NUM与动态扫描模块相连,将四位二进制数转换为八位二进制数,再通过LED8输出。译码器的程序编辑和编译步骤也和前面所说的相同.当译码器编译成功后进行仿真,仿真的结果见图3-2-6-1译码器的时序仿真.像时序仿真图中显示的一样,当NUM输入“0000”时LED8便会输出“00111111”显示数字“0”,当NUM输入“0001"时LED8输出“00000110”显示数字“1"。图3-2-6—2是译码器程序生成的模块。图3-2—6-1译码器的时序仿真图图3-2-6—2译码器模块3.3图形设计3。3。1图形设计的生成将每个程序都编译、仿真完成后,下一步就是要设计图形仿真,在进行图形的时序仿真前,要先进行图形的编辑和编译。要建立一个新工程和图形编辑的文件的的过程是点击File→New→BlockDiagram/SchematicFile.(见图3—3-1-1)图3—3-1-1新建一个文件的对话框新建了一个文件以后,就要开始编辑图形了,要把每一个模块都找出来,选择Assignment→Settings后出现图3—3-1—2的对话框,在左边找到libraries,单击它以后会出现图3-3-1-2右边显示的内容,再点击处可以找到之前生成的那些模块所在的文件夹,把它们一次性添加在libraries中,这样可以为后面图形设计做好准备,全部添加完成后点击“OK”,这样在元件库中就可以找到生成的那些模块了.选择Edit→InsertSymbol后出现图3—3—1-3的对话框,在这里就可以显示出上面生成的模块和软件中原本存在的元器件,按照设计中的需要选出模块和元件。图3—3-1—2libraries对话框图3—3—1-3元件库对话框图3-3—1-4编译对话框图3—3-1-4中标明了每个快捷工具的用途,选择合适的工具把选择好的模块和元件连接起来.然后将连接好的图形文件保存以后进行编译。3.3。2仿真结果图3-3-2—1图形设计的时序仿真图图形设计编译完成以后按照程序的时序仿真的过程对图形设计进行时序仿真,给CLK适当的信号,并且要给输入值定义正确的值,开始仿真后会出现图3-3-2-1就是编译后的时序仿真图。图形设计的时序仿真图中主要显示的是红、黄、绿灯之间的亮灭关系和LED8显示的数值变化过程,还有位选输出端的变化,时序图中可以很容易看出当计时数计数到某一个值的时候东西方向和南北方向是什么颜色的指示灯在工作.当A路的绿灯亮时,B路的红灯亮,A路的绿灯亮20秒后,A路的黄灯亮5秒……由此可以很容易的看出指示灯的亮灭是正确的.3.4管脚的锁定管脚锁定是为了为硬件仿真做准备.当所有的设计都完成后,接着要对图形设计进行管脚的锁定。先确定设计时确定的器件类型和实际的硬件类型是不是一样,选择Assignments→Device,在出现的对话框中认真确定选择的器件是不是正确的。接下来选择Assignments→Pins进入图3—4-1中,用鼠标双击Location就可以设定管脚了.图3—4-2是在这次毕业设计中使用到的芯片ACEX1K-EP1K100QC208-3。图3—4—3是完成编译、时序仿真、管脚锁定这些步骤后的图形设计。图3-4-1管脚锁定对话框图3-4-2芯片ACEX1K-EP1K100QC208-3图3-4—3最终的图形设计表3—4-1管脚和相应的功能序号名称功能管脚口1CLK时钟信号792HOLD保持键73RESET复位键84RedAA路口的红灯115GreenAA路口的绿灯136YellowAA路口的黄灯157RedBB路口的红灯128GreenBB路口的绿灯149YellowBB路口的黄灯1610LED8LED数码管24-3111SI位选36—39在这次毕业设计中,我们用的芯片是ACEX1K-EP1K100QC208-3,图3-4-3就是设计所用的芯片,褐色小点是设计中锁定的管脚。而表3—4-1是锁定的管脚和相应的功能.结论经过了两个多月的努力,毕业设计终于完成了.这次的毕业设计是在大学期间完全没有接触过的知识,在两个月的时间里我已经对FPGA有了一定的认识,又学到了新的知识.刚开始做这个课题时,我从知网和图书馆找了很多的资料,在对这些资料整理的过程中开始一点点的熟悉FPGA和VHDL语言,最初我连最基本的程序都看不懂,经过努力后,我不仅可以看懂程序还可以利用QuartusⅡ软件对程序进行编译、仿真。这次毕业设计的经历提高了我的自学能力,当我遇到一个问题的时候,我会认真的查找出错的地方,然后想办法把它解决掉,一个程序的仿真结果出来后,我还会认真的查看仿真的结果是不是正确的。在做硬件实验时,开始我反复琢磨了很久都没有做出来,通过和老师同学的交流,我终于成功的做出了硬件的仿真。这次的毕业设计结果可以按照设计的正常运行.这次毕业设计告诉我,只要努力、认真,再难再陌生的东西都能够做的出来.数字系统课程设计基于FPGA的交通控制灯设计姓名:学号:班级:摘要随着社会的发展,城市规模的不断扩大,城市交通成为制约城市发展的一大因素。人口和汽车日益增长,市区交通也日益拥挤,人们的安全问题当然也日益重要。因此,红绿交通信号灯成为交管部门管理交通的重要工具之一.有了交通灯,人们的安全出行也有了很大的保障。自从交通灯诞生以来,其内部的电路控制系统就不断的被改进,设计方法也开始多种多样,从而使交通灯显得更加智能化。尤其是近几年来,随着电子与计算机技术的飞速发展,电子电路分析和设计方法有了很大的改进,电子设计自动化也已经成为现代电子系统中不可或缺的工具和手段,这些都为交通灯控制系统的设计提供了一定的技术基础。本课程设计运用erilogHDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示,并最后进行了软件实现,达到了系统要求的功能.设计原理1.1设计要求设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s.能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态.用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。能实现特殊状态的功能显示,1.2设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程.其过程如下图所示:图1。交通灯点亮时间控制说明1.3实现方法本次采用文本编辑法,即利用VerilogHDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。VerilogHDL程序设计2.1整体设计根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起.进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环.为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:图3。交通灯控制系统结构图其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起.2。2具体设计根据整体设计要求,编写各个功能部分VerilogHDL程序,设置各输入输出变量说明如下clk:为计数时钟;qclk:为扫描显示时钟;en:使能信号,为1的话,则控制器开始工作;rst:复位信号,为1的话,控制及技术回到初始状态;hoid:特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;light1:控制主干道方向四盏灯的亮灭;其中,light1[0]~light[2],分别控制主干道方向的绿灯、黄灯和红灯;light2:控制支干道方向四盏灯的亮灭;其中,light2[0]~light2[2],分别控制支干道方向的绿灯、黄灯和红灯;num1:用于主干道方向灯的时间显示,8位,可驱动两个数码管;num2:用于支干道方向灯的时间显示,8位,可驱动两个数码管;counter:用于数码管的译码输出;st1,st2:数码管扫描信号.输入输出及中间变量设置如下:moduletraffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);inputen,clk,qclk,rst,hold,rst1;outputst1,st2;output[7:0]num1,num2;output[6:0]counter;output[2:0]light1,light2;regtim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0]num1,num2;reg[7:0]red1,red2,green1,green2,yellow1,yellow2;二极管点亮控制该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况(hold=‘1’)发生时,无条件点亮红灯的二极管,当检测到复位信号,两
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年林业法律法规知识竞赛试题100题及答案
- 2026秋招:内蒙古高速公路集团面试题及答案
- 2026秋招:民生实业集团试题及答案
- 2026秋招:连云港亚新钢铁试题及答案
- 2026秋招:晶澳太阳能科技试题及答案
- 2026秋招:锦绣大象农牧集团试题及答案
- 2026年BIM在建筑节能设计中的应用实例
- 高中生基于专利技术相似度分析研究工业革命技术创新扩散路径课题报告教学研究课题报告
- 2026年大学(管理会计实务)战略分析阶段测试试题及答案
- 2025医院消防考核试题及答案
- 中国马克思主义与当代2024版教材课后思考题答案
- 2026年日历表(每月一页、可编辑、可备注)
- 钳工技能训练(第4版)PPT完整全套教学课件
- 国家开放大学一网一平台电大《建筑测量》实验报告1-5题库
- 2023-2024学年四川省自贡市小学语文五年级期末高分测试题详细参考答案解析
- 电力工程课程设计-某机床厂变电所设计
- Unit 2 Reading and Thinking教学课件(英语选择性必修第一册人教版)
- 儿童常用补液
- 期货基础知识(期货入门)
- GB/T 22085.2-2008电子束及激光焊接接头缺欠质量分级指南第2部分:铝及铝合金
- GB/T 10454-2000集装袋
评论
0/150
提交评论