基于FPGA的(带有紧急情况处理的)交通灯控制器的设计._基于fpga的交通灯控制

2020-02-27 其他范文 下载本文

基于FPGA的(带有紧急情况处理的)交通灯控制器的设计.由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于fpga的交通灯控制”。

学号成绩 评语

《现代数字系统设计》课程论文

题目基于FPGA的(带有紧急情况处理的交通灯控制器的设计 作者班级

院别信息与通信工程专业电子信息工程完成时间 2011年5月12日 目录 1 概述(2 1.1 交通灯控制器的简介(2 1.2论文主要完成的工作(2 2 系统硬件设计(2 2.1系统设计方案(2 2.2 主控模块(3 2.2.1 FPGA简介(3 2.2.2 主控芯片ACEX1K 系列的EP1K10TC100-3的介绍:(4 2.3 显示模块(4 2.3.1 发光二极管简介(4 2.3.2 八段数码管简介:(4 3 系统软件设计(5

3.1 软件整体设计(5 3.2 控制模块(6 3.2.1 交通灯状态机、倒计时(6 3.2.2 交通灯主要模块的状态机及倒计时的流程图(PFD(7 3.3 显示模块(8 4 系统测试与总结(9 4.1 系统测试结果(9 4.2本次设计的心得体会(9 参考文献(10 附录(11 1.控制模块源程序(11 2.显示模块源程序(13 1 概述

1.1 交通灯控制器的简介

如今是个现代化的社会,交通灯在日常生活中起着至关重要的作用。交通灯是城市交通监管系统的做要组成部分,为管理交通工具和行人的动向,保障道路安全通畅的一类固定不动的必不可少的工具。在今天,交通灯控制器安装在各个路口上,它成为疏通交通最常见最有效的手段。

基于FPGA的交通灯设计方法具有设计的灵活性,易于修改,设计周期短等纵多优点。随着设计语言、电子设计自动化和FPGA期间的不断发展,基于FPGA 期间的不断完善和发展。在不远的将来。由FPGA设计的产品将越来越普遍。而此次交通灯控制器的设计采用基于Verilog HDL语言和FPGA的方法来实现所要求的功能。

1.2论文主要完成的工作

设计一个交通灯控制器,模拟现实生活中的交通灯,并能对紧急情况作出处理。对系统进行模块划分、定义各模块的具体功能。再用Verilog HDL语言编写程序实现各个模块应有的功能。

创建顶层文件,搭建电路,下载到FPGA芯片中。调试并观察结果。

详细介绍本次设计过程中所涉及的硬件、软件原理及各个模块的设计方式。深刻体会设计过程中所思,所想,所学。撰写心得体会。2 系统硬件设计 2.1系统设计方案

利用状态机来实现对交通灯的控制,对十字路口的红、绿、黄和左拐灯进行控制,并通过数码管进行显示倒计时。

系统方案图如下图(1所示: 图(1交通灯控制

2.顶层原理框图如图(2所示: 图(2顶层原理系统图 2.2 主控模块 2.2.1 FPGA 简介

FPGA ,即现场可编程门阵列,它是在GAL、PAL、CPLD 灯可编程期间的基础上发展的产物。它是作为专门继承领域中的一种半定制电路而出现的,既解决了顶置电路的不足,又克服了原有可编程逻辑门电路数有限的缺点。FPGA 采用了逻辑单元阵列LCA 这样一个新概念,内部包括可配置模块CLB、输出输入模块IOB R1Y G1R2 L G2 L2 A 方向

B 方向 红绿灯显示 控制 模 块 倒计时 译 码 器 译码 显 示

和内部连线三个部分。

FPGA的基本特点有:1.采用FPGA设计ASIC电路,用户不需要投片生产就可以得到合适的芯片。2.FPGA可做其它全定制或半定制ASIC电路的中试样片。

3.FPGA内部有I/O引脚。

4.FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5.FPGA采用高速CHMOS工艺,功耗低,可与CMOS、TTL 兼容。可以说,FPGA芯片是小批量系统提高集成度、可靠性的最佳选择。

2.2.2 主控芯片ACEX1K 系列的EP1K10TC100-3的介绍: ACEX 系列是当今Altera CPLD 中应用前景最好的器件系列之一[1,2],该系列的FPGA 由逻辑阵列块LAB(Logic array block、嵌入式阵列块EAB(embedded array block、快速互联以及IO 单元构成,每个逻辑阵列块包含8 个逻辑单元LE(logic element和一个局部互联。每个逻辑单元则由一个4 输入查找表(LUT、一个可编程触发器、快速进位链、级连链组成,多个LAB 和多个EAB 则可通过快速通道互相连接[3]。EAB 是ACEX 系列器件在结构设计上的一个重要部件,他是输入端口和输出端口都带有触发器的一种灵活的RAM 块,其主要功能是实现一些规模不太大的 FIFO、ROM、RAM 和双端口RAM 等。

2.3 显示模块 2.3.1 发光二极管简介

发光二极管,它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P 区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。由镓(Ga与砷(AS、磷(P的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。

2.3.2 八段数码管简介: 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示;按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字

段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。数码管可以采用动态方式也可以采用静态方式驱动。系统软件设计 3.1 软件整体设计 顶层文件图下图(3所示:

图(3交通灯顶层文件图 3.2 控制模块

3.2.1 交通灯状态机、倒计时

1.状态机:用两个进程分别控制两个方向的交通灯。引入有限状态机控制交通灯的状态转化,即绿灯->黄灯->左拐灯->红灯。复位时红灯亮。

2.倒计时:用两个减法计数器实现倒计时,当某个剩余时间减到0则切换状态。各个状态交通灯保持的时间分配:A向红、黄、绿、左拐灯分别为 50S,5S,40S,15S, A向红、黄、绿、左拐灯分别为65S,5S,30S,15S。

3.紧急情况:当有救护车或者其它一些情况时,救护车或特定车辆需优先通过十 字路口,此时交通等的状态为:A,B方向都为红灯亮,并且剩余时间 为20s.交通灯状态机及倒计时模块如下图(4所示:

CLK 同步时钟1HZ 用于准确及时 EN 使能信号

EMERGE 紧急信号有车辆需优先通过十字路口 LAMPA 0~3分别控制A方向的左拐、绿、黄和红灯 LAMPB 0~3分别控制B方向的左拐、绿、黄和红灯 ACOUNT 用于A方向的时间显示,驱动两个数码管 BCOUNT 用于B方向的时间显示

图(4交通灯控制模块图

3.2.2 交通灯主要模块的状态机及倒计时的流程图(PFD 主要模块流程图如下图(5所示: 图(5交通灯控制模块PFD 图 开始 是否使能? 设定定时时间和 方式 有无紧急情况?

A,B 方向都红灯亮起 计时时间到30S A 方向绿灯亮40S ,接着黄灯亮5S ,再接着左拐灯亮15,然后黄灯亮5S ,同时 B 方向一直是红灯亮65S B 方向绿灯亮30S ,接着黄灯亮5S ,再接着左拐灯亮15,然后黄灯亮5S ,同时B 方向一直是红灯亮55S 结束

回到初态,A ,B 方向都红灯亮,都显示为00 有 是 否 无 是 否

3.3 显示模块

7位数码管采用动态扫描显示,经位选信号译码后选择一位数码管,段暄信号为A、B、C、D、E、F、G。

位选扫描模块图如下图(6所示: CLK 时钟信号 1KHz 用于控制后面的译码显示模块使用动态扫描方式显示SEL 选择信号

图(6位选扫描模块图

段选扫描模块图如下图(7所示: ACOUNT 用于A方向的时间显示 BCOUNT 用于B方向的时间显示 SEL 位选信号

OUT 输出信号用来控制数码管所显示的字符

图(7段选扫描模块图

显示译码模块图如下图(8所示: OUT 控制数码管所显示的字符 A,B,C,D,E,F,G 驱动八段数码管显示

图(8显示译码模块图 4 系统测试与总结 4.1 系统测试结果

由于交通灯这个设计仿真的结果不是很一目了然,再就是本人对仿真软件的了解不够,不能消除毛刺,影响观瞻。所以我就没有吧实验仿真图截下来,我在设计过程中,也通过仿真验证了实验结果的正确性。为了得到确定的结果,我把该顶层文件所组成的原理图文件下载到FPGA芯片和正确搭建电路后,就可以观察到交通等预期的结果了。

复位时红灯全亮,复位后相应灯亮的次序和相应的剩余时间都十分准确。刚启动时,A方向绿灯亮40S,接着黄灯亮5S,再接着左拐灯亮15,然后黄灯亮5S,同时B方向一直是红灯亮65S。再是,B方向绿灯亮30S,接着黄灯亮5S,再接着左拐灯亮15,然后黄灯亮5S,同时B方向一直是红灯亮55S。之后就一直重复以上行为。完全模拟了现实生活中的十字路口的交通灯。

扩展的功能情况为:不论何时,只要有紧急情况出现时,交通灯A,B方向都是红灯亮起,并且倒计时20S。使其能正常通过十字路口。20S过后交通灯回到正常状态。

4.2本次设计的心得体会

通过一个学期EDA的学习,我学到了很多东西。一直以来,我对各种变成都有浓厚的兴趣。而此次EDA的课程不仅要求学习者有一定的编程能力,还需要有一定的硬件实验的动手能力。EDA课程吸引我最大的地方在于,它不仅可以仿真,而且还可以下载到FPGA芯片中看到实实在在的效果。当看到自己的学习成果的那一刻的满足感最能激励我的学习热情。

跟着老师认真学习了一学期的EDA课程,我真的受益匪浅。老师幽默的,认真负责的实践性强的教学工作,不仅使我编程能力有了一定的提高,实践动手能力有了很大的提升。我学会了怎样有效地调试电路,准确分析问题所在,得到正确的解决方法。在此次设计过程中,我认真编写了所有模块的程序,经调试无误后,创建顶层原理图文件。再下载到FPGA中并正确搭建电路。本来我所设计的交通灯控制器是没有紧急情况处理功能的,但我觉得一个成熟的交通灯控制器应该要有此项功能。因此为了更好的达到设计目的。我修改了控制模块的程序,添加了此项功能。在文档的编写过程中,我学会了独立摸索,不断进步,精益求精。我认真思考,怎样才能把文档写得更加规范,更加符合设计要求。我不断地添加新内容,如绘制顶层原理图,最主要模块的即控制模块的程序流程图,使自己的设计思路更加容易被理解。

当然在这门课程的学习和设计过程中,我也发现了自己的一些不足。例如,对仿真软件的学习不够,我虽然做了仿真,但是效果不理想,有很多毛刺,还有一段时间的延时。我会在将来的学习过程中加以改正。

EDA的设计是很灵活的,如果你要想增加一些功能或者是修改须实现的功能,只需要修改相关的源程序或原理图即可。随着设计语言、电子设计自动化和FPGA期间的不断发展,基于FPGA期间的不断完善和发展。我相信,在不远的将来。由FPGA设计的产品将越来越普遍。

本课程虽然结束了,但是这种使用的技能将仍然存在我的学习,工作生活中。我相信,这是一种很实用的技能。我以后还会不断强化这种技能。希望可以基于FPGA设计出更多更实用的东西。

参考文献

[1]王金明《数字系统设计与Verilog HDl》(第四版电子工业出版社 2011

年1月

[2]湖南理工学院实验室《专业实验辅导教材》 2010年10月 附录

1.控制模块源程序 /* 信号定义 CLK 同步时钟 EN 使能信号

LAMPA 0~3分别控制A方向的左拐、绿、黄和红灯 LAMPB 0~3分别控制B方向的左拐、绿、黄和红灯 ACOUNT 用于A方向的时间显示,驱动两个数码管 BCOUNT 用于B方向的时间显示 */ module traffic(CLK, EN, LAMPA,EMERGE, LAMPB, ACOUNT, BCOUNT;output[7:0] ACOUNT, BCOUNT;output[3:0] LAMPA, LAMPB;input CLK, EN,EMERGE;//EMERGE信号模拟紧急情况,如有救护车要通过十字路口

reg[3:0] LAMPA, LAMPB;reg[7:0] numa, numb;// 剩余时间 reg tempa, tempb;// 切换状态

reg[2:0] counta, countb;// 状态量

reg[7:0] ared, ayellow, agreen, aleft, // 保持时间 bred, byellow, bgreen, bleft;aign ACOUNT = numa;aign BCOUNT = numb;/**************** 设置灯的计数初值 ****************/ always @(EN begin if(!EN begin ared

if(EN // 正常情况 if(EMERGE//紧急情况 counta

0: begin numa

default: LAMPA

else // 倒计时 begin if(numa > 1 if(numa[3:0] == 0 begin numa[3:0]

begin if(EN if(EMERGE//紧急情况 countb=5;else //无紧急情况的正常运行状态 begin if(!tempb begin tempb

0: begin numb

default: LAMPA

end else begin // 倒计时 if(numb > 1 if(numb[3:0] == 0 begin numb[3:0]

2.显示模块源程序(1位选扫描模块源程序: /*四进制计数器*/ module count4(clk, out;input clk;output[1:0] out;reg[1:0] out;always @(posedge clk begin if(out == 3 out

output[3:0] out;reg[3:0] out;input[7:0] ACOUNT;input[7:0] BCOUNT;input[1:0] sel;always @(ACOUNT or BCOUNT or sel case(sel 2'b00: out

always @(* begin case(out 4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111110;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'b1111110;endcase end endmodule

《基于FPGA的(带有紧急情况处理的)交通灯控制器的设计..docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
基于FPGA的(带有紧急情况处理的)交通灯控制器的设计.
点击下载文档
相关专题 基于fpga的交通灯控制 设计 交通灯 控制器 基于fpga的交通灯控制 设计 交通灯 控制器
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文