交通灯设计.docx
- 文档编号:11246812
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:19
- 大小:112.92KB
交通灯设计.docx
《交通灯设计.docx》由会员分享,可在线阅读,更多相关《交通灯设计.docx(19页珍藏版)》请在冰豆网上搜索。
交通灯设计
郑州轻工业学院
电子技术课程设计
题目_基于FPGA的交通灯控制器的程序设计
学生姓名
专业班级电子信息工程10-1
学号
院(系)电气信息工程学院
指导教师耿鑫
完成时间2013年6月22日
郑州轻工业学院
课程设计任务书
题目基于FPGA的交通灯控制器的程序设计
专业、班级电子信息工程10-1学号07姓名
主要内容、基本要求、主要参考资料等:
主要内容:
要求学生使用硬件描述语言(Verilog或者VHDL)设计交通灯控制器的FPGA源程序。
实现如下功能:
能够控制2台交通灯;每台交通信号灯有黄灯、绿灯、红灯、左转灯,能够使南北和东西两条道路交替通行;自行设计每盏信号灯亮的合理时间。
可参考如下的信号定义:
CLK:
为同步时钟;EN:
使能信号,为1的话,则控制器开始工作;LAMPA:
控制A方向四盏灯的亮灭;其中,LAMPA0~LAMPA3,分别控制A方向的左拐灯、绿灯、黄灯和红灯;LAMPB:
控制B方向四盏灯的亮灭;其中,LAMPB0~LAMPB3,分别控制B方向的左拐灯、绿灯、黄灯和红灯;ACOUNT:
用于A方向灯的时间显示,8位,可驱动两个数码管;BCOUNT:
用于B方向灯的时间显示,8位,可驱动两个数码管。
基本要求:
1、学会quartusII的使用,掌握FPGA的程序设计方法。
2、掌握硬件描述语言语法。
3、掌握有限状态机的原理与实现方法。
4、程序设计完成后要求在quartusII中实现功能仿真。
主要参考资料:
1、周润景.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].电子工业出版社.2007,8
2、褚振勇.FPGA设计及应用(第三版)[M].西安电子科技大学出版社.2012,4
完成期限:
2013.6.21—2013.6.25
指导教师签名:
课程负责人签名:
目录
摘要I
1FPGA概述1
1.1FPGA的简介1
1.2FPGA的应用1
1.2.1电路设计1
1.2.2产品设计1
1.2.3系统级应用1
2系统硬件设计2
2.1整体设计流程2
2.2系统设计方案2
2.3主控模块3
2.3.1状态机3
2.3.2倒计时3
2.4显示模块3
3系统软件实现5
3.1软件整体设计5
3.2数据选择模块5
3.3显示译码模块6
3.4顶层文件6
3.5软件仿真部分时序图7
设计总结与致谢8
参考文献9
附录10
基于FPGA的交通灯控制器的程序设计
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
本系统基于FPGA芯片为中心器件来设计交通信号灯控制器,系统实用性强、操作简单、扩展性强。
本设计系统有控制模块,数据选择模块,显示译码模块和数码管模块四个模块组成。
系统具有基本的交通信号灯功能。
关键词FPGA交通灯控制器
1FPGA概述
1.1FPGA的简介
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
1.2FPGA的应用
1.2.1电路设计
连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领域,也是FPGA应用的基石。
事实上在电路设计中应用FPGA要求开发者具备相应的硬件知识(电路知识)和软件应用能力(开发工具)。
1.2.2产品设计
把相对成熟的技术应用到某些特定的领域开发满足行业需要并能被行业客户接受的产品。
这方面主要是FPGA技术和专业技术的结合问题,重点在性能,FPGA技术在这个领域是一个实现手段,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计。
1.2.3系统级应用
系统级得应用是FPGA与传统的计算机技术结合,实现一种FPGA版得计算机系统如用XilinxV-4,V-5系列的FPGA,实现内嵌POWERPCCPU,然后再配合各种外围功能,这个平台上跑LINIX等系统,这个系统也就支持各种标准外设和功能接口了,这对于快速构成FPGA大型系统来讲是很有帮助的。
2系统硬件设计
2.1整体设计流程
首先根据交通灯控制器的功能要求,将功能要求转化成系统流程图,然后对系统进行模块的划分,定义各个模块的具体功能。
再开始对各个模块用VHDL语言编程,并在QuartusⅡ环境下进行编译及功能仿真,最后将编程文件下载到FPGA器件中。
顶层框图的设计:
有控制模块,数据选择模块,显示译码模块和数码管模块四个模块。
时钟脉冲数码管位选信号
标准时钟
使能信号
图2-1顶层框图
2.2系统设计方案
利用状态机来实现对交通灯的控制,对十字路口的红、绿、黄和左拐灯进行控制,并通过数码管显示倒计时。
图2-2十字路口交通灯控制的平面
2.3主控模块
2.3.1状态机
用2个进程分别控制两个方向的交通灯。
引入有限状态机控制交通灯的状态转化,即绿灯→黄灯→左拐灯→黄灯→红灯。
复位时红灯全亮。
2.3.2倒计时
用2个减法计数器实现倒计时,当某个状态的剩余时间减到0则切换状态。
各状态的交通灯保持时间可以如下分配:
A向红、黄、绿和左拐灯分别为55s,5s,40s,15s,B向红、黄、绿和左拐灯分别为65s,5s,30s,15s。
2.4显示模块
8位数码管采用动态扫描显示,位选信号SEL0、SEL1、SEL2经过3-8译码后选择1位数码管,段选信号为A、B、C、D、E、F、G、DP。
图2-3位选扫描模块
图2-4段选扫描模块
图2-5显示译码模块
3系统软件实现
3.1软件整体设计
设计流程图如下:
新建工程
原理图文件或VHDL文件
输入程序或编辑原理图
编译,若有错,修改程序,直至无错
建立波形文件,导入管脚
编译波形文件,查看仿真结果,保存
图3-1工程设计流程框图
3.2数据选择模块
使用两个进程分别控制两个方向的四个灯循环亮灭:
绿→黄→左→黄→红。
图3-2数据选择模块RTL图
3.3显示译码模块
现时译码模块将上一个模块输出四个一位数译码成相对应的七位数码管段码,完成倒计时的译码和显示。
图3-3显示译码的RTL图
3.4顶层文件
将以上各个主要模块仿真成功之后,再编写顶层文件,将各个模块连接起来,统一调配,得到顶层文件的原理图。
图3-4顶层文件的原理图
3.5软件仿真部分时序图
图3-5顶层文件波形仿真结果图
设计总结与致谢
实践出真知,这是这次设计给我带来的最大的收获。
在此之前,我对FPGA和VHDL的了解仅局限于课本上的很少的一些知识,从来没有深入体会过,更缺乏实践经验。
通过这次课程设计,我对FPGA和VHDL有了深入的了解,熟悉了QuartusⅡ的基本使用方法,也使得让我对着门课程产生了浓厚的兴趣。
其实,一开始我对VHDL语言的掌握是很浅薄的,这也是我遇到的最大难题。
所以,我开始查阅VHDL教程,一方面学习这门语言的基本知识,另一方面结合交通灯控制器的要求,开始划分每个模块,然后逐步设计单元模块。
在编译的过程中也遇到了很多的难题,比如各个模块之间的连接和信号的定义方面总是出现错误,只有耐心、仔细地查阅才能够解决问题。
从这一次课程设计的过程中,我得到了几点启示。
那就是,一,要避免眼高手低;
二,要敢于有所突破;三,要耐心调试,才能达到完美。
虽然,学习VHDL语言的过程也许枯燥乏味,但只要持之以恒就会发现其中的乐趣的。
而且在以后的学习中,我们也要提高自主编程的能力以及动手能力,才能让自身综合素质全面发展。
参考文献
[1]周润景.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].电子工业出版社.2007,8
[2]褚振勇.FPGA设计及应用(第三版)[M].西安电子科技大学出版社.2012,4
[3]邢建平,VHDL硬件描述语言与数学逻辑电路设计[M].西安:
西安电子科技大学
出版社,2005:
45-46.
[4]朱如琪.FPGA设计实践教程[M].北京:
科学出版社,2009.
[5]王金明.数字系统设计与VerilogHDL[M].北京:
电子工业出版社,2010.
[6]黄智伟.FPGA系统设计与实践[M].北京:
电子工业出版社,2008.
[7]陈赜.《CPLD/FPGA与ASIC设计实践教程》.科学出版社,2010年9月
[8]李宥谋.基于Verilog的FPGA设计基础[M].西安:
西安电子科技大学出版社,2009.
附录
程序代码如下:
//交通灯控制器
/*信号定义
CLK:
同步时钟
EN:
使能信号
LAMPA:
0~3分别控制A方向的左拐灯、绿灯、黄灯和红灯
LAMPB:
0~3分别控制B方向的左拐灯、绿灯、黄灯和红灯
ACOUNT:
用于A方向的时间显示,8位,可驱动两个数码管
BCOUNT:
用于A方向的时间显示,8位,可驱动两个数码管
//位扫描模块caisu
moduletraffic(CLK,EN,LAMPA,LAMPB,clk1K,sel,decodeout);
output[3:
0]LAMPA,LAMPB;
output[6:
0]decodeout;
inputCLK,EN,clk1K;
outputreg[1:
0]sel;
wire[3:
0]macount0,macount1,mbcount0,mbcount1;
wire[1:
0]msel;
reg[7:
0]numa,numb;
regtempa,tempb;
reg[2:
0]counta,countb;
reg[7:
0]ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;
reg[3:
0]LAMPA,LAMPB;
always@(posedgeclk1K)
begin
if(sel==3)
beginsel<=0;end
else
beginsel<=sel+1;end
end
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
assignmacount0=numa[3:
0];
assignmacount1=numa[7:
4];
assignmbcount0=numb[3:
0];
assignmbcount1=numb[7:
4];
always@(posedgeCLK)//控制A方向的灯
begin
if(EN)
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
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==2)tempa<=0;
end
end
else
begin
LAMPA<=4'b1000;
counta<=0;
tempa<=0;
end
end
always@(posedgeCLK)//控制B方向的灯
begin
if(EN)
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
default:
LAMPB<=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==2)tempb<=0;
end
end
else
begin
LAMPB<=4'b1000;
countb<=0;
tempb<=0;
end
end
//********************************************************
assignmsel=sel;
wire[3:
0]dout;
switch4switch_m(macount0,macount1,mbcount0,mbcount1,msel,dout);
decode4_7decode4_7_M(decodeout,dout);
//********************************************************
endmodule
//段选扫描模块
moduleswitch4(din0,din1,din2,din3,sel,dout);
input[3:
0]din0,din1,din2,din3;
input[1:
0]sel;
outputreg[3:
0]dout;
always@(din0ordin1ordin2ordin3orsel)
begin
case(sel)
2'b00:
dout=din3;
2'b01:
dout=din2;
2'b10:
dout=din1;
2'b11:
dout=din0;
endcase
end
endmodule
//显示译码模块
moduledecode4_7(decodeout,indec);
output[6:
0]decodeout;
input[3:
0]indec;reg[6:
0]decodeout;
always@(indec)
begincase(indec)//用case语句进行译码
4'd0:
decodeout=7'b1111110;
4'd1:
decodeout=7'b0110000;
4'd2:
decodeout=7'b1101101;
4'd3:
decodeout=7'b1111001;
4'd4:
decodeout=7'b0110011;
4'd5:
decodeout=7'b1011011;
4'd6:
decodeout=7'b1011111;
4'd7:
decodeout=7'b1110000;
4'd8:
decodeout=7'b1111111;
4'd9:
decodeout=7'b1111011;
default:
decodeout=7'bx;
endcaseend
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计