您好,欢迎访问三七文档
EDA实验报告一、课程设计题目及要求-1-题目:十字路口交通灯具体要求:设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向红、黄、绿灯的指示状态。用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向红、黄、绿等。变化规律为:东西绿灯亮,南北红灯亮——东西黄灯亮,南北红灯亮——东西红灯亮,南北绿灯亮——东西红灯亮,南北黄灯亮——东西绿灯亮,南北红灯亮······,这样循环下去。南北方向每次通行时间为45秒,东西方向每次通行时间为45秒,要求两条交叉道路上的车辆交替运行,时间可设置修改。绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。并要求所有交通灯的状态变化在时钟脉冲上升沿处。二、实验编程环境QuartusII8.0三、课程设计的详细设计方案(一)、总体设计方案的描述1.1、根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。首先根据功能要求,明确两组交通灯的状态,这两组交通灯总共共有四种状态,我们用ST0,ST1,ST2,ST3来表示:St0表示东西路绿灯亮,南北路红灯亮;St1表示东西路黄灯亮,南北路红灯亮;St2表示东西路红灯亮,南北路绿灯亮;St3表示东西路红灯亮,南北路黄灯亮;1.2、根据上述四种状态描述列出的状态转换表表9-1交通灯控制器状态转换表当前状态下一状态转换条件St0St1主路绿灯亮了40秒St1St2主路黄灯亮了5秒St2St3主路绿灯亮了40秒St3St0支路黄灯亮了5秒1.3、根据状态转换表得到交通灯控制器的状态转移图如图所示。-2-交通灯控制器的状态转移图(二)各个模块设计2.1、控制器模块clkholdaredagreenayellowbredbgreenbyellowcontrolinst1控制器模块示意图其中,clk为时钟信号,时钟上升沿有效。hold为紧急制动信号,低电平有效。ared,agreen,ayellow分别表示东西方向的红灯,黄灯,绿灯显示信号,高电平有效。bred,bgreen,byellow分别表示南北方向的红灯,黄灯,绿灯显示信号,高电平有效。用于控制红绿黄灯的亮暗情况。2.2、45秒倒计时计数器模块St0St3St1St2-3-45秒倒计时计数器模块示意图其中,CLK为时钟信号,时钟上升沿有效。EN为使能端,高电平有效。CR为紧急制动信号低电平有效。QL{3..0}是计数低位。QH{3..0}是计数高位。用于45秒的倒计时计数。2.3、7位译码器模块dat[3..0]abcdefgseg7inst37位译码器模块示意图其中dat{3..0}为要译码的信号。a,b,c,d,e,f,g为译码后的信号。用于将45秒倒计时计数的信号译码成数码管可以识别的信号。2.4、50MHZ分频器模块clkclk_outdevideinst50MHZ分频器模块示意图其中clk为50MHZ时钟信号,时钟上升沿有效。输出clk_out为1HZ时钟信号,时钟上升沿有效。用于将50MHZ的时钟信号转变成1HZ的时钟信号。(三)结构图设计CLKENCRQL[3..0]QH[3..0]OCm45inst2-4-(四)仿真电路时序仿真图从图中可看到首先进入st0状态,此时东西路绿灯亮,南北路红灯亮;计数器计数到40秒时,交通灯控制器进入st1状态,此时东西路黄灯亮,南北路红灯亮;在st1状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st2,此时东西路红灯亮,南北路绿灯亮;在st2状态计数器又开始计数,计数器计数到40秒后,交通灯控制器状进入st3状态,此时东西路红灯亮,南北路绿灯亮;在st3状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st0状态,此时东西路绿灯亮,南北路红灯亮,如些循环反复,完成十字交通路口的红绿灯控制。A0-G0,A1-G1分别为45到0的译码。(五)分配引脚-5-为了对此工程进行硬件测试,应将编译成功后的程序下载到目标芯片上,并指定输入输出信号的管脚,以便添加激励信号和测试输出信号。在下载编译成功的文件之前,需要制定器件的管脚,选择Assignments|Pins命令,在随后出现的下拉列表框中选择对应端口信号名的器件引脚号,如下图:四、设计总结和心得通过此次EDA设计,我系统性的学习了课本上相关的知识,对课堂上的知识更加了解。通过认真研究课本,使我对EDA程序设计有了一定思路;通过实验课的学习,在程序的设计,程序的调试方面都学到了很多东西,在这几天时间里,实验室的氛围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。其中在编程中也出现了很多的问题,但通过老师和同学的帮助下,把问题一一解决。其实只要我们自己认真看书,仔细分析,仔细调试,就一定会发下错误,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习EDA更是如此,程序只有经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。五、源代码控制器模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycontrolisport(clk,hold:instd_logic;ared,agreen,ayellow,bred,bgreen,byellow:outstd_logic);endcontrol;architecturebehaviorofcontrolistypestate_typeis(s0,s1,s2,s3,s4);signalcurrent_state,next_state:state_type;signalcounter:std_logic_vector(6downto0);-6-beginsynch:processbeginwaituntilclk'eventandclk='1';ifhold='0'thencounter=counter;elseifcounter89thencounter=counter+1;elsecounter=(others='0');endif;endif;endprocess;processbeginwaituntilclk'eventandclk='1';current_state=next_state;endprocess;state_trans:process(current_state)begincasecurrent_stateiswhens0=ifhold='0'thennext_state=s4;elseifcounter39thennext_state=s0;elsenext_state=s1;endif;endif;whens1=ifhold='0'thennext_state=s4;elseifcounter44thennext_state=s1;elsenext_state=s2;endif;endif;whens2=ifhold='0'thennext_state=s4;elseifcounter84thennext_state=s2;elsenext_state=s3;endif;endif;whens3=ifhold='0'thennext_state=s4;elseifcounter89thennext_state=s3;elsenext_state=s0;endif;endif;whens4=ifhold='0'thennext_state=s4;elseifcounter39thennext_state=s0;-7-elsifcounter44thennext_state=s1;elsifcounter84thennext_state=s2;elsifcounter89thennext_state=s3;endif;endif;endcase;endprocess;output:process(current_state)begincasecurrent_stateiswhens0=ared='0';agreen='1';ayellow='0';bred='1';bgreen='0';byellow='0';whens1=ared='0';agreen='0';ayellow='1';bred='1';bgreen='0';byellow='0';whens2=ared='1';agreen='0';ayellow='0';bred='0';bgreen='1';byellow='0';whens3=ared='1';agreen='0';ayellow='0';bred='0';bgreen='0';byellow='1';whens4=ared='1';agreen='0';ayellow='0';bred='1';bgreen='0';byellow='0';endcase;endprocess;endbehavior;45秒倒计时计数器模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitym45isport(CLK:instd_logic;EN:instd_logic;CR:instd_logic;QL,QH:outstd_logic_vector(3downto0);OC:outstd_logic);endm45;architecturebehavofm45issignalcouL,couH:std_logic_vector(3downto0);-8-beginprocess(CR,CLK,EN)beginifCR='0'thencouL=0000;couH=0000;elsifclk'eventandclk='1'thenifEN='1'thenif(couL=0andcouH=0)thencouL=0100;couH=0100;elsifcouL=0thencouL=1001;couH=couH-1;elsecouL=couL-1;endif;endif;endif;endprocess;process(couL,couH)beginif(couL=0andcouH=0)thenOC='1';elseOC='0';endif;endprocess;QL=couL;QH=couH;endbehav;7位译码器模块:libraryieee;useieee.std_logic_1164.all;entityseg7isport(dat:instd_logic_vector(3downto0);a,b,c,d,e,f,g:outstd_logic);endseg7;architecturearcofseg7issignaltmp:std_logic_vector(6downto0);beginprocess(dat)begincasedatiswhen0000=tmp=0000001;when0001=tmp=1001111;when0010=tmp=0010010;when0011=tmp=0000110;when0100=tmp=1001100;when0101=tmp=0100100;when0110=tmp=0100000;when0111=tmp=0001111;when1000=tmp=0000000;when1001=tmp=0000100;when1010=tmp=0001000;when1011=tmp=1100000;when1100=tmp=0110001;when1101=tmp=1000010;when1110=tmp=0110000;when1111=tmp=0111000;w
本文标题:交通灯控制器的设计
链接地址:https://www.777doc.com/doc-5687297 .html