步行街道自助式交通灯控制器讲诉.docx
《步行街道自助式交通灯控制器讲诉.docx》由会员分享,可在线阅读,更多相关《步行街道自助式交通灯控制器讲诉.docx(19页珍藏版)》请在冰豆网上搜索。
步行街道自助式交通灯控制器讲诉
目 录
1、设计内容与要求2
1.1设计内容2
1.2设计要求2
2、总体框图3
2.1设计方案3
2.1.1方案一3
2.1.2方案二4
2.1.3最佳方案选择5
2.2总体框图5
3、选择器件6
4、功能模块7
4.1去抖模块7
4.1.1VHDL源程序(DITHER.VHD)7
4.1.2生成的模块8
4.1.3仿真图8
4.2分频器模块8
4.2.1VHDL源程序(DIV.VHD)8
4.2.2生成的模块10
4.2.3仿真图10
4.3设置计数器模块10
4.3.1VHDL源程序(COUNT.VHD)10
4.3.2生成的模块13
4.3.3仿真图14
4.4交通灯控制模块14
4.4.1VHDL源程序(LIGHT.VHD)14
4.4.2生成的模块18
4.4.3仿真图18
5、总体设计原理图19
5.1整体组装设计原理图19
5.2整体仿真图20
5.3管脚分布20
参考文献21
步行街道自助式交通灯控制器
1、设计内容与要求
1.1设计内容
设计一个步行街道上受行人控制的交通灯控制器,它要实现的功能如下:
在没有行人要通过街道时,主干道保持通行。
若有行人要通过街道,按下按键,发出请求,数秒后,主干道禁行,行人可以通过。
用VHDL语言编辑程序,在QuartusII软件进行综合,生成相应的模块,然后连接各个模块,再综合、适配,下载到芯片,做最后的测试,看能否实现其功能,能否达到设计目标。
1.2设计要求
1.正常情况下保持主干道的畅通。
2.当步行街道上的行人要穿过主干道时,通过设置的按钮来发出请求。
3.当有人按下此按钮时,主干道变为黄灯,设置计数器计时时间为X秒。
4.X秒过后,主干道变为红灯,计数器继续计时(计时时间为Y秒),在Y秒内若有人再次按按钮,计数器不重新计时。
5.步行街道绿灯闪烁时间为Y1秒,(Y—Y1)秒后主干道变为绿灯,车辆通行,且要保证车辆通行一定时间(Z秒)。
在此时间内,行人按按钮无效。
Z秒过后,若有人再按下按钮,又出现3中的状态。
6.计时器的计时时间长短X、Y、Z可以任意设定。
2、总体框图
2.1设计方案
2.1.1方案一
根据系统设计要求,系统设计采用自顶向下的设计方法。
系统的整体组装设计原理图由分频模块、去抖模块、设置计数模块和交通灯控制模块四部分组成。
(1)去抖模块
去抖模块的作用在于消除按键的抖动。
因为当输入信号在高低电平之间转换时,在转换的瞬间会产生毛刺,使信号波形不稳定,从而使系统不能正常工作,因此加入去抖模块。
(2)分频模块
分频模块的作用在于实现从高频到低频的转换,使输入到电路的频率能满足电路的需要而又不会烧毁电路中的器件。
(3)设置计数模块
设置计数模块的设置并存储主干道方向和步行街道方向的时间长短。
主干道方向需要设置的时间包括主干道黄灯信号时间、红灯信号时间和主干道车辆允许通行的最短时间,步行街道方向需要设置的时间为步行街道绿灯的闪烁时间。
(4)交通灯控制模块
交通灯控制模块采用状态机来实现,用于存储交通灯的五种状态。
五种状态的具体说明如下状态表所示。
表1状态表
状态
主干道信号灯
步行街信号灯
主干道
步行街道
R(红)
G(绿)
Y(黄)
R(红)
G(绿)
ST0
0
1
0
1
0
通行
禁行
ST1
0
0
1
1
0
车停靠
禁行
ST2
1
0
0
0
1
禁行
通行
ST3
1
0
0
0
禁行
通行(绿灯闪烁)
ST4
0
1
0
1
0
通行(Z秒内)
禁行
2.1.2方案二
依照设计要求,系统采用自底向上的设计方法。
系统整体由交通灯控制模块、计数模块和分频模块三部分组成。
(1)交通灯控制模块
交通灯控制模块主要实现设计要求的五种状态之间的转换,所以采用状态机来设计。
五种状态如表1所示。
(2)计数模块
计数模块模块主要作用控制五种状态之间的转换时间,根据设计要求,设置步行街和主干道两个方向的交通灯时间。
主干道方向需要设置的时间包括主干道黄灯信号时间、红灯信号时间和主干道车辆允许通行的最短时间,步行街道方向需要设置的时间为步行街道绿灯的闪烁时间。
(3)分频模块
由于较大的频率可能使各个状态之间的转换过快,无法更好的观察,所以采用分频模块,把高频率分成低频率,更好实现设计。
2.1.3最佳方案选择
方案一采用自顶向下设计方法,整个设计是从系统顶层开始的,结合模拟手段,可以从一开始就掌握所实现系统的性能状况,结合应用领域的具体要求,在此时就调整设计方案,进行性能优化或折衷取舍。
随着设计层次向下进行,系统性能参数将得到进一步的细化与确认,并随时可以根据需要加以调整,从而保证了设计结果的正确性,缩短了设计周期。
方案二采用自底向上的设计方法,设计从系统的底层开始,不过设计好后不易修改,而且还不易设计。
所以,我们采用方案一。
2.2总体框图
图1整体设计框图
3、选择器件
1.装有QuartusII软件的微型计算机。
计算机的硬件尽可能高,至少可以实现QuartusII软件的使用。
2.硬件实现的芯片为PFGA/CPLD,芯片管脚的数量要保证足够设计的程序所要使用的数量,并且使其所有管脚都有可分配的管脚,可以实现QuartusII上综合、适配的程序下载后可以顺利实现。
3.五个LED灯,用来显示交通灯,即:
行人方向红灯、行人方向绿灯和车辆方向红灯、车辆方向绿灯、车辆方向黄灯五个方向的亮灭。
4、功能模块
4.1去抖模块
这个模块的主要作用是消除按键在敲击时产生的抖动。
当UPIN为低电平,DOWNIN为高电平时,表示按键按下,KEYOUT有高电平输出;当UPIN为高电平,DOWNIN为低电平时,表示按键弹起,KEYOUT有低电平输出。
4.1.1VHDL源程序(DITHER.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDITHERIS
PORT(
UPIN:
INSTD_LOGIC;
DOWNIN:
INSTD_LOGIC;
KEYOUT:
OUTSTD_LOGIC
);
ENDDITHER;
ARCHITECTUREBEHAVEOFDITHERIS
SIGNALOUT1:
STD_LOGIC;
SIGNALOUT2:
STD_LOGIC;
BEGIN
OUT1<=NOT(OUT2ANDUPIN);
OUT2<=NOT(OUT1ANDDOWNIN);
KEYOUT<=OUT1;
ENDBEHAVE;
4.1.2生成的模块
图2DITHER模块
4.1.3仿真图
图3去抖模块仿真图
仿真分析:
输入UPIN、DOWNIN都为低电平时,输出KEYOUT为高电平;输入UPIN为高电平、DOWNIN为低电平时,输出KEYOUT为低电平;输入UPIN为低电平、DOWNIN为高电平时,输出KEYOUT为高电平;输入UPIN、DOWNIN都为高电平时,输出KEYOUT为低电平。
4.2分频器模块
这个模块的主要主要是转换频率,把高频率转换成低频率。
分频后的频率更能适应电路的要求,使电路可以更好的运行。
4.2.1VHDL源程序(DIV.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDIVIS
PORT
(
CLK_IN:
INSTD_LOGIC;
DIV_OUT:
OUTSTD_LOGIC
);
ENDDIV;
ARCHITECTUREaOFDIVIS
SIGNALFRE_N:
INTEGERRANGE0TO10;
SIGNALCLK_TMP:
STD_LOGIC;
BEGIN
DIV_OUT<=CLK_TMP;
PROCESS(CLK_IN)
BEGIN
IFFALLING_EDGE(CLK_IN)THEN
IFFRE_N<=9THEN
FRE_N<=0;
CLK_TMP<=NOTCLK_TMP;
ELSE
FRE_N<=FRE_N+1;
ENDIF;
ENDif;
ENDPROCESS;
ENDa;
4.2.2生成的模块
图4DIV模块
4.2.3仿真图
图5分频器模块仿真图
仿真分析:
输入CLK_IN信号经过十二个周期后,输出DIV_OUT第一个上升沿来临,实现了分频的作用。
4.3设置计数器模块
这个模块的主要作用是设置并存储主干道方向和步行街道方向的时间长短。
此模块预置了有效信号,通过加计数和减计数加大和减小预知的信号,从而实现对行人通行时间、行人方向信号灯闪烁时间和车辆通行时间的控制。
4.3.1VHDL源程序(COUNT.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYCOUNTIS
PORT(
CLK:
INSTD_LOGIC;
CLEAR:
INSTD_LOGIC;
CLKADD:
INSTD_LOGIC;
CLKSUB:
INSTD_LOGIC;
PRE_SET:
INSTD_LOGIC;
HUMAN_SET:
INSTD_LOGIC;
RST:
INSTD_LOGIC;
GHUMAN_TIME:
OUTINTEGERRANGE31DOWNTO0;
GHUMAN_CLKT:
OUTINTEGERRANGE31DOWNTO0;
GVEHICLE_TIME:
OUTINTEGERRANGE31DOWNTO0
);
ENDCOUNT;
ARCHITECTUREBEHAVEOFCOUNTIS
SIGNALHUMAN_TIME:
INTEGERRANGE31DOWNTO0;
SIGNALVEHICLE_TIME:
INTEGERRANGE31DOWNTO0;
SIGNALSSTATE:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSCLK:
STD_LOGIC;
SIGNALDSCLK:
STD_LOGIC;
BEGIN
SSTATE<="0000"WHENPRE_SET='0'ELSE
HUMAN_SET&CLEAR&CLKADD&CLKSUB;
SCLK<=CLKADDORCLKSUBORCLEAR;
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
DSCLK<=SCLK;
ENDIF;
ENDPROCESS;
PROCESS(RST,CLEAR,DSCLK)
BEGIN
IF(RST='1')THEN
VEHICLE_TIME<=8;
ELSIF(DSCLK'EVENTANDDSCLK='1')THEN
CASESSTATEIS
WHEN"0100"=>VEHICLE_TIME<=0;
WHEN"0101"=>VEHICLE_TIME<=0;
WHEN"0110"=>VEHICLE_TIME<=0;
WHEN"0111"=>VEHICLE_TIME<=0;
WHEN"0001"=>VEHICLE_TIME<=VEHICLE_TIME-1;
WHEN"0010"=>VEHICLE_TIME<=VEHICLE_TIME+1;
WHENOTHERS=>VEHICLE_TIME<=VEHICLE_TIME;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(CLEAR,DSCLK)
BEGIN
IF(RST='1')THEN
HUMAN_TIME<=4;
ELSIF(DSCLK'EVENTANDDSCLK='1')THEN
CASESSTATEIS
WHEN"1100"=>HUMAN_TIME<=0;
WHEN"1101"=>HUMAN_TIME<=0;
WHEN"1110"=>HUMAN_TIME<=0;
WHEN"1111"=>HUMAN_TIME<=0;
WHEN"1001"=>HUMAN_TIME<=HUMAN_TIME-1;
WHEN"1010"=>HUMAN_TIME<=HUMAN_TIME+1;
WHENOTHERS=>HUMAN_TIME<=HUMAN_TIME;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(PRE_SET,RST)
BEGIN
IF(RST='1')THEN
GHUMAN_TIME<=5;
GHUMAN_CLKT<=7;
GVEHICLE_TIME<=15;
ELSIF(PRE_SET'EVENTANDPRE_SET='0')THEN
GHUMAN_TIME<=HUMAN_TIME+1;
GHUMAN_CLKT<=HUMAN_TIME+3;
GVEHICLE_TIME<=HUMAN_TIME+VEHICLE_TIME+3;
ENDIF;
ENDPROCESS;
ENDBEHAVE;
4.3.2生成的模块
图6COUNT模块
4.3.3仿真图
图7计数器模块仿真图
仿真分析:
当PRE_SET下降沿时,GHUMAN_TIME、GHUMAN_CLKT、GVEHICLE_TIME三个数组输出信号发生跳转,三者关系符合GVEHICLE_TIME<=HUMAN_TIME+VEHICLE_TIME+3。
可以看出,满足计数器的预定功能。
4.4交通灯控制模块
这个模块的主要作用是交通灯五种状态的实现。
此模块采用状态机来实现交通灯的五种状态,设置了行人方向和车辆方向的五个交通灯,即行人方向红灯、行人方向绿灯和车辆方向红灯、车辆方向绿灯、车辆方向黄灯。
并设置了请求信号输入,作为行人要通过主干道的按钮。
4.4.1VHDL源程序(LIGHT.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYLIGHTIS
PORT(
SRED:
OUTSTD_LOGIC;
SGREEN:
OUTSTD_LOGIC;
ERED:
OUTSTD_LOGIC;
EGREEN:
OUTSTD_LOGIC;
EYELLOW:
OUTSTD_LOGIC;
GT_SET:
INSTD_LOGIC;
GHUMAN_TIME:
ININTEGERRANGE31DOWNTO0;
GHUMAN_CLKT:
ININTEGERRANGE31DOWNTO0;
GVEHICLE_TIME:
ININTEGERRANGE31DOWNTO0;
REQUEST:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
RST:
INSTD_LOGIC
);
ENDLIGHT;
ARCHITECTUREBEHAVEOFLIGHTIS
TYPEIN_STATESIS(ST0,ST1,ST2,ST3,ST4);
SIGNALCURRENT_STATE:
IN_STATES;
SIGNALNEXT_STATE:
IN_STATES;
SIGNALSTART:
STD_LOGIC;
SIGNALSIG:
INTEGERRANGE31DOWNTO0;
BEGIN
PROCESS(CURRENT_STATE,RST)
BEGIN
IF(RST='1'ORCURRENT_STATE=ST0)THEN
START<='0';
ELSESTART<='1';
ENDIF;
ENDPROCESS;
A:
PROCESS(START,CLK)
BEGIN
IF(RST='1')THEN
SIG<=0;
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(START='1')THEN
IF(SIG=GVEHICLE_TIME)THEN
SIG<=0;
ELSESIG<=SIG+1;
ENDIF;
ELSESIG<=0;
ENDIF;
ENDIF;
ENDPROCESSA;
PROCESS(RST,CLK)
BEGIN
IF(RST='1')THEN
CURRENT_STATE<=ST0;
ELSIF(CLK'EVENTANDCLK='1')THEN
CURRENT_STATE<=NEXT_STATE;
ENDIF;
ENDPROCESS;
PROCESS(CLK,CURRENT_STATE)
BEGIN
CASECURRENT_STATEIS
WHENST0=>ERED<='0';EGREEN<='1';EYELLOW<='0';SRED<='1';SGREEN<='0';
IF(REQUEST='1'ANDGT_SET='0')THEN
NEXT_STATE<=ST1;
ELSENEXT_STATE<=ST0;
ENDIF;
WHENST1=>ERED<='0';EGREEN<='0';EYELLOW<='1';SRED<='1';SGREEN<='0';
IF(SIG=1)THEN
NEXT_STATE<=ST2;
ELSENEXT_STATE<=ST1;
ENDIF;
WHENST2=>ERED<='1';EGREEN<='0';EYELLOW<='0';SRED<='0';SGREEN<='1';
IF(SIG=GHUMAN_TIME)THEN
NEXT_STATE<=ST3;
ELSENEXT_STATE<=ST2;
ENDIF;
WHENST3=>ERED<='1';EGREEN<='0';EYELLOW<='0';SRED<='0';SGREEN<=NOTCLK;
IF(SIG=GHUMAN_CLKT)THEN
NEXT_STATE<=ST4;
ELSENEXT_STATE<=ST3;
ENDIF;
WHENST4=>ERED<='0';EGREEN<='1';EYELLOW<='0';SRED<='1';SGREEN<='0';
IF(SIG=GVEHICLE_TIME)THEN
NEXT_STATE<=ST0;
ELSENEXT_STATE<=ST4;
ENDIF;
WHENOTHERS=>ERED<='0';EGREEN<='1';EYELLOW<='0';
SRED<='1';SGREEN<='0';NEXT_STATE<=ST3;
ENDCASE;
ENDPROCESS;
ENDBEHAVE;
4.4.2生成的模块
图8LIGHT模块
4.4.3仿真图
图9交通灯控制模块的仿真图
仿真分析:
从图上可以看出五个交通灯的变化情况,符合源程序赋予的各个状态的变化。
5、总体设计原理图
5.1整体组装设计原理图
图10整体组装设计原理图
5.2整体仿真图
图11系统整体仿真图
仿真分析:
当RST为高电平时,五种灯(行人方向红灯、行人方向绿灯和车辆方向红灯、车辆方向绿灯、车辆方向黄灯)按照五种状态依次变换,每种状态之间的变换时间与计数模块的一致。
5.3管脚分布
图12系统整体管脚分布
参考文献
1.曹昕燕,周凤臣,聂春燕。
EDA技术实验和课程设计。
北京:
清华大学出版社,2006。
2.潘松,黄继业。
EDA技术实用教程(第三版)。
北京:
科学出版社,2006。
3.谭会生。
EDA技术综合应用实例和分析。
西安:
西安电子科技大学出版社,2004。