课程设计报告.docx
课程设计报告课程名称数字系统与逻辑设计课题名称交通灯控制电路设计专业通信工程班级0901学号200903020129姓名吐羽指导教师乔汇东胡倩2011年7月9日湖南工程学院课程设计任务书课程名称数字系统与逻辑设计课题交通灯控制电路设计专业班级通信工程0901学生姓名学号指导老师乔汇东胡倩审批乔汇东任务书下达日期2011年7月2日任务完成日期2011年7月9日-、设计目的全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。二、设计要求1、设计正确,方案合理。2、程序精炼,结构清晰。3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。4、上机演示。5、有详细的文档。文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。三、进度安排第二十周星期一:课题讲解,查阅资料星期二:总体设计,详细设计星期三:编程,上机调试、修改程序星期四:上机调试、完善程序星期五:答辩星期六星期天:撰写课程设计报告附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体彳亍距为22o正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。目录-交通灯控制电路的总体设计错误!未定义书签。1.1 交通灯电路设计错误!未定义书签。1.2 基本设计思想错误!未定义书签。二、交通灯控制电路的功能实现错误!未定义书签。2.1 系统的总体框图错误!未定义书签。2.2 程序流程图错误!未定义书签。2.3 系统各功能模块的实现错误!未定义书签。三、系统调试与仿真错误!未定义书签。四、总结与体会错误!未定义书签。五、评分表错误!未定义书签。附录一、交通灯控制电路的总体设计1.1、 交通灯电路设计一、问题描述:交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。二、功能要求:要完成本实验,首先必须了解交通路灯的燃灭规律。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。系统要求实现对2组交通灯控制信号的模拟输出,其控制规律为如上所述,同时要完成等待时间模拟的输出,即红绿灯的持续时间倒数输出。系统时钟输入为一个IKHZ的系统时钟。1.2、 基本设计思想1时间脉冲可以直接赋予得到。260s、50s、IoS定时信号用倒计时,计时起始信号由控制流程电路给出,每当计满所需时间,即向控制电路输出“时间到”的信号,并使计数器清零,由控制电路启、闭三色信号灯。3主控电路是核心,这是一个时序电路,其输入信号为东西、南北方向:60s、50s、IoS定时信号,其输出状态控制相应的三色灯。4三种灯转换状态表:时间059-109-049-09-059-109-0东西红红红绿黄红红时间049-09-059-109-049-09-0南北红绿黄红红绿黄其状态转换思想是首先置初始状态,东西南北两个时钟都为3灯得状态都为红灯,让后开始倒计时,其中东西时钟从59秒开始倒计时,灯状态为红灯,南北时钟从49秒开始倒计时,灯得状态为绿灯;然后当南北时钟从49倒计时到O时,其灯的状态变为黄灯闪烁,是从又开始从9开始计时,此时东西时钟的时间也从59秒倒计时到9,但灯的状态还是红灯,此时两个路口的时钟同时从9秒倒计时到0°,然后东西灯状态变为绿灯,南北灯状态变为红灯,然后东西时钟从59秒倒计时,南北时钟从49倒计时,等南北倒计时到0,灯状态变为黄灯,此时东西时钟倒计时到9状态不变,在两个时钟同时从9倒计时到0,南北灯变为红灯,东西灯有变成绿灯,就这样一直循环先去,就是3种灯得状态转换。二、交通灯控制电路的功能实现2.1、 V系统的总体框图图1该系统总体包括其3个模块,一个是利用状态机对两个路口灯得状态转换以及在各种状态下对应的时钟段及其显示的控制,一个是利用设计一个倒计数器,让时钟实现倒计时功能,在一个模块是利用一个动态8位7段数码管的显示来使时钟能够在其钟表中显示出来。2.2、 程序流程图rst=,5rl=l;其流程就是利用状态机实现时序流程图,其中rl,gl,yl为东西红,绿,黄灯,r2,g2,yl为南北红,绿,黄灯。当rst=T时计数器赋初值49,交通灯初始状态为rlg2o当rst='0'时,1、2两路时钟同时开始计时,控制信号al=l,timel=cnt+10,故1路红灯从59倒计时,2路绿灯从49开始倒计时。当2路计到零,进入下一个状态rly2,init=9装入计时器,第2路从9开始倒计时,第1路继续原来的计时。1、2路倒计时完成后进入下一状态r2gl,init=49装入计时器,控制信号a2=l,time2=cnt÷10,故第2路从59倒计时,第1路从49开始倒计时;当第1路计到零,变r2yl,init=9装入计时器,第1路从9开始倒计时,第2路继续原来的计时;当两路同时计数到零后,变为Mg2然后转换依次转换为rly2、r2gl.r2yl不断循环。2.3、 系统各功能模块的实现控制模块该程序是通过状态机的设置来实现控制模块的。它的作用是根据计数器的计数值和输入模块赋给的值进行比较,来控制东西、南北两个方向的红、绿、黄六盏信号灯的亮灭以及输出倒计时数值赋给分位模块。当特殊情况发生时,rcset=T',点亮两个方向红灯,是计数器停止计数,回到初始状态。其实现进程代码如下:。”-控制信号,当时钟倒数到O时使其成高电平发挥作用,转换状态。c_state表示当前状态。init一个将时间寄存的信号pro2:process(c_state,ov)-状态机beginrl<='0'r2<='0'gl<='02<=,01<=,02<='0,iy1<='0,iy2<=,0,;-设灯初始状态casec_stateis-开始状态转换whenrlr2=>rl<=1r;r2<="1'Jnit<=49;ifov-thenn-state<=rlg2;elsen_state<=rlr2;endif;whenrlg2=>a1<-lrl<=tlg2<='l,;init<=9;ifov='1,thenn-state<=rly2;elsen-state<=rlg2;endif;whenrly2=>ifcnt>8theny2v=T;rl<=T;-南北黄灯闪烁elsifcnt>7theny2<=,0,irl<-;elsifcnt>6theny2<='T;rl<-;elsifcnt>5theny2<='0'jrl<=,;elsifcnt>4theny2<='jrl<-;elsifcnt>3theny2<-0'jrl<-;elsifcnt>2theny2<='r;rl<-;elsifcnt>Itheny2<='0rl<-;elsey2<-;init<=49;ifov,1'thenn_state<=glr2;elsen_state<=rly2;endif;endif;wheng1r2=>a2<=f1r2<=rr;g1<='1init<=9;-东西黄灯闪烁ifov-thenn_state<=ylr2;elsen_state<=glr2;endif;whenylr2=>ifcnt>8thenyl<=,ir2<=,;elsifcnt>7thenyl<='0'r2<-;elsifcnt>6thenyl<=,r;r2<-;elsifcnt>5thenyl<=,0r2<='elsifcnt>4thenyl<=,r;r2<-;elsifcnt>3thenyl<='0,ir2<-;elsifcnt>2thenyl<='2<=,;elsifcnt>lthenyl<-0,jr2<-;elseyl<-r;r2<-;init<=49;ifov='thenn-state<=rlg2;elsen-state<=y1r2;endif;endif;endcase;endprocess;计数模块该程序通过设计倒计数器来实现时钟倒计数输出。当复位端reset=时,计数器清0;Load与上个模块的Ov一样ent一与上个模块的init一样其实现的进程代码如下:pro3:process(clk,rst)一倒计数beginifrst=*then-设处置cnt<=O;elsifclk'eventandelk-thenifload=,thencnt<=init;elsecnt<=cnt-1;endif;endif;endprocess;显示模块显示模块是将分位模块的数据用7段译码管显示出来。该设计用了4个显示模块来显示东西、南北两个方向的时间。其实现的进程代码如下:pro4:process(cnt)-定义市委和各位的位数beginifcnt>=50then11<=n10,;t2<=conv_std_logic_vector(cnt-50),4);elsifcnt>=40then11<=100u;t2<=conv_std_logic_vector(cnt-40),4);elsifcnt>=30then11<=011"t2<=conv_std_logic_vector(cnt-30),4);elsifcnt>=20then11<=',010;t2<=conv_std_logic_vector(cnt-20),4);elsifcnt>=10then11<=001jt2<=conv_std_logic_vector(cnt-10),4);endif;ifcnt+10>=50thentl<="101"t2<=conv_std_logic_vector(cnt-50),4);elsifcnt+10>=40thentl<="l00"t2<=conv_std_logic_vector(cnt-40),4);elsifcnt+10>=30thentl<=,'01,;t2<=conv_std_logic_