基于EDA的交通灯控制课程设计.docx
- 文档编号:8788278
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:23
- 大小:405.51KB
基于EDA的交通灯控制课程设计.docx
《基于EDA的交通灯控制课程设计.docx》由会员分享,可在线阅读,更多相关《基于EDA的交通灯控制课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
基于EDA的交通灯控制课程设计
EDA技术课程大作业
设计题目:
基于EDA的交通灯控制设计
院系:
电子信息与电气工程学院
学生姓名:
屈战辉
学号:
200702040026
专业班级:
07级电子信息工程
(2)班
2010年12月8日
基于EDA的交通灯控制设计
1.设计背景和设计方案
1.1设计背景
设计一个由一条支干道和一条主干道的汇合点形成的十字交叉路口的交通灯控制器,主要要求如下:
1.主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
2.主干道处于常允许状态,两支干道有车来才允许通行。
3.当主、支干道有车时,两者交替通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯转换过程中,要亮5s黄灯作为过渡,并
进行减计时显示。
1.2设计方案
1.2.1背景分析
(一)、交通灯的功能是实现一个交叉口的通车控制,交通灯显示有以下4种状态:
1.主干道绿灯,支干道红灯;
2.主干道绿灯,支干道黄灯;
3.主干道红灯,支干道绿灯;
4.主干道黄灯,支干道绿灯。
(二)、支干道没车时,主干道一直亮绿灯;主干道没车时,主干道和支干道交替亮绿灯;主干道和支干道都有车时同样交替亮红绿灯。
在红绿灯交替时亮5s黄灯。
1.2.2方案及思路
一、分模块设计
1、红、绿、黄灯控制模块,模块名JTDKZ;
2、倒计时传输、控制模块XSKZ;
3、倒计时45s——CNT45s;
4、倒计时25s——CNT25s;
5、倒计时5s——CNT05s。
6、输入、输出。
二、模块设计思路
1、JTDKZ——根据交通灯显示有4种状态,可以采用CASE语句设置选择4种状态。
设置3个输入:
CLK(时钟脉冲)、SB(支干道传感器)、SM(主干道传感器)。
2、XSKZ——根据需要交通灯显示的不同数倒计时据设置4个输入使能信号:
EN45(45s倒计时使能信号)、EN25(25s倒计时使能信号)、EN05(5s倒计时使能信号);再设置5个倒计时计数数据输入信号将此时倒计时数据输出:
AIN45M、AIN45B、AIN25M、AIN25B、AIN05;2个输出信号使数码管显示正在倒计时的时间。
3、CNT45S——根据倒计时计数的要求设置3个输入信号:
CLK(计数脉冲)、
EN45(计数使能)、SB(支干道传感器信号);2个输出DOUT45M、DOUT45B,分别用于主、支干道显示。
4、CNT25s——根据倒计时计数的要求设置4个输入信号:
CLK(计数脉冲)、
EN45(计数使能)、SM(主干道传感器信号)、SB(支干道传感器信号);2个输出DOUT25M、DOUT25B,分别用于主、支干道显示。
5、CNT05s——根据倒计时计数的要求设置3个输入信号:
CLK(计数脉冲)、
EN05B(计数使能)、EN05M(计数使能);1个输出DOUT05,用于主、支干道显示。
6、输入输出模块,3个输入分别为:
CLK、SB、SM,2个输出分别为
DOUT1[7..0]、DOUT2[7..0]。
2.设计模块具体实现
2.1JTDKZ模块的实现
简单思路:
假设4种状态分别为:
A、B、C、D,在CLK上升沿来时,根据SB、SM状态判断交通处于何种状态,该状态输出什么信号。
设计的原理图模块:
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INSTD_LOGIC;
MR,MY0,MG0,BR,BY0,BG0:
OUTSTD_LOGIC);
ENDENTITYJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK)IS
VARIABLES:
INTEGERRANGE0TO45;
VARIABLECLR,EN:
BIT;
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFCLR='0'THENS:
=0;
ELSIFEN='0'THENS:
=S;
ELSES:
=S+1;
ENDIF;
CASESTATEIS
WHENA=>MR<='0';MY0<='0';MG0<='1';BR<='1';BY0<='0';BG0<='0';
IF(SBANDSM)='1'THEN
IFS=45THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
ELSIF(SBAND(NOTSM))='1'THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
WHENB=>MR<='0';MY0<='1';MG0<='0';BR<='1';BY0<='0';BG0<='0';
IFS=5THENSTATE<=C;CLR:
='0';EN:
='0';
ELSESTATE<=B;CLR:
='1';EN:
='1';
ENDIF;
WHENC=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='0';BG0<='1';
IF(SMANDSB)='1'THEN
IFS=25THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
ELSIFSB='0'THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
WHEND=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='1';BG0<='0';
IFS=5THENSTATE<=A;CLR:
='0';EN:
='0';
ELSESTATE<=D;CLR:
='1';EN:
='1';
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSCNT;
ENDARCHITECTUREART;
设计仿真的截图:
2.2XSKZ模块的实现
简单设计思路:
根据EN45、EN25、EN05M、EN05B的信号以及3个倒计时计数器的计数状态决定输出3个倒计时计数器中某个的状态输出。
原理图模块:
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCSKZIS
PORT(INA:
INSTD_LOGIC;
OUTA:
OUTSTD_LOGIC);
ENDENTITYCSKZ;
ARCHITECTUREARTOFCSKZIS
BEGIN
PROCESS(INA)IS
BEGIN
IFINA='1'THENOUTA<='1';
ELSEOUTA<='0';
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
设计仿真的截图:
2.3CNT45S模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号和SB信号有效,CNT45S开始计数,并将输入状态通过DOUT45M、DOUT45B分别输出到主、支干道显示。
设计的原理图模块:
设计源程序:
3
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT45SIS
PORT(SB,CLK,EN45:
INSTD_LOGIC;
DOUT45M,DOUT45B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCNT45S;
ARCHITECTUREARTOFCNT45SIS
SIGNALCNT6B:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
PROCESS(SB,CLK,EN45)IS
BEGIN
IFSB='0'THENCNT6B<=CNT6B-CNT6B-1;
ELSIF(CLK'EVENTANDCLK='1')THEN
IFEN45='1'THENCNT6B<=CNT6B+1;
ELSIFEN45='0'THENCNT6B<=CNT6B-CNT6B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT6B)IS
BEGIN
CASECNT6BIS
WHEN"000000"=>DOUT45M<="01000101";DOUT45B<="01010000";
WHEN"000001"=>DOUT45M<="01000100";DOUT45B<="01001001";
WHEN"000010"=>DOUT45M<="01000011";DOUT45B<="01001000";
WHEN"000011"=>DOUT45M<="01000010";DOUT45B<="01000111";
WHEN"000100"=>DOUT45M<="01000001";DOUT45B<="01000110";
WHEN"000101"=>DOUT45M<="01000000";DOUT45B<="01000101";
WHEN"000110"=>DOUT45M<="00111001";DOUT45B<="01000100";
WHEN"000111"=>DOUT45M<="00111000";DOUT45B<="01000011";
WHEN"001000"=>DOUT45M<="00110111";DOUT45B<="01000010";
WHEN"001001"=>DOUT45M<="00110110";DOUT45B<="01000001";
WHEN"001010"=>DOUT45M<="00110101";DOUT45B<="01000000";
WHEN"001011"=>DOUT45M<="00110100";DOUT45B<="01101001";
WHEN"001100"=>DOUT45M<="00110011";DOUT45B<="00111000";
WHEN"001101"=>DOUT45M<="00110010";DOUT45B<="00110111";
WHEN"001110"=>DOUT45M<="00110001";DOUT45B<="00110110";
WHEN"001111"=>DOUT45M<="00110000";DOUT45B<="00110101";
WHEN"010000"=>DOUT45M<="00101001";DOUT45B<="00110100";
WHEN"010001"=>DOUT45M<="00101000";DOUT45B<="00110011";
WHEN"010010"=>DOUT45M<="00100111";DOUT45B<="00110010";
WHEN"010011"=>DOUT45M<="00100110";DOUT45B<="00110001";
WHEN"010100"=>DOUT45M<="00100101";DOUT45B<="00110000";
WHEN"010101"=>DOUT45M<="00100100";DOUT45B<="00101001";
WHEN"010110"=>DOUT45M<="00100011";DOUT45B<="00101000";
WHEN"010111"=>DOUT45M<="00100010";DOUT45B<="00100111";
WHEN"011000"=>DOUT45M<="00100001";DOUT45B<="00100110";
WHEN"011001"=>DOUT45M<="00100000";DOUT45B<="00100101";
WHEN"011010"=>DOUT45M<="00011001";DOUT45B<="00100100";
WHEN"011011"=>DOUT45M<="00011000";DOUT45B<="00100011";
WHEN"011100"=>DOUT45M<="00010111";DOUT45B<="00100010";
WHEN"011101"=>DOUT45M<="00010110";DOUT45B<="00100001";
WHEN"011110"=>DOUT45M<="00010101";DOUT45B<="00100000";
WHEN"011111"=>DOUT45M<="00010100";DOUT45B<="00011001";
WHEN"100000"=>DOUT45M<="00010011";DOUT45B<="00011000";
WHEN"100001"=>DOUT45M<="00010010";DOUT45B<="00010111";
WHEN"100010"=>DOUT45M<="00010001";DOUT45B<="00010110";
WHEN"100011"=>DOUT45M<="00010000";DOUT45B<="00010101";
WHEN"100100"=>DOUT45M<="00001001";DOUT45B<="00010100";
WHEN"100101"=>DOUT45M<="00001000";DOUT45B<="00010011";
WHEN"100110"=>DOUT45M<="00000111";DOUT45B<="00010010";
WHEN"100111"=>DOUT45M<="00000110";DOUT45B<="00010001";
WHEN"101000"=>DOUT45M<="00000101";DOUT45B<="00010000";
WHEN"101001"=>DOUT45M<="00000100";DOUT45B<="00001001";
WHEN"101010"=>DOUT45M<="00000011";DOUT45B<="00001000";
WHEN"101011"=>DOUT45M<="00000010";DOUT45B<="00000111";
WHEN"101100"=>DOUT45M<="00000001";DOUT45B<="00000110";
WHENOTHERS=>DOUT45M<="00000000";DOUT45B<="00000000";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
2.4CNT25S模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号、SM信号和SB信号有效,CNT25S开始计数,并将输入状态通过DOUT25M、DOUT25B分别输出到主、支干道显示。
设计的原理图模块:
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT25SIS
PORT(SB,SM,CLK,EN25:
INSTD_LOGIC;
DOUT25M,DOUT25B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCNT25S;
ARCHITECTUREARTOFCNT25SIS
SIGNALCNT5B:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(SB,SM,CLK,EN25)IS
BEGIN
IFSB='0'THENCNT5B<=CNT5B-CNT5B-1;
ELSIFSM='0'THENCNT5B<=CNT5B-CNT5B-1;
ELSIF(CLK'EVENTANDCLK='1')THEN
IFEN25='1'THENCNT5B<=CNT5B+1;
ELSIFEN25='0'THENCNT5B<=CNT5B-CNT5B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT5B)IS
BEGIN
CASECNT5BIS
WHEN"00000"=>DOUNT25B<="00100101";DOUT25M<="00110000";
WHEN"00001"=>DOUNT25B<="00100100";DOUT25M<="00101001";
WHEN"00010"=>DOUNT25B<="00100011";DOUT25M<="00101000";
WHEN"00011"=>DOUNT25B<="00100010";DOUT25M<="00100111";
WHEN"00100"=>DOUNT25B<="00100001";DOUT25M<="00100110";
WHEN"00101"=>DOUNT25B<="00100000";DOUT25M<="00100101";
WHEN"00110"=>DOUNT25B<="00011001";DOUT25M<="00100100";
WHEN"00111"=>DOUNT25B<="00011000";DOUT25M<="00100011";
WHEN"01000"=>DOUNT25B<="00010111";DOUT25M<="00100010";
WHEN"01001"=>DOUNT25B<="00010110";DOUT25M<="00100001";
WHEN"01010"=>DOUNT25B<="00010101";DOUT25M<="00100000";
WHEN"01011"=>DOUNT25B<="00010100";DOUT25M<="00011001";
WHEN"01100"=>DOUNT25B<="00010011";DOUT25M<="00011000";
WHEN"01101"=>DOUNT25B<="00010010";DOUT25M<="00010111";
WHEN"01110"=>DOUNT25B<="00010001";DOUT25M<="00010110";
WHEN"01111"=>DOUNT25B<="00010000";DOUT25M<="00010101";
WHEN"10000"=>DOUNT25B<="00001001";DOUT25M<="00010100";
WHEN"10001"=>DOUNT25B<="00001000";DOUT25M<="00010011";
WHEN"10010"=>DOUNT25B<="00000111";DOUT25M<="00010010";
WHEN"10011"=>DOUNT25B<="00000110";DOUT25M<="00010001";
WHEN"10100"=>DOUNT25B<="00000101";DOUT25M<="00010000";
WHEN"10101"=>DOUNT25B<="00000100";DOUT25M<="00001001";
WHEN"10110"=>DOUNT25B<="00000011";DOUT25M<="00001000";
WHEN"10111"=>DOUNT25B<="00000010";DOUT25M<="00000111";
WHEN"11000"=>DOUNT25B<="00000001";DOUT25M<="00000110";
WHENOTHERS=>DOUNT25B<="00000000";DOUT25M<="00000000";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
2.5CNT05S模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号有效,CNT25S开始计数,并将输入状态通过DOUT05输出到主、支干道显示。
设计的原理图模块:
设计源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT05SIS
PORT(CLK,EN05M,EN05B:
INSTD_LOGIC;
DOUT5:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCNT05S;
ARCHITECTUREARTOFCNT05SIS
SIGNALCNT3B:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK,EN05M,EN05B)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFEN05M='1'THENCNT3B<=CNT3B+1;
ELSIFEN05B='1'THENCNT3B<=CNT3B+1;
ELSIFEN05B='0'THENCNT3B<=CNT3B-CNT3B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT3B)
BEGIN
CASECNT3BIS
WHEN"000"=>DOUT5<="00000101";
WHEN"001"=>DOUT5<="00000100";
WHEN"010"=>DOUT5<="00000011";
WHEN"011"=>DOUT5<="00000010";
WHEN"100"=>DOUT5<="00000001";
WHENOTHERS=>DOUT5<="00000000";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
3.整体组装和测试
3.1自动转换出来的源程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYwork;
ENTITYBlock1IS
port
(CLK:
INSTD_LOGIC;
SM:
INSTD_LOGIC;
SB:
INSTD_LOGIC;
MR:
OUTSTD_LOGIC;
MY:
OUTSTD_LOGIC;
MG:
OUTSTD_LOGIC;
BR:
OUTSTD_LOGIC;
BY:
OUTSTD_LOGIC;
BG:
OUTSTD_LOGIC;
DOUT1:
OUTSTD_LOGIC_VECTOR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 EDA 交通灯 控制 课程设计