数电综合实验报告2交通灯.docx
《数电综合实验报告2交通灯.docx》由会员分享,可在线阅读,更多相关《数电综合实验报告2交通灯.docx(14页珍藏版)》请在冰豆网上搜索。
![数电综合实验报告2交通灯.docx](https://file1.bdocx.com/fileroot1/2023-1/28/62d970f3-1e2b-4987-9dbf-98c058628b28/62d970f3-1e2b-4987-9dbf-98c058628b281.gif)
数电综合实验报告2交通灯
数字逻辑与数字系统设计综合实验二
——十字路口交通灯自动控制器的设计
学院电子工程学院
班级卓越001012班
学号00101201
姓名冉艳伟
实验时间2012.6.8
十字路口交通灯自动控制器的设计
一、实验目的
学习Quartus
的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
二、设计任务
设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。
当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。
当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。
南北干道
东西干道
图1路口交通管理示意图
A
B
C
D
南北干道交通灯
绿(40秒)
黄(5秒)
红(40秒)
红(5秒)
东西干道交通灯
红
红
绿
黄
表1交通信号灯的4种状态
三、实验要求
(1)按照设计任务设计,采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。
交通灯用发光二级管模拟,观察交通灯的运行是否正常,如果不正常,排除故障直至正确为止。
(2)编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。
要求:
必须用可编程器件实现电路功能。
可以是原理图,也可以是VHDL代码,也可以混合输入。
五、设计说明
(1)第一模块:
CLK时钟秒脉冲发生电路
在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作,故对1MHz的时钟信号进行1000000分频。
模块说明:
系统输入信号:
CLKi:
由外接信号发生器提供1MHz的时钟信号;
系统输出信号:
CLK:
产生每秒一个脉冲的信号;
(2)第二模块:
模90倒计数器
按照实验要求,交通灯循环一次为90秒,且显示倒数的计数值,故设计一模90倒计数器通过主程序运算即可显示各路计数值。
模块说明:
系统输入:
CLK:
接收由CLK电路的提供的1hz的时钟脉冲信号;
reset:
紧急情况输入
系统输出信号:
L1:
倒计数值秒数十位变化控制信号;
L0:
倒计数值秒数个位变化控制信号;
(3)交通灯主程序
说明:
系统输入:
CLK:
接收由CLK电路的提供的1hz的时钟脉冲信号;
reset:
紧急情况输入
系统输出信号:
Lx:
东西方向红绿黄灯控制信号;
Ly:
南北方向红绿黄灯控制信号;
NUMx1:
东西方向倒计数值秒数十位变化控制信号;
NUMx0:
东西方向倒计数值秒数个位变化控制信号;
NUMx1:
南北方向倒计数值秒数十位变化控制信号;
NUMx0:
南北方向倒计数值秒数个位变化控制信号;
六、设计方案
图2交通灯控制系统示意图
时间显示数据输出
红黄绿灯信号输出
图2交通信号灯控制器的原理框图
采用VHDL语言输入的方式实现交通信号灯控制器
CLK
时间显示数据输出
信号灯输出
图3交通信号灯控制器程序原理框图
七、程序清单
(1)第一模块:
CLK时钟秒脉冲发生电路
entitydefreqis
port(CLKi:
instd_logic;
CLK:
outstd_logic
);
enddefreq;
architecturebehavofdefreqis
signalq:
integerrange999999downto0;
begin
process(CLKi,q)
begin
if(CLKi'eventandCLKi='1')then
if(q=999999)then
q<=0;
else
q<=q+1;
endif;
endif;
if(q<500000)then
CLK<='0';
else
CLK<='1';
endif;
endprocess;
endbehav;
(2)第二模块:
模90倒计数器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysubcounter90is
port(CLK:
instd_logic;
reset:
instd_logic;
L1,L0:
outstd_logic_vector(3downto0)
);
endsubcounter90;
architecturebehavofsubcounter90is
signallt1,lt0:
std_logic_vector(3downto0);
begin
process(CLK,reset,lt1,lt0)
begin
if(reset='0')then
if(CLK'eventandCLK='1')then
if(lt0="0000")then
if(lt1="0000")then
lt1<="1000";
lt0<="1001";
else
lt1<=lt1-1;
lt0<="1001";
endif;
else
lt0<=lt0-1;
endif;
endif;
else
lt0<=lt0;
lt1<=lt1;
endif;
endprocess;
L1<=lt1;
L0<=lt0;
endbehav;
(3)交通灯主程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytrafficlightis
port(CLK:
instd_logic;
reset:
instd_logic;
Lx,Ly:
outstd_logic_vector(2downto0);
NUMx1,NUMx0,NUMy1,NUMy0:
outstd_logic_vector(3downto0)
);
endtrafficlight;
architecturestructureoftrafficlightis
signallt1,lt0,NUMxt1,NUMxt0,NUMyt1,NUMyt0:
std_logic_vector(3downto0);
signalCLKt:
std_logic;
componentdefreq
port(CLKi:
instd_logic;
CLK:
outstd_logic
);
endcomponent;
componentsubcounter90
port(CLK:
instd_logic;
reset:
instd_logic;
L1,L0:
outstd_logic_vector(3downto0)
);
endcomponent;
begin
U1:
defreqportmap(CLK,CLKt);
U2:
subcounter90portmap(CLKt,reset,lt1,lt0);
process(lt1,lt0,reset,NUMxt1,NUMxt0,NUMyt1,NUMyt0)
begin
if(reset='0')then
if(lt1>"0100")then
Lx<="100";
NUMxt1<=lt1-5;
NUMxt0<=lt0;
elsif(lt1="0100"andlt0>"0100")then
Lx<="010";
NUMxt1<=lt1-4;
NUMxt0<=lt0-5;
else
Lx<="001";
NUMxt1<=lt1;
NUMxt0<=lt0;
endif;
if((lt1>"0100")or(lt1="0100"andlt0>"0100"))then
Ly<="001";
if(lt0>"0100")then
NUMyt1<=lt1-4;
NUMyt0<=lt0-5;
else
NUMyt1<=lt1-5;
NUMyt0<=lt0+5;
endif;
elsif((lt1>"0000")or(lt1="0000"andlt0>"0100"))then
Ly<="100";
if(lt0>"0100")then
NUMyt1<=lt1;
NUMyt0<=lt0-5;
else
NUMyt1<=lt1-1;
NUMyt0<=lt0+5;
endif;
else
Ly<="010";
NUMyt1<=lt1;
NUMyt0<=lt0;
endif;
NUMx1<=NUMxt1;
NUMx0<=NUMxt0;
NUMy1<=NUMyt1;
NUMy0<=NUMyt0;
else
Lx<="001";
Ly<="001";
if(CLKt='0')then
NUMx1<=NUMxt1;
NUMx0<=NUMxt0;
NUMy1<=NUMyt1;
NUMy0<=NUMyt0;
else
NUMx1<="0000";
NUMx0<="0000";
NUMy1<="0000";
NUMy0<="0000";
endif;
endif;
endprocess;
endstructure;
八、仿真结果
1.第一模块:
CLK时钟秒脉冲发生电路
(1)功能仿真:
(2)时序仿真
(2)第二模块:
模90倒计数器
(1)功能仿真:
(2)时序仿真
(3)交通灯总程序仿真
(1)功能仿真:
(2)时序仿真
九、引脚设置
接下来就要选择目标器件并对相应的引脚进行锁定了,引脚锁定方法如下图所示。
十、实验总结(故障排除与收获体会)
综合设计实验对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。
通过设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,我们进行了数字电路设计,老师命题,进行设计。
趣味性强,同时也可以学到很多东西。
我们做的是交通灯控制器的设计。
在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
通过这个程序设计,我进一步加深了对电子设计自动化的了解,并进一步熟练了对QuartusII软件的操作。
在编写程序的过程中,遇到了很多问题,有些函数不太熟悉,使我发现自己以前学习上存在的不足。
通过与同学探讨和请教老师,终于把问题都解决了,并加深了对交通灯原理和设计思路的了解。
同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。
这次课程设计虽然结束了,也留下了很多遗憾,因为由于时间的紧缺和许多课业的繁忙,并没有做到最好,但是,最起码我们没有放弃,它是我们的骄傲!
相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。
我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。
只有不断的测试自己,挑战自己,才能拥有更多的成功和快乐!
快乐至上,享受过程,而不是结果!
认真对待每一个实验,珍惜每一分一秒,学到最多的知识和方法,锻炼自己的能力,这个是我们在实时测量技术试验上学到的最重要的东西,也是以后都将受益匪浅的!