基于某VHDL的交通信号灯设计Word格式.docx
《基于某VHDL的交通信号灯设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于某VHDL的交通信号灯设计Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
经过40秒,ABL由B“100010”变为B“100001”,再经过5秒,ABL变为B“010100”,再经过40秒,S变为B“001100”,再经过5秒,ABL变为B“100010”……如此循环下去。
南北、东西方向的红绿灯按表一表二变化。
表一交通灯状态转换表
东西(A)方向
红灯
绿灯
黄灯
45秒
40秒
5秒
南北(B)方向
表二交通灯状态转换表
ABL
备注
1
100100
长时间亮红灯
100010
初始状态
状态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)
IFCTR='
1'
THENQ<
="
00"
;
ELSE
IFCLK'
EVENTANDCLK='
THEN
IF(AT=X"
01"
)OR(BT=X"
)THENQ<
=Q+1;
ELSEQ<
=Q;
ENDIF;
ENDPROCESS;
S<
ENDJTD;
状态控制模块的仿真波形如图4所示:
图4状态控制模块的仿真波形图
3、倒计时模块(jtd_time)的设计
倒计时模块用来设定A和B两个方向计时器的初值,并为数码管显示模块提供倒计时时间。
倒计时模块源文件程序如下:
ENTITYJTD_TIMEIS
M:
S:
INSTD_LOGIC_VECTOR(1DOWNTO0);
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDJTD_TIME;
ARCHITECTUREJTD_1OFJTD_TIMEIS
SIGNALATI:
STD_LOGIC_VECTOR(7DOWNTO0):
=X"
SIGNALBTI:
SIGNALART,AGT,AYT:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALBRT,BGT,BYT:
ART<
45"
AGT<
40"
AYT<
05"
BRT<
BGT<
BYT<
PROCESS(CLK,M,S,CTR)
IFM='
THENATI<
=ATI;
EVENTANDCLK='
CASESIS
WHEN"
=>
ATI<
=ART;
10"
=AGT;
11"
=AYT;
WHENOTHERS=>
NULL;
ENDCASE;
THEN
IFATI/=X"
IFATI(3DOWNTO0)="
0000"
ATI(3DOWNTO0)<
1001"
ATI(7DOWNTO4)<
=ATI(7DOWNTO4)-1;
ELSEATI(3DOWNTO0)<
=ATI(3DOWNTO0)-1;
=ATI(7DOWNTO4);
THENBTI<
=BTI;
BTI<
=BGT;
=BYT;
=BRT;
IFBTI/=X"
IFBTI(3DOWNTO0)="
BTI(3DOWNTO0)<
BTI(7DOWNTO4)<
=BTI(7DOWNTO4)-1;
ELSEBTI(3DOWNTO0)<
=BTI(3DOWNTO0)-1;
=BTI(7DOWNTO4);
AT<
BT<
ENDJTD_1;
倒计时模块的仿真波形图如图5所示:
图5倒计时模块的仿真波形图
4、数码管显示模块(jtd_xs)的设计
显示模块用来显示倒计时时间。
采用动态扫描显示,通过分位程序,控制四个数码管的显示时间。
数码管显示模块的源文件程序为:
ENTITYJTD_XSIS
PORT(CLK1K:
LED1,LED2,LED3,LED4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDJTD_XS;
ARCHITECTUREJTD_3OFJTD_XSIS
SIGNALOU1,OU2,OU3,OU4:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSL:
PROCESS(CLK1K)
IFCLK1K'
EVENTANDCLK1K='
IFSL="
THENSL<
ELSESL<
=SL+1;
PROCESS(SL,AT,BT)
CASESLIS
OU1<
=BT(3DOWNTO0);
OU2<
=BT(7DOWNTO4);
OU3<
=AT(3DOWNTO0);
OU4<
=AT(7DOWNTO4);
LED1<
=OU1;
LED2<
=OU2;
LED3<
=OU3;
LED4<
=OU4;
ENDJTD_3;
数码管显示模块的仿真波形图如图6所示:
图6数码管显示模块的仿真波形图
5、信号灯显示模块(jtd_light)的设计
通过控制模块的输出的状态控制信号,控制六个信号灯的亮灭。
信号灯显示模块的源文件程序为:
ENTITYJTD_LIGHTIS
PORT(M:
ABL:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDJTD_LIGHT;
ARCHITECTUREJTD_2OFJTD_LIGHTIS
SIGNALLT:
STD_LOGIC_VECTOR(5DOWNTO0);
PROCESS(S,M)
THENLT<
100100"
LT<
100010"
100001"
010100"
001100"
ABL<
=LT;
ENDJTD_2;
信号灯显示模块的仿真波形图如图7所示:
图7信号灯显示模块的仿真波形图
三、引脚映射
本次设计我们采用GW48EDA实验箱,选择芯片EP1K30TC144-1,选择模式3,引脚映射如表三所示:
表三引脚映射
Node
Pin
ABL[0]
21
2
ABL[1]
22
3
ABL[2]
23
4
ABL[3]
26
5
ABL[4]
27
6
ABL[5]
7
54
8
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
LED4[0]
81
LED4[1]
82
LED4[2]
83
24
LED4[3]
86
25
四、编程下载
在实验箱上选择clock2为1Hz,clock0为1024Hz,模式选择模式3,引脚锁定如表三所示。
下载后,结果显示正确,六个信号灯依次为东西方向的红绿黄和南北方向的红绿黄。
两个方向上的数码管显示的时间完全吻合。
键1为紧急状态控制开关,按下键1时,两路信号灯都为红灯,时间暂停,再次按下键1,恢复原状态,继续计时。
键2为清零开关,按下键2时,两路信号灯从初始状态开始计时,结果证实调试成功。
五、实验总结
通过紧张的实验,我完成了设计任务——用VHDL设计交通灯控制器。
通过本次课程设计的学习,我深深地体会到设计课的重要性和目的性。
为了完成项目,我在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。
对软件设计流程有了更深刻的理解,掌握了MAX+plusⅡ的使用。
将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。
本次EDA课程设计的目的和意义,通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的原理知识,提高分析、解决实际问题的独立工作能力。