基于某VHDL的交通信号灯设计.docx

上传人:b****5 文档编号:5159765 上传时间:2022-12-13 格式:DOCX 页数:13 大小:811.85KB
下载 相关 举报
基于某VHDL的交通信号灯设计.docx_第1页
第1页 / 共13页
基于某VHDL的交通信号灯设计.docx_第2页
第2页 / 共13页
基于某VHDL的交通信号灯设计.docx_第3页
第3页 / 共13页
基于某VHDL的交通信号灯设计.docx_第4页
第4页 / 共13页
基于某VHDL的交通信号灯设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于某VHDL的交通信号灯设计.docx

《基于某VHDL的交通信号灯设计.docx》由会员分享,可在线阅读,更多相关《基于某VHDL的交通信号灯设计.docx(13页珍藏版)》请在冰豆网上搜索。

基于某VHDL的交通信号灯设计.docx

基于某VHDL的交通信号灯设计

交通灯控制器

姓名__孔亮__学号__0928401116__专业__电子信息工程__

一、设计要求:

1、能显示十字路口东西、南北两个方向的红、黄、绿灯的指示状态,用两组发光管表示两个方向的红、黄、绿灯。

2、能实现正常的倒计时功能。

用两个数码管LED作为东西、南北方向的时间显示,时间为红灯45秒,绿灯40秒,黄灯5秒。

3、能实现特殊状态的功能。

按键1按下后能实现:

(1)、计数器停止计数并保持在原来的状态。

(2)、东西南北路口均显示红灯状态。

(3)、特殊状态解除后能继续计数。

4、能实现总体清零功能

按键2按下后系统实现总清零,计数器由初始状态计数,对应状态的指示灯亮。

二、设计过程:

1、总体设计概要:

根据交通灯控制器的功能与要求,将其总体电路分为状态控制,倒计时,数码管显示,信号灯显示模块(jtd_ctrl,jtd_time,jtd_xs,jtd_light),jtd_ctrl实现逻辑与时序控制,外部两路脉冲振荡器的频率选为1kHz和1Hz的信号。

M

CTR

CLK

计时电路

扫描显示电路

LED1

LED2

LED3

LED4

CTR

M

CLK

CLK1K

图1设计框图

2、交通灯原理分析

当M=‘1’时,进入紧急状态,ABL输出为B“100100”,即南北、东西方向均为红灯亮。

当M=‘1’跳变到M=‘0’时,数码管继续计时,恢复正常工作状态。

当CTR=‘1’时,系统清零,交通灯从初始状态(即ABL输出为“100010”)开始工作。

当M=‘0’且CTR=‘0’时,交通灯即开始正常工作。

经过40秒,ABL由B“100010”变为B“100001”,再经过5秒,ABL变为B“010100”,再经过40秒,S变为B“001100”,再经过5秒,ABL变为B“100010”……如此循环下去。

南北、东西方向的红绿灯按表一表二变化。

表一交通灯状态转换表

东西(A)方向

红灯

绿灯

黄灯

45秒

40秒

5秒

南北(B)方向

绿灯

黄灯

红灯

40秒

5秒

45秒

表二交通灯状态转换表

CTR

M

ABL

备注

0

1

100100

长时间亮红灯

1

0

100010

初始状态

0

0

状态1:

100010

持续40秒,转到状态2

状态2:

100001

持续5秒,转到状态3

状态3:

010100

持续40秒,转到状态4

状态4:

001100

持续5秒,转到状态1

注:

S的六位分别对应东西(A)方向的红绿黄和南北(B)方向的红绿黄,’1’表示亮,’0’表示灭。

三、模块设计及仿真

1、顶层文件的设计

顶层原理图设计可以依据系统框图进行,由反馈控制,倒计时,数码管显示,信号灯显示模块(jtd_ctrl,jtd_time,jtd_xs,jtd_light)五部分组成。

其顶层原理图如图2所示。

图2顶层原理图

顶层文件的仿真波形图如图3所示:

图3顶层文件的仿真波形

2、状态控制模块(jtd_ctrl)的设计

状态控制模块根据倒计时模块(jtd_time)的输出信号和1Hz的时钟信号,产生系统的状态机,控制其他部分的协调工作。

该模块的源文件程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJTD_CTRLIS

PORT(CLK:

INSTD_LOGIC;

CTR:

INSTD_LOGIC;

AT,BT:

INSTD_LOGIC_VECTOR(7DOWNTO0);

S:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDJTD_CTRL;

ARCHITECTUREJTDOFJTD_CTRLIS

SIGNALQ:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(CLK,AT,BT,CTR)

BEGIN

IFCTR='1'THENQ<="00";

ELSE

IFCLK'EVENTANDCLK='1'THEN

IF(AT=X"01")OR(BT=X"01")THENQ<=Q+1;

ELSEQ<=Q;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

S<=Q;

ENDJTD;

状态控制模块的仿真波形如图4所示:

图4状态控制模块的仿真波形图

3、倒计时模块(jtd_time)的设计

倒计时模块用来设定A和B两个方向计时器的初值,并为数码管显示模块提供倒计时时间。

倒计时模块源文件程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJTD_TIMEIS

PORT(CLK:

INSTD_LOGIC;

M:

INSTD_LOGIC;

CTR:

INSTD_LOGIC;

S:

INSTD_LOGIC_VECTOR(1DOWNTO0);

AT,BT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDJTD_TIME;

ARCHITECTUREJTD_1OFJTD_TIMEIS

SIGNALATI:

STD_LOGIC_VECTOR(7DOWNTO0):

=X"01";

SIGNALBTI:

STD_LOGIC_VECTOR(7DOWNTO0):

=X"01";

SIGNALART,AGT,AYT:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALBRT,BGT,BYT:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

ART<=X"45";

AGT<=X"40";

AYT<=X"05";

BRT<=X"45";

BGT<=X"40";

BYT<=X"05";

PROCESS(CLK,M,S,CTR)

BEGIN

IFM='1'THENATI<=ATI;

ELSE

IFCLK'EVENTANDCLK='1'THEN

CASESIS

WHEN"00"=>ATI<=ART;

WHEN"10"=>ATI<=AGT;

WHEN"11"=>ATI<=AYT;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDIF;

IFCTR='1'THEN

ATI<=ART;

ELSE

IFATI/=X"01"THEN

IFATI(3DOWNTO0)="0000"THEN

ATI(3DOWNTO0)<="1001";

ATI(7DOWNTO4)<=ATI(7DOWNTO4)-1;

ELSEATI(3DOWNTO0)<=ATI(3DOWNTO0)-1;

ATI(7DOWNTO4)<=ATI(7DOWNTO4);

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK,M,S,CTR)

BEGIN

IFM='1'THENBTI<=BTI;

ELSE

IFCLK'EVENTANDCLK='1'THEN

CASESIS

WHEN"00"=>BTI<=BGT;

WHEN"01"=>BTI<=BYT;

WHEN"10"=>BTI<=BRT;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDIF;

IFCTR='1'THEN

BTI<=BGT;

ELSE

IFBTI/=X"01"THEN

IFBTI(3DOWNTO0)="0000"THEN

BTI(3DOWNTO0)<="1001";

BTI(7DOWNTO4)<=BTI(7DOWNTO4)-1;

ELSEBTI(3DOWNTO0)<=BTI(3DOWNTO0)-1;

BTI(7DOWNTO4)<=BTI(7DOWNTO4);

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

AT<=ATI;

BT<=BTI;

ENDJTD_1;

倒计时模块的仿真波形图如图5所示:

图5倒计时模块的仿真波形图

4、数码管显示模块(jtd_xs)的设计

显示模块用来显示倒计时时间。

采用动态扫描显示,通过分位程序,控制四个数码管的显示时间。

数码管显示模块的源文件程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJTD_XSIS

PORT(CLK1K:

INSTD_LOGIC;

AT,BT:

INSTD_LOGIC_VECTOR(7DOWNTO0);

LED1,LED2,LED3,LED4:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDJTD_XS;

ARCHITECTUREJTD_3OFJTD_XSIS

SIGNALOU1,OU2,OU3,OU4:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALSL:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(CLK1K)

BEGIN

IFCLK1K'EVENTANDCLK1K='1'THEN

IFSL="11"THENSL<="00";

ELSESL<=SL+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(SL,AT,BT)

BEGIN

CASESLIS

WHEN"00"=>OU1<=BT(3DOWNTO0);

WHEN"01"=>OU2<=BT(7DOWNTO4);

WHEN"10"=>OU3<=AT(3DOWNTO0);

WHEN"11"=>OU4<=AT(7DOWNTO4);

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

LED1<=OU1;

LED2<=OU2;

LED3<=OU3;

LED4<=OU4;

ENDJTD_3;

数码管显示模块的仿真波形图如图6所示:

图6数码管显示模块的仿真波形图

5、信号灯显示模块(jtd_light)的设计

通过控制模块的输出的状态控制信号,控制六个信号灯的亮灭。

信号灯显示模块的源文件程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJTD_LIGHTIS

PORT(M:

INSTD_LOGIC;

S:

INSTD_LOGIC_VECTOR(1DOWNTO0);

ABL:

OUTSTD_LOGIC_VECTOR(5DOWNTO0));

ENDJTD_LIGHT;

ARCHITECTUREJTD_2OFJTD_LIGHTIS

SIGNALLT:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

PROCESS(S,M)

BEGIN

IFM='1'THENLT<="100100";

ELSE

CASESIS

WHEN"00"=>LT<="100010";

WHEN"01"=>LT<="100001";

WHEN"10"=>LT<="010100";

WHEN"11"=>LT<="001100";

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDPROCESS;

ABL<=LT;

ENDJTD_2;

信号灯显示模块的仿真波形图如图7所示:

图7信号灯显示模块的仿真波形图

三、引脚映射

本次设计我们采用GW48EDA实验箱,选择芯片EP1K30TC144-1,选择模式3,引脚映射如表三所示:

表三引脚映射

Node

Pin

1

ABL[0]

21

2

ABL[1]

22

3

ABL[2]

23

4

ABL[3]

26

5

ABL[4]

27

6

ABL[5]

27

7

CLK

54

8

CLK1K

126

9

LED1[0]

41

10

LED1[1]

42

11

LED1[2]

65

12

LED1[3]

67

13

LED2[0]

68

14

LED2[1]

69

15

LED2[2]

70

16

LED2[3]

72

17

LED3[0]

73

18

LED3[1]

78

19

LED3[2]

79

20

LED3[3]

80

21

LED4[0]

81

22

LED4[1]

82

23

LED4[2]

83

24

LED4[3]

86

25

M

8

26

CTR

9

四、编程下载

在实验箱上选择clock2为1Hz,clock0为1024Hz,模式选择模式3,引脚锁定如表三所示。

下载后,结果显示正确,六个信号灯依次为东西方向的红绿黄和南北方向的红绿黄。

两个方向上的数码管显示的时间完全吻合。

键1为紧急状态控制开关,按下键1时,两路信号灯都为红灯,时间暂停,再次按下键1,恢复原状态,继续计时。

键2为清零开关,按下键2时,两路信号灯从初始状态开始计时,结果证实调试成功。

五、实验总结

通过紧张的实验,我完成了设计任务——用VHDL设计交通灯控制器。

通过本次课程设计的学习,我深深地体会到设计课的重要性和目的性。

为了完成项目,我在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。

对软件设计流程有了更深刻的理解,掌握了MAX+plusⅡ的使用。

将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。

本次EDA课程设计的目的和意义,通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的原理知识,提高分析、解决实际问题的独立工作能力。

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

当前位置:首页 > PPT模板 > 其它模板

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

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