收藏 分销(赏)

VHDL交通灯课程设计.doc

上传人:丰**** 文档编号:4006463 上传时间:2024-07-24 格式:DOC 页数:21 大小:201.47KB
下载 相关 举报
VHDL交通灯课程设计.doc_第1页
第1页 / 共21页
VHDL交通灯课程设计.doc_第2页
第2页 / 共21页
VHDL交通灯课程设计.doc_第3页
第3页 / 共21页
VHDL交通灯课程设计.doc_第4页
第4页 / 共21页
VHDL交通灯课程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、目录引言01.系统的设计要求12.系统分析12.1 系统构成12.2 系统实现过程23.具体模块设计23.1消抖模块23.2 交通灯模块23.3 交通灯时长设置模块33.8 整体结构电路图44.程序设计44.1消抖模块源代码44.2 交通灯时长设置模块54.3 交通灯模块64.4 顶层文件源代码95.运行结果与分析116.结束语12参考文献13引言 不同的城市存在着不同的城市问题,但其中有一个共同的问题就是城市交通。在交叉路口如何解决混合交通流中的相互影响,就是解决问题的关键所在!随着我国经济的稳步发展,人民生活水平的日渐提高,越来越多的汽车进入寻常百姓的家庭,再加上政府大力地发展公交、出租车

2、行业,道路上的车辆越来越多,使得城市的交通成为了一个主要的问题。严重的拥堵现象,逐渐恶化的城市环境,都给广大市民带来了许多困扰。要解决这些问题不仅要求道路越来越宽阔,而且更需要有新的交通管理模式出台。实现路口交通灯系统的控制方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难。交通系统未来的发展趋势就是要提高通行能力,加强环境保护,开展智能化运输和环保专项技术的研究,并且要做到以人为本,重点开展交通安全技术的研究,在这个过程中要确定经济合理的目标,促进新材料的广泛应用和开发。ED

3、A 技术是用于电子产品设计中比较先进的技术,可以代替设计者完成电子系统设计中的大部分工作,而且可以直接从程序中修改错误及系统功能而不需要硬件电路的支持,既缩短了研发周期,又大大节约了成本,受到了电子工程师的青睐。 1. 系统的设计要求为了满足步行街的要求,此交通灯须具备以下功能:1正常情况下保证主干道的畅通。2. 当步行街道上的行人要穿过主干道时,通过设置的按钮来发出请求。3. 当有人按下此按钮时,主干道变为黄灯,设置计数器时间为X秒。4. X秒过后,主干道变为红灯,计数器继续计时(计时时间为Y秒),在Y秒内若有人再次按按钮,计数器不重新计时。5. 步行街绿灯闪烁时间为Y1秒,(Y-Y1)秒后

4、主干道变为绿灯,车辆通行。且咬保证车辆通行一定时间(Z秒)。在此时间内,行人按按钮无效。Z秒过后,若有人再按下按钮,又出现(3)中的状态。计数器的计时时间长短XYZ可以任意设定。 2.系统分析 2.1 系统构成 行人按下红灯按钮消抖模块 设置人行道绿灯时长消抖模块交通灯模块计数器模块状态机模块设置交通灯时长模块控制模块消抖模块 设置马路红灯后按键的无效时间步行街自助式交通灯控制器控制器分为3个模块:消抖模块,交通灯模块,交通灯时长设置模块。2.2 系统实现过程最初状态是人行道红灯,马路绿灯。当有行人按下按钮时,马路的红灯变为黄灯,持续一个时钟周期的时间。然后马路的黄灯变为绿灯,此时人行道的红灯

5、也变为绿灯,然后持续HUMAN_TIME个时钟的周期的时间。然后人行灯的绿灯变为闪烁的绿灯,持续2个时钟的周期的时间,然后人行道的闪烁的绿灯变为红灯,此时马路的红灯也变为绿灯。然后在VEHICLE_TIME个时钟周期内人行道为红灯,马路为绿灯状态保持不变且行人按键无效。状态如下:状态主干道信号灯步行街信号灯主干道步行街道R红G绿Y黄R红G绿S001010通行禁行S100110车停靠禁行S210001禁行通行S31000禁行通行(绿灯闪烁S401010通行禁行3.具体模块设计3.1消抖模块消抖模块DITHER如图2所示,使用硬件消抖原理。3.2 交通灯模块 交通灯模块LIGHT如图3所示,根据输

6、入GHUMAN_TIME,GHUMAN_CLKT和GVEHICLE_TIME的值,进行减计数,然后根据值判断状态机的状态。3.3 交通灯时长设置模块 交通灯时长设置模块COUNTER如图4所示,根据设置按键人按键设置人行道绿灯时长和按键屏蔽时长。 图2 DITHER模块 图3 LIGHT模块 图4 COUNTER模块 3.8 整体结构电路图图5 整体结构电路图4.程序设计4.1消抖模块源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;E

7、NTITY DITHER ISPORT(UPIN: IN STD_LOGIC; DOWNIN: IN STD_LOGIC; KEYOUT: OUT STD_LOGIC );END DITHER;ARCHITECTURE BEHAVE OF DITHER ISSIGNAL OUT1: STD_LOGIC;SIGNAL OUT2: STD_LOGIC;BEGINOUT1=NOT( OUT2 AND UPIN );OUT2=NOT( OUT1 AND DOWNIN ); KEYOUT=OUT1;END BEHAVE;4.2 交通灯时长设置模块LIBRARY IEEE;USE IEEE.STD_LOG

8、IC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY COUNT IS PORT(CLK: IN STD_LOGIC; CLEAR: IN STD_LOGIC; CLKADD: IN STD_LOGIC; CLKSUB: IN STD_LOGIC; PRE_SET: IN STD_LOGIC; HUMAN_SET: IN STD_LOGIC; RST: IN STD_LOGIC; GHUMAN_TIME: OUT INTEGER RANGE 31 DOWNTO 0; GHUMAN_CLKT

9、: OUT INTEGER RANGE 31 DOWNTO 0; GVEHICLE_TIME: OUT INTEGER RANGE 31 DOWNTO 0); END COUNT;ARCHITECTURE BEHAVE OF COUNT IS SIGNAL HUMAN_TIME: INTEGER RANGE 31 DOWNTO 0; SIGNAL VEHICLE_TIME: INTEGER RANGE 31 DOWNTO 0; SIGNAL SSTATE: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SCLK: STD_LOGIC; SIGNAL DSCLK: S

10、TD_LOGIC;BEGIN SSTATE=0000 WHEN PRE_SET=0 ELSE HUMAN_SET & CLEAR & CLKADD & CLKSUB; SCLK=CLKADD OR CLKSUB OR CLEAR;PROCESS (CLK) BEGIN IF(CLK EVENT AND CLK=1)THEN DSCLK=SCLK; END IF;END PROCESS;PROCESS(RST,CLEAR,DSCLK) BEGIN IF(RST=1)THEN VEHICLE_TIME VEHICLE_TIME VEHICLE_TIME VEHICLE_TIME VEHICLE_T

11、IME VEHICLE_TIME VEHICLE_TIME VEHICLE_TIME= VEHICLE_TIME; END CASE; END IF;END PROCESS;PROCESS (CLEAR,DSCLK)BEGIN IF(RST=1)THENHUMAN_TIME HUMAN_TIME HUMAN_TIME HUMAN_TIME HUMAN_TIME HUMAN_TIME HUMAN_TIME HUMAN_TIME=HUMAN_TIME; END CASE;END IF;END PROCESS;PROCESS(PRE_SET,RST) BEGIN IF(RST=1)THEN GHUM

12、AN_TIME=5; GHUMAN_CLKT=7; GVEHICLE_TIME=15; ELSIF(PRE_SET EVENT AND PRE_SET=0)THEN GHUMAN_TIME=HUMAN_TIME+1; GHUMAN_CLKT=HUMAN_TIME+3; GVEHICLE_TIME=HUMAN_TIME+VEHICLE_TIME+3; END IF;END PROCESS;END BEHAVE;4.3 交通灯模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD

13、_LOGIC_ARITH.ALL;ENTITY LIGHT IS PORT(SRED: OUT STD_LOGIC; ERED: OUT STD_LOGIC; SGREEN: OUT STD_LOGIC; EYELLOW: OUT STD_LOGIC; EGREEN: OUT STD_LOGIC; GT_SET: IN STD_LOGIC; GHUMAN_TIME: IN INTEGER RANGE 31 DOWNTO 0; GHUMAN_CLKT: IN INTEGER RANGE 31 DOWNTO 0; GVEHICLE_TIME: IN INTEGER RANGE 31 DOWNTO

14、0; REQUEST: IN STD_LOGIC; CLK: IN STD_LOGIC; RST: IN STD_LOGIC);END LIGHT;ARCHITECTURE BEHAVE OF LIGHT IS TYPE IN_STATES IS(ST0,ST1,ST2,ST3,ST4); SIGNAL CURRENT_STATE: IN_STATES; SIGNAL NEXT_STATE: IN_STATES; SIGNAL START: STD_LOGIC; SIGNAL SIG: INTEGER RANGE 31 DOWNTO 0; BEGINPROCESS(CURRENT_STATE,

15、RST)BEGIN IF(RST=1 OR CURRENT_STATE=ST0)THEN START=0; ELSE START=1; END IF;END PROCESS; A:PROCESS(START,CLK,RST) BEGINIF(RST=1)THENSIG=0;ELSIF(CLK EVENT AND CLK=1)THENIF(START=1)THENIF(SIG=GVEHICLE_TIME)THENSIG=0;ELSESIG=SIG+1;END IF;ELSESIG=0;END IF;END IF;END PROCESS A;PROCESS(RST,CLK)BEGINIF(RST=

16、1)THENCURRENT_STATE=ST0;ELSIF (CLKEVENT AND CLK=1)THENCURRENT_STATE ERED=0;EGREEN=1;EYELLOW=0;SRED=1;SGREEN=0;IF(REQUEST=1 AND GT_SET=0)THENNEXT_STATE=ST1;ELSE NEXT_STATE ERED=0;EGREEN=0;EYELLOW=1;SRED=1;SGREEN=0;IF (SIG=1)THENNEXT_STATE=ST2;ELSENEXT_STATE ERED=1;EGREEN=0;EYELLOW=0;SRED=0;SGREEN=1;I

17、F(SIG=GHUMAN_TIME)THENNEXT_STATE=ST3;ELSENEXT_STATE ERED=1;EGREEN=0;EYELLOW=0;SRED=0;SGREEN=NOT CLK;IF(SIG=GHUMAN_CLKT)THENNEXT_STATE=ST4;ELSENEXT_STATE ERED=0;EGREEN=1;EYELLOW=0;SRED=1;SGREEN=0;IF(SIG=GHUMAN_CLKT)THENNEXT_STATE=ST0;ELSENEXT_STATE ERED=0;EGREEN=1;EYELLOW=0;SRED=1;SGREEN=0;NEXT_STATE

18、=ST3;END CASE;END PROCESS;END BEHAVE; 4.4 顶层文件源代码Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity TrafficLight is Port(clk:in std_logic;clear:in std_logic;rclear:in std_logic;clkADD:in std_logic;rclkADD:in std_logic;clkSUB:in std_logic;rclkSUB:in std_logic;pre_set:in s

19、td_logic;human_set:in std_logic;rst:in std_logic;request:in std_logic;rrequest:in std_logic;clk_ls:in std_logic;sred,sgreen:out std_logic;ered,eyellow,egreen:out std_logic);End;Architecture behave of TrafficLight is ponent DITHER is PORT ( UPIN: IN STD_LOGIC; DOWNIN: IN STD_LOGIC; KEYOUT: OUT STD_LO

20、GIC ); End ponent; ponent COUNT is PORT(CLK: IN STD_LOGIC; CLEAR: IN STD_LOGIC; CLKADD: IN STD_LOGIC; CLKSUB: IN STD_LOGIC; PRE_SET: IN STD_LOGIC; HUMAN_SET: IN STD_LOGIC; RST: IN STD_LOGIC; GHUMAN_TIME: OUT INTEGER RANGE 31 DOWNTO 0; GHUMAN_CLKT: OUT INTEGER RANGE 31 DOWNTO 0; GVEHICLE_TIME: OUT IN

21、TEGER RANGE 31 DOWNTO 0); End ponent; ponent LIGHT is PORT(SRED: OUT STD_LOGIC; ERED: OUT STD_LOGIC; SGREEN: OUT STD_LOGIC; EYELLOW: OUT STD_LOGIC; EGREEN: OUT STD_LOGIC; GT_SET: IN STD_LOGIC; GHUMAN_TIME: IN INTEGER RANGE 31 DOWNTO 0; GHUMAN_CLKT: IN INTEGER RANGE 31 DOWNTO 0; GVEHICLE_TIME: IN INT

22、EGER RANGE 31 DOWNTO 0; REQUEST: IN STD_LOGIC; CLK: IN STD_LOGIC; RST: IN STD_LOGIC); End ponent;Signal TEMP_GHUMAN_TIME: INTEGER RANGE 31 DOWNTO 0;Signal TEMP_GHUMAN_CLKT: INTEGER RANGE 31 DOWNTO 0; Signal TEMP_GVEHICLE_TIME: INTEGER RANGE 31 DOWNTO 0;Signal TEMP_CLEAR,TEMP_CLKADD,TEMP_CLKSUB,TEMP_

23、REQUEST:std_logic;BeginU1:DITHER port map(clear,rclear,TEMP_CLEAR);U2:DITHER port map(clkADD,rclkADD,TEMP_CLKADD);U3:DITHER port map(clkSUB,rclkSUB,TEMP_CLKSUB);U4:DITHER port map(request,rrequest,TEMP_REQUEST);U5:COUNT port map(CLK,TEMP_CLEAR,TEMP_CLKADD,TEMP_CLKSUB,PRE_SET,HUMAN_SET,RST,TEMP_GHUMA

24、N_TIME,TEMP_GHUMAN_CLKT,TEMP_GVEHICLE_TIME);U6:LIGHT port map(SRED,ERED,SGREEN,EYELLOW,EGREEN,PRE_SET,TEMP_GHUMAN_TIME,TEMP_GHUMAN_CLKT,TEMP_GVEHICLE_TIME,TEMP_REQUEST,CLK_LS,RST);End behave;5.运行结果与分析(1)消抖模块仿真波形图:图6 消抖模块仿真波形图按键弹起为高电平,按下为低电平。当按键按下时,UPIN变为低电DOWNIN变为高电平,并产生抖动。输出的KEYOUT信号消除抖动。(2)交通灯模块仿真

25、波形图: 图7交通灯模块仿真波形图给CLK一个时钟信号,在某一时刻开始赋给RST一个高电平,所有值恢复默认。再给REQUEST赋值一个高电平,然后状态机开始工作,EYELLOW(马路的黄灯)变为高电平,持续一个时钟周期的时间。然后EGREEN(马路的绿灯)变为高电平,此时SGREEN(人行道的绿灯)变为高电平,然后持续HUMAN_TIME个时钟的周期的时间。然后SGREEN(人行灯的绿灯)变为N,持续2个时钟的周期的时间,然后SRED(人行道的红灯)变为高电平,此时ERED(马路的绿灯)变为高电平。然后在VEHICLE_TIME个时钟周期内SRED(人行道红灯)保持高电平,EGREEN(马路的

26、绿灯)保持为高电平。在此过程中,再次给REQUEST高电平对交通灯的电位没有影响。(3)交通灯时长设置模块仿真波形图:图8交通灯时长设置模块仿真波形图给CLK一个时钟信号,在某一时刻给RST一个高电平复位,然后GHUMAN_CLK,GHUMAN_TIME和GVEHICLE_TIME回复默认值。然后再在某一时刻给PRE_SET一个低电平给GHUMAN_CLK,GHUMAN_TIME和 GVEHICLE_TIME赋值, GVEHICLE_TIME的值减1。然后再在某一时刻同时给PRE_SET赋低电平,给HUMAN_SET赋高电平,然后GHUMAN_TIME的值加1,GVEHICLE_TIME的值加

27、1。 (4)顶层文件模块仿真波形图:图12顶层文件仿真波形图6.结束语 通过这次课程设计,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。而且,这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。参考文献 1.侯伯亭,顾新. VHDL 硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版社,1999. 2.EDA技术与VHDL。潘松,黄继业编著。4版。北京:清华大学出版社,2013.43.王金明 .数字系统设计VHDL 北京:电子工业出版设,2010。13

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服