交通灯控制器___EDA课程设计实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1课程设计要求 (3)

2 电路功能描述 (3)

3 设计方案 (3)

4设计原理图 (4)

5 VHDL语言 (4)

6仿真截图 (6)

7心得体会 (11)

8参考文献 (11)

1. 课程设计要求

1.1.红、黄、绿灯分别控制显示;

1.2.每一个状态分别分配一个时间显示(两位十进制,倒计时);

1.3.符合实际交通规律。

2.电路功能描述

本设计是实现交通灯的控制,模拟实现了红、绿、黄灯指挥交通的功能。本设计适用东西和南北方向的车流量大致相同的路口,红灯显示时间30S,绿灯显示时间25S,黄灯显示时间5S,同时用数码管指示当前的状态(红、绿、黄灯)的剩余时间。当有紧急状况发生时,两个方向都禁止通行,并且显示红灯,当紧急状况解除后,重新计时并且指示时间。

3.设计方案

根据设计要求,需要控制显示红、黄、绿三个灯的亮灭状态及显示的时间。这个设计主要由两部分组成,红黄绿灯的显示模块,显示时间模块。由实际的交通情况可知,东西方向的显示情况是一致的,南北方向的显示情况也是一致,故在设计的时候就只考虑两种状态,将东西方向合成一种,南北方向合成一种。红黄绿灯的显示模块用两组共6个灯显示,时间显示模块用LED数码管显示。

此外,本交通灯控制器设置的红黄绿显示方式是参照一些城市的显示规律,红灯30S,绿灯25S,黄灯5S,同时用数码管指示当前状(红、绿、黄灯)的剩余时间。另外还设有一个紧急状态,当特殊情况发生时,两个方向都禁止通行,指示红灯,紧急状态解除后,重新计时并指示时间。时间采用倒计时的方式显示。

本设计采用VHDL语言编程,描述各个硬件模块实现的功能,使红、黄、绿灯的转换有一个准确的转换顺序和时间间隔,并进行仿真,通过仿真的结果,得出实验的结果。

在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分别是东西红、南北绿,东西红、南北黄,东西绿、南北红,东西黄、南北红。其运行方式为东西红、南北绿→东西红、南北黄→东西绿、南北红→东西黄、南北绿,东西黄、南北绿结束后再回到东西红、南北绿的状态,整个周期持续60s。urgency 为紧急控制信号,为高电平时系统转换为东西南北均是红灯亮的状态,状态结束后系统重新设置,转换为东西红,南北绿的状态。

4.设计的原理图

判断是否是紧急情况

东西红灯亮30S ,南北绿灯亮25S

东西南北均红灯

东西红灯亮5S ,南北黄灯亮5S

东西绿灯亮25S ,南北红灯亮25S

东西黄灯亮5S ,南北红灯亮5S

开 始

结 束

不是

循环

5.VHDL硬件描述语言

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY traffic IS --定义实体

PORT( clk : IN STD_LOGIC; --CLK为时钟信号(1Hz)urgency : IN STD_LOGIC; --紧急状态控制端

led : BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0); --红黄绿绿黄红

East_West,South_North : BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));

END; --东西、南北倒计时数码管(高4位为十位,低4位为个位)

ARCHITECTURE rtl OF traffic IS --定义结构体

BEGIN

PROCESS(clk,urgency)

BEGIN

IF urgency = '1' THEN --出现紧急状态

led <= "100001"; --东西南北都亮红灯

East_West <= "00000000"; --设置重新计时的数据

South_North <= "00000000";

ELSIF (clk'EVENT AND clk = '1') THEN

IF (East_West > "00110000" or South_North > "00110000") THEN

East_West <= "00101001"; --计数错误时纠正到初始转态

South_North <= "00100100";

led <= "100100"; --东西红灯亮30秒,南北绿灯亮25秒

ELSIF (East_West = "00000101" AND South_North = "00000000") THEN

East_West <= "00000100"; --红、绿灯亮了25秒,绿灯将转变为黄灯South_North <= "00000100";

led <= "100010"; --东西红灯亮剩余5秒,南北黄灯亮5秒

ELSIF (East_West = "00000000" AND South_North = "00000000" AND led = "100010") THEN --东西红灯30秒时间结束,南北黄灯5秒结束East_West <= "00100100";

South_North <= "00101001";

led <= "001001"; --东西亮绿灯25秒,南北亮红灯30秒

ELSIF (East_West = "00000000" AND South_North = "00000101") THEN

East_West <= "00000100"; --东西红绿亮25秒结束,转为5秒黄灯

South_North <= "00000100";

led <= "010001"; --东西黄灯亮5秒,南北红灯亮剩余5秒

ELSIF (East_West = "00000000" AND South_North = "00000000" AND led = "010001") THEN --东西亮黄灯5秒结束,南北亮30秒红灯结束East_West <= "00101001";

South_North <= "00100100";

led <= "100100"; --东西红灯30秒,南北绿灯25秒,循环

ELSIF (East_West(3 DOWNTO 0) = 0 AND South_North (3 DOWNTO 0) = 0) THEN East_West <= East_West - 7; --BCD码减法转换

South_North <= South_North - 7;

ELSIF (East_West(3 DOWNTO 0) = 0 AND South_North (3 DOWNTO 0) = 0) THEN East_West <= East_West - 7; --BCD码减法转换

South_North <= South_North - 1;

ELSIF (South_North (3 DOWNTO 0) = 0 AND East_West(3 DOWNTO 0) = 0) THEN South_North <= South_North - 7; --BCD码减法转换

East_West <= East_West - 1;

ELSE East_West <= East_West - 1; --不满足上述特殊情况时减一

South_North <= South_North - 1;

END IF;

END IF;

END PROCESS;

END;

相关文档
最新文档