学号:成绩:河北联合大学电气工程学院《综合性课程设计报告——交通灯控制器设计》专业:电子科学与技术班级:_11电技班_姓名:__张___指导教师:__________2015年1月9日交通灯控制设计作者:张桂明摘要:本次课设是目的是通过Verilog_HDL语言对交通灯控制的设计,是同学们熟悉并掌握EDA技术、培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力、提高设计能力和实际操作能力。本课题是利用Verilog_HDL语言自顶而下的设计方法设计交通的控制系统,并通过QuartusⅡ和ModelSim完成综合、仿真,对FPGA芯片进行编译下载。把程序下载到FPGA芯片后,由于生成的是集成电路,所以故障率低、可靠性高、体积比较小,可应用于实际的交通灯控制系统中,使其实现道路交通的快速正常运转。随着大规模集成电路的发展、EDA技术随之出现,本课题说明了EDA技术在数字电路设计中的优越性。关键词:Verilog_HDLFPGA交通灯控制器硬件描述语言1、简介1.1课程设计的目的和内容用VerilogHDL语言设计实现一个交通灯控制器电路:十字路口A方向和B方向各设红、黄、绿和左拐四盏灯,两个方向各种灯亮的时间能够进行设置和修改,此外,假设A方向是主干路,车流量大,因此A方向通行的时间应比B方向长;四盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来。每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲。在本课程设计中,着重培养学生的如下能力:熟悉EDA技术概况。培养综合应用数字电子技术、EDA设计工具、HDL语言等各领域知识的能力。提高设计能力和实际操作能力,使学生能够独立完成具有一定难度的数字电子系统的设计,并锻炼动手实践能力。1.2Verilog语言简介VerilogHDL是一种硬件描述语言(HDL:HardwareDescriptionLanguage),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。1.3VerilogHDL的设计流程1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VerilogHDL文件保存为.v文件。2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只有在布线完成之后,才进行时序仿真)。3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成.edf(EDIF)的EDA工业标准文件。(最好不用MAX+PLUSII进行综合,因为只支持VHDL/VerilogHDL的子集)4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序也叫后仿真。2、总体设计每个方向四种灯依次按如下顺序点亮,并不断循环:绿灯—黄灯—左拐灯—黄灯—红灯,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人及驾驶员该方向上要禁行了;信号灯变换次序为:A主干道每次放行40秒,亮5秒黄灯让行驶中的车辆有时间停到禁行线外,左拐放行15秒,亮5秒黄灯;支干道放行30秒,亮5秒黄灯,左拐放行15秒,亮5秒黄灯......,各计时电路位倒计时显示。图1设计流程图根据系统的功能要求,可分为四个部分来实现,分别是定时模块,主控电路,译码驱动电路和扫描显示几部分。分频部分是把外部提供的1Hz进行分频得到系统工作需要的工作脉冲,显示部分包括两个内容,一个是主干道红绿灯显示,另一个是支干道红绿灯显示。然后将红绿灯显示时间以BCD码形式显示出来,显示模块将其译码轮流扫描显示4具有四种信号灯的交通灯控制器设计如图2交通信号灯控制器系统工作流程(1)主干道放行亮绿灯40秒,支干道红灯显示65秒;(2)主干道绿灯转黄灯5秒,支干道红灯显示25秒(3)主干道黄灯转左拐15秒,支干道红灯显示20秒;(4)主干道左拐转红灯55秒,支干道绿灯显示30秒;(5)主干道红灯显示25秒,支干道绿灯转黄灯5秒;(6)主干道红灯显示20秒,支干道黄灯转左拐15秒;(7)主干道亮红灯5秒,支干道左拐转黄灯5秒;(8)依次循环跳到主干道,红绿灯重新计时图2设计电路图道红绿灯显示;输出部分为七段译码显示和位选码MS,数码管显示的是交通信号灯转换时间。3、实验方法3.1仿真平台简介Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。主要特点:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖、数据流ChaseX、SignalSpy、虚拟对象VirtualObject、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;C和Tcl/Tk接口,C调试;对SystemC的直接支持,和HDL任意混合;支持SystemVerilog的设计功能;对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL;ASICSignoff。可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。3.2仿真步骤1)点开file,选择new,点击project,来创建一个新工程。2)在弹出的对话框中输入工程名和库名称,这里直接采用默认库work,输入的工程名为“testtraffic”,输入完毕后点击ok完成。3)在弹出的对话框中选中AddExistingFile按钮,找到文件存储的路径“modelsim”点击ok。同时两个程序文件处会有两个问号。4)右键点击空白处,选择其中的Compile选项,会出现一系列的编译方式。最常用的是前两个,即编译选中文件CompileSelected。同时两个程序文件处的问号变为对号。5)选中Simulate,选择第二个startSimulation。在弹出的对话框中选择work里的testtraffic并且去掉左下角的对号,点击ok。6)右键点击testtraffic模块,选中Add,然后AddtoWave。这时会出现一个新窗口:wave-default。这里就是观察信号变化的区域,在仿真没有运行时,输出的信号均为空,快捷键中有Run-All按钮进行仿真。4、仿真步骤图3仿真结果示意图如图3所示,我们看出看出主干道红灯亮的时间等于支路绿灯,黄灯,左转灯,黄灯亮的时间之和,同时支路红灯亮的时间等于主干道绿灯,黄灯,左转灯,黄灯亮的时间之和。本设计中设定A方向红、绿、黄、左拐灯亮的时间分别为55秒、40秒、5秒和15秒,B方向红、绿、黄、左拐灯亮的时间分别为:65秒、30秒、5秒和15秒,该系统满足我们的设计需求。5、结论通过本次课设,是我从一个verilogHDL编程语言的菜鸟逐渐升级为一个感兴趣的初学者.体验到了细心对一个编程者的重要性,和程序的规范性对于程序的重要性在verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。还有,verilogHDL设计语言是一门很好的硬件描述语言,可以直白的描述实际的电路,实际的系统模型,易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。通过做熊老师的课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。如果说大学的学习就像是在充实自己,那么课设的意义就是让所学的东西充分的发挥出来,我希望大学的制度也可以从大一就开始抓起,这才是对我们学生的一次提升。在实战中自由发挥,只有困难才能让我们更加强大。参考文献1、《CPLD/FPGA应用系统设计与(基础篇)》作者:亿特科技人民邮电出版社出版日期:2005年7月书号:ISBN7-115-13200-3/TP.45032、林明权.VHDL数字控制系统设计范例(第一版)[M]北京:电子工业出版社;3、杨晓慧.电子技术EDA实践教程(第一版)[M],北京:国防工业出版社;附录moduleaa(clk,rst,LAMPA,ledcom,data_out);output[7:0]LAMPA,ledcom,data_out;inputclk,rst;reg[7:0]numa,ledcom;regtempa,i;reg[3:0]data_in;reg[3:0]counta;reg[7:0]ared,ayellow,agreen;reg[7:0]LAMPA,data_out;reg[24:0]c,k,c1;regclk1s;regclk_100;reg[19:0]cnt2;always@(posedgeclk)beginif(c==12500000)beginc=0;clk1s=~clk1s;endelsec=c+1;endalways@(posedgeclk)begincnt2=cnt2+1;if(cnt2==100000)beginclk_100=~clk_100;cnt2=0;endendalways@(posedgeclk1sornegedgerst)//该模块控制东西方向的三种灯if(!rst)LAMPA=8'b00001001;elsebeginayellow=8'b00000110;agreen=8'b00000111;if(!tempa)begintempa=1;if(counta==0)beginnuma=agreen;LAMPA=8'b00100001;//南北方向通绿灯亮东西方向红灯亮counta=counta+1;endif(counta==1)beginnuma=ayellow;LAMPA=8'b00010001;//南北方向黄灯亮东西方向红灯亮counta=counta+1;endif(counta==2)beginnuma=ayellow;LAMPA=8'b00000001;//南北方向黄灯灭东西方向红灯亮counta=counta+1;endif(counta==3)beginnuma=ayellow;LAMPA=8'b00010001;//南北方向黄灯亮东西方向红灯亮counta=counta+1;endif(counta==4)beginnuma=agreen;LAMPA=8'b00001100;//南北方向红灯亮东西方向绿灯亮counta=counta+1;endif(counta==5)beginnuma=ayellow;LAMPA=8'b00001010;//南北方向红灯亮东西方向黄灯亮counta=counta+1;endif(counta==6