1课程设计报告书课题名称:基于VHDL的交通灯设计姓名:xxx学号:xxx专业:电子信息工程指导老师:付莉2015年05月16日2基于VHDL的交通灯设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。设计要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。支干道主干道图1路口交通管理示意图ABCD主干道交通灯绿(40秒)黄(4秒)红(20秒)红(4秒)支干道交通灯红红绿黄表1交通信号灯的4种状态3二、设计原理:设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编辑器件的使用。通过制作来了解交通灯控制系统,交通灯系统主要是实现城市十字交叉路口红绿灯的控制。设计说明:(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指交通的。因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。模块说明:系统输入信号:clk:由外接信号发生器提供256的时钟信号;系统输出信号:full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。模块说明:系统输入信号:full:接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号;tl:倒计数值秒数个位变化控制信号;th:倒计数值秒数十位变化控制信号;(3)第三模块:红绿灯状态转换电路。本电路负责红绿灯的转换。模块说明:4系统输入信号:full:接收由clk电路的提供的1hz的时钟脉冲信号;tm:接收计数秒数选择电路状态转换信号;comb_out:负责红绿灯的状态显示。(4)第四模块:时间显示电路。本电路负责红绿灯的计数时间的显示。模块说明:系统输入信号:tl:倒计数值秒数个位变化控制信号;th:倒计数值秒数十位变化控制信号;系统输出信号:led7s1:负责红绿灯的显示秒数个位。led7s2:负责红绿灯的显示秒数十位。三、设计方案时间显示数据输出红黄绿灯信号输出图2交通信号灯控制器的原理框图状态发生器(两位二进制计数器)定时时间到检测电路预置数产生电路计时器1秒时钟脉冲信号发生器红黄绿灯输出控制电路(RYG)5CLK时间显示数据输出信号灯输出图3交通信号灯控制器程序原理框图该程序由7个进程组成,进程P1和P2将CLK信号分频后产生1秒信号,进程P3、P4、P5构成两个带有预置数功能的十进制计数器,其中P4产生允许十位计数器计数的控制信号。进程P6实现状态转换和产生状态转换的控制信号,进程P7产生次态信号和信号灯输出信号,以及每一个状态的时间值。四、程序清单libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytrafficisport(clk:instd_logic;led7s1:outstd_logic_vector(6downto0);led7s2:outstd_logic_vector(6downto0);comb_out:outstd_logic_vector(5downto0));end;architectureoneoftrafficistypedmis(s0,s1,s2,s3);signalcurrent_state,next_state:dm;signalfull:std_logic;秒脉冲信号发生器(进程P1和P2)计数器(进程P3、P4和P5)状态寄存器(进程P6)次态发生器信号灯输出信号(进程P7)6signaltl:std_logic_vector(6downto0);signalth:std_logic_vector(1downto0);signaltm:std_logic_vector(6downto0);signaltime:std_logic_vector(6downto0);beginP_REG:process(clk)variablecnt8:std_logic_vector(7downto0);beginifclk'eventandclk='1'thenifcnt8=11111111thencnt8:=01111111;full='1';elsecnt8:=cnt8+1;full='0';endif;endif;endprocessP_REG;process(full)beginiffull'eventandfull='1'thenIftime1000011thentime=time+1;elsetime=0000000;endif;endif;endprocess;REG:process(full,current_state)beginiffull='1'andfull'eventthencurrent_state=next_state;endif;endprocess;7COM:process(current_state,time)begincasecurrent_stateiswhens0=comb_out=001100;tm=39-time;iftime=39thennext_state=s1;elsenext_state=s0;endif;whens1=comb_out=010100;tm=43-time;iftime=43thennext_state=s2;elsenext_state=s1;endif;whens2=comb_out=100010;tm=63-time;iftime=63thennext_state=s3;elsenext_state=s2;endif;whens3=comb_out=100001;tm=67-time;iftime=67thennext_state=s0;elsenext_state=s3;endif;endcase;endprocess;process(tm)beginiftm=30thenth=11;tl=tm-30;elsiftm=20thenth=10;tl=tm-20;elsiftm=10thenth=01;tl=tm-10;elseth=00;tl=tm;endif;endprocess;process(th,tl)begin8casethiswhen00=led7s1=0111111;when01=led7s1=0000110;when10=led7s1=1011011;when11=led7s1=1001111;whenothers=null;endcase;casetliswhen0000000=led7s2=0111111;when0000001=led7s2=0000110;when0000010=led7s2=1011011;when0000011=led7s2=1001111;when0000100=led7s2=1100110;when0000101=led7s2=1101101;when0000110=led7s2=1111101;when0000111=led7s2=0000111;when0001000=led7s2=1111111;when0001001=led7s2=1101111;whenothers=null;endcase;endprocess;end;五、仿真结果9六、实验心得体会通过这次课程设计,深知自己平时在学习上的不足。很多东西都是要临时翻阅、查找资料。但是同时也体现了团队合作的优势,经过和队友们的努力,成功的将本次设计完成,基本达到了题目所给的要求。通过本次设计,完美对VHDL有了更加清晰的认识,提高自己在理论与实践的相结合能力,进一步掌握本专业的各项知识,为以后的专业学习打下良好的基础。