您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > EDA报告-交通灯控制器
天津工业大学EDA课程设计报告题目:交通灯控制器班级:电子1301学号:姓名:一、设计目的1.了解交通灯的变化规律;2.掌握VHDL编程语言,了解实际设计中的优化方案。二、开发软件QuartusII三、设计任务及分析1.设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。2.红、绿、黄发光二极管作信号灯。3.主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。4.主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。5.在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。题目分析:根据题目要求可以知道,系统需要在几种不同的状态之间进行切换,为了设计的方便,并且实现高效率和高可靠的逻辑控制,这里我们采用状态机的方法进行设计。四、设计方案主控电路是一个单进程Moore型有限状态机,通过接收计数器发送的“时间到”(进位)信号以及根据s(用来指示支干道是否有车来,‘1’表示支干道没有车来,‘0’支干道有车来)的值进行状态的切换,实现对十字路口主干道、支干道两个方向的红、黄、绿灯状态的控制。系统框图如图一所示。图一系统整体框图具体控制过程为:当s=‘1’时,支干道没有车来,主干道处于常允许通行的状态,此时主干道亮绿灯,支干道亮红灯;当s=‘0’时,支干道有车来,即主、支干道均有车,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,且在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。变化规律为:主干道绿灯亮,支干道红灯亮→主干道黄灯亮,支干道红灯亮→主干道红灯亮,支干道绿灯亮→主干道红灯亮,支干道黄灯亮→主干道绿灯亮,支干道红灯亮…,这样依次循环。由于主、支干道有45秒和25秒的放行时间,以及每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,所以设计45秒、25秒和5秒计时电路,均采用倒计时。关于显示的问题,译码电路是把对应的二进制码直接转换成数码管显示时的码字,并且由于实验箱上采用的是8位数码管,所以必须采用数码管的动态扫描。五、各模块功能介绍1.顶层原理图及基本原理如图1-1所示,系统时钟(48M)经过分频得到1HZ方波,为状态机和计数器提供时钟,lsdsn[5..0]六位总线分别表示主干道和支干道的绿灯、黄灯、红灯。ledsn[5]:主干道绿灯,ledsn[4]:主干道黄灯,ledsn[3]:主干道红灯,ledsn[2]:支干道绿灯,ledsn[1]:支干道黄灯,ledsn[0]:支干道红灯。当系统复位后,如果s输入一个低电平(主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒)状态机进入s0,主控电路c45输出一个高电平使能45s倒计时计数器(此时主干道绿灯亮,支干道红灯亮);当计数结束后,45s倒计时计数器的cout输出一个进位信号,使状态机进入下一个状态s1,此时主控电路(状态机)c545输出一个高电平使能主干道5s倒计时计数器(此时主干道黄灯亮,支干道红灯亮);当计数结束后,5s倒计时计数器的cout输出一个进位信号,使状态机进入下一个状态s2,此时主控电路c25输出一个高电平使能25s倒计时计数器(此时主干道红灯亮,支干道绿灯亮);当计数结束后,25s倒计时计数器的cout输出一个进位信号,使状态机进入下一个状态s3,此时主控电路c525输出一个高电平使能支干道5s倒计时计数器(干道红灯亮,支干道黄灯亮);当计数结束后,5s倒计时计数器的cout输出一个进位信号,使状态机重新进入下一个状态s0,依次循环.....当系统复位后,如果s输入一个高电平(主干道处于常允许通行的状态),此时状态机一直保持在s0状态。图1-1顶层原理图图1-2s=0时原理图仿真结果当s=0时,表示主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,从仿真波形图上可以看到,ledsn[5..0]分别表示主干道绿、黄、红灯,支干道绿、黄、红灯,当复位后,主干道绿灯(ledsn[5]=1),支干道红灯(ledsn[0]=1);计满45秒后进入下个状态,主干道黄灯(ledsn[4]=1),支干道红灯(ledsn[0]=1);计满5秒后进入下个状态,主干道红灯(ledsn[3]=1),支干道绿灯(ledsn[2]=1);计满25秒后进入下个状态,主干道红灯(ledsn[3]=1),支干道黄灯(ledsn[1]=1);计满5秒后进入下个状态,主干道绿灯(ledsn[5]=1),支干道红灯(ledsn[0]=1),依次循环.....(sg和bt为译码电路的仿真结果,在此可以忽略)图1-3s=1时原理图仿真结果当s=1时,表示主干道处于常允许通行的状态,此时从仿真图上可以看到状态一直保持在主干道绿灯(ledsn[5]=1),支干道红灯(ledsn[0]=1)。2.分频器如图2-1所示,这次交通灯的设计用到了两个分频器,一个是将系统时钟进行48M分频得到1HZ的时钟提供给状态机和计数器;另一个分频器是将系统时钟进行48K分频得到1KHZ的时钟,给数码管动态显示模块作为扫频时钟用。这里采用的是事先写好的通用程序,分频系数可以根据具体需要进行修改,在此只给出原理图及VHDL源代码。图2-1分频器原理图其VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.NUMERIC_BIT.ALL;--包含移位函数等.ENTITYint_div2ISGENERIC(F_DIV:Integer:=48000;--分频系数F_DIV_WIDTH:Integer:=32--分频计数器宽度);PORT(clock:INSTD_LOGIC;clock_out:OUTSTD_LOGIC);END;ARCHITECTUREoneOFint_div2ISSIGNALclk_p_r:STD_LOGIC;--上升沿输出时钟SIGNALclk_n_r:STD_LOGIC;--下降沿输出时钟SIGNALcount_p:STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);--上升沿脉冲计数器SIGNALcount_n:STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);--下降沿脉冲计数器--SIGNALf_div_width_r:STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);SIGNALclock_out_r:STD_LOGIC;SIGNALfull_div_p:STD_LOGIC;--上升沿计数满标志SIGNALhalf_div_p:STD_LOGIC;--上升沿计数半满标志SIGNALfull_div_n:STD_LOGIC;--下降沿计数满标志SIGNALhalf_div_n:STD_LOGIC;--下降沿计数半满标志BEGINclock_out=clock_out_r;--clock_out=clockWHEN(F_DIV=1)ELSE((clk_p_r='1'ANDclk_n_r='1')WHEN(F_DIV(0)='1')clk_p_r);-------------------------判断计数标志位置位与否.full_div_p='1'WHEN(count_pF_DIV-1)ELSE'0';half_div_p='1'WHEN(count_p(F_DIV/2)-1)ELSE'0';full_div_n='1'WHEN(count_nF_DIV-1)ELSE'0';half_div_n='1'WHEN(count_n(F_DIV/2)-1)ELSE'0';PROCESS(clock)--上升沿脉冲计数--VARIABLEi:IntegerRANGE0TO31;BEGINIFRISING_EDGE(clock)THENIFfull_div_p='1'THENcount_p=count_p+1;IF(half_div_p='1')THENclk_p_r='0';ELSEclk_p_r='1';ENDIF;ELSEcount_p=(OTHERS='0');clk_p_r='0';ENDIF;ENDIF;ENDPROCESS;PROCESS(clock)--下降沿脉冲计数BEGINIFFALLING_EDGE(clock)THENIFfull_div_n='1'THENcount_n=count_n+1;IFhalf_div_n='1'THENclk_n_r='0';ELSEclk_n_r='1';ENDIF;ELSEcount_n=(OTHERS='0');clk_n_r='0';ENDIF;ENDIF;ENDPROCESS;PROCESS(clock)BEGINIFRISING_EDGE(clock)THENIFF_DIV=1THENclock_out_r=clock;ELSEIF(F_DIVREM2)=1THENclock_out_r=clk_p_rANDclk_n_r;ELSEclock_out_r=clk_p_r;ENDIF;ENDIF;ENDIF;ENDPROCESS;END;3.主控电路(状态机)主控电路是一个单进程的Moore型有限状态机,状态转换图如图3-1所示。图3-1状态转换图每种状态说明如下:原状态目的状态转换条件状态输出s0s1s=’1’且s45=’1’ledsn=100001;c45='1';c25='0';c545='0';c525='0';s1s2s545=’1’ledsn=010001;c45='0';c25='0';c545='1';c525='0';s2s3s25=’1’ledsn=001100;c45='0';c25='1';c545='0';c525='0';s3s0s525=’1’ledsn=001010;c45='0';c25='0';c545='0';c525='1';状态机原理图如图3-2所示。图3-2状态机原理图状态机仿真结果如图3-3所示。图3-3状态机仿真结果从仿真结果可以看到,满足状态转换条件后,状态机就会从现在的状态转移到下一个状态,具体的转换结果与上表相同。其VHDL代码如下:libraryieee;useieee.std_logic_1164.all;entitytrafficisport(CLK,RST,s,s45,s25,s545,s525:instd_logic;c45,c25,c545,c525:outstd_logic;ledsn:outstd_logic_vector(5downto0));endtraffic;architectureoneoftrafficistypesxis(s0,s1,s2,s3);signalcurrent_state:sx;beginprocess(RST,CLK)beginifRST='1'thencurrent_state=s0;ledsn=100001;c45='1';c25='0';c545='0';c525='0';elsifCLK'eventandCLK='1'thencasecurrent_stateiswhens0=ifs='1'thencurrent_state=s0;elsifs45='1'thencurrent_state=s1;elsecurrent_state=s0;endif;ledsn=10
本文标题:EDA报告-交通灯控制器
链接地址:https://www.777doc.com/doc-3516098 .html