VHDL交通灯课程设计Word文档下载推荐.docx

上传人:b****5 文档编号:17280404 上传时间:2022-11-30 格式:DOCX 页数:17 大小:165.53KB
下载 相关 举报
VHDL交通灯课程设计Word文档下载推荐.docx_第1页
第1页 / 共17页
VHDL交通灯课程设计Word文档下载推荐.docx_第2页
第2页 / 共17页
VHDL交通灯课程设计Word文档下载推荐.docx_第3页
第3页 / 共17页
VHDL交通灯课程设计Word文档下载推荐.docx_第4页
第4页 / 共17页
VHDL交通灯课程设计Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

VHDL交通灯课程设计Word文档下载推荐.docx

《VHDL交通灯课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VHDL交通灯课程设计Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

VHDL交通灯课程设计Word文档下载推荐.docx

计数器的计时时间长短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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1