北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:交通信号灯控制电路设计作者所在系部:电子工程系作者所在专业:通信工程作者所在班级:B10231作者姓名:指导教师姓名:陈刚、褚越强完成时间:2012.11.292内容摘要EDA技术是现代电子信息工程领域的一门新技术,它是在先进的计算机平台上开发出来的一整套电子系统设计的软硬件工具,并提供了先进电子系统设计方法。当今的技术,开发人员完全可以通过自己的电子系统设计来制定芯片内部的电路功能,使之成为设计者自己的专用集成电路芯片。这种技术中常用软件有maxplusII和quartusII,而程序的编辑是用VHDL语言实现逻辑功能的。本实验试验系统中可用可编程逻辑器件为FPGA,本实验的交通信号灯的设计:首先在quartusII软件当中编辑程序,编译完成之后仿真,当仿真结果正确时下载到试验箱的系统中。最终的目的要在实验板上用红路灯表示出来,并且同时要用数码管显示出人们的等待时间,交通灯的状态变化和显示时间同步……关键词:EDA、VHDL、交通灯、控制电路3目录一、设计任务…………………………………………………………………………5二、设计结构…………………………………………………………………………51、clk时钟秒脉冲发生电路或分频器………………………………………62、六十进制计数器……………………………………………………………63、次态发生器………………………………………………………………64、状态寄存器及等待时间输出……………………………………………65、时间显示电路………………………………………………………………66、时钟扫描电路………………………………………………………………6三、原理图……………………………………………………………………………6四、程序………………………………………………………………………………7五、心得体会……………………………………………………………………104课程设计任务书课题名称交通信号灯的控制电路设计完成时间12/11/29指导教师陈刚职称教授学生姓名班级B10231总体设计要求和技术要点设计一个交通信号灯控制电路。要求:1、主干道和支干道交替放行,主干道每次放行30秒,支干道每次放行20秒;2、每次绿灯变红灯时,黄灯先亮5秒钟,此时原红灯不变;3、用十进制数字(递增计数)显示放行和等待时间。技术要点:1、主(支)干道红灯时间等于支(主)干道红绿黄灯时间之和;2、用时钟数据扫描通过视觉暂留来数码管显示等待时间;3、状态寄存器和状态寄存器的结合灵活运用;4、计数时间值要译成七段译码值。工作内容及时间进度安排工作内容:在软件上编辑、编译程序,并仿真到达实验要求。进度安排;周一到周四编写程序,并要求程序能通过编译仿真;周四下午在实验板上下载调试程序;周五周六验收。课程设计成果1.与设计内容对应的软件程序2.课程设计报告书3.成果使用说明书4.设计工作量要求5交通信号控制器的VHDL的设计一、设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,用数码管显示等待时间。设计一个交通信号灯控制器。能达到的要求:(1)交通灯从绿变红时,有5秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为30秒,支干道的绿灯时间为20秒;(4)在任意时间,显示等待时间。支干道主干道图1路口交通管理示意图S0S1S2S3主干道交通灯绿(30秒)黄(5秒)红(20秒)红(5秒)支干道交通灯红红绿黄表1交通信号灯的4种状态二、设计结构学习EDA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。模块说明:系统输入信号:Clk:由外接信号发生器提供153的时钟信号;系统输出信号:CLK:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路6计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。模块说明:系统输入:CLK:接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。模块说明:系统输入信号:CLK:接收由clk电路的提供的1hz的时钟脉冲信号;tm:接收计数秒数选择电路状态转换信号;系统输出信号:da_out:负责红绿灯的状态显示。(4)第四模块:时间显示电路本电路负责红绿灯的计数时间的显示。模块说明:系统输入信号:tl:倒计数值秒数个位变化控制信号;th:倒计数值秒数十位变化控制信号;系统输出信号:led7s1:负责红绿灯的显示秒数个位。led7s2:负责红绿灯的显示秒数十位。三、原理图分频计计数器时间显示次态发生器状态寄存器信号灯输出数码管片选七段段码时钟扫描7四、实验程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytrafficisport(clk_in:instd_logic;selout:outstd_logic_vector(6downto0);-------定义数码管的七段显示sel:outstd_logic_vector(1downto0);------数码管个位十位选择段da_out:outstd_logic_vector(5downto0));------定义主次干道的红绿灯(主红黄绿支红黄绿)endtraffic;architectureoneoftrafficistypedmis(s0,s1,s2,s3);--------自定义状态四种signalcurrent_state,next_state:dm;----当前状态与次态均在四种状态之间变化signalclk:std_logic;------一秒时钟信号signalcount:std_logic_vector(1downto0);-----个十位选择端(sel)signalled7s1:std_logic_vector(6downto0);----十位数码管控制端signalled7s2:std_logic_vector(6downto0);----个位数码管控制端signaltime0:std_logic_vector(6downto0);-----递增计数signaltm:std_logic_vector(6downto0);----剩余时间倒计时signaltl:std_logic_vector(6downto0);-----个位数码管显示情况控制signalth:std_logic_vector(1downto0);-----十位数码管显示情况控制beginsel=count;fen:process(clk_in)variablecnt:std_logic_vector(16downto0);beginifclk_in'eventandclk_in='1'then-------产生153hz分频,上升沿有效产生clkifcnt=10011000100101101thencnt:=00000000000000000;clk='1';elsecnt:=cnt+1;8clk='0';endif;endif;endprocessfen;a:process(clk_in,count)----------不断扫描出现count的00和01的选择beginifclk_in'eventandclk_in='1'thenifcount=01thencount=00;elsecount=count+1;endif;endif;casecountiswhen00=selout=led7s2;when01=selout=led7s1;whenothers=null;endcase;endprocessa;process(clk)beginifclk'eventandclk='1'then------60秒的循环设计iftime0=0111100thentime0=0000001;elsetime0=time0+1;endif;endif;endprocess;reg:process(clk,current_state)------定义当前状态与次态的关系begin-----产生上升沿时次态把自己的状态赋予当前状态ifclk='1'andclk'eventthencurrent_state=next_state;endif;9endprocessreg;com:process(current_state,time0)begincasecurrent_stateiswhens0=da_out=001100;tm=30-time0;-----主绿和支红状态,当计时到29iftime0=29thennext_state=s1;----秒时将s1状态赋给次态,此时elsenext_state=s0;----当前状态还是s0,等到下一个endif;---上升沿后次态将s1赋给当前状whens1=da_out=010100;tm=35-time0;---态iftime0=34thennext_state=s2;elsenext_state=s1;endif;whens2=da_out=100001;tm=55-time0;iftime0=54thennext_state=s3;elsenext_state=s2;endif;whens3=da_out=100010;tm=60-time0;iftime0=59thennext_state=s0;elsenext_state=s3;endif;endcase;endprocesscom;process(tm)beginiftm=30THENth=11;tl=0000000;elsiftm=20THENth=10;tl=tm-20;elsiftm=10THENth=01;tl=tm-10;elseth=00;tl=tm;endif;endprocess;process(th,tl)begin10casethiswhen00=led7s1=1111110;when01=led7s1=0110000;when10=led7s1=1101101;when11=led7s1=1111001;whenothers=null;endcase;casetliswhen0000000=led7s2=1111110;when0000001=led7s2=0110000;when0000010=led7s2=1101101;when0000011=led7s2=1111001;when0000100=led7s2=0110011;when0000101=led7s2=1011011;when0000110=led7s2=1011111;when0000111=led7s2=1110000;when0001000=led7s2=1111111;when0001001=led7s2=1111011;whenothers=null;endcase;endprocess;endone;11LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYtrafficISPORT(CLK:instd