基于FPGA的带有紧急情况处理的交通灯控制器的设计.docx
- 文档编号:14231621
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:17
- 大小:49.75KB
基于FPGA的带有紧急情况处理的交通灯控制器的设计.docx
《基于FPGA的带有紧急情况处理的交通灯控制器的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的带有紧急情况处理的交通灯控制器的设计.docx(17页珍藏版)》请在冰点文库上搜索。
基于FPGA的带有紧急情况处理的交通灯控制器的设计
学号成绩
评语
《现代数字系统设计》课程论文
题目基于FPGA的(带有紧急情况处理的交通灯控制器的设计
作者班级
院别信息与通信工程专业电子信息工程完成时间2011年5月12日
1概述(2
1.1交通灯控制器的简介(2
1.2论文主要完成的工作(2
2系统硬件设计(2
2.1系统设计方案(2
2.2主控模块(3
2.2.1FPGA简介(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设计的产品将越来越普遍。
而此次交通灯控制器的设计采用基于VerilogHDL语言和FPGA的方法来实现所要求的功能。
1.2论文主要完成的工作
设计一个交通灯控制器,模拟现实生活中的交通灯,并能对紧急情况作出处理。
对系统进行模块划分、定义各模块的具体功能。
再用VerilogHDL语言编写程序实现各个模块应有的功能。
创建顶层文件,搭建电路,下载到FPGA芯片中。
调试并观察结果。
详细介绍本次设计过程中所涉及的硬件、软件原理及各个模块的设计方式。
深刻体会设计过程中所思,所想,所学。
撰写心得体会。
2系统硬件设计
2.1系统设计方案
利用状态机来实现对交通灯的控制,对十字路口的红、绿、黄和左拐灯进行控制,并通过数码管进行显示倒计时。
系统方案图如下图(1所示:
图(1交通灯控制
2.顶层原理框图如图(2所示:
图(2顶层原理系统图
2.2主控模块
2.2.1FPGA简介
FPGA,即现场可编程门阵列,它是在GAL、PAL、CPLD灯可编程期间的基础上发展的产物。
它是作为专门继承领域中的一种半定制电路而出现的,既解决了顶置电路的不足,又克服了原有可编程逻辑门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA这样一个新概念,内部包括可配置模块CLB、输出输入模块IOBR1YG1R2
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系列是当今AlteraCPLD中应用前景最好的器件系列之一[1,2],该系列的FPGA由逻辑阵列块LAB(Logicarrayblock、嵌入式阵列块EAB(embeddedarrayblock、快速互联以及IO单元构成,每个逻辑阵列块包含8个逻辑单元LE(logicelement和一个局部互联。
每个逻辑单元则由一个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系统软件设计
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紧急信号有车辆需优先通过十字路口
LAMPA0~3分别控制A方向的左拐、绿、黄和红灯
LAMPB0~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]王金明《数字系统设计与VerilogHDl》(第四版电子工业出版社2011
年1月
[2]湖南理工学院实验室《专业实验辅导教材》2010年10月
附录
1.控制模块源程序
/*信号定义
CLK同步时钟
EN使能信号
LAMPA0~3分别控制A方向的左拐、绿、黄和红灯
LAMPB0~3分别控制B方向的左拐、绿、黄和红灯
ACOUNT用于A方向的时间显示,驱动两个数码管
BCOUNT用于B方向的时间显示*/
moduletraffic(CLK,EN,LAMPA,EMERGE,LAMPB,ACOUNT,BCOUNT;output[7:
0]ACOUNT,BCOUNT;
output[3:
0]LAMPA,LAMPB;
inputCLK,EN,EMERGE;//EMERGE信号模拟紧急情况,如有救护车要通过十字路口
reg[3:
0]LAMPA,LAMPB;
reg[7:
0]numa,numb;//剩余时间
regtempa,tempb;//切换状态
reg[2:
0]counta,countb;//状态量
reg[7:
0]ared,ayellow,agreen,aleft,//保持时间
bred,byellow,bgreen,bleft;
assignACOUNT=numa;
assignBCOUNT=numb;
/****************设置灯的计数初值****************/
always@(EN
begin
if(!
EN
begin
ared<=8'h55;ayellow<=8'h5;
agreen<=8'h40;aleft<=8'h15;
bred<=8'h65;byellow<=8'h5;
bgreen<=8'h30;bleft<=8'h15;
end
end
/****************************控制A方向灯*************************/always@(posedgeCLK
begin
if(EN//正常情况
if(EMERGE//紧急情况
counta<=5;
else//无紧急情况的正常运行状态
begin
if(!
tempa//切换状态
begin
tempa<=1;
case(counta//控制亮灯的顺序
0:
beginnuma<=agreen;LAMPA<=2;counta<=1;end
1:
beginnuma<=ayellow;LAMPA<=4;counta<=2;end
2:
beginnuma<=aleft;LAMPA<=1;counta<=3;end
3:
beginnuma<=ayellow;LAMPA<=4;counta<=4;end
4:
beginnuma<=ared;LAMPA<=8;counta<=0;end
5:
beginLAMPA<=8;numa<=8'h20;counta<=0;end//紧急情况时,A,B向都红灯亮,并且持续时间都为20s,时间到转为正常情况
default:
LAMPA<=8;//红灯亮
endcase
end
else//倒计时
begin
if(numa>1
if(numa[3:
0]==0
begin
numa[3:
0]<=4'b1001;
numa[7:
4]<=numa[7:
4]-1;
end
elsenuma[3:
0]<=numa[3:
0]-1;
if(numa==2tempa<=0;
end
end
else//返回初态
begin
LAMPA<=4'b1000;counta<=0;tempa<=0;
end
end
/***************************控制B方向的灯************************/always@(posedgeCLK
begin
if(EN
if(EMERGE//紧急情况
countb=5;
else//无紧急情况的正常运行状态
begin
if(!
tempb
begin
tempb<=1;
case(countb//控制亮灯的顺序
0:
beginnumb<=bred;LAMPB<=8;countb<=1;end
1:
beginnumb<=bgreen;LAMPB<=2;countb<=2;end
2:
beginnumb<=byellow;LAMPB<=4;countb<=3;end
3:
beginnumb<=bleft;LAMPB<=1;countb<=4;end
4:
beginnumb<=byellow;LAMPB<=4;countb<=0;end
5:
beginLAMPB<=8;numb<=8'h20;countb<=0;end//紧急情况时,A,B方向都红灯亮,并且持续时间都为20s,时间到转为正常情况
default:
LAMPA<=8;//红灯亮
endcase
end
else
begin//倒计时
if(numb>1
if(numb[3:
0]==0
begin
numb[3:
0]<=4'b1001;
numb[7:
4]<=numb[7:
4]-1;
end
elsenumb[3:
0]<=numb[3:
0]-1;
if(numb==2tempb<=0;
end
end
else
begin
LAMPB<=4'b1000;countb<=0;tempb<=0;
end
end
endmodule
2.显示模块源程序
(1位选扫描模块源程序:
/*四进制计数器*/
modulecount4(clk,out;
inputclk;
output[1:
0]out;
reg[1:
0]out;
always@(posedgeclk
begin
if(out==3
out<=0;
else
out<=out+1;
end
Y1
endmodule
(2段选扫描模块源程序:
/*行为描述的16选4段选*/
modulemux16_4(out,ACOUNT,BCOUNT,sel;
output[3:
0]out;
reg[3:
0]out;
input[7:
0]ACOUNT;
input[7:
0]BCOUNT;
input[1:
0]sel;
always@(ACOUNTorBCOUNTorsel
case(sel
2'b00:
out<=ACOUNT[7:
4];
2'b01:
out<=ACOUNT[3:
0];
2'b10:
out<=BCOUNT[7:
4];
2'b11:
out<=BCOUNT[3:
0];
defaultout<=1'bx;
endcase
endmodule
(3显示译码模块源程序:
/*数码管显示电路*/
moduledecode4_7(a,b,c,d,e,f,g,out;
input[3:
0]out;
outputrega,b,c,d,e,f,g;
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 带有 紧急情况 处理 交通灯 控制器 设计