基于FPGA的交通灯课程设计报告

上传人:沈*** 文档编号:123580584 上传时间:2022-07-22 格式:DOC 页数:21 大小:1.23MB
返回 下载 相关 举报
基于FPGA的交通灯课程设计报告_第1页
第1页 / 共21页
基于FPGA的交通灯课程设计报告_第2页
第2页 / 共21页
基于FPGA的交通灯课程设计报告_第3页
第3页 / 共21页
点击查看更多>>
资源描述
电子技术课程设计报告EDA技术课程实验报告课程名称:EDA技术及应用报告题目:交通灯控制器设计学 部:信息科学与工程姓 名:陈外流学 号:104328318117050班 级:电信1002同 组 者:周际远指导教师:曹铁军信息科学与工程学院2012-2013学年第二学期1课程设计任务书报告题目交通灯控制器的设计完成时间6.19学生姓名陈外流专业班级电信 1002班指导教师曹铁军职称教授总体设计要求和技术要点1.任务及要求(1) 设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。(2) 红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号。(3) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。(4) 主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。(5) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。(6) 按湖南涉外经济学院课程设计管理办法要求提交课程设计报告。工作内容及时间进度安排第17周:周1-周2 :立题、论证方案设计周3-周5 :程序设计与调试第18周:周1-周3 :硬件调试与测试、撰写课程设计报告周4-周5 :验收答辩课程设计成果1与设计内容对应的软件程序2课程设计总结报告摘要本实验为自主选题设计实验,实验选择具有倒计时显示功能的红黄绿三色交通设计,实验中采用VHDL 作为设计功能描述语言,选用Altera公司的EP1K30144-PIN TQFP最为主控芯片,实验报告中简要介绍了FPGA器件,并给出了设计原理图,详细的介绍了交通灯的设计流程,实验报告中还附有实验代码实验结果照片图。 Abstract This experiment designed for independent choice experiment, experiment choice which has the function of the countdown display red yellow green traffic design, description language (VHDL as design function is applied in the experiments, the most main control chip select MAX II EPM240T100C5 Altera company, experiment report, this paper briefly introduces the MAX II device series, and gives the design diagram, detailed introduces the traffic lights of the design process, the experiment report with the code results photo graph.目录一、概述.1 1.1课程设计背景.1 1.2课程设计题目.1 1.3课题功能补充 .1二、系统设计与论证 .22.1系统设计思路.2 2.2系统框架设计.3 2.3输入输出设计.4 2.4模块设计过程.4 2.4.1状态转换模块.4 2.4.2数码管显示模块.5 2.5模块描述.5 2.5.1主控制模块.5 2.5.2 45s时间倒计时模块.6 2.5.3 25s时间倒计时模块.6 2.5.4 5s时间倒计时模块.7 2.5.5 数据选择模块.7 2.6整体电路图.8三、 系统仿真.9四、心得体会.9五、附录.10 5.1主控制模块源程序.10 5.2 45s模块源程序.12 5.3 25s模块源程序.13 5.4 5s模块源程序.14 5.5 数据选择模块源程序.16六、参考文献.16七、老师评语及成绩.17一、 概述1.1课程设计背景经过两个学期的电子线路设计测试实验,我们从基础的模电、数电典型电路的设计和实现做起,从PSpice和MAX的设计与仿真,到面包板搭建电路的实践与测试,在不断的学习和积累中,了解了电子技术设计的基本过程和基础知识。在本学期,我们迎来了电子技术课程设计,这是一次将理论付诸实践的宝贵机会,是提升我们运用电子技术设计手段实现实际问题的能力的良好机遇。在选题阶段,我踌躇满志的和另一个同学选择了SD卡音乐播放器这个选做题,但是由于没有足够地去深入了解相关的技术问题,致使在开题时没有通过曾老师的验收,只能十分遗憾的选择了基础题,改做交通灯控制器了。虽然有些遗憾,因为当初觉得自己有能力完成那样一个选做题,但是这也给了我一个深刻的教训,在机遇和挑战面前,再有信心也要做好充足的准备来证明你的实力。另一方面给我的启示就是,尽管一个相同的题目前人做了很多工作,给我们提供了一个很好的平台,但是如果我们只是去读懂和使用它们,仅限在这样一个层次是远远不够了,要学会从前人的研究成果中寻找新的突破点,利用自己已掌握的知识或者所具备的能力,在原有的基础上实现更加丰富的功能,这才应该是我们做课程设计的最终目的。仅仅看懂别人的设计思路和代码并不是能力的体现,而真正锻炼我们能力的是在充分掌握前人设计手段的基础上,融会贯通地使原有的设计更加结合实际,更加完善。1.2课程设计题目设计一个十字路口交通信号灯的控制电路。要求红、绿灯按照一定的要求亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。要求主干道每次通行时间为45秒,支干道每次通行时间为25秒。每次变换运行车道前绿灯闪烁,持续时间为5秒。即车道要由45转换为25时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯。可以对主、支方向上的交通灯运行时间进行重新设置。1.3课题功能补充在原有题目功能要求的基础上,我对交通灯控制器的功能在设计方面进行了补充,主要体现在:(1) 增加主、支干道左转红绿信号灯;(2) 增加主、支干道左转运行时间倒计时,并用数码管显示;(3) 增加LED同步显示当前运行状态功能,即用LED显示信号灯状态;功能增加了,可以说任务量也增加了不少。就最为关键的时间设置和显示方面,由于增加了两个左转方向的运行时间,虽然只是增加了两个状态,但是同时显示四个方向的等待和通行的倒计时,确实在开始设计时,我有些茫然,觉得无从下手。我花了很长时间在网上查阅实际中的交通灯到底是如何计时和运行的,也到学校周围的路口实地调查过几种十字路口交通灯的设置,慢慢的从实际设置需求中理清头绪,具体的设计思路将在后面的部分详细说明。二、系统设计2.1系统设计思路前面讲到,基于状态机的方法可以轻松实现交通灯的控制,而状态转换利用Verilog中的case和循环语句很容易实现。我将四种状态的转换顺序设置为:主直主左次直次左主直(依次循环),每个状态在设置时间的基础上由倒计时进行状态的变换。以上都是比较容易实现的,也是很多经典的例子上有讲解过的,下面我着重说明下如何实现四个方向同时进行等待和通行的倒计时。用四组数码管来显示主、次干道直行和左转倒计时,首先需要了解这四组数码管显示的规律,也就是显示计数的规律。在网上查阅资料的时候,通过观看一段视频,我茅塞顿开。这个视频展示的是基于51单片机实现的交通灯控制器的实物功能演示,它也是利用了四组数码管分别显示四个方向的倒计时。通过反复观看我发现,其实在四个方向中,一个是通行倒计时,另外三个是等待倒计时,而等待倒计时又是它之前状态通行时间之和,在显示的效果上就是总会有两组倒计时数值是相同的,即相邻状态的那两个是相同的,一个是正在通行,一个是等待上一状态通行的结束。这之后的两个状态显示的倒计时是累加上之前未通行状态的设置时间和正在通行状态的剩余时间之和。如图所示:图1 状态转换图图2 倒计时显示方式(以主干道正在通行为例)2.2系统框架设计通过以上分析,可以较为清晰地看出在系统设计状态转换和一些实现方式的设计思路,下面说明系统的框架整体设计思路。整体框架思路为:首先将教学实验箱提供的50MHZ时钟信号分频,转换为可利用的1Hz CP信号,同时为了实现绿灯在1s内闪烁一次,再转换出一个2Hz的CP信号提供给需要闪烁的绿灯。然后是设置时间的功能模块,通过开关可以分别设置四个方向的运行时间,并将设置的时间传送到状态转换模块中。在状态转换功能模块中,通过前面传送来的设定通行时间进行倒计时和转换状态,并输出当前方向通行剩余时间和四向使能EN信号。在时间显示功能模块中,接收到前面的设置时间、剩余时间、使能信号,运用前面说明的现实方式的逻辑,计算出等待时间,在该向通行时显示剩余时间,在该向等待时显示等待时间,最终将时间信号输出到数码管显示模块;另外,由于数码管数量的限制,只能一次性显示8个(即四组),那么究竟是显示倒计时还是显示设置时间就需要一个开关信号来区分,于是设置一个输入信号来判别是否进入设置模式,并且只能在设置模式下设置时间。LED信号灯显示功能模块则将状态转换模块输出的EN使能信号和2Hz的CP信号以及当前剩余时间作为输入,根据状态点亮相应的LED信号灯。LED显示功能模块的原理和LED信号灯显示模块类似,也是根据同步状态EN使能信号,通过刷新字符的方式,改变和显示当前通行状态。最后,数码管显示功能模块是结合DE2教学开发板数码管的编码规则将BCD码转换为七段码,在译码后显示出来。图3 系统框图上图所示的系统框图只是大致说明系统的框架和流程,没有具体到每个模块的输入和输出,在前面的文字描述中有所说明,更加详细的设计说明将在后面模块功能说明的详细介绍。2.3输入输出设计根据功能需要,输入设计采用两个按键,模拟主干道、支干道有车过来。时钟信号输入为1MHz的时钟频率振荡器。输入设计采用4个数码管用于显示倒计时,8个LED灯作为交通信号。2.4模块设计过程2.4.1状态转换模块该模块是控制器的核心部分,但是原理其实很简单,只是输入输出量很多,获取的信息多,处理后输出的信息也多。前文已说明了状态转换的思想是该控制器实现的主要思路,那么如何处理好这么多输入输出的关系就成为了重点需要解决的问题了。输入部分的关键是四向设定通行时间的传入,这可以从时间设置模块的输出获取。这四个设定时间传入的时间需要选择好,即选择恰当的时机读取新的设置通行时间,因为设置时间的操作可能发生在任何运行时间,如果不能选择很好的时机来读入新的设置通行时间,可能造成逻辑上的混乱,致使状态不能按照正常的顺序进行转移,也给实际的交通信号控制造成了一定的影响。在这里,我选取了在每个状态运行结束的同时来读取新的设置通行时间,这样在任意状态时刻设置时间,将会在下一个状态到来时切换到新的通行时间上去运行,一方面不会使设置的效果延时太长,另一方面也不会出现如果恰巧在该方向上设置时间,那么该方向可能一直显示通行而不能正常转换状态的逻辑错误。输出部分的关键是四个方向的EN使能信号和通行倒计时时间。根据所在的状态,可以对四个方向的EN使能信号进行赋值输出,用于控制信号灯显示和LED同步状态显示等。通行时间倒计时是为了数码管能够显示出通行剩余时间和等待通行时间,这个显示的方式在前文也有描述,这里不再赘述。通行剩余时间就是状态转换过程所依据的倒计时时间,在状态转换中需要根据各向通行时间在每个通行状态进行减计数倒计时,当计数到01时切换状态,而这个倒计时的时间正好是该方向通行的剩余时间,输出后经过显示方式的逻辑处理,就可以变成其它禁止方向的等待通行时间了。2.4.2数码管显示模块该功能模块同样建立在DE2底层函数调用基础上,实现4个数码管的时间显示。根据DE2教学开发板上数码管的七段编码规则,将输入时间的8位BCD码转换为七段码显示出来,我根据实际需要修改了底层函数,使得调用更加方便和集成化。根据数码管七段的位置进行编码,每个段位的管子仍然是共阳极的,所以高电平实现熄灭管子,低电平实现点亮管子。小数点在物理上没有连接,所以无法使用。图4 七段数码管的原理图和每段的标识位置该功能在实现上,只要有输入就会有相应的输出,所以原理上比较简单,只要编码正确不会出现问题,所以不再赘述。2.5模块描述2.5.1主控制模块说明:下面每个模块的源程序都在附录中图5 主控制模块原理图inputCLK /时钟,复位信号输入inputSM、SB /SM为主干道模拟检测开关,SB为支干道模拟检测开关outputMR、MY、MG /主干道的红、黄、绿led灯显示引脚output BR、BY、BG /支干道红、黄、绿led灯显示引脚模块源程序:2.5.2 45s时间倒计时模块图6 45s时间倒计时原理图inputen45/45s模块使能信号inputsb /支干道使能信号inputclk/模块时钟源output dout45m7.0 /主干道倒计时时间输出output dount45b7.0 /支干道倒计时时间输出2.5.3 25s时间倒计时模块图7 25s时间倒计时inputen25 /25s模块使能信号inputsb /支干道使能信号input sm /主干道使能信号inputclk /模块时钟源output dout25m7.0 /主干道倒计时时间输出output dount25b7.0 /支干道倒计时时间输出2.5.4 5s时间倒计时模块图8 5s时间倒计时原理图inputen05b /支干道使能信号input en05m /主干道使能信号inputclk /模块时钟源output dout57.0 /倒计时时间输出2.5.5 数据选择模块图9 数据选择器原理图input en45 /45s模块使能端,高电平有效input en25 /25s模块使能端,高电平有效input en05m /主干道5s模块使能端,高电平有效input en05b /支干道5s模块使能端,高电平有效input ain45m7.0 /主干道45s时间输出端input ain25m7.0 /主干道25s时间输出端input ain25b7.0 /支干道25s时间输出端input ain057.0 / 5s时间输出端2.6整体电路图将上面设计的各功能模块依据逻辑思路,结合输入输出设计搭建成如下图所示的整体电路图。图10 系统总原理图16三、 系统仿真先设置系统结束时间为10us(默认为1us,加长时间为了得到更多的周期),设置时钟clk的值为时钟且周期为10ps图11 时序仿真整个周期图图12 放大后的时序仿真图3.2试验箱硬件仿真结果图13 试验箱硬件仿真图四、心得体会做事不能眼高手低。就像我们在选择选做题的时候,虽然可以找到现成的代码,感觉应该不会太难,但是仅仅靠感觉是做不成事的,只有耐心细致地去深入研究,进行充分论证,才能得出准确可靠的结果。尽管有现成的代码,但最终能不能为我所用还要靠认真的研读,充分体会编程的思想,这样别人的代码才能转化为自己的。要有工程的进度安排。对于时间的规划其实是我们最欠缺的,记得在软件开发的课程中学到过利用甘特图来划定开发进度,但是实际中我们却完全没有按照它来实现。每次课程设计,大部分同学都是最后一段时间拼命赶,在验收的前几天还在通宵写代码。以前我也是这样,不过这次有所改善了,因为我大致规划了设计、实现和调试的时间,使得其他同学还在写程序进行仿真的时候,我已经开始了逐步的下载测试和修改完善工作,这为我在功能方面的完善提供了宝贵的时间。要善于借鉴别人的想法。很多时候自己独立思考可以充分锻炼能力,但是汲取他人之所长会对自己的工作产生事倍功半的效果。但是借鉴要有限度,要讲究方式方法。很多同学容易走两个极端,一种是埋头编程,中途遇到很多困难其实前人也都遇到并且很好地解决了,但是他们还要继续重复地探寻解决途径;另一种是照单全收,完全不明白作者的用意和初衷,只知道看结果对就拿来用,没弄明白其所以然,显然是荒废了学习的机会。五、附录5.1主控制模块源程序library ieee;use ieee.std_logic_1164.all;entity jtdkz isport(clk,sm,sb:in std_logic; mr,my,mg,br,by,bg:out std_logic);end entity jtdkz;architecture art of jtdkz istype state_type is(a,b,c,d);signal state:state_type;begincnt:process(clk)is variable s:integer range 0 to 45; variable clr,en:bit;beginif(clkevent and clk=1)then if clr=0then s:=0; elsif en=0then s:=s; else s:=s+1; end if; case state is when a=mr=0;my=0;mg=1; br=1;by=0;bg=0; if(sb and sm)=1then if s=45 then state=b;clr:=0;en:=0; else state=a;clr:=1;en:=1; end if; elsif(sb and(not sm)=1then state=b;clr:=0;en:=0; else statemr=0;my=1;mg=0; br=1;by=0;bg=0; if s=5 then state=c;clr:=0;en:=0; else statemr=1;my=0;mg=0; br=0;by=0;bg=1; if(sm and sb)=1 then if s=25 then state=d;clr:=0;en:=0; else state=c;clr:=1;en:=1; end if; elsif sb=0 then state=d;clr:=0;en:=0; elsestatemr=1;my=0;mg=0;br=0;by=1;bg=0;if s=5 thenstate=a;clr:=0;en:=0;elsestate=d;clr:=1;en:=1;end if;end case;end if;end process cnt;end architecture art; 5.2 45s模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-entity time_45 isport(sb,clk,en45:in std_logic; dout45m,dout45b:out std_logic_vector(7 downto 0);end entity time_45;-architecture art of time_45 issignal cnt6b:std_logic_vector(5 downto 0);beginprocess(sb,clk,en45)isbeginif sb=0then cnt6b=cnt6b-cnt6b-1;elsif(clkevent and clk=1)thenif en45=1 then cnt6b=cnt6b+1;elsif en45=0then cnt6bdout45m=01000101;dout45bdout45m=01000100;dout45bdout45m=01000011;dout45bdout45m=01000010;dout45bdout45m=01000001;dout45bdout45m=01000000;dout45bdout45m=00111001;dout45bdout45m=00111000;dout45bdout45m=00110111;dout45bdout45m=00110110;dout45bdout45m=00110101;dout45bdout45m=00110100;dout45bdout45m=00110011;dout45bdout45m=00110010;dout45bdout45m=00110001;dout45bdout45m=00110000;dout45bdout45m=00101001;dout45bdout45m=00101000;dout45bdout45m=00100111;dout45bdout45m=00100110;dout45bdout45m=00100101;dout45bdout45m=00100100;dout45bdout45m=00100011;dout45bdout45m=00100010;dout45bdout45m=00100001;dout45bdout45m=00100000;dout45bdout45m=00011001;dout45bdout45m=00011000;dout45bdout45m=00010111;dout45bdout45m=00010110;dout45bdout45m=00010101;dout45bdout45m=00010100;dout45bdout45m=00010011;dout45bdout45m=00010010;dout45bdout45m=00010001;dout45bdout45m=00001010;dout45bdout45m=01001001;dout45bdout45m=00001000;dout45bdout45m=00000111;dout45bdout45m=00000110;dout45bdout45m=00000101;dout45bdout45m=01000100;dout45bdout45m=00000011;dout45bdout45m=00000010;dout45bdout45m=00000001;dout45bdout45m=00000000;dout45b=00000000; -0 0end case;end process;end architecture art;5.3 25s模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-entity time_25 is port(sb,sm,clk,en25:in std_logic; dout25m,dout25b:out std_logic_vector(7 downto 0);end entity time_25;-architecture art of time_25 is signal cnt5b:std_logic_vector(4 downto 0); begin process(sb,sm,clk,en25)is begin if sb=0or sm=0then cnt5b=cnt5b-cnt5b-1; elsif(clkevent and clk=1)then if en25=1 then cnt5b=cnt5b+1; elsif en25=0then cnt5bdout25m=00100101;dout25bdout25m=00100100;dout25bdout25m=00100011;dout25bdout25m=00100010;dout25bdout25m=00100001;dout25bdout25m=00100000;dout25bdout25m=00011001;dout25bdout25m=00011000;dout25bdout25m=00010111;dout25bdout25m=00010110;dout25bdout25m=00010101;dout25bdout25m=00010100;dout25bdout25m=00010011;dout25bdout25m=00010010;dout25bdout25m=00010001;dout25bdout25m=00001010;dout25bdout25m=01001001;dout25bdout25m=00001000;dout25bdout25m=00000111;dout25bdout25m=00000110;dout25bdout25m=00000101;dout25bdout25m=01000100;dout25bdout25m=00000011;dout25bdout25m=00000010;dout25bdout25m=00000001;dout25bdout25m=00000000;dout25b=00000000; -0 0 end case; end process;end architecture art;5.4 5s模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-entity time_5 is port(clk,en05m,en05b:in std_logic; dout5:out std_logic_vector(7 downto 0);end entity time_5;-architecture art of time_5 is signal cnt3b:std_logic_vector(2 downto 0); begin process(clk,en05m,en05b)is begin if(clkevent and clk=1)then if en05m=1 or en05b=1 then cnt3b=cnt3b+1; else cnt3bdout5dout5dout5dout5dout5dout5=00000000; end case;end process;end architecture art;5.5 数据选择模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-entity xskz is port(en45,en25,en05m,en05b:in std_logic; ain45m,ain45b:in std_logic_vector(7 downto 0); ain25m,ain25b,ain05:in std_logic_vector(7 downto 0); doutm,doutb:out std_logic_vector(7 downto 0);end entity xskz;-architecture art of xskz is begin process(en45,en25,en05m,en05b)is begin if en45=1then doutm=ain45m(7 downto 0);doutb=ain45b(7 downto 0); elsif en05m=1 then doutm=ain05(7 downto 0);doutb=ain05(7 downto 0); elsif en25=1 then doutm=ain25m(7 downto 0);doutb=ain25b(7 downto 0); elsif en05b=1 then doutm=ain05(7 downto 0);doutb=ain05(7 downto 0); end if;end process;end architecture art;六、参考文献1谭会生、张昌凡,EDA技术及应用(第三版),西安电子科技大学出版社,20112陈忠平、高金定、高见芳,基于Quartus|的FPGA/CPLD设计与实践,电子工业出版社,2010七、老师评语及成绩教师评语及设计成绩教师评语:课程设计成绩: 指导教师:(签名)日期: 年 月 日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!