数电综合实验报告2--交通灯

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

数电综合实验报告2--交通灯

数字逻辑与数字系统设计综合实验二——十字路口交通灯自动控制器的设计

学院电子工程学院

班级卓越001012班

学号00101201

姓名冉艳伟

实验时间2012.6.8

十字路口交通灯自动控制器的设计

一、实验目的

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

二、设计任务

设计一个十字路口交通控制系统,其东西,南北两个方向除了有红、黄、绿灯指示是否允许通行外,还设有时钟,以倒计时方式显示每一路允许通行的时间,绿灯,黄灯,红灯的持续时间分别是40、5和45秒。当东西或南北两路中任一道上出现特殊情况,例如有消防车,警车要去执行任务,此时交通控制系统应可由交警手动控制立即进入特殊运行状态,即两条道上的所有车辆皆停止通行,红灯全亮,时钟停止计时,且其数字在闪烁。当特殊运行状态结束后,管理系统恢复原来的状态,继续正常运行。

东西干道

图1 路口交通管理示意图

三、实验要求

(1)按照设计任务设计,采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。交通灯用发光二级管模拟,观察交通灯的运行是否正常,如果不正常,排除故障直至正确为止。

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

要求:必须用可编程器件实现电路功能。可以是原理图,也可以是VHDL代码,也可以混合输入。

五、设计说明

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

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

模块说明:

系统输入信号:

CLKi: 由外接信号发生器提供1MHz的时钟信号;

系统输出信号: CLK:产生每秒一个脉冲的信号;

(2)第二模块:模90倒计数器

按照实验要求,交通灯循环一次为90秒,且显示倒数的计数值,故设计一模90倒计数器通过主程序运算即可显示各路计数值。

模块说明:

系统输入:CLK: 接收由CLK电路的提供的1hz的时钟脉冲信号;

reset:紧急情况输入

系统输出信号: L1:倒计数值秒数十位变化控制信号;

L0:倒计数值秒数个位变化控制信号;

(3)交通灯主程序

说明:

系统输入:CLK: 接收由CLK电路的提供的1hz的时钟脉冲信号;

reset:紧急情况输入

系统输出信号:Lx:东西方向红绿黄灯控制信号;

Ly:南北方向红绿黄灯控制信号;

NUMx1:东西方向倒计数值秒数十位变化控制信号;

NUMx0:东西方向倒计数值秒数个位变化控制信号;

NUMx1:南北方向倒计数值秒数十位变化控制信号;

NUMx0:南北方向倒计数值秒数个位变化控制信号;

六、设计方案

图2 交通灯控制系统示意图

数据

信号

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

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

数据

图3 交通信号灯控制器程序原理框图

七、程序清单

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

entity defreq is

port(CLKi:in std_logic;

CLK:out std_logic

);

end defreq;

architecture behav of defreq is

signal q:integer range 999999 downto 0;

begin

process(CLKi,q)

begin

if(CLKi'event and CLKi ='1') then

if(q=999999) then

q<=0;

else

q<=q+1;

end if;

end if;

if (q<500000) then

CLK<='0';

else

CLK<='1';

end if;

end process;

end behav;

(2)第二模块:模90倒计数器

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity subcounter90 is

port(CLK:in std_logic;

reset:in std_logic;

L1,L0:out std_logic_vector(3 downto 0) );

end subcounter90;

architecture behav of subcounter90 is

signal lt1,lt0:std_logic_vector(3 downto 0); begin

process(CLK,reset,lt1,lt0)

begin

if(reset='0') then

if(CLK'event and CLK ='1') then

if(lt0="0000") then

if(lt1="0000") then

lt1<="1000";

lt0<="1001";

else

lt1<=lt1-1;

相关文档
最新文档