西电EDA交通灯报告完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通控制器实验报告
目录
交通控制器实验报告 (1)
序言 (3)
一、设计任务及设计要求 (4)
二、原理分析及方案设计 (4)
三、电路设计与调试 (6)
1.分频器的设计 (6)
2.控制器的设计 (7)
3.倒计时计数器的设计 (14)
4.数码管显示器的设计 (17)
5.顶层原理图 (20)
四、实验仿真波形图 (20)
五.心得体会 (21)
六.参考文献 (21)
序言
VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。VHDL主要用于描述数字系统的结构,行为,功能和接口VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
随着基于VHDL的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。作为一个学电子信息专业的学生,我们必须不断地了解更多的新产品信息,这就更加要求我们对EDA有个全面的认识。本程序设计的是交通灯的设计。采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,初步实现了设计目标
在一个交通繁忙的十字路口,没有交通灯来控制来往车辆和行人的通行,假设也没有交警,那会发生什么事情呢?后果是难以想象的,可能会陷入一片混乱,甚至瘫痪。当然我们每个人都不希望这样。我们作为社会的一员,每人都有责任为它的更加先进和快捷做出力所能及的事情。
本程序设计的是交通灯的设计。采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,实现设计目标。我们设计的这个信号控制系统可以通过交通灯控制东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都可以根据实际情况预设,用以减少交通事故的发生概率。并且经过些次实验使得我们对电子技术课程内容的理解和掌握有了更深一层的认识,掌握电子电路的基本分析方法和设计方法。
一、设计任务及设计要求
设计一个十字路口交通控制系统,要求如下:
(1)东西、南北两个方向均有绿灯、黄灯、红灯指示、、,其持续时间分别为40秒、5秒、45秒,交通灯运行的切换示意图如图所示。
(2)系统设有时钟,以倒计时的方式显示每一路允许通行的时间。
(3)当东西或南北两路中的任一路出现特殊情况,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。
二、原理分析及方案设计
本系统主要由分频器、计数器、控制器、倒计时显示器等电路组成。总体设计框图如下:
分频器讲晶振送来的4MHz的信号变为1Hz的时钟信号;计数器实现90秒的技术,90秒也是交通控制系统的一个大循环;控制器控制系统的状态转移和红、黄、绿灯的信号输出;倒计时显示电路实现45秒倒计时功能和显示功能。整个系统的工作时序受控制器控制,它是系统的核心。
控制器的整个工作过程用状态机进行描述,其状态转移关系描述如下:
S0:A方向绿灯亮,B方向红灯亮,此状态持续40秒;
S1: A方向黄灯亮,B方向红灯亮,此状态持续5秒;
S2: A方向红灯亮,B方向绿灯亮,此状态持续40秒;
S3: A方向红灯亮,B方向红黄灯亮,此状态持续5秒;
S4: 紧急制动状态,A方向红灯亮,B方向红灯亮,当紧急制动信号有效是进入此状态。交通控制系统的状态转移图如下:
当紧急制动信号无效时,状态机按照S0-S1-S2-S3-S0循环;当紧急制动信号有效时,状态机立即转入S4,两个方向红灯全亮,计数器停止计数;当紧急制动信号再恢复无效时,状态机回到原来的状态继续执行。
三、电路设计与调试
1.分频器的设计
分频器的逻辑符号如图所示。clk为时钟输入信号,clkout为分频后的时钟输出信号。
分频器的VHDL描述文件devide.vhd如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity devide is
port(
clk:in std_logic;
clk_out:out std_logic
);
end devide;
architecture arc_devide of devide is
signal count:std_logic_vector(25 downto 0);
begin
process
begin
wait until clk'event and clk='1';
if(count<24999999) then
count<=count+1;
clk_out<='0';
else
count<=(others=>'0');
clk_out<='1';
end if;
end process;
end architecture arc_devide;