数电综合实验报告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 isport(CLKi:in std_logic;CLK:out std_logic);end defreq;architecture behav of defreq issignal q:integer range 999999 downto 0;beginprocess(CLKi,q)beginif(CLKi'event and CLKi ='1') thenif(q=999999) thenq<=0;elseq<=q+1;end if;end if;if (q<500000) thenCLK<='0';elseCLK<='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 isport(CLK:in std_logic;reset:in std_logic;L1,L0:out std_logic_vector(3 downto 0) );end subcounter90;architecture behav of subcounter90 issignal lt1,lt0:std_logic_vector(3 downto 0); beginprocess(CLK,reset,lt1,lt0)beginif(reset='0') thenif(CLK'event and CLK ='1') thenif(lt0="0000") thenif(lt1="0000") thenlt1<="1000";lt0<="1001";elselt1<=lt1-1;lt0<="1001";end if;elselt0<=lt0-1;end if;end if;elselt0<=lt0;lt1<=lt1;end if;end process;L1<=lt1;L0<=lt0;end behav;(3)交通灯主程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity trafficlight isport(CLK:in std_logic;reset:in std_logic;Lx,Ly:out std_logic_vector(2 downto 0);NUMx1,NUMx0,NUMy1,NUMy0:out std_logic_vector(3 downto 0));end trafficlight;architecture structure of trafficlight issignallt1,lt0,NUMxt1,NUMxt0,NUMyt1,NUMyt0:std_logic_vector(3 downto 0);signal CLKt:std_logic;component defreqport(CLKi:in std_logic;CLK:out std_logic);end component;component subcounter90port(CLK:in std_logic;reset:in std_logic;L1,L0:out std_logic_vector(3 downto 0));end component;beginU1:defreq port map(CLK,CLKt);U2:subcounter90 port map(CLKt,reset,lt1,lt0);process(lt1,lt0,reset,NUMxt1,NUMxt0,NUMyt1,NUMyt0) beginif (reset='0') thenif(lt1>"0100") thenLx<="100";NUMxt1<=lt1-5;NUMxt0<=lt0;elsif(lt1="0100" and lt0>"0100") thenLx<="010";NUMxt1<=lt1-4;NUMxt0<=lt0-5;elseLx<="001";NUMxt1<=lt1;NUMxt0<=lt0;end if;if((lt1>"0100") or (lt1="0100" and lt0>"0100")) then Ly<="001";if(lt0>"0100") thenNUMyt1<=lt1-4;NUMyt0<=lt0-5;elseNUMyt1<=lt1-5;NUMyt0<=lt0+5;elsif((lt1>"0000") or (lt1="0000" and lt0>"0100")) then Ly<="100";if(lt0>"0100") thenNUMyt1<=lt1;NUMyt0<=lt0-5;elseNUMyt1<=lt1-1;NUMyt0<=lt0+5;end if;elseLy<="010";NUMyt1<=lt1;NUMyt0<=lt0;end if;NUMx1<=NUMxt1;NUMx0<=NUMxt0;NUMy1<=NUMyt1;NUMy0<=NUMyt0;elseLx<="001";Ly<="001";if(CLKt='0') thenNUMx1<=NUMxt1;NUMx0<=NUMxt0;NUMy1<=NUMyt1;NUMy0<=NUMyt0;elseNUMx1<="0000";NUMx0<="0000";NUMy1<="0000";NUMy0<="0000";end if;end if;end structure;八、仿真结果1.第一模块:CLK时钟秒脉冲发生电路(1)功能仿真:(2)时序仿真(2)第二模块:模90倒计数器(1)功能仿真:(2)时序仿真(3)交通灯总程序仿真(1)功能仿真:(2)时序仿真九、引脚设置接下来就要选择目标器件并对相应的引脚进行锁定了,引脚锁定方法如下图所示。
十、实验总结(故障排除与收获体会)综合设计实验对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。
通过设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,我们进行了数字电路设计,老师命题,进行设计。