基于FPGA的交通信号灯设计Word下载.docx
《基于FPGA的交通信号灯设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的交通信号灯设计Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
![基于FPGA的交通信号灯设计Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/e8b85e3a-5c5f-4d22-8604-4a4a463b6725/e8b85e3a-5c5f-4d22-8604-4a4a463b67251.gif)
这是世界上最先的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最先的煤气红绿灯。
1914年由红绿黄三色圆形的投光器组成的红绿灯始安装于纽约市5号大街的一座高塔上。
1918年,又显现了带操纵的红绿灯和红外线红绿灯[4]。
信号灯的显现,使交通得以有效管制,关于疏导交通流量、提高道路通行能力,减少交通事故有明显成效。
1968年,联合国《道路交通和道路标志信号协定》对各类信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆能够直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必需让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必需在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时能够进入交叉路口。
EDA技术的进展
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,是指以运算机为工作平台,融合应用电子技术、运算机技术、智能化技术最新功效而研制成的电子CAD通用软件包,要紧能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计[5]、[6]。
是从运算机辅助设计(CAD)、运算机辅助制造(CAM)、运算机辅助测试(CAT)和运算机辅助工程(CAE)的概念进展而来的。
EDA技术确实是以运算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由运算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直相当于特定目标芯片的适配编译、逻辑映射和编程下载的高层次的电子设计方式。
EDA技术的显现,极大地提高了电路设计的效率和可用性,减轻了设计者的劳动强度。
EDA技术是电子设计领域的一场革命,代表了现今电子设计技术的最新进展方向,目前正处于高速进展时期,每一年都有新的EDA工具问世。
基于FPGA的交通灯的优势
传统的交通灯操纵系统多数由单片机或PLC实现,基于EDA技术FPGA的设计方式设计交通灯系统确实是利用硬件描述语言(HDL)来完成系统的设计文件,应用VHDL的数字电路[7]、[8]、[9]实验降低了数字系统的设计难度,这在电子设计领域已取得设计者的普遍采纳。
具有周期短,设计灵活,易于修改等明显的优势,而且随着FPGA器件、设计语言和电子设计自动化工具的进展和改良,愈来愈多的电子系统采纳FPGA来设计,还有,通过FPGA设计电子系统,一旦该系统能够达到必然规模的量产,很容易转化为ASIC芯片设计。
相信在以后,FPGA设计方式将更大规模的应用于各类类型的电子系统设计中。
本设计确实是针对交通信号灯操纵器的设计问题,并采纳自顶向下的设计思路。
提出了基于VHDL语言的交通信号灯系统的硬件实现方式。
通过对系统进行结构分析,采纳了层次化的设计方式,给出了各个模块的VHDL程序,而且利用QuartusⅡ对应用程序进行了仿真,并给出了相应的仿真结果。
在用VHDL语言进行电路设计时,应充分熟悉到VHDL语言的特点,从设计思想、语句运用及描述方式上等多方面对电路进行优化设计。
2.操纵系统的设计
系统设计要求
所要设计的交通信号灯操纵电路,要能够适用于由一条骨干道和一条支干道的汇合点形成的十字交叉路口,主、支干道的红绿灯闪亮时刻不完全相同。
具体的设计要求如下:
实现操纵一条骨干道和一条次干道汇合组成的十字交叉路口,使主、支干道上的车辆行人交替通行,其中骨干道车辆行人通行35秒,现在支干道上车辆行人禁止通行;
支干道车辆通行25秒,一样现在骨干道上车辆禁止通行。
每当信号灯由绿灯转换成红灯之前,黄灯要先亮5秒,现在另一个干道红灯不变,禁止通行。
在黄灯亮点亮5秒,以提示车辆行人。
在骨干道上安装有数码管,用来显示本道各信号灯闪亮的剩余时刻。
整体设计思路
通过参考其他的相关文献[6]、[9]、[10]、[11]、[12]、[13],对照研究如基于单片机、基于分立元件等其他设计手腕的优缺点,咱们以为利用基于FPGA的设计方式具有周期短,设计灵活,易于修改等明显的优势,通过FPGA设计电子系统,一旦该系统能够达到必然规模的量产,很容易转化为ASIC芯片设计。
本设计的交通信号操纵操纵电路实现原理是:
把由50M的有源晶振产生的现场可编程逻辑器件FPGA的系统时钟输入到分频模块,经分频模块分频产生频率为1Hz的时钟脉冲,作为操纵按时模块、操纵模块、紧急模块、计数模块的时钟信号,然后再由按时模块来操纵紧急模块和操纵模块,依照交通治理规则操纵交通工作状态的切换,最后,由系统时钟和计数模块和操纵模块来一起操纵计数器操纵模块,计数器的时钟为1Hz,再把计数器操纵模块送出的BCD码送给译码器译码后,送给数码管显示各方向直行绿灯的倒计时。
模块图如图1所示:
图1交通灯操纵系统模块图
CycloneⅡ系列的EP2C8Q208的脉冲为50MHZ,为了保证设计的精度,在设计的进程中采纳两次分频,同时在设计进程中为了避免显现意外情形的发生,加入了一个操纵信号操纵交通灯的启用或停止,交通信号操纵电路实现原理如图2所示:
图2交通灯操纵系统原理电路图
操纵电路的模块VHDL设计实现
2.3.1分频模块
libraryieee;
usejiao_tongis
port(clk:
instd_logic);
--20MHz晶振时钟
endjiao_tong;
architecturefenpinofjiao_tongis
signalclk1khz,clk1hz:
std_logic;
---分频信号包括1hz和1khz
begin
p1:
process(clk)
variablecount:
integerrange0to9999;
ifclk'
eventandclk='
1'
then
ifcount=9999thenclk1khz<
=notclk1khz;
count:
=0;
elsecount:
=count+1;
endif;
endif;
endprocessp1;
p2:
process(clk1khz)-------------------------1hz分频---
integerrange0to499;
ifclk1khz'
eventandclk1khz='
ifcount=499thenclk1hz<
=notclk1hz;
endprocessp2;
endfenpin;
2.3.2按时模块
p3:
process(clk1hz)
variablea:
---倒计时赋值标志位
variableqh:
std_logic_vector(3downto0);
---计数的高位和低位
variableql:
ifclk1hz'
eventandclk1hz='
then----若是是下降延
ifjin='
0'
then---状态st1,骨干道通行35s
ifa='
qh:
="
0011"
;
ql:
0100"
a:
='
elsifqh=0andql=1then--若是倒计时终止,则转到st2状态
a:
qh:
0000"
ql:
elsifql=0then---实现倒计时35s
1001"
=qh-1;
else
=ql-1;
endif;
endif;
endif;
endp3;
2.3.3状态转换模块
port(
clk:
instd_logic;
jin:
--禁止通行信号
architectureoneofjiao_tongis
typestatesis(st1,st2,st3,st4);
---4种状态
signalclk1khz,clk1hz:
signalone,ten:
--倒计时的个位和十位
signalcnt:
std_logic_vector(1downto0);
signaldata:
---数码管扫描计数信号
signalseg7_temp:
std_logic_vector(6downto0);
signalr1,r2,y1,y2,g1,g2:
process(clk1hz)------交通状态转换
variablestx:
states;
casestxis
whenst1=>
ifjin='
then-------状态st1,骨干道通行35s
qh:
ql:
a:
r1<
y1<
g1<
r2<
y2<
g2<
else
ifqh=0andql=1then--若是倒计时终止,则转到st2状态
stx:
=st2;
a:
qh:
ql:
elsifql=0then---实现倒计时35s
else
endif;
whenst2=>
then------状态st2,骨干道黄灯倒计时5s
----骨干道黄灯点亮
----支干道红灯点亮
ifql=1then---若是倒计时终止,则转到st3状态
=st3;
whenst3=>
then----状态st3,支干道通行25S
0010"
----骨干道红灯点亮
----支干道绿灯点亮
ifqh=0andql=1then----如果倒计时结束,则转到st4状态
=st4;
elsifql=0then----实现倒计时25S
whenst4=>
then---状态st4,支干道黄灯倒计时5s
---骨干道红灯点亮
---支干道黄灯点亮
ifql=1then-----若是倒计时终止,则转到st1状态
=st1;
endcase;
one<
=ql;
ten<
=qh;
endprocessp3;
2.3.4禁止通行模块
ra,ya,ga:
outstd_logic;
--骨干道红黄绿灯
rb,yb,gb:
outstd_logic);
--支红黄绿灯
p4:
process(jin,clk1hz,r1,r2,g1,g2,y1,y2,seg7_temp)-禁止通行信号数码管闪烁显示
ra<
=r1orjin;
rb<
=r2orjin;
---支干道红灯点亮
ga<
=g1and(notjin);
gb<
=g2and(notjin);
ya<
=y1and(notjin);
yb<
=y2and(notjin);
seg7(0)<
=seg7_temp(0)andclk1hz;
------实现数码管闪烁显示
seg7
(1)<
=seg7_temp
(1)andclk1hz;
seg7
(2)<
=seg7_temp
(2)andclk1hz;
seg7(3)<
=seg7_temp(3)andclk1hz;
seg7(4)<
=seg7_temp(4)andclk1hz;
seg7(5)<
=seg7_temp(5)andclk1hz;
seg7(6)<
=seg7_temp(6)andclk1hz;
else
seg7<
=seg7_temp;
=r1;
=r2;
=g1;
=g2;
=y1;
=y2;
endprocessp4;
2.3.5显示模块
p5:
process(clk1khz)--------数码管动态扫描计数---
ifcnt="
01"
thencnt<
00"
elsecnt<
=cnt+1;
endprocessp5;
p6:
process(cnt,one,ten)---------数码管动态扫描-----
casecntis
when"
=>
data<
=one;
scan<
=ten;
10"
whenothers=>
null;
endprocessp6;
p7:
process(data)--------------7段译码---
casedatais
when"
=>
seg7_temp<
1000000"
--0
0001"
1111001"
--1
0100100"
--2
0110000"
--3
0011001"
--4
0101"
0010010"
--5
0110"
0000010"
--6
0111"
1111000"
--7
1000"
0000000"
--8
0010000