您的当前位置:首页正文

基于EDA的交通灯控制系统设计

2022-02-23 来源:布克知识网
.

※※※

※※※※※※※※ ※ ※ ※

2008级学生

EDA课程设计

EDA课程设计报告书

课题名称 基于EDA的交通灯控制系统设计 姓 名

陈 勇

学 号 0812201-08 院 系 专 业 指导教师

物理与电信工程系 电子信息工程 田旺兰 讲师

精品word文档

.

2011年 6月10日

精品word文档

.

一、设计任务及要求: 设计任务: 设计一个具有四种信号灯的交通灯控制器。 要 求: 1.由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄、左拐允许四盏信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外,左拐灯亮允许车辆向左拐弯。 2.信号灯变换次序为:主支干道交替允许通行,主干道每次放行40秒,亮5秒红灯让行驶中的车辆有时间停到禁行线外,左拐放行15秒,亮5秒红灯;支干道放行30秒,亮5秒黄灯,左拐放行15秒,亮5秒红灯……。各计时电路为倒计时显示。 指导教师签名: 2011 年 月 日 二、指导教师评语: 指导教师签名: 2011 年 月 日 三、成绩 验收盖章 2011 年 月 日 精品word文档

.

基于EDA的交通灯控制系统设计

1 设计目的

(1)掌握十字路口交通灯控制的设计原理,并能够运用VHDL编程语言编写出实验程序,进一步对所学的EDA知识进行掌握与实际应用。

(2)学会在quartusII软件环境中仿真,熟悉软件的基本操作和运行环境。 (3)锻炼自己获取信息的能力,以及能够独立自主的思考和解决问题的能力。

2设计的主要内容和要求

设计一个基于EDA的交通灯控制系统,所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口。能够做到主、支干道的红绿灯闪亮的时间不完全相同,在绿灯跳变红灯的过程中能够用黄灯进行过渡,使得行驶过程中的车辆有足够的时间停下来。还要求在主、支干道各设立一组计时显示器,能够显示相应的红、黄、绿倒计时。可以利用VHDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。

3 整体设计方案

根据设计要求和系统所具有功能,并参考相关的文献资料,经行方案设计,画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如图3.1所示。并且可以得出系统的状态图如图3.2所示,其中:

S0:支干道没有车辆行驶,支干道绿灯,支干道红灯 S1:支干道有车辆行驶,支干道绿灯,支干道红灯

精品word文档

.

S2:主干道黄灯,支干道绿灯 S3:主干道红灯,支干道绿灯 S4:主干道红灯,支干道黄灯

CLK 时钟分频模块 交通灯控制及计时模块 扫描显示模块 LED显示 数码管位码 数码管段码

图3.1 整体设计方框图

精品word文档

.

图3.2 系统状态图

4 硬件电路的设计

4.1 顶层文件原理图

根据以上设计思路,可以得到如下的顶层文件原理图如4.1所示,具体实物

模块如图4.2所示。

精品word文档

.

图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所示,其中:

精品word文档

.

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为数码管段码

精品word文档

.

5 软件设计

5.1 时钟分频模块:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fp IS

PORT(clk:IN STD_LOGIC; CLK1S:OUT STD_LOGIC); END fp;

ARCHITECTURE one OF fp IS

SIGNAL N: STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN PROCESS(clk)

BEGIN

IF clk'EVENT AND clk='1' THEN N<=N+1; END IF;

END PROCESS; CLK1S<=N(9); END one;

5.2 交通灯控制及计时模块:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY kz IS

PORT(CLK1S,car:IN STD_LOGIC;--1S脉冲,支干道车辆检测

TIME1H,TIME1L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--支干道计时 TIME2H,TIME2L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--支干道计时 count:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --系统总计时

精品word文档

.

led:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --交通灯显示

END KZ;

ARCHITECTURE one OF kz IS

TYPE states IS (s0,s1,s2,s3,s4,s5); --状态初始化 SIGNAL current_state,next_state :states; SIGNAL c:STD_LOGIC_VECTOR(6 DOWNTO 0);

BEGIN

REG:PROCESS(CLK1S,car,current_state,c) BEGIN

IF car ='0'THEN current_state <= s0;

c<=\"0000000\";

ELSE

IF CLK1S'EVENT AND CLK1S ='1' THEN --支干道有车开始计数

c <=c+1;

current_state <=next_state;

END IF;

END IF;

CASE current_state IS --状态转换

WHEN s0 => LED <=\"100001\"; --支干道无车不减计时

TIME1H<=\"0100\";TIME1L<=\"0101\"; TIME2H<=\"0101\";TIME2L<=\"0000\";

IF car = '1' THEN next_state <= s1; ELSE next_state <= s0; END IF;

WHEN s1 => LED <=\"100001\"; --主干道绿灯,支干道红灯

IF c=\"0101100\" THEN next_state <= s2; ELSE next_state <= s1; END IF;

WHEN s2 => LED <=\"010001\"; --主干道黄灯,支干道红灯

精品word文档

.

IF c=\"0110001\" THEN next_state <= s3; ELSE next_state <=s2; END IF;

WHEN s3 => LED <=\"001100\"; --主干道红灯,支干道绿灯

IF c=\"1001010\" THEN next_state <= s4; ELSE next_state <= s3; END IF;

WHEN s4 => LED <=\"001010\"; --支干道黄灯,主干道红灯

IF c=\"0110001\" THEN next_state <= s5; ELSE next_state <=s4; END IF;

WHEN OTHERS => LED <=\"100001\"; next_state <= s0;

END CASE;

IF c=\"0101101\" THEN TIME1H<=\"0000\";TIME1L<=\"0101\"; --系统时间为45,主干道黄灯计时5秒 END IF; IF

c=\"0110010\" THEN

TIME1H<=\"0011\";TIME1L<=\"0000\";TIME2H<=\"0010\";TIME2L<=\"0101\"; --系统时间为50,主干道计时30秒,支干道计时25秒 END IF;

IF c=\"1001011\" THEN TIME2H<=\"0000\";TIME2L<=\"0101\"; --系统时间为75,支干道黄灯计时5秒 END IF; IF

c=\"1010000\"

THEN

TIME1H<=\"0100\";TIME1L<=\"0000\";TIME2H<=\"0101\";TIME2L<=\"0101\"; --系统时间为80,主干道计时45秒,支干道计时50秒 END IF;

IF c=\"1010000\" THEN c<=\"0000000\"; --系统时间清零

精品word文档

.

END IF;

END PROCESS REG; count <=c; END one;

5.3 扫描显示译码器:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY xs IS

PORT(clk,CLK1S,car:IN STD_LOGIC;

TIME1H,TIME1L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --主干道置数 TIME2H,TIME2L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --支干道置数 count:IN STD_LOGIC_VECTOR(6 DOWNTO 0); --计数信号 sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --数码管位码 seg:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --数码管段码

END xs;

ARCHITECTURE one OF xs IS

SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL numsel:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL numseg:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL Q1,Q2,Q3,Q4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

SM:PROCESS (clk,num,numsel) --扫描 BEGIN

IF clk'EVENT AND clK='1' THEN numsel<=numsel+1;

IF numsel=\"011\" THEN numsel<=\"000\"; END IF;

END IF;

精品word文档

.

END PROCESS SM;

WX:PROCESS (numsel,Q1,Q2,Q3,Q4) --位选 BEGIN

CASE numsel IS

WHEN\"011\" =>num<=Q4; WHEN\"010\" =>num<=Q3; WHEN\"001\" =>num<=Q2; WHEN\"000\" =>num<=Q1; WHEN OTHERS =>NULL;

END CASE; END PROCESS WX;

ZS:PROCESS(CLK1S,car,Q1,Q2,Q3,Q4,num,TIME1H,TIME1L,TIME2H,TIME2L) --数码管置数 BEGIN

IF car ='1' THEN

IF CLK1S'EVENT AND CLK1S='1' THEN

IF Q2>\"0000\" THEN Q2<=Q2-1; ELSE

IF Q1>\"0000\" THEN Q1<=Q1-1;Q2<=\"1001\"; --减计时 END IF;

END IF;

IF Q4>\"0000\" THEN Q4<=Q4-1; ELSE

IF Q3>\"0000\" THEN Q3<=Q3-1;Q4<=\"1001\"; END IF;

END IF;

END IF;

IF Q1=\"0000\" AND Q2=\"0000\" THEN Q1<=TIME1H;Q2<=TIME1L;

精品word文档

.

END IF;

IF Q3=\"0000\" AND Q4=\"0000\" THEN Q3<=TIME2H;Q4<=TIME2L; END IF;

ELSE Q1<=TIME1H;Q2<=TIME1L; --支路无车辆不减计时

Q3<=TIME2H;Q4<=TIME2L;

END IF; END PROCESS ZS;

YM:PROCESS (num,numseg) BEGIN

CASE num IS

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\"; WHEN OTHERS=>NULL; END CASE;

END PROCESS YM; sel<=numsel; seg<=numseg; END one;

5.4 顶层文件:

LIBRARY IEEE;

精品word文档

.

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY jtd IS

PORT (clk:IN STD_LOGIC; --动态扫描时钟

car:IN STD_LOGIC; --支路车辆传感信号 led:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); --交通灯信号 sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --数码管位码 seg:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --数码管段码

END jtd;

ARCHITECTURE one OF jtd IS COMPONENT fP

PORT(clK:IN STD_LOGIC;

CLK1S:OUT STD_LOGIC);

END COMPONENT; COMPONENT kz

PORT(CLK1S,car:IN STD_LOGIC;

TIME1H,TIME1L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); TIME2H,TIME2L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); count:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));

END COMPONENT; COMPONENT xs

PORT(clK,CLK1S,car:IN STD_LOGIC;

TIME1H,TIME1L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); TIME2H,TIME2L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); count:IN STD_LOGIC_VECTOR(6 DOWNTO 0); sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); seg:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

精品word文档

.

END COMPONENT;

SIGNAL CLK1S:STD_LOGIC;

SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL TIME1H,TIME1L,TIME2H,TIME2L:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

U1:fp PORT MAP(CLK=>clk,CLK1S=>CLK1S); U2:

kz

PORT

MAP

(CLK1S=>CLK1S,car=>car,count=>count,led=>led,TIME1H=>TIME1H, TIME1L=>TIME1L,TIME2H=>TIME2H,TIME2L=>TIME2L); U3:

xs

PORT

MAP

(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所示:

精品word文档

.

图6.1仿真结果

6.2 仿真结果分析

通过仿真结果可以得出:开始时,支干道没有车辆行驶。主干道处于常通行状态,支干道处于禁止状态;当支干道有车来时,主干道亮绿灯,经行45秒倒计时,支干道亮红灯,经行50秒倒计时;主干道45秒倒计时结束后跳变到黄灯,进行5秒倒计时,支干道继续亮红灯,进行倒计时;主干道5秒倒计时结束后跳变到红灯,经行30秒倒计时,支干道跳变到绿灯,进行25秒倒计时;支干道25秒倒计时结束后跳变到黄灯,进行5秒倒计时,主干道继续亮红灯,进行倒计时;支干道5秒倒计时结束后,判断支干道是否有车,若有车跳变到S1状态,没有车跳变到S0状态

7 设计总结

精品word文档

.

通过这次课程设计,我进一步加深了对EDA(电子设计自动化)的了解。并进一步熟练了对QuartusII软件的操作。在做本次课程设计的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。并加深了对交通灯原理和设计思路的了解。同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。

数字化时代的到来给人们的生活带来了极大的改变,有理由相信随着数字化的深入,交通灯控制器的功能将日趋完善。而且,VHDL 语言对EDA 产生的影响也是深远的,它缩短了电子产品的设计周期,为设计者提供了方便。

总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

参考文献

[1] 江国强.EDA技术与应用(第3版).北京:电子工业出版社,2010 年4月 [2] 杨恢先,黄辉先.单片机原理及应用.北京:人民邮电出版社,2006年10月

[3] 康华光.电子技术基础 数字部分(第五版)[M].北京:高等教育出版社,2006年1月 [4] 康华光.电子技术基础 模拟部分(第五版)[M].北京:高等教育出版社,2006年1月

感谢您的支持与配合,我们会努力把内容做得更好!

精品word文档

因篇幅问题不能全部显示,请点此查看更多更全内容