VHDLFPGA交通灯.doc
《VHDLFPGA交通灯.doc》由会员分享,可在线阅读,更多相关《VHDLFPGA交通灯.doc(7页珍藏版)》请在冰点文库上搜索。
![VHDLFPGA交通灯.doc](https://file1.bingdoc.com/fileroot1/2023-5/16/87f422b1-30a7-4d8c-b59c-0b3a19e4bec3/87f422b1-30a7-4d8c-b59c-0b3a19e4bec31.gif)
《VHDL与数字系统设计》课程设计报告
(2014--2015年度第1学期)
名称:
VHDL与数字系统设计
题目:
交通灯控制器
院系:
电气与电子工程学院
班级:
电子1301
学号:
1131230106
学生姓名:
韩辉
指导教师:
高雪莲
设计周数:
2周
成绩:
日期:
2015年1月日
课程课程设计报告
一、课程设计的目的与要求
1.设计目的
(1)熟悉MAXPLUS2/QuartusII软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;
(2)学习利用VHDL语言设计交通灯控制器电路程序。
2.设计要求:
根据设计正文提出的交通灯控制器功能,实现交通灯控制器设计。
(1)分析交通灯控制器的基础功能(见设计正文),在此基础上完善该交通灯控制器功能。
(2)根据提出的真值表编写相应的VHDL程序。
(3)对编写的程序说明其实现的功能和编程思路,描述程序中出现的端口含义。
二、设计正文
1.设计思路:
设计一个交通灯控制器,该控制器包括两组红黄绿灯(A组和B组)。
它们的变化顺序采用实际红绿灯变化顺序,变化时长设置:
红灯15秒,绿灯10秒,黄灯5秒。
(便于最终仿真结果的观察)
2.交通灯控制器的源程序:
libraRyieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;——包含库和程序包
entitycounteris——定义实体
port(clock,reset,hold:
instd_logic;——输入变量clock,reset,hold
flash:
outstd_logic;——输出变量flash,numa,numb,a,b
numa,numb:
outintegerrange0to25;
aR,aG,aY:
outstd_logic;
bR,bG,bY:
outstd_logic);
endcounter;——结束实体
architecturertlofcounteris——定义结构体
signalcountnum:
integerrange0to30;
begin
process(clock)
begin
ifreset='1'then——reset=1时保持原状态
countnum<=0;
elsifrising_edge(clock)then——检测时钟上升沿
ifcountnum=29then——计29秒自动跳回0
countnum<=0;
else
countnum<=countnum+1;——在前一秒的基础上加一秒
endif;
endif;
endprocess;
process(clock)
begin
ifrising_edge(clock)then——检测时钟上升沿
ifcountnum<=9then——A路为绿灯
numa<=10-countnum;
aR<='0';
aG<='1';
aY<='0';
elsifcountnum<=14then——A路为黄灯
numa<=15-countnum;
aR<='0';
aG<='0';
aY<='1';
else
numa<=30-countnum;——A路为红灯
aR<='1';
aG<='0';
aY<='0';
endif;
ifcountnum<=14then
numb<=15-countnum;——b路为红灯
bR<='1';
bG<='0';
bY<='0';
elsifcountnum<=24then
numb<=25-countnum;——B路为绿灯
bR<='0';
bG<='1';
bY<='0';
else
numb<=30-countnum;——B路为黄灯
bR<='0';
bG<='0';
bY<='1';
endif;
endif;
endprocess;——结束进程
end;
三.课程设计结论与总结
1.交通灯控制器的仿真波形图及其分析:
图1交通灯控制道路的仿真波形图一
图1为交通灯控制道路的仿真波形图,由图1分析可得以下结论:
(1)如图1中蓝色框内区域所示,当reset=1时,交通灯状态保持不变;当reset=0时,交通灯控制器正常运行,即道路A按照绿—黄—红变化,道路B按照红—绿—黄变化。
(2)如图1中绿色直线所示,道路A的绿灯持续时间为10S,之后跳变为黄灯,黄灯持续时间为5S;道路B的红灯持续时间为15S。
符合原设计方案。
图2交通灯控制道路的仿真波形图二
图2为交通灯控制道路的仿真波形图,由图2分析可得以下结论:
上一周期道路A的5S黄灯结束后跳变为红灯,并持续15S;上一周期道路B的15S红灯结束后跳变为绿灯,并持续10S,而后又变为黄灯,持续5S。
之后的周期继续循环往复。
2.课程设计的总结与改进方案
考虑到道路在偶遇突发状况的特殊情况,可以考虑在交通灯控制系统中加入特殊控制信号control,其作用为:
当道路遇到突发状况时,control=1,此时要求道路A、B均为红灯;在无突发状况时,control=0,交通灯按原方案运行。
改进后的交通灯控制器的源程序如下:
(红色字体为修改部分)
libraRyieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(clock,reset,control:
instd_logic;
flash:
outstd_logic;
numa,numb:
outintegerrange0to15;
aR,aG,aY:
outstd_logic;
bR,bG,bY:
outstd_logic);
endcounter;
aRchitecturertlofcounteris
signalcountnum:
integerrange0to30;
begin
process(clock)
begin
ifreset='1'then
countnum<=0;
elsifrising_edge(clock)then
ifcontrol='1'then
flash<='1';
else
flash<='0';
ifcountnum=29then
countnum<=0;
else
countnum<=countnum+1;
endif;
endif;
endif;
endprocess;
process(clock)
begin
ifrising_edge(clock)then
ifcontrol='1'then
aR<='1';
bR<='1';
aG<='0';
bG<='0';
aY<='0';
bY<='0';
else
ifcountnum<=9then
numa<=10-countnum;
aR<='0';
aG<='1';
aY<='0';
elsifcountnum<=14then
numa<=15-countnum;
aR<='0';
aG<='0';
aY<='1';
else
numa<=30-countnum;
aR<='1';
aG<='0';
aY<='0';
endif;
ifcountnum<=14then
numb<=15-countnum;
bR<='1';
bG<='0';
bY<='0';
elsifcountnum<=24then
numb<=25-countnum;
bR<='0';
bG<='1';
bY<='0';
else
numb<=30-countnum;
bR<='0';
bG<='0';
bY<='1';
endif;
endif;
endif;
endprocess;
end;
改进后的交通灯控制器的仿真波形图如下:
图3改进后的交通灯控制器的仿真波形图
图3为改进后的交通灯控制器的仿真波形图,由图3分析可得以下结论:
当control=1时,道路A、B的交通灯均为红色。
其他结论与未改进前相同,在此不再赘述。
6