基于VHDL的交通灯设计(EDA课程设计报告)!!

更新时间:2023-10-27 19:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA课程设计实验报告

交通信号控制器的VHDL的设计

一、设计任务及要求:

设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、

黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。要求: (1) 交通灯从绿变红时,有4秒黄灯亮的间隔时间; (2) 交通灯红变绿是直接进行的,没有间隔时间;

(3) 主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒; (4) 在任意时间,显示每个状态到该状态结束所需的时间。

支干道

主干道

图1 路口交通管理示意图 A B C D 主干道交通灯 绿(40秒) 黄(4秒) 红(20秒) 红(4秒) 支干道交通灯 红 红 绿 黄 表1 交通信号灯的4种状态

设计要求:

(1) 采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到

EDA实验箱进行验证。

(2) 编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心

1

得体会。

二 设计原理

1、设计目的:

学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制 2’设计说明

(1)第一模块:clk时钟秒脉冲发生电路

在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。 模块说明:

系统输入信号:

Clk: 由外接信号发生器提供256的时钟信号; 系统输出信号: full:产生每秒一个脉冲的信号;

(2)第二模块:计数秒数选择电路

计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。 模块说明:

系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号; 系统输出信号: tm: 产生显示电路状态转换信号 tl:倒计数值 秒数个位变化控制信号 th:倒计数值 秒数十位变化控制信号

(3)第三模块:红绿灯状态转换电路 本电路负责红绿灯的转换。 模块说明:

系统输入信号:full: 接收由clk电路的提供的1hz的时钟脉冲信号; tm: 接收计数秒数选择电路状态转换信号; 系统输出信号: comb_out: 负责红绿灯的状态显示。

(4)第四模块:时间显示电路

本电路负责红绿灯的计数时间的显示。

2

模块说明:

系统输入信号:tl:倒计数值 秒数个位变化控制信号;

th:倒计数值 秒数十位变化控制信号;

系统输出信号: led7s1: 负责红绿灯的显示秒数个位。 led7s2: 负责红绿灯的显示秒数十位。

三、设计方案

定时时间到检测电路

状态发生器 时间显示数据输出 预置数产(两位二进 生电路 计时器 制计数器)

红黄绿灯信号输出 红黄绿灯输出 1秒时钟脉冲信 控制电路(RYG) 号发生器

图2 交通信号灯控制器的原理框图

采用VHDL语言输入的方式实现交通信号灯控制器

CLK 秒脉冲信号计数器 状态寄存器 时间显示数据输出 发生器(进(进程P3、(进程P6) P4和P5) 程P1和P2) 次态发生器 信号灯输出信号 (进程P7) 信号灯输出

图3 交通信号灯控制器程序原理框图 该程序由7个进程组成,进程P1和P2将CLK信号分频后产生1秒信号,进程P3、P4、P5构成两个带有预置数功能的十进制计数器,其中P4产生允许十位计数器计数的控制信号。进程P6实现状态转换和产生状态转换的控制信号,进程P7产生次态信号和信号灯输出信号,以及每一个状态的时间值。

四.程序清单:

3

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY traffic IS

PORT (clk:in std_logic;

led7s1:out std_logic_vector(6 downto 0); led7s2:out std_logic_vector(6 downto 0); comb_out:out std_logic_vector(5 downto 0)); END;

ARCHITECTURE one OF traffic IS TYPE dm IS (s0,s1,s2,s3);

SIgnal current_state,next_state:dm; SIGNAL FULL : STD_LOGIC;

SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL th:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN

P_REG: PROCESS(CLK)

VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK='1' THEN IF CNT8 = \ CNT8:=\ FULL<='1';

ELSE CNT8 := CNT8+1; FULL <= '0';

END IF; END IF; END PROCESS P_REG;

PROCESS(full) BEGIN

IF full'EVENT AND full='1' THEN IF TIME<\ TIME<=TIME+1;

ELSe TIME <=\ END IF; END IF;

END PROCESS;

REG:process( full,current_state) BEGIN

IF full='1' AND full'EVENT THEN current_state<=next_state; END IF;

4

END process;

COM:process(current_state, time) begin

case current_state is

when s0=>comb_out<=\ if time=39 then next_state<=s1; else next_state<=s0; end if;

when s1=>comb_out<=\ if time=43 then next_state<=s2; else next_state<=s1; end if;

when s2=>comb_out<=\ if time=63 then next_state<=s3; else next_state<=s2; end if;

when s3=>comb_out<=\ if time=67 then next_state<=s0; else next_state<=s3; end if; end case; end process; PROCESS(tm) BEGIN

IF tm>=30 THEN th<=\ELSIF tm>=20 THEN th<=\ELSIF tm>=10 THEN th<=\ELSE th<=\END IF;

END PROCESS;

process(th,tl) begin case th is

when\ when\ when\ when\ when others=>null; end case; case tl is

when \ when\ when \ when\

5

本文来源:https://www.bwwdw.com/article/8yq2.html

Top