基于EDA的交通灯控制系统设计.docx
- 文档编号:26513879
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:18
- 大小:190.23KB
基于EDA的交通灯控制系统设计.docx
《基于EDA的交通灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于EDA的交通灯控制系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于EDA的交通灯控制系统设计
EDA课程设计报告书
课题名称
基于EDA的交通灯控制系统设计
姓名
陈勇
学号
0812201-08
院系
物理与电信工程系
专业
电子信息工程
指导教师
田旺兰讲师
2011年6月10日
一、设计任务及要求:
设计任务:
设计一个具有四种信号灯的交通灯控制器。
要求:
1.由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄、左拐允许四盏信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外,左拐灯亮允许车辆向左拐弯。
2.信号灯变换次序为:
主支干道交替允许通行,主干道每次放行40秒,亮5秒红灯让行驶中的车辆有时间停到禁行线外,左拐放行15秒,亮5秒红灯;支干道放行30秒,亮5秒黄灯,左拐放行15秒,亮5秒红灯……。
各计时电路为倒计时显示。
指导教师签名:
2011年月日
二、指导教师评语:
指导教师签名:
2011年月日
三、成绩
验收盖章
2011年月日
基于EDA的交通灯控制系统设计
1设计目的
(1)掌握十字路口交通灯控制的设计原理,并能够运用VHDL编程语言编写出实验程序,进一步对所学的EDA知识进行掌握与实际应用。
(2)学会在quartusII软件环境中仿真,熟悉软件的基本操作和运行环境。
(3)锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。
2设计的主要内容和要求
设计一个基于EDA的交通灯控制系统,所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口。
能够做到主、支干道的红绿灯闪亮的时间不完全相同,在绿灯跳变红灯的过程中能够用黄灯进行过渡,使得行驶过程中的车辆有足够的时间停下来。
还要求在主、支干道各设立一组计时显示器,能够显示相应的红、黄、绿倒计时。
可以利用VHDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。
3整体设计方案
根据设计要求和系统所具有功能,并参考相关的文献资料,经行方案设计,画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如图3.1所示。
并且可以得出系统的状态图如图3.2所示,其中:
S0:
支干道没有车辆行驶,支干道绿灯,支干道红灯
S1:
支干道有车辆行驶,支干道绿灯,支干道红灯
S2:
主干道黄灯,支干道绿灯
S3:
主干道红灯,支干道绿灯
S4:
主干道红灯,支干道黄灯
图3.1整体设计方框图
图3.2系统状态图
4硬件电路的设计
4.1顶层文件原理图
根据以上设计思路,可以得到如下的顶层文件原理图如4.1所示,具体实物模块如图4.2所示。
图4.1顶层文件原理图
图4.2顶层文件的实体图图4.3时钟分频器模块
4.2 时钟分频器模块设计
分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计
数器和扫描显示电路。
系统的动态扫描需要1HZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。
分频模块主要为系统提供所需的时钟计时脉冲。
该模块将1kHZ的脉冲信号进行分频,产生1S的方波,作为系统时钟计时信号。
具体实物模块如图4.3所示。
4.3 控制及计时模块设计
控制模块根据外部输入信号和计时模块产生的输出信号,产生系统的状态机,控制其他部分协调工作。
计时模块用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间。
控制及计时模块采用状态机进行设计,可以定义出5种状态,分别为S0:
主干道绿灯,支干道红灯且没有车辆行驶;S1:
主干道绿灯,支干道红灯或支干道有车辆驶入;S2:
主干道黄灯,支干道红灯;S3:
主干道红灯,支干道绿灯;S4:
主干道红灯,支干道黄灯。
利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求。
具体实物模块如图4.4所示,其中:
CAR为支干道车辆检测开关
在支干道有车的情况下,模块可以进行减计时
CLK1S为1S的时钟脉冲
TIME1H、TIME1L、TIME2H、TIME2L分别
为主干道时钟高位、主干道时钟低位、支干道
时钟高位、支干道时钟低位
LED为LED灯发光情况,分别为主干道绿灯、
主干道黄灯、主干道红灯、支干道绿灯、主干
道黄灯、主干道红灯图4.4控制电路模块
Count的总的系统时间,用来改变系统的状态
4.4译码显示电路设计
根据状态控制器所控制的状态和计数器
的计时时间,选择当前状态下的根据状态控
制器所控制的状态和计数器的计时时间,选
择当前状态下的采用动态扫描显示。
具体实
物模块如图4.5所示。
图4.5译码显示电路模块
4.5顶层文件的编写
将以上各个单元模块仿真成功后,再进行顶层文件的编写。
将各个单元模块的变量赋值给顶层文件,从而将各个单元模块连接起来,统一调配。
得到顶层文件的实体模块如图4.2所示。
其中:
CLK为1KHZ系统时钟脉冲
CAR为支干道车辆行驶情况,高电平为有车行驶,低电平为无车行驶
LED为交通灯发光情况
SEL为数码管位码扫描
SEG为数码管段码
5软件设计
5.1时钟分频模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfpIS
PORT(clk:
INSTD_LOGIC;
CLK1S:
OUTSTD_LOGIC);
ENDfp;
ARCHITECTUREoneOFfpIS
SIGNALN:
STD_LOGIC_VECTOR(9DOWNTO0);
BEGIN
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THENN<=N+1;
ENDIF;
ENDPROCESS;
CLK1S<=N(9);
ENDone;
5.2交通灯控制及计时模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYkzIS
PORT(CLK1S,car:
INSTD_LOGIC;--1S脉冲,支干道车辆检测
TIME1H,TIME1L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--支干道计时
TIME2H,TIME2L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--支干道计时
count:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--系统总计时
led:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));--交通灯显示
ENDKZ;
ARCHITECTUREoneOFkzIS
TYPEstatesIS(s0,s1,s2,s3,s4,s5);--状态初始化
SIGNALcurrent_state,next_state:
states;
SIGNALc:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
REG:
PROCESS(CLK1S,car,current_state,c)
BEGIN
IFcar='0'THENcurrent_state<=s0;
c<="0000000";
ELSE
IFCLK1S'EVENTANDCLK1S='1'THEN--支干道有车开始计数
c<=c+1;
current_state<=next_state;
ENDIF;
ENDIF;
CASEcurrent_stateIS--状态转换
WHENs0=>LED<="100001";--支干道无车不减计时
TIME1H<="0100";TIME1L<="0101";
TIME2H<="0101";TIME2L<="0000";
IFcar='1'THENnext_state<=s1;
ELSEnext_state<=s0;
ENDIF;
WHENs1=>LED<="100001";--主干道绿灯,支干道红灯
IFc="0101100"THENnext_state<=s2;
ELSEnext_state<=s1;
ENDIF;
WHENs2=>LED<="010001";--主干道黄灯,支干道红灯
IFc="0110001"THENnext_state<=s3;
ELSEnext_state<=s2;
ENDIF;
WHENs3=>LED<="001100";--主干道红灯,支干道绿灯
IFc="1001010"THENnext_state<=s4;
ELSEnext_state<=s3;
ENDIF;
WHENs4=>LED<="001010";--支干道黄灯,主干道红灯
IFc="0110001"THENnext_state<=s5;
ELSEnext_state<=s4;
ENDIF;
WHENOTHERS=>LED<="100001";next_state<=s0;
ENDCASE;
IFc="0101101"THENTIME1H<="0000";TIME1L<="0101";
--系统时间为45,主干道黄灯计时5秒
ENDIF;
IFc="0110010"THEN
TIME1H<="0011";TIME1L<="0000";TIME2H<="0010";TIME2L<="0101";
--系统时间为50,主干道计时30秒,支干道计时25秒
ENDIF;
IFc="1001011"THENTIME2H<="0000";TIME2L<="0101";
--系统时间为75,支干道黄灯计时5秒
ENDIF;
IFc="1010000"THEN
TIME1H<="0100";TIME1L<="0000";TIME2H<="0101";TIME2L<="0101";
--系统时间为80,主干道计时45秒,支干道计时50秒
ENDIF;
IFc="1010000"THENc<="0000000";--系统时间清零
ENDIF;
ENDPROCESSREG;
count<=c;
ENDone;
5.3扫描显示译码器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYxsIS
PORT(clk,CLK1S,car:
INSTD_LOGIC;
TIME1H,TIME1L:
INSTD_LOGIC_VECTOR(3DOWNTO0);--主干道置数
TIME2H,TIME2L:
INSTD_LOGIC_VECTOR(3DOWNTO0);--支干道置数
count:
INSTD_LOGIC_VECTOR(6DOWNTO0);--计数信号
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);--数码管位码
seg:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));--数码管段码
ENDxs;
ARCHITECTUREoneOFxsIS
SIGNALnum:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALnumsel:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALnumseg:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALQ1,Q2,Q3,Q4:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
SM:
PROCESS(clk,num,numsel)--扫描
BEGIN
IFclk'EVENTANDclK='1'THENnumsel<=numsel+1;
IFnumsel="011"THENnumsel<="000";
ENDIF;
ENDIF;
ENDPROCESSSM;
WX:
PROCESS(numsel,Q1,Q2,Q3,Q4)--位选
BEGIN
CASEnumselIS
WHEN"011"=>num<=Q4;
WHEN"010"=>num<=Q3;
WHEN"001"=>num<=Q2;
WHEN"000"=>num<=Q1;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSWX;
ZS:
PROCESS(CLK1S,car,Q1,Q2,Q3,Q4,num,TIME1H,TIME1L,TIME2H,TIME2L)
--数码管置数
BEGIN
IFcar='1'THEN
IFCLK1S'EVENTANDCLK1S='1'THEN
IFQ2>"0000"THENQ2<=Q2-1;
ELSE
IFQ1>"0000"THENQ1<=Q1-1;Q2<="1001";--减计时
ENDIF;
ENDIF;
IFQ4>"0000"THENQ4<=Q4-1;
ELSE
IFQ3>"0000"THENQ3<=Q3-1;Q4<="1001";
ENDIF;
ENDIF;
ENDIF;
IFQ1="0000"ANDQ2="0000"THEN
Q1<=TIME1H;Q2<=TIME1L;
ENDIF;
IFQ3="0000"ANDQ4="0000"THEN
Q3<=TIME2H;Q4<=TIME2L;
ENDIF;
ELSEQ1<=TIME1H;Q2<=TIME1L;--支路无车辆不减计时
Q3<=TIME2H;Q4<=TIME2L;
ENDIF;
ENDPROCESSZS;
YM:
PROCESS(num,numseg)
BEGIN
CASEnumIS
WHEN"0000"=>numseg<="1111110";
WHEN"0001"=>numseg<="0110000";
WHEN"0010"=>numseg<="1101101";
WHEN"0011"=>numseg<="1111001";
WHEN"0100"=>numseg<="0110011";
WHEN"0101"=>numseg<="1011011";
WHEN"0110"=>numseg<="1011111";
WHEN"0111"=>numseg<="1110000";
WHEN"1000"=>numseg<="1111111";
WHEN"1001"=>numseg<="1111011";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSYM;
sel<=numsel;
seg<=numseg;
ENDone;
5.4顶层文件:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYjtdIS
PORT(clk:
INSTD_LOGIC;--动态扫描时钟
car:
INSTD_LOGIC;--支路车辆传感信号
led:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);--交通灯信号
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);--数码管位码
seg:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));--数码管段码
ENDjtd;
ARCHITECTUREoneOFjtdIS
COMPONENTfP
PORT(clK:
INSTD_LOGIC;
CLK1S:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTkz
PORT(CLK1S,car:
INSTD_LOGIC;
TIME1H,TIME1L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
TIME2H,TIME2L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
count:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
led:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDCOMPONENT;
COMPONENTxs
PORT(clK,CLK1S,car:
INSTD_LOGIC;
TIME1H,TIME1L:
INSTD_LOGIC_VECTOR(3DOWNTO0);
TIME2H,TIME2L:
INSTD_LOGIC_VECTOR(3DOWNTO0);
count:
INSTD_LOGIC_VECTOR(6DOWNTO0);
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
seg:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDCOMPONENT;
SIGNALCLK1S:
STD_LOGIC;
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALTIME1H,TIME1L,TIME2H,TIME2L:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
U1:
fpPORTMAP(CLK=>clk,CLK1S=>CLK1S);
U2:
kzPORTMAP
(CLK1S=>CLK1S,car=>car,count=>count,led=>led,TIME1H=>TIME1H,
TIME1L=>TIME1L,TIME2H=>TIME2H,TIME2L=>TIME2L);
U3:
xsPORTMAP
(clk=>clk,CLK1S=>CLK1S,car=>car,count=>count,sel=>sel,seg=>seg,
TIME1H=>TIME1H,TIME1L=>TIME1L,TIME2H=>TIME2H,TIME2L=>TIME2L);
END;
6系统仿真与分析
6.1仿真结果
利用quartusII软件对顶层实体程序进行编译,生成了可以进行仿真定时分析以及下载到可编程器件的相关文件,然后进行仿真,即可得到最后仿真结果。
仿真结果如图6.1所示:
图6.1仿真结果
6.2仿真结果分析
通过仿真结果可以得出:
开始时,支干道没有车辆行驶。
主干道处于常通行状态,支干道处于禁止状态;当支干道有车来时,主干道亮绿灯,经行45秒倒计时,支干道亮红灯,经行50秒倒计时;主干道45秒倒计时结束后跳变到黄灯,进行5秒倒计时,支干道继续亮红灯,进行倒计时;主干道5秒倒计时结束后跳变到红灯,经行30秒倒计时,支干道跳变到绿灯,进行25秒倒计时;支干道25秒倒计时结束后跳变到黄灯,进行5秒倒计时,主干道继续亮红灯,进行倒计时;支干道5秒倒计时结束后,判断支干道是否有车,若有车跳变到S1状态,没有车跳变到S0状态
7设计总结
通过这次课程设计,我进一步加深了对EDA(电子设计自动化)的了解。
并进一步熟练了对QuartusII软件的操作。
在做本次课程设计的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。
并加深了对交通灯原理和设计思路的了解。
同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。
数字化时代的到来给人们的生活带来了极大的改变,有理由相信随着数字化的深入,交通灯控制器的功能将日趋完善。
而且,VHDL语言对EDA产生的影响也是深远的,它缩短了电子产品的设计周期,为设计者提供了方便。
总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
参考文献
[1]江国强.EDA技术与应用(第3版).北京:
电子工业出版社,2010年4月
[2]杨恢先,黄辉先.单片机原理及应用.北京:
人民邮电出版社,2006年10月
[3]康华光.电子技术基础数字部分(第五版)[M].北京:
高等教育出版社,2006年1月
[4]康华光.电子技术基础模拟部分(第五版)[M].北京:
高等教育出版社,2006年1月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 EDA 交通灯 控制系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)