EDA基于VHDL设计的交通灯系统
基于vhdl的智能交通灯控制系统的设计

基于vhdl的智能交通灯控制系统的设计基于vhdl的智能交通灯控制系统的设计摘要摘要EDA技术的一个重要特征就是使用硬件描述语言(HDL)来完成系统的设计文件,应用VHDL的数字电路实验降低了数字系统的设计难度,这在电子设计领域已得到设计者的广泛采用。
本设计就是针对交通信号灯控制器的设计问题,提出了基于VHDL语言的交通信号灯系统的硬件实现方法。
通过对系统进行结构分析,采用了层次化的设计方法,给出了各个模块的VHDL程序,并且利用Quartus Ⅱ对应用程序进行了仿真,并给出了相应的仿真结果。
通过电路优化设计,可以使用规模更小的可编程逻辑芯片,从而降低系统成本。
关键词:交通信号灯;VHDL;仿真33 Abstract ABSTRACT One important characteristic of the EDA is that the design documents should be completed by the HDL, the digital circuit experiment utilized very-high-speed integrated circuit hardware description language(VHDL) may reduce the difficulties of digital system designing, and it is widely used by electronic designer now. Aiming at the design problem of traffic light controller, this paper puts forward a hardware realization method of traffic lightsystem with VHDL. By analyzing the architecture of system, it gives the program of each module with VHDL using hierarchical design means. It also gives the simulation results by QuartusⅡ. Optimizes the design through the electric circuit, may use the scale smaller programmable logic chip, thus reduces the system cost. Key word: Street-traffic control lights; VHDL; Simulation 目录目录第1章引言1 第2章EDA技术概述2 2.1 EDA技术及其发展2 2.2 EDA与传统电子设计方法的比较2 2.3 EDA的工程设计流程2 第3章可编程技术简介4 3.1 可编程逻辑器件概述4 3.2 FPGA/CPLD概述4 3.3 硬件描述语言介绍5 3.4 选择VHDL硬件描述语言设计的优势6 3.5 软件开发工具Quartus II 简介6 第4章智能交通控制系统的设计8 4.1 系统功能分析8 4.2 系统结构设计9 4.3 系统程序实现10 4.3.1 分频计数电路10 4.3.2 交通信号控制器电路12 4.3.3 动态数码管扫描电路15 4.3.4 19 4.3.5 建立程序包22 4.3.6 连接各个模块23 4.3.7 状态机的优势24 4.4仿真及仿真结果分析结束语26 参考文献27 致谢28 附录29 1.时钟发生电路程序代码29 2.计数秒数选择电路程序代码31 3.倒计时控制电路程序代码32 4.红绿灯信号控制电路程序代码34 5.连接各个模块的程序代码38 外文资料原文41 翻译文稿55 第1章引言第1章引言不同的城市存在着不同的城市问题,但其中有一个共同的问题就是城市交通。
基于EDA的交通灯控制系统的设计

目录第一章概述 (1)1.1 EDA的概述 (1)1.1.1 EDA技术的发展历程 (1)1.1.2 EDA技术的基本特征 (1)1.2 EDA的设计方法 (2)1.2.1 传统的设计方法 (2)1.2.2 现代的设计方法 (2)1.3 硬件描述语言 (2)1.3.1 硬件描述语言(VHDL) (2)1.3.2 VHDL具有的优点 (2)1.4 数字系统 (3)1.4.1 数字系统的概述 (3)1.4.2 数字系统的功能 (3)第二章交通灯控制系统简介 (4)2.1 交通灯控制系统概述 (4)2.2 交通灯控制系统的功能应用 (4)2.3 交通灯控制系统设计构成 (4)第三章交通灯控制系统的设计 (5)3.1 交通灯控制系统的设计要求 (5)3.2 设计思路 (5)3.3 设计流程 (6)3.4 设计步骤及程序 (7)3.4.1 分频器部分的设计步骤 (7)3.4.2 显示部分的设计 (8)3.4.3 设计系统结构图建立工程 (11)3.4.4 交通灯控制系统的仿真 (11)3.5 硬件实现及调试结果 (12)3.5.1 器件下载编程与硬件实现 (12)3.5.2 引脚配置 (12)3.5.3 调制结果 (13)第四章课程设计总结 (14)第五章参考文献 (15)第一章概述1.1 EDA的概述电子设计自动化(Electronic Design Automation,EDA)技术以计算机为基础工作平台,以微电子技术为物理基础,以现代电子技术设计技术为灵魂,采用计算机软件工具,最终实现电子系统或专用集成电路(Application Specific Integrated Circuit,ASIC)的设计。
EDA技术科简单概括为以大规模可编程逻辑器件为设计载体,通过硬件描述语言或将逻辑图输入给相应EDA开发软件,经过编译和仿真,最终将所设计的电路下载到设计载体中,从而完成系统设计任务的一门新技术。
1.1.1 EDA技术的发展历程EDA经历了计算机辅助设计(CAD)、计算机辅助工程设计(CAED)和电子设计自动化(EDA)三个发展历程。
基于vhdl的交通灯设计

交通灯设计课程名称:学院专业姓名:学号:年级:任课教师:2011年9 月 5 日实验目的:1.熟悉quartus的使用,了解VHDL编程2.掌握逻辑电路的设计方法3.利用Quartus,使用VHDL语言编写一个交通灯的程序,使之可以实现红黄绿灯的交替出现,并在十字路口的另一条岔路上实现指挥的同步,完成交通指挥的功能。
实验基本原理:在假设时钟信号为1HZ的情况下,对路口的灯进行计时,每当时间到时转入下一个状态,开始新一轮的计时,一个十字路口的交通灯组合后有四种情况(绿,红)(黄,红)(红,绿)(红,黄),每个状态可对应一个时间。
在对每种状态编号后就可以开始状态的循环了。
实验内容:实验代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk: in std_logic;r1,y1,g1,r2,y2,g2:out std_logic --六个输出对应十字路口的六个红绿灯);end traffic;architecture act of traffic isconstant yellow_time:integer:=5;constant green_time:integer:=20; --不用定义红灯的时间,因为后面用不到.signal state:integer range 0 to 3; --这里有四种状态,用state来表示beginprocess(clk)beginif(clk'event and clk='1') thencase state is --用来展示这四种状态when 0=>r1<='0';y1<='0';g1<='1';r2<='1';y2<='0';g2<='0';when 1=>r1<='0';y1<='1';g1<='0';r2<='1';y2<='0';g2<='0';when 2=>r1<='1';y1<='0';g1<='0';r2<='0';y2<='0';g2<='1';when others=>r1<='1';y1<='0';g1<='0';r2<='0';y2<='1';g2<='0';end case;end if;end process;process(clk)variable count:integer range 0 to 25;beginif(clk'event and clk='1') thenif count=0 then --状态的循环if state=3 thenstate<=0;elsestate<=state+1;end if;case state iswhen 0=>count:=yellow_time; --选择状态对应的时间when 1=>count:=green_time;when 2=>count:=yellow_time;when others=>count:=green_time;end case;elsecount:=count-1; --状态的计时end if;end if;end process;end act;实验结果点击编译,可以看出没有出现错误设计出相应的波形文件并加载后,点击仿真,就可以出现如下的波形由时序仿真的结果可以看出,它实现了红绿灯的交替以及十字路口的两路灯的协调实验总结:此次实验做出的交通灯是建立在时钟频率为1HZ的基础上的,而硬件实验中提供的时钟信号一般都为几兆赫兹,因此如果这个实验想要下载到实验箱上去模拟的的话就需要在前面加上分频的代码,并将clk换成更改后的时钟通过实验的结果可以看出,在红绿灯稳定之前,有几秒钟的不稳定时期,这个是由于在设计是没有给变量赋给初值造成的,这在以后的设计中尤其需要注意,而在稳定后,功能实现较好,各时间段的衔接很顺畅,并且计时的时候用的是定义的常数green_time和yellow_time本实验中定义式25秒和5秒,这种做法可以方便以后的维护,修改起来也比较方便,并且使代码比较容易读懂。
EDA课程设计——交通灯

实验报告设计题目:交通信号控制器班级:学号:姓名:指导老师:设计时间:2011年4月交通信号控制器的VHDL 设计一、设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED 作为交通信号灯,设计一个交通信号灯控制器。
要求:(1) 交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2) 交通灯红变绿是直接进行的,没有间隔时间;(3) 主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4) 在任意时间,显示每个状态到该状态结束所需的时间。
主干道图1路口交通管理示意图二、设计目的:设计交通灯控制系统主要是为了实现城市十字交叉路口红绿灯的控制。
通过对QuartusII 软件使用方法与技巧的学习,掌握VHDL 程序设计的实现,熟悉可编程逻辑器件的使用。
同时加深对交通灯控制系统的了解与应用。
三、设计方案:图2 交通信号灯控制器的原理框图图3 交通信号灯控制器程序原理框图四、程序清单和说明:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRAFFIC ISPORT (CLK: IN STD_LOGIC;LED7S1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管高位显示数字LED7S2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--数码管低位显示数字LIGHT: OUT STD_LOGIC_VECTOR(5 DOWNTO 0));--各交通灯显示END ENTITY;ARCHITECTURE ONE OF TRAFFIC ISTYPE STATES IS( STA, STB, STC, STE);--定义状态变量SIGNAL ST0:STATES;SIGNAL ST1:STATES;SIGNAL FULL: STD_LOGIC;SIGNAL FOUT: STD_LOGIC;时钟输出信号(秒频)SIGNAL TIME: STD_LOGIC_VECTOR(6 DOWNTO 0);时间计数值SIGNAL TIME_LEFT: STD_LOGIC_VECTOR(6 DOWNTO 0);显示时间剩余值SIGNAL T_HIGH:STD_LOGIC_VECTOR(1 DOWNTO 0);高位显示SIGNAL T_LOW:STD_LOGIC_VECTOR(6 DOWNTO 0);低位显示BEGINPROCESS(CLK) --秒脉冲产生进程(分频作用)V ARIABLE CNT8: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8="11111111" THENCNT8:="00000000"; --当CNT8计数计满时,给计数器CNT8预置数FULL<='1'; --同时使溢出标志信号FULL输出为高电平ELSE CNT8:=CNT8+1; --否则继续作加1计数FULL<='0'; --且输出溢出标志信号FULL为低电平END IF;END IF;END PROCESS;PROCESS(FULL)V ARIABLE CNT2: STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1'THENCNT2:=NOT CNT2;IF CNT2='1' THEN FOUT<='1'; ELSE FOUT<='0';END IF;END IF;END PROCESS;--FOUT输出是时钟信号PROCESS(FOUT) --计数模块。
EDA课程设计-交通红绿灯控制

EDA课程设计报告设计题目:交通灯信号控制器专业年级:姓名:学号:指导教师:2012.5.30摘要-----------------------------------------------------1 关键词--------------------------------------------------1 一交通灯控制系统简介------------------------------------2 1.1 交通灯的发展----------------------------------------2 1.2 交通灯控制系统的目的--------------------------------2 二交通灯控制系统的设计----------------------------------2 2.1 设计要求--------------------------------------------3 2.2 设计思路--------------------------------------------3 2.2.1 设计流程----------------------------------------4 2.2.2 状态机变化图------------------------------------5 三详细设计----------------------------------------------6 3.1 红黄绿灯控制模块------------------------------------6 3.2 倒计时传输、控制模块---------------------------------6 3.3 倒计时45秒模块-------------------------------------7 3.4倒计时25秒模块--------------------------------------8 3.5倒计时5秒模块---------------------------------------8 3.6 总体连线图------------------------------------------9 四心得体会---------------------------------------------10 参考文献-----------------------------------------------10 附录---------------------------------------------------11随着电子设计技术、ISP(在系统可编程)技术,PLD(可编程逻辑器件),与EDA(电子设计自动化)紧密结合,它代表了数字系统设计领域的最高水平,给数字电路的设计带来了革命性的变化。
eda

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、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2’设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:系统输入信号:Clk: 由外接信号发生器提供256的时钟信号;系统输出信号: full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。
模块说明:系统输入信号:full: 接收由clk 电路的提供的1hz 的时钟脉冲信号; tm: 接收计数秒数选择电路状态转换信号; 系统输出信号: comb_out: 负责红绿灯的状态显示。
EDA课程设计-交通灯-图文

EDA课程设计-交通灯-图文交通信号灯控制电路设计一、概述城市道路交叉口是城市道路网络的基本节点,也是网络交通流的瓶颈。
目前,大部分无控制交叉口都存在高峰小时车流混乱、车速缓慢、延误情况严重、事故多发、通行能力和服务水平低下等问题。
特别是随着城市车流量的快速增长,城市无控制道路交叉口的交通压力越来越大。
因此,做好基于EDA技术平台的交叉口信号控制设计是缓解交通阻塞、提高城市道路交叉口车辆通行效率的有效方法。
交通信号控制的目的是为城市道路交叉口(或交通网络)提供安全可靠和有效的交通流,通常最为常用的原则是车辆在交叉口的通过量最大或车辆在交叉口的延误最小。
交通信号灯控制电路是显示主干道和支干道交替放行时间并用试验箱左上角的彩灯来红黄绿支红代替信号灯的一种实际电路。
设计一个基于FPGA的红绿灯交通信号控制器。
假设某个十干黄绿道字路口是由一条主干道和一条次干道汇合而成,在每个方向设置红绿黄三种信号灯,红灯亮禁止通行,绿灯亮允许通行。
黄灯亮允许行驶中车辆有时间停靠到禁止线以外。
第-1-页共18页二、方案设计与论证在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号,在时钟信号的控制下,实现主干道和支干道红绿灯交替显示。
红绿灯交通灯控制器层次设计:EDA技术的基本设计方法有电路级设计方法和系统级设计方法。
电路级设计方法已经不能适应新的形势,本系统采用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各功能模块连接起来。
下面给出各模块的VHDL设计过程和仿真结果。
1、系统时序发生电路clk_gen的VHDL设计在红绿灯交通信号控制系统中,大多数的情况是通过自动控制的方式指挥交通的。
因此,为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
EDA课设交通灯

《EDA技术及应用》课程设计报告题目:交通灯控制系统的设计院(系):机电与自动化学院专业班级:学生姓名:学号:20142101063指导教师:2017年6月 19日至2016年 6 月 23日武昌首义学院制《EDA技术及应用》课程设计任务书目录1课程设计主要内容与要求 (2)1.1设计目的 (2)1.2控制要求 (2)1.3设计要求 (2)2系统设计 (3)2.1系统原理 (3)2.2 电路功能描述 (3)2.3 交通灯控制器的实现 (3)2.4 软件程序设计 (5)2.5 时钟分频模块 (6)2.6 计数模块 (6)2.7 数码管模块 (7)2.8 LED显示模块 (8)3 软件程序设计 (9)4 硬件电路图、软件仿真图及调试结果 (11)4.1硬件电路 (11)4.2引脚设置 (12)5 软件仿真 (13)6设计过程中的问题及解决办法 (16)7 实验总结和心得体会 (16)8 参考文献 (16)1课程设计主要内容与要求1.1设计目的学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
1.2控制要求本课程设计要求利用VHDL对输入的时钟信号进行分频控制产生秒信号,并结合试验箱上的集成电路及芯片,控制十字路口的红绿黄灯交替点亮和熄灭,并用1位7段数码管显示十字路口两个方向的剩余时间。
①根据交通状态控制十字路口红黄绿灯的点亮熄灭及闪烁等。
②倒计时功能:从9秒开始倒计时,3秒时绿灯变黄并闪烁,红灯不变。
9秒结束时一组黄灯变红,另外一组红灯变绿。
③显示功能:使用1位7段数码管动态显示倒计时时间。
1.3设计要求①设计FPGA的基础工作电路;②设计红绿黄12个灯与FPGA芯片的硬件电路连接;③设计显示部分硬件电路;④使用底层及顶层设计完成电路设计,并作出各文件的仿真;⑤程序下载并进行硬件调试。
2系统设计2.1系统原理根据设计要求和系统所具有的功能,可以分析出,。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VHDL设计的交通灯系统 一. 系统功能要求 设计一个能够显示倒计时间并可人为调整时间的交通灯系统。南北方向为主干道,东西方向为支干道。比如,南北方向为直行绿灯亮 20秒,黄灯亮 5秒,左拐绿灯亮为15秒,黄灯亮5秒,红灯亮 65秒(为东西方向直行绿灯、左拐绿灯亮及黄灯亮的时间的总合),东西方向为直行绿灯亮 40秒,直行绿黄灯为 5秒,左拐绿灯亮15秒,黄灯亮5秒;红灯45亮秒(为东西方向直行绿灯、左拐绿灯亮及黄灯亮的时间的总合),其中南北方向和东西方向的直行绿灯和左拐绿灯在最后3秒会闪烁,以提示行驶中在远处无法看清时间显示的司机通行时间快要结束了。以上红绿灯时间为预设时间。能够通过键盘操作实现时间的快速更改,更改完成后系统可立即执行更改后的时间进行运行。系统还具有深夜两方向黄灯一直闪亮警告状态(在凌晨转为正常工作)和紧急情况下的红灯常亮状态,这两种状态通过人为设置。发生紧急情况时计时停止,解除后可立即继续当前的工作。
二. 系统功能实现 整个系统控制由FPGA芯片来完成。时间显示采用数码管动态扫描方式,时间更改通过数字键盘实现,正常工作状态到时间更改状态和红黄灯常亮状态的改变通过拨码开关来实现。采用芯片板上9个发光二极管的其中8个模拟交通灯,由于二极管数量有限,故两个方向各只用一套交通灯。
系统描述采用多个进程并行处理的方式来实现,进程与进程之间通过内部信号关联。进程P1将20MHz的主时钟分频为2MHz。进程P2用于再分频和按键扫描,将2MHz分频为供数码管扫描用的128Hz和倒计时用的1Hz以及绿灯左拐灯闪烁的2Hz,同时产生用于按键行扫描的两位二进制码。进程P3用于键值获取,通过将按键扫描码和去抖后的键值合并且译码来得到正确的键值。 P4进程为码值转换和调时时间设置电路,通过计数器adjust的自加进入相应的时间设置语句。当adjust=000时给东西方向的红灯设置倒计时间,adjust=001时给东西方向的黄灯设置时间,以此类推直到adjust=111,8个交通灯的时间设置完成。内部信号time保存的值为普通二进制码,此码是通过转换函数BCD_to_binar将键盘输入的8位BCD码转换为普通二进制码得到的。进程中设置标志位pre是为了在pre= 0时将预设时间值赋给各灯。Pre的赋值由拨码开关来实现。
P5进程是东西方向工作状态时间转换电路。每来一个clk1hz时钟,通过判断time_en,emer和yel的值来决定东西方向系统工作在正常指挥状态,紧急状态还是深夜状态。正常指挥状态中内部不同状态的转换是通过counta的自加来实现的。当东西方向时间计数器atime减为0时counta 自加。并产生相应的状态提示码checka。time_en,emer和yel的赋值由拨码开关来实现。 P6为东西方向工作状态亮灯转换电路。每来一个clk2hz时钟,判断time_en,emer和yel的值来决定东西方向系统工作在正常指挥状态,紧急状态还是深夜状态。P6和P5分开进行的主要原因是考虑到绿灯和左拐灯在最后的3秒时刻要进行闪烁,其状态为0.5秒亮0.5秒灭,这比P5的1hz时钟快一倍,故灯状态的转变只能单独用另一个2hz的时钟控制。在进入3秒区时,通过将绿灯及左拐灯的码值取非来达到闪烁的效果。灯状态转换的真值表如下表。 P7、P8为南北方向的工作状态时间转换电路及亮灯转换电路,其原理与P5、P6相同,这里就不再赘述。
P9、P10、P11构成数码管动态显示电路。P9是动态扫描计数器产生电路。P10为码值转换和显示电路,通过调用转换函数binar_to_BCD将普通二进制码atime和btime转换为8位BCD码。显示电路分为工作显示和时间设置显示两部分。工作显示时通过计数器cnt4进行数码管位码的赋值,从而不断循环点亮4位数码管分别显示东西和南北方向的时间。时间设置显示时通过计数器cnt3进行位码赋值,循环点亮三位数码管显示设置的时间值和设置提示。P9为数码管段码译码电路。P11为移位寄存器电路,用来保存通过数字键盘输入得到的8位BCD码。
转换函数的原理很简单。7位二进制码与8位BCD码从10进制角度来看个位都是相同的,仅10位不同。故可以将7位二进制码减去与此码十位相同个位为0 的二进制码,从而保留了个位,再补上10位相应的二进制码即可。比如说95的二进制为1101111,将其减去90的二进制码1011010,得个位为101,即5,再补上10位1001,变为10010101,即为8位BCD码。反转换函数原理可以此类推。此外,程序中还通过去抖动模块debunce来处理数字键盘人为输入时产生的不稳定的抖动信号。
三. 系统功能框图 系统由按键输入及去抖电路、移位寄存电器电路、分频电路、码值转换与调时电路、码值转换与显示电路和东西、南北工作状态转换电路组成。
四. 关键控制的源程序 I.码值转换与调时电路 P4:process (enter,ewadjust) begin if (enter'event and enter='1') then --每按一次按键 time<=BCD_to_binar(D); case adjust is --按键计数器 when"000"=>ayt<=time(3 downto 0); --东西黄灯时间赋值 when"001"=>agt<=time(5 downto 0); --东西绿灯时间赋值 when"010"=>alt<=time(5 downto 0); --东西左拐灯时间赋值 when"011"=>byt<=time(3 downto 0); --南北黄灯时间赋值 when"100"=>bgt<=time(5 downto 0); --南北绿灯时间赋值 when"101"=>blt<=time(5 downto 0);art<=byt+bgt+blt; brt<=agt+alt+ayt; --南北左拐灯时间赋值,东西红灯时间自动赋值,南北红灯时间自动赋值 when others=>null; end case; if (adjust="101") then adjust<="000"; else adjust<=adjust+1; end if; end if; if pre='0' then --如果pre为0,采用预设值 art<="0101000"; ayt<="0101"; agt<="101101"; alt<="001111"; brt<="1000001"; byt<="0101"; bgt<="010100"; blt<="001111"; end if; end process p4;
2.东西方向工作状态时间转换程序 P5: process(time_en,clk) variable counta:std_logic_vector(2 downto 0); begin if (clk'event and clk ='1')then if (time_en='1') then --工作状态 if(emer = '1')then --紧急状态 atime(6 downto 0)<= "0000000"; --工作状态回0 counta := "000"; elsif(yel='1')then --警告状态 atime(6 downto 0)<= "0000000"; --工作状态回0; counta := "000"; else if(atime="0000000") then case counta is when"000"=>atime(5 downto 0)<=agt-1; checka<="000"; --东西绿灯时间 when"001"=>atime(3 downto 0)<=ayt-1; checka<="001"--东西黄灯时间 when"010"=>atime(5 downto 0)<=alt-1; checka<="010"--东西左拐灯时间 when"011"=>atime(3 downto 0)<=ayt-1; checka<="011"--东西黄灯时间 when"100"=>atime<=art-1; checka<="100"; --东西红灯时间 when"101"=>atime(3 downto 0)<=ayt-1; checka<="101"; --东西黄灯时间 when others=>null; end case; if (counta="101")then counta:="000"; else counta:=counta+1; --状态转换 end if; else atime<=atime-1; --倒计时 end if; end if; end if; end if; end process p5;
3.东西方向工作状态亮灯转换程序 P6: process(clk) begin ewled<=tempa; if(clk'event and clk ='1')then if (time_en='1') then if(emer = '1')then --紧急情况 tempa<="1011"; elsif(yel='1')then --深夜情况 tempa<="1111"; tempa(1)<=not tempa(1); --黄灯闪烁 else case checka is when "000" => --东西绿灯状态 if (atime>"0000011") then --时间>3秒 tempa<="1110"; --绿灯长亮 elsif(atime>="0000000") then --时间<=3秒 tempa(0)<=not tempa(0); --绿灯闪烁 end if; when "001" | "011" | "101" => tempa<="1101"; --东西黄灯状态 when "010" => --东西左拐灯 if (atime>"0000011") then --时间>3秒 tempa<="0111"; --左拐灯长亮 elsif(atime>="0000000") then --时间<=3秒 tempa(3)<=not tempa(3); --左拐灯闪烁 end if; when "100" => tempa<="1011"; --东西红灯 when others =>null; end case; end if; end if; end if; end process;