EDA课程设计交通信号灯控制器设计.docx
《EDA课程设计交通信号灯控制器设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计交通信号灯控制器设计.docx(18页珍藏版)》请在冰豆网上搜索。
![EDA课程设计交通信号灯控制器设计.docx](https://file1.bdocx.com/fileroot1/2022-12/17/7c7c688a-958f-4d91-93f4-3ae138b0e490/7c7c688a-958f-4d91-93f4-3ae138b0e4901.gif)
EDA课程设计交通信号灯控制器设计
海南大学信息科学技术学院
《EDA 技术课程设计报告》
专业班级:
2008 级通信工程
姓 名:
刘 洋
学 号:
20081604B062
指导老师:
刘文进老师
课程设计的要求及目的……………………………………………2
前言………………………………………………………………… 2
一 设计内容与目的……………………………………………… 2
1.1 设计内容………………………………………………… 3
1.2 设计目的………………………………………………… 3
二 方案设计……………………………………………………… 3
2.1设计思路…………………………………………………3
2.2设计总体框图……………………………………………4
2.3状态表……………………………………………………5
2.4电路原理图………………………………………………5
2.5静态显示电路……………………………………………5
三 功能电路的设计……………………………………………… 5
3.1细化的设计总体框图……………………………………5
3.2灯控制器电路设计………………………………………6
3.3计数器设计………………………………………………8
3.4显示控制部分设计………………………………………12
四 系统仿真图……………………………………………………13
五 设计心得会……………………………………………………14
六 参考文献………………………………………………………15
1
交通信号灯控制器设计
课程设计的要求及目的:
1.了解电子设计的具体流程和方法。
2. 掌握电子设计的基本要求,能够运用所学的知识解决生活中的一些问题。
3. 初步掌握 VHDL 语言编程,并设计出一个有意义的小型系统。
4. 掌握 MAX+plus Ⅱ软件的应用,并且了解相关硬件的组成和功能。
5. 用 EDA(Electronic Design Automation)或者原理图完成一个课题的设
计,并达到相应的功能要求。
前言
伴随着社会的发展以及人类生活水平的提高,汽车的数量在不断增加,交通
事业得以蓬勃发展,而随之引起的安全问题已经不容忽视。
EDA 技术的发展和
应用领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、
生物、医学、军事等各个领域的重要性日益突出。
众所周知,随着生活的进步,
我们身边的交通也日益繁忙,在众多的十字交叉路口,为了确保车辆安全,迅
速地通行,就必须在每个入口设置红绿灯。
本系统中设置了红,绿,黄三色共
三种信号灯。
红灯亮禁止一切该方向的行人和车辆通行,绿灯亮允许行人和车
辆通行,黄灯亮则提示行驶中的车辆注意不要抢道,并让它们有时间停靠到禁
行线之外或者加快通过,同时提醒行人加快行进或者等待下一次绿灯。
人行道
灯亮时,允许行人通过。
为了确保十字路口的行人和车辆顺利,畅通的通过,往往采用电子控制的交通
信号来进行指挥。
利用 EDA 技术设计交通灯来完成这个需求就显的更加迫切,
同样也是非常的实用和合理。
本交通信号灯控制系统以十字路口为例讲述设计
的功能要求和设计的具体过程。
一设计内容与目的:
2
1.1 设计内容:
用 EDA 设计一个简单的交通灯控制器,具有如下功能:
(1)设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路
口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许
通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
(2)用红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是
否到来的信号。
(3)主干道处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮
绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
主、支干道均有车时,两者交替允许通行,主干道每次放行 45 秒,支干道每次
放行 25 秒,设立 45 秒、25 秒计时、显示电路。
(4)在每次由绿灯亮到红灯亮的转换过程中,要亮 5 秒黄灯作为过渡,使行
驶中的车辆有时间停到禁行线外,设立 5 秒计时、显示电路。
1.2 设计目的:
(1)掌握十字路口交通灯控制的设计原理,并能够运用 VHDL 编程语言编写
出实验程序,进一步对所学的 EDA 知识进行掌握与实际应用。
(2)学会在 MAX+plus Ⅱ软件环境中仿真,熟悉软件的基本操作和运行环境。
(3)锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。
二方案设计:
2.1 设计思路
(1(主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。
(2(45 秒、25 秒、5 秒定时信号可用顺计时,也可用倒计时,计时起始信
号由主控电路给出,定时结束信号也输入到主控电路,由主控电路启、闭三
色信号灯或启动另一计时电路。
(3(主控电路是核心,这是一个时序电路,其输入信号为:
车辆检测信号
3
(A,B);45 秒、25 秒、5 秒定时信号(C,D,E)。
其状态转化图如下
所示:
2.2 设计总体框图:
4
主干道
支干道
指示灯
亮灯时间
指示灯
亮灯时间
红灯亮
30s
绿灯亮
25s
红灯亮
黄灯亮
5s
绿灯亮
45
红灯亮
50s
黄灯亮
5s
红灯亮
2.3 状态表
2.4 电路原理图:
2.5 输出显示电路 :
静态扫描电路。
三 功能电路的设计
3.1 细化的设计总体框图
根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画
5
出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如
下图 3.1 所示
CLK
交通灯控制及计时模块
扫描显示模块
LED 显示
3.2 灯控制器电路设计
由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、
黄、左拐允许四盏信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行
驶中的车辆有时间停在禁行线外,左拐灯亮允许车辆向左拐弯。
信号灯变换次
序为:
主支干道交替允许通行,主干道每次放行 40S,亮 5S 红灯让行驶中的车
辆有时间停到禁行线外,左拐放行 15 秒,亮 5S 红灯;支干道放行 30S,亮 5S
黄灯,左拐放行 15 秒,亮 5S 红灯,其中主支干道的红黄绿灯表示如
MR、MY、MG、BR、BY、BG。
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JTDKZ IS
PORT(CLK,SM,SB:
IN STD_LOGIC;
6
MR,MY,MG,BR,BY,BG:
OUT STD_LOGIC);
END ENTITY JTDKZ;
ARCHITECTURE ART OF JTDKZ IS
TYPE STATE_TYPE IS(A,B,C,D);
SIGNAL STATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK)IS
VARIABLE S:
INTEGER RANGE 0 TO 45;
VARIABLE CLR,EN:
BIT;
BEGIN
IF(CLK'EVENT AND CLK='1') THEN
IF CLR='0'THEN
S:
=0;
ELSIF EN='0'THEN
S:
=S;
ELSE
S:
=S+1;
END IF;
CASE STATE IS
WHEN A=>MR<='0';MY<='0';MG<='1';
BR<='1';BY<='0';BG<='0';
IF(SB AND SM)='1'THEN
IF S=45 THEN
STATE<=B;CLR:
='0';EN:
='0';
ELSE
STATE<=A;CLR:
='1';EN:
='1';
END IF;
ELSIF(SB AND (NOT SM))='1'THEN
STATE<=B;CLR:
='0';EN:
='0';
ELSE
STATE<=A;CLR:
='1';EN:
='1';
END IF;
WHEN B=>MR<='0';MY<='1';MG<='0';
BR<='1';BY<='0';BG<='0';
IF S=5 THEN
STATE<=C;CLR:
='0';EN:
='0';
ELSE
STATE<=B;CLR:
='1';EN:
='1';
END IF;
WHEN C=>MR<='1';MY<='0';MG<='0';
BR<='0';BY<='0';BG<='1';
IF(SM AND SB)='1'THEN
IF S=25 THEN
STATE<=D;CLR:
='0';EN:
='0';
7
ELSE
STATE<=C;CLR:
='1';EN:
='1';
END IF;
ELSIF SB='0'THEN
STATE<=D;CLR:
='0';EN:
='0';
ELSE
STATE<=C;CLR:
='1';EN:
='1';
END IF;
WHEN D=>MR<='1';MY<='0';MG<='0';
BR<='0';BY<='1';BG<='0';
IF S=5 THEN
STATE<=A;CLR:
='0';EN:
='0';
ELSE
STATE<=D;CLR:
='1';EN:
='1';
END IF;
END CASE;
END IF;
END PROCESS CNT;
END ARCHITECTURE ART;
3.3计数器的设计
根据路上状况,设计各个显示计时部分,包括 45s、25s 和 5s,各部分采用
顺时计数方法。
各模块如下:
程序如下:
----CNT45S.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
8
ENTITY CNT45S IS
PORT
(SB,CLK,EN45:
IN STD_LOGIC;
DOUT45M,DOUT45B:
OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY CNT45S;
ARCHITECTURE ART OF CNT45S IS
SIGNAL CNT6B:
STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
PROCESS(SB,CLK,EN45) IS
BEGIN
IF SB='0' THEN CNT6B<=CNT6B-CNT6B-1;
ELSIF(CLK'EVENT AND CLK='1')THEN
IF EN45='1' THEN CNT6B<=CNT6B+1;
ELSIF EN45='0' THEN CNT6B<=CNT6B-CNT6B-1;
END IF;
END IF;
END PROCESS;
PROCESS(CNT6B)IS
BEGIN
CASE CNT6B IS
WHEN"000000"=>DOUT45M<="01000101";DOUT45B<="01010000";
WHEN"000001"=>DOUT45M<="01000100";DOUT45B<="01001011";
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";
9
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";
WHEN OTHERS=>DOUT45M<="00000000";DOUT45B<="00000000";
END CASE;
END PROCESS;
END ARCHITECTURE ART;
--CNT25S.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT25S IS
PORT(SB,SM,CLK,EN25:
IN STD_LOGIC;
DOUT25M,DOUT25B:
OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY ;
ARCHITECTURE ART OF CNT25S IS
SIGNAL CNT5B:
STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS (SB,SM,CLK,EN25) IS
BEGIN
IF SB='0' OR SM='0'THEN
CNT5B<=CNT5B-CNT5B-1;
ELSIF(CLK'EVENT AND CLK='1')THEN
10
IF EN25='1'THEN
CNT5B<=CNT5B+1;
ELSIF EN25='0'THEN
CNT5B<=CNT5B-CNT5B-1;
END IF;
END IF;
END PROCESS;
PROCESS(CNT5B)IS
BEGIN
CASE CNT5B IS
WHEN "00000"=>DOUT25B<="00100101";DOUT25M<="00110000";
WHEN "00001"=>DOUT25B<="00100100";DOUT25M<="00101001";
WHEN "00010"=>DOUT25B<="00100011";DOUT25M<="00101000";
WHEN "00011"=>DOUT25B<="00100010";DOUT25M<="00100111";
WHEN "00100"=>DOUT25B<="00100001";DOUT25M<="00100110";
WHEN "00101"=>DOUT25B<="00100000";DOUT25M<="00100101";
WHEN "00110"=>DOUT25B<="00011001";DOUT25M<="00100100";
WHEN "00111"=>DOUT25B<="00011000";DOUT25M<="00100011";
WHEN "01000"=>DOUT25B<="00010111";DOUT25M<="00100010";
WHEN "01001"=>DOUT25B<="00010110";DOUT25M<="00100001";
WHEN "01010"=>DOUT25B<="00010101";DOUT25M<="00100000";
WHEN "01011"=>DOUT25B<="00010100";DOUT25M<="00011001";
WHEN "01100"=>DOUT25B<="00010011";DOUT25M<="00011000";
WHEN "01101"=>DOUT25B<="00010010";DOUT25M<="00010111";
WHEN "01110"=>DOUT25B<="00010001";DOUT25M<="00010110";
WHEN "01111"=>DOUT25B<="00010000";DOUT25M<="00010101";
WHEN "10000"=>DOUT25B<="00001001";DOUT25M<="00010100";
WHEN "10001"=>DOUT25B<="00001001";DOUT25M<="00010100";
WHEN "10010"=>DOUT25B<="00001000";DOUT25M<="00010011";
WHEN "10011"=>DOUT25B<="00000110";DOUT25M<="00010001";
WHEN "10100"=>DOUT25B<="00000101";DOUT25M<="00010000";
WHEN "10101"=>DOUT25B<="00000100";DOUT25M<="00001001";
WHEN "10110"=>DOUT25B<="00000011";DOUT25M<="00001000";
WHEN "10111"=>DOUT25B<="00000010";DOUT25M<="00000111";
WHEN "11000"=>DOUT25B<="00000001";DOUT25M<="00000110";
WHEN OTHERS=>DOUT25B<="00000000";DOUT25M<="00000000";
END CASE;
END PROCESS;
END ARCHITECTURE ART;
--CNT05S.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
11
ENTITY CNT05S IS
PORT
(CLK,EN05M,EN05B:
IN STD_LOGIC;
DOUT5:
OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY CNT05S;
ARCHITECTURE ART OF CNT05S IS
SIGNAL CNT3B:
STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(CLK,EN05M,EN05B) IS
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF EN05M='1' THEN CNT3B<=CNT3B+1;
ELSIF EN05B='1' THEN CNT3B<=CNT3B+1;
ELSIF EN05B='0' THEN CNT3B<=CN