VHDL交通灯课程设计Word文档下载推荐.docx
《VHDL交通灯课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VHDL交通灯课程设计Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
计数器的计时时间长短X~Y~Z可以任意设定。
2.系统分析
2.1系统构成
行人按下红灯按钮
设置马路红灯后按键的无效时间
步行街自助式交通灯控制器控制器分为3个模块:
消抖模块,交通灯模块,交通灯时长设置模块。
2.2系统实现过程
最初状态是人行道红灯,马路绿灯。
当有行人按下按钮时,马路的红灯变为黄灯,持续一个时钟周期的时间。
然后马路的黄灯变为绿灯,此时人行道的红灯也变为绿灯,然后持续HUMAN_TIME个时钟的周期的时间。
然后人行灯的绿灯变为闪烁的绿灯,持续2个时钟的周期的时间,然后人行道的闪烁的绿灯变为红灯,此时马路的红灯也变为绿灯。
然后在VEHICLE_TIME个时钟周期内人行道为红灯,马路为绿灯状态保持不变且行人按键无效。
状态如下:
状态
主干道信号灯
步行街信
号灯
主干道
步行街道
R
红
G
绿
Y
黄
so
1
通行
禁行
S1
车停靠
S2
S3
通行(绿灯
闪烁
S4
3.具体模块设计
3.1消抖模块
消抖模块DITHER如图2所示,使用硬件消抖原理。
3.2交通灯模块
交通灯模块LIGHT如图3所示,根据输入
GHUMAN_TIME,GHUMAN_CLKT和GVEHICLE_TIME的值,进行减计数,然后根据值判断状态机的状态。
3.3交通灯时长设置模块
交通灯时长设置模块COUNTER如图4所示,根据设置按键人按键设置人行道绿灯时长和按键屏蔽时长。
图2DITHER模块
图3LIGHT模块
COURT:
U5
GI-MR.
CO4
H廿甌l_SET
rft£
_5ET
RST
图4COUNTER模块
3.8整体结构电路图
图5整体结构电路图
4.程序设计
4.1消抖模块源代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDITHERIS
PORT(UPIN:
INSTD_LOGIC;
DOWNIN:
KEYOUT:
OUTSTD_LOGIC);
ENDDITHER;
ARCHITECTUREBEHAVEOFDITHERIS
SIGNALOUT1:
STD_LOGIC;
SIGNALOUT2:
BEGIN
OUT1<
=NOT(OUT2ANDUPIN);
OUT2<
=NOT(OUT1ANDDOWNIN);
KEYOUT<
=OUT1;
ENDBEHAVE;
4.2交通灯时长设置模块
ENTITYCOUNTIS
PORT(CLK:
INSTD_LOGIC;
CLEAR:
CLKADD:
CLKSUB:
PRE_SET:
HUMAN_SET:
RST:
GHUMAN_TIME:
OUTINTEGERRANGE31DOWNTO0;
GHUMAN_CLKT:
GVEHICLE_TIME:
OUTINTEGERRANGE31DOWNTO0);
ENDCOUNT;
ARCHITECTUREBEHAVEOFCOUNTIS
SIGNALHUMAN_TIME:
INTEGERRANGE31DOWNTO0;
SIGNALVEHICLE_TIME:
SIGNALSSTATE:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSCLK:
STD_LOGIC;
SIGNALDSCLK:
SSTATE<
="
0000"
WHENPRE_SET='
0'
ELSE
HUMAN_SET&
CLEAR&
CLKADD&
CLKSUB;
SCLK<
=CLKADDORCLKSUBORCLEAR;
PROCESS(CLK)
IF(CLK'
EVENTANDCLK='
1'
)THEN
DSCLK<
=SCLK;
ENDIF;
ENDPROCESS;
PROCESS(RST,CLEAR,DSCLK)
IF(RST='
VEHICLE_TIME<
=8;
ELSIF(DSCLK'
EVENTANDDSCLK='
CASESSTATEIS
WHEN"
0100"
=>
VEHICLE_TIME<
=0;
0101"
0110"
0111"
0001"
=VEHICLE_TIME-1;
0010"
=VEHICLE_TIME+1;
WHENOTHERS=>
=VEHICLE_TIME;
ENDCASE;
PROCESS(CLEAR,DSCLK)
HUMAN_TIME<
=4;
ELSIF(DSCLK'
EVENTANDDSCLK='
WHEN
"
1100"
=>
HUMAN_TIME<
=0;
1101"
1110"
1111"
1001"
=HUMAN_TIME
1010"
=HUMAN_TIME+1;
OTHERS
=HUMAN_TIME;
PROCESS(PRE_SET,RST)
GHUMAN_TIME<
=5;
GHUMAN_CLKT<
=7;
GVEHICLE_TIME<
=15;
ELSIF(PRE_SET'
EVENTANDPRE_SET='
=HUMAN_TIME+3;
=HUMAN_TIME+VEHICLE_TIME+3;
4.3交通灯模块
ENTITYLIGHTIS
PORT(SRED:
OUTSTD_LOGIC;
ERED:
SGREEN:
EYELLOW:
EGREEN:
GT_SET:
ININTEGERRANGE31DOWNTO0;
ININTEGERRANGE31DOWNTO0
REQUEST:
CLK:
INSTD_LOGIC);
ENDLIGHT;
ARCHITECTUREBEHAVEOFLIGHTIS
TYPE
IN_STATESIS
(ST0,ST1,ST2,ST3,ST4);
SIGNAL
CURRENT_STATE:
IN_STATES;
NEXT_STATE:
START:
SIG:
PROCESS(CURRENT_STATE,RST)
ORCURRENT_STATE=ST0)THEN
START<
='
;
ELSE
A:
PROCESS(START,CLK,RST)
SIG<
ELSIF(CLK'
IF(START='
IF(SIG=GVEHICLE_TIME)THEN
=SIG+1;
ENDPROCESSA;
PROCESS(RST,CLK)
CURRENT_STATE<
=ST0;
ELSIF(CLK'
EVENTANDCLK='
=NEXT_STATE;
PROCESS(CLK,CURRENT_STATE,REQUEST)
CASECURRENT_STATEIS
WHENST0=>
ERED<
EGREEN<
EYELLOW<
SRED<
SGREEN<
IF(REQUEST='
ANDGT_SET='
NEXT_STATE<
=ST1;
WHENST1=>
IF(SIG=1)THEN
=ST2;
WHENST2=>
IF(SIG=GHUMAN_TIME)THEN
=ST3;
WHENST3=>
=NOTCLK;
IF(SIG=GHUMAN_CLKT)THEN
=ST4;
WHENST4=>
WHENOTHERS=>
NEXT_ST
ATE<
4.4顶层文件源代码
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
EntityTrafficLightis
Port(clk:
instd_logic;
clear:
rclear:
clkADD:
rclkADD:
clkSUB:
rclkSUB:
pre_set:
human_set:
rst:
request:
rrequest:
clk_ls:
sred,sgreen:
outstd_logic;
ered,eyellow,egreen:
outstd_logic);
End;
ArchitecturebehaveofTrafficLightis
ComponentDITHERis
PORT(UPIN:
Endcomponent;
ComponentCOUNTis
ComponentLIGHTis
SignalTEMP_GHUMAN_TIME:
INTEGERRANGE31DOWNTO0;
SignalTEMP_GHUMAN_CLKT:
SignalTEMP_GVEHICLE_TIME:
Signal
TEMP_CLEAR,TEMP_CLKADD,TEMP_CLKSUB,TEMP_REQUEST:
std_logic;
Begin
U1:
DITHERportmap(clear,rclear,TEMP_CLEAR);
U2:
DITHERportmap(clkADD,rclkADD,TEMP_CLKADD);
U3:
DITHERportmap(clkSUB,rclkSUB,TEMP_CLKSUB);
U4:
DITHERportmap(request,rrequest,TEMP_REQUEST);
port
U5:
COUNT
map(CLK,TEMP_CLEAR,TEMP_CLKADD,TEMP_CLKSUB,PRE_SET,HUMAN_SET,RST,TEMP_GHUMAN_TIME,TEMP_GHUMAN_CLKT,TEMP_GVEHICLE_TIME);
U6:
LIGHTmap(SRED,ERED,SGREEN,EYELLOW,EGREEN,PRE_SET,TEMP_GHUMAN_TIM
E,TEMP_GHUMAN_CLKT,TEMP_GVEHICLE_TIME,TEMP_REQUEST,CLK_LS,R
ST);
Endbehave;
5•运行结果与分析
(1)消抖模块仿真波形图:
图6消抖模块仿真波形图
按键弹起为高电平,按下为低电平。
当按键按下时,UPIN变为低电DOWNIN变为高电平,并产生抖动。
输出的KEYOUT信号消除抖动。
(2)交通灯模块仿真波形图:
图7交通灯模块仿真波形图
给CLK一个时钟信号,在某一时刻开始赋给RST一个高电平,所有值恢复默认。
再给REQUEST赋值一个高电平,然后状态机开始工作,EYELLOW(马
路的黄灯)变为高电平,持续一个时钟周期的时间。
然后EGREEN(马路的绿灯)
变为高电平,此时SGREEN(人行道的绿灯)变为高电平,然后持续HUMAN_TIME个时钟的周期的时间。
然后SGREEN(人行灯的绿灯)变为N,持续2个时钟的周期的时间,然后SRED(人行道的红灯)变为高电平,此时ERED(马路的绿灯)变为高电平。
然后在VEHICLE_TIME个时钟周期内SRED(人行道红灯)保持高电平,EGREEN(马路的绿灯)保持为高电平。
在此过程中,再次给REQUEST高电平对交通灯的电位没有影响。
(3)交通灯时长设置模块仿真波形图:
QhosierTimeBan
0is
jjpoilfter:
?
1line
科刖硝SlEft
940,0HE
蠢h0■«
120^anF
1M.&
19MOD
0u320i'
0RB3W4耐加OR/440〔
0巾專
1*0
CLEAR
cmCUWM
.TnrjirLTTirjUL-LJTrjLrLT-LJTrjLTrLrjmrLrLr.rLrLruTr\rLJLTrirLrLrLirLrLr_rn
叫
curari
-1
—1|
田m
JLL
-ILL
i
S3.
田删和th
S«
TE»
rCLE1
:
也].
LN
X
.丄
J-
LJU
1IM
1X
tl
HUMANSEI
rn
•2・
2工、
ra.SETHST
Ll
~LJ~
图8交通灯时长设置模块仿真波形图
给CLK一个时钟信号,在某一时刻给RST一个高电平复位,然后
GHUMAN_CLK,GHUMAN_TIME和GVEHICLE_TIME回复默认值。
然后再在某一时刻给PRE_SET—个低电平给GHUMAN_CLK,GHUMAN_TIME和GVEHICLE_TIME赋值,GVEHICLE_TIME的值减1。
然后再在某一时刻同时给PRE_SET赋低电平,给HUMAN_SE