《基于FPGA的交通灯控制器设计(完整资料).doc》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制器设计(完整资料).doc(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于FPGA的交通灯控制器设计(完整资料)(可以直接使用,可编辑 优秀版资料,欢迎下载) 数字系统课程设计 基于PG的交通控制灯设计姓名:学号:班级:摘要随着社会的发展,城市规模的不断扩大,城市交通成为制约城市发展的一大因素.人口和汽车日益增长,市区交通也日益拥挤,人们的安全问题当然也日益重要。因此,红绿交通信号灯成为交管部门管理交通的重要工具之一。有了交通灯,人们的安全出行也有了很大的保障.自从交通灯诞生以来,其内部的电路控制系统就不断的被改进,设计方法也开始多种多样,从而使交通灯显得更加智能化。尤其是近几年来,随着电子与计算机技术的飞速发展,电子电路分析和设计方法有了很大的改进,电子设计自
2、动化也已经成为现代电子系统中不可或缺的工具和手段,这些都为交通灯控制系统的设计提供了一定的技术基础。本课程设计运用eril HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示,并最后进行了软件实现,达到了系统要求的功能。设计原理1。1设计要求设计一个交通控制器,用ED显示灯表示交通状态,并以段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行3,支干道每次放行s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s.能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LD灯显示倒计时,并且能
3、实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮.能实现特殊状态的功能显示,1.设计思路和原理本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续5后,主干道和支干道上的黄灯都亮启,持续S后,主干道上红灯亮启,支干道上绿灯亮启持续,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程.其过程如下图所示:图1.交通灯点亮时间控制说明1。3实现方法本次采用文本编辑法,即利用VeriloHL语言描述交通控制器,通过
4、状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。 erilogHL程序设计。1整体设计根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态0时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束
5、一个循环,从00状态重新开始循环.为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:图3.交通灯控制系统结构图其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起。2.2具体设计根据整体设计要求,编写各个功能部分Verilog HDL程序,设置各输入输出变量说明如下clk:为计数时钟;qclk:为扫描显示时钟;en:使能信号,为 的话,则控制器开始工作;t:复位信号,为1的话,控制及技术回到初始状态;hoid:特殊情况控制信号,为的话,则两个方向无条件显示为红灯
6、;ligt:控制主干道方向四盏灯的亮灭;其中,litlight2,分别控制主干道方向的绿灯、黄灯和红灯;light2:控制支干道方向四盏灯的亮灭;其中,light20 lght22,分别控制支干道方向的绿灯、黄灯和红灯;num1:用于主干道方向灯的时间显示,8 位,可驱动两个数码管;u:用于支干道方向灯的时间显示,8 位,可驱动两个数码管;cunte:用于数码管的译码输出;st,st2:数码管扫描信号。输入输出及中间变量设置如下:modue traffic(n,cl,qclk,rst,rst1,hold,num1,num2,light1,lih2,countr,st1,st2);inpue,,
7、clk,rst,hold,rst1;pu st1,s;oput7:0 n1,nm2;otput6:0countr;utu2: ight1,liht2;eg ti,t2,st,st2;reg:tate,tat,st;eg2:0lg,light2;reg3:0um;g6:0counter;reg:0u1,um2;eg7:0re1,red2,gren1,gen,yelow1,elow2;1. 二极管点亮控制该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况(hd=1)发生时,无条件点亮红灯的二极管,当检测到复位信号,两个方向计
8、数与控制回复到0状态。因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体程序如下:1)主干道方向ays (posedgecl)begni(st) /复位与特殊情况控制egnlght13001;nm1=green1; enelef(hold)beginlight=3b100; nu1=reen1; d else if(en) bgin /使能有效开始控制计数 f(!m) / bein /主干道交通灯点亮控制 tm1=1; as(state1) 200:bein nu1ren1;ligt11;state=2;end 201:begi n1=yelow1;ligh
9、t1=3b01;sate2b1;end 2b1:begin nm1=red1;liht1=3100;state1=2b1;ed 2b10:beginum1=yel1;lih1=3010;state1=2b0;end defult:lgh1=3b100; ecas en2)支干道方向lways (poedge cl )ben if(t) /复位与特殊情况控制 bei light2=b1; u2=rd2; ed else i(hd) bn lih23b0; nu2=re2; en eleif(n) begn if(!tim2) egin tim2=1; ase(stae1) 2b00:begin
10、nm2rd2;lgt23b1;state2b1;ed b1:bgin u20) if(num1:=0) bennum13:0=4b10; nu:4=nm17:41; end els um1:0=n13:0; if(nm1=1) t=0; en en ese begn ight1=3b010; nm1=2b00; i1=0; endnd3. 数码管的译码及扫描显示该段程序主要完成4个段数码管的译码显示及扫描,使系统能正常显示主、支干道两个方向上的剩余时间。译码的时钟频率要低,为z级。扫描的时钟频率要高,最低不得小于人眼分辨频率50z,具体程序如下所示:alw (posedge qclk)begi
11、n /数码管扫描 if(rt1) bgin st=0; s2=0; end else bein case(st2,st1) 00:begin u=num1:0;st2,st1=201;end 2b01:begi=nm17:4;st2,1=2b0;nd 210:bginnum=num3:;t,t1=211; nd 11:bein um=um27:;t,st1=2b0; n encae endenalways (posege qclk)gn /数码管译码显示case(um)4b00: couter=b01111; /00001: countrb00011; /14b0010:conter=1110
12、1; /24001: counr=7b001;/400: cunter=7b110110; /b0101: oute7110101; /5b0110: cnter=b11110;/6401: conte=7b0000111; 74b100:counerb11111; /84b10: contr=101111; /9efaul:count=701111;0ndaseedendmu总体程序见程序清单所示仿真与硬件调试. 波形仿真在Quartur软件下创建工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。设置仿真时间,时钟周期,输入输出端口,进行波形仿真。具体仿真波形图及说明如下所示
13、:仿真截止时间:1us;时钟:c1us,qclk .1s1 正常工作时波形仿真图图4. 正常工作时波形仿真图图形说明波形仿真主要完成了控制与计数以及数码管显示的波形图.为低电品时,计数器置初值,高电平时开始正常控制与计数。控制发光二极管首次输出为“liht11,liht2=10,表示主干道路绿灯亮,支杆道路红灯亮,计数器num1和n2从“0011010开始递减计数,计数至“0000000时,进入下一个状态,控制输出量为ligh=010,light2=1,表示主、支干道黄灯均亮起,计数器nu1和u2从“0000101开始计数递减,计数至”00000时进入下一个状态,lit=10,light2=1
14、,表示主干道路红灯亮,支杆道路绿灯亮.Couner根据nu1,n2变化随时钟上升沿输出译码后的数据.由于屏幕显示大小有限,未仿真出一个完整周期.2. 特殊情况仿真波形图5 特殊情况仿真波形图形说明当hod输入高电平时,在时钟上升沿的控制下,lht与igt2被强制置位为”00”,表示两路红灯均亮起. 复位情况仿真波形图6. 复位情况仿真波形图形说明当rst输入高电平时,在时钟上升沿控制下,计数与控制都回到00状态,即ight1=0,lit2=10,计数器num和m2从“001101”开始递减计数。3。2 硬件调试完成时序仿真确认无误后,进行实验箱管脚设置,注意设置完成后一定要再进行一次全局仿真,
15、使程序真正对应于硬件输出输出。具体连接说明如下所示输入变量:rst、ck、qcl、hol、en其中en,hold,rt接”0-1”拨码开关,以稳定的输出可变化的电平。计数时钟lk接实验箱上Hz时钟,扫描显示时钟qclk接15z时钟。输出变量:light1:、liht2:0、cuntr6:0、st1、t2其中lih0 、ight0分别接绿色的发光二极管;lig11、ight21分别接黄色的发光二极管;lght1、light22分别接红色的发光二极管.ountr0counte6,分别接七段数码管的af,st1、s2分别接试验箱上”4-16”译码器的低两位。完成接线后将程序烧写到芯片上,开始功能调试
16、.分辨改变使能信号,复位信号以及特殊情况信号,观察数码管以及发光二级管情况。程序清单module rac(n,lk,clk,rs,rs1,hold,num1,nu2,ight1,i2,counter,1,s);pue,c,lk,rst,hl,rst1;oput st1,st2;outpu7:num1,u;output6:0cote;otpu2: liht1,light;rg tm1,tm2,s1,st2;reg1:0stae1,state2,s;eg2:0light1,liht;reg3:nu;reg6:counte;eg7:0um1,nm;eg7:ed1,ed2,ren,reen2,yll1
17、,ellow2;alwas(en )f(!en)begin /设置计数初值green=80011010;ed18010101;ylw1=b0000001;geen28b00010;ed=8b011101;yelw2=b0000010;enlways (posedge lk )egn if(t)/复位与特殊情况控制 begi lht1=301;num=green1;d ese if(hold) bgi lig1=3b00; num=gen; e ele i(n) egin 使能有效开始控制计数 if(!m) /开始控制 ben /主干道交通灯点亮控制 m11; ase(state) b00:be
18、gin um=gee1;lih1=01;tate1=2b01;end 201:binnum1=yello1;lgt1b01;sate1=2b1;end 2b1:bgin nu=e1;light1=3b100;state2b10;n 2b10:egn nm0) i(m3:0=0) bin nm3:0=4b001; nm17:4=nu7:4; n ese u13:0=um13:1; if(um1=1) ti1=0; end end lse begin lght1=3010; u1=2b00; ti0; en edalwa (posegeclk )be i() 复位与特殊情况控制 egin ligh
19、t23b10; m2=red2; end else if(hld) egin lht2=3b100; num2=red; end le if() begin if(!m) bgn tim2=1; cs(ate1) b00:en num2rd2;ght3b10;ste2201;end b01:gi2=ellow1;lig23010;stae21;ed 1:egin num2=green2;lht2=3b01;state=20;nd 2b10:bein num=elow2;igt2=3010;te20) if(num23:0=0) begn nm23:=4b001; num27:um27:1; e
20、d ele um23:nu23:01; f(num2=1) tm2=; end end ee beg tim2=0; state2=2b00; iht2=3b010; nd en alas (posede clk)begi 数码管扫描 f(rs1) bgin st1=0; st; en ele bgn ae(st2,s1) 2b00:begin num=um13:0;t2,s1=2b1; end 2b:bgin nunum17:4;st,s1=2b1; ed b10:bein nunm2:0;st2,st1=2b11;end b11:bn num=nm:4;st2,st1=b0;ed endc
21、ase endelays (poedg qlk)bin /数码管译码显示ae(nm)b0000: counter701111; /040001:cunter=b00010; /b01: coter=b1011;/2401:counte=7b100111; /34b10: conter7b1001; /4400:cnt=7b11011; /4b1: ontr=7111110; /6b0111: cunter=7b0011; /b00: counter7b1111111; /8b00: cuner=0111; /deful: conterb11111; /0endsendendmodu总结在设计中
22、采用Vrilog HDL语言设计交通灯控制系统, 借助其功能强大的语言结构,简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时达到求解目的, 并可以通过erlogHL语言的综合工具进行相应硬件电路生成, 具有传统逻辑设计方法所无法比拟的优越性。在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真出不了正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序.实践证明,在编写一个较复杂的程序时,一开始一定要画流程图,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。在编写的时候要尤其要注意语
23、言的规范,如本次设计中编写的V riog在Quart1中可以正常生成时序图,而在低版本的软件中却无法生成,原因就是语言使用不规范,在解决这个问题时我总结了一些经验,首先程序要逻辑清晰,简洁明了,避免不必要的嵌套与条用,其次要适当地给程序加上注解文字,提高可读性,以方便之后的程序出错时进行查找,最后充分利用仿真软件提供的各项编译工具与报错消息,按图索骥,有方向的完成程序调试。完成仿真后进行,进行试验箱上的硬件调试,该步骤主要是要求细心,按照引脚清单,逐一完成连线,本次设计用到两个时钟输入,注意一定要选择合适频率的时钟,以便达到期望的效果。注意观察实物的现象,看是否满足设计要求,不满足时检查是硬件
24、问题还是程序问题,如果是程序问题,在修改完之后必须要重新编译,重新烧入.不断排查错误,直至达到满意的效果。通过这次课程设计,熟悉了简单EDA设计的整个流程,加深了对Velog HL硬件描述语言的理解,提高了动手能力,并且锻炼了自己的耐心,收获颇丰,我会把在本次课程设计中学到的东西应用到今后的工作学习中。参考资料夏宇闻。复杂数字电路与系统的V eriogHD设计技术 M .北京:北京航空航天大学出版社, 1992 郭梯云移动通信 .西安: 西安电子科技大学出版社, 93 法M icheMouly, M ari radette PattGM 数字移动通信系统M 。骆健霞, 顾龙信, 徐云霄译。北京
25、: 电子工业出版社, 19964 张毅刚, 乔立岩。虚拟仪器软件开发环境L aWindow CV I 60 编程指南 北京: 机械工业出版社, 002 刘国权GSM手机的测试J .中国无线电管理,206 俞定玖, 刘湘慧. GSM 数字蜂窝移动交换系统测试J 。 电信科学,007 张明. V eril HL 实用教程M . 成都: 电子科技大学出版社,1999 Hyde D C. Bucknllndbookon V erilg HDL 1omputer Scine earte, Bucnell U niesity e i burg, 9959 康华光.电子技术基础(数字部分) M。北京: 高等
26、教育出版社,18本科课程设计报告课程名称: D计数与FA应用设计设计题目:交通灯控制器 实验地点: 跨越机房专业班级:电信0901学号:009001249学生姓名:赵岩 指导教师:张文爱年 月 日设计一:三位十进制计数显示器一、 设计目的:1、 掌握时序电路中多进程的VHD的描述方法。2、 掌握层次化设计方法。3、熟悉EDA的仿真分析和硬件测试技术。二、设计原理三位十进制计数显示器分三部分完成,先设计十进制计数电路,再设计显示译码电路,最后设计一个顶层文件将两者连接起来。三源程序1、 三位十进制计数器的三位分三个进程描述,含有同步清0信号E和计数使能控制信号CILIRARY EEE;UIEST
27、D_GI_11。LL;UE IEEE。SD_LOGIC_UNSIEDL;NTTY CO3 IS PR(K,ESET,CIN:INSTD_LOGIC; C:UT STLOGI; ,B,C:OTSTD_OGC_VETR(3 DONTO 0); END COU3;RCHITECTRE AR F CU3IS SGNAL A,BP,CP:SD_LOGC_VECTOR(3 DOWNO 0); BEGN K:PROCESS(CL) GIN IF (CLKVEN AN CL1) HE IF(REET=) TEN A=”0000”; LSIF(CN=1) TEN IF (P=) THEN =”000 ; ELE
28、 APA+; END I; ENDF; D ; ED RCEK1;K:PROCESS(CLK) EGIN IF (LEVENTND CLK=1) TH IF (REET0)TH B=”000; SIF (CI=1) A (AP=1001”) HE P”1001 THEN BP=00; LS BBP+1; EDIF; EN IF; ENDI; END PROCES ;KK3: PRCES(LK) BEI F (CLKVNT NDCLK=1)TN IF(RET=0)TEN CP”0000; ELSIF(N=1) AN(P=01) N(BP=”1001) HE CP=”1001 THEN ”0000
29、; ESE CP=CP+1; E IF; ED IF; END IF; NPROSKK3;ROES(CL) S BEGIN IF CLKEETAN K= THN F AP=100” AND BP=101 AND C=”001” THN CO=1; S CO=0; ND IF; ENDF; DPROSS; A=AP; BBP; YIMA10000; HEN ”00IMAYIM0100; WEN ”0100=YMA=”001001; WHN ”010YMA=”0010”; WHEN ”0110MA=”000010; WHE 011=IMA”11110; WHEN 1000”=YIMAIMA”111
30、1111; EN ASE; END PROCSS; ENRT;3、三位显示译码顶层文件LIRAR IEE;USIEETD_LOGI_164ALL;ENITY JISHUXIANSHI IS PORT(CLK,RESET,EN:NSTDLOIC; SE1,SG2,G3:OUTSLGICVCOR( ONTO 0));ENDJSHXNSH; CHECTURE AT OF JIHIANSHI IS COMOEN YIMA7 PORT(A:NSTDLOGI_COR(3OWNTO 0); M:OUT SD_OGIC_VECTOR(6 DOWNT 0); NDCOMPNT; COMONETOU PORT(C
31、LK,RET,CIN:IN T_LOGIC; CO:OUSD_OGIC; ,:ST_LOG_VETOR(3 ONTO 0)); END COMPONENT; SIGNAL INA,INB,IC:SLOGIC_VECOR(DNTO ); BIN 0:CO3 PORT (CLK,RESE,E,IN,IN_B,N_); U1:YIM7 PORT MAP(N_A,SEG); U2:YIMA7 PORT MA(N_B,SE2); U:YIMAPOT MAP(IN_,SEG3);END ART;四、仿真出图五、下载到电路板得到设计结果显示三位十进制计数设计二:交通灯控制器一、设计要求设计一个由一条支干道和一条主干道的汇合点形成的十字交叉路口的交通灯控制器,主要要求如下:().主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2)主干道处于常允许状态,两支干道有车来才允许通行。(3)当主、支干道有车时,两者交替通行,主干道每次放行45,支干道每次放行25s,在每次由亮绿灯变成亮红灯转换过程中,要亮5s黄灯作为过渡,并进行减计时显示。二、 设计方案1、分模块设计1)、红、绿、黄灯控制模块,模块名JTZ;2)、倒计时传输、控制模块XS;3)、倒计时45sCNT45s;4)、倒计时2
限制150内