交通灯控制电路设计与仿真
- 格式:doc
- 大小:203.00 KB
- 文档页数:14
交通信号灯控制电路的设计一、设计任务与要求1、任务用红、黄、绿三色发光二极管作为信号灯,设计一个甲乙两条交叉道路上的车辆交替运行,且通行时间都为25s的十字路口交通信号灯,并且由绿灯变为红灯时,黄灯先亮5s,黄灯亮时每秒钟闪亮一次。
2、要求画出电路的组成框图,用中、小规模集成电路进行设计与实现用EAD软件对设计的部分逻辑电路进行仿真,并打印出仿真波形图。
对设计的电路进行组装与调试,最后给出完整的电路图,并写出设计性实验报告。
二、设计原理和系统框图(一)设计原理1、分析系统的逻辑功能,画出其框图交通信号灯控制系统的原理框图如图2所示。
它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。
秒脉冲信号发生器是该系统中定时器和该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。
图1 交通灯控制电路设计框图图中:Tl:表示甲车道或乙车道绿灯亮的时间间隔为25s,即车辆正常通行的时间间隔。
定时时间到,Tl=1,否则,Tl=0.Ty:表示黄灯亮的时间间隔为5s。
定时时间到,Ty=1,否则,Ty=0。
St:表示定时器到了规定的时间后,由控制器发出状态转换信号。
它一方面控制定时器开始下一个工作状态的定时,另一方面控制着交通信号灯状态转换。
2、画出交通信号灯控制器ASM图(1)甲车道绿灯亮,乙车道红灯亮。
表示甲车道上的车辆允许通行,乙车道禁止通行。
绿灯亮足规定的时间隔TL时控制器发出状态信号ST转到下一工作状态。
(2)乙车道黄灯亮乙车道红灯亮。
表示甲车道上未过停车线的车辆停止通行已过停车线的车辆继续通行乙车道禁止通行。
黄灯亮足规定时间间隔TY时控制器发出状态转换信号ST转到下一工作状态。
(3)甲车道红灯亮乙车道绿灯亮。
表示甲车道禁止通行乙车道上的车辆允许通行绿灯亮足规定的时间间隔TL时 控制器发出状态转换信号ST转到下一工作状态。
交通信号灯控制电路的设计与仿真交通信号灯是城市道路上的重要交通设施。
它不仅能够引导车辆行驶方向、保障行人安全出行,还能有效地控制交通流量,缓解车辆拥堵问题。
然而,要使交通信号灯发挥作用,就需要一个可靠的信号控制电路。
本文将介绍交通信号灯控制电路的设计与仿真。
1. 控制电路设计交通信号灯控制电路是一种可编程逻辑电路(FPGA)。
它可以根据不同的交通需要配置不同的控制方案。
基本的控制方案有三种:顺序控制、时间计划控制和循环控制。
1.1 顺序控制顺序控制是最简单的交通信号灯控制方案,它依次控制交通灯的颜色。
设计电路需要先设置一个时钟,并定义各信号灯的状态,例如,当橙色灯亮的时候,等待5秒钟后,绿色灯亮;当绿色灯亮时,等待10秒钟后,红色灯亮。
这样的交通信号灯控制方案简单、稳定,但是不适用于复杂的交通环境。
1.2 时间计划控制时间计划控制是根据交通流量和道路容量的不同,对交通信号灯的时间进行调整的控制方案。
具体做法是,通过交通流量传感器测量每个方向的车辆流量并累积,运用时序控制器进行计算,并对红绿灯时间进行动态调整。
这样可以保证交通信号灯实时地适应不同的流量情况,但是需要大量的传感器和计算器。
1.3 循环控制循环控制是一种随机的交通信号灯控制方案,通过交通数据和计算机模型确定路口交通灯每轮的时间长度,并以不同的顺序轮换信号灯,这样按照循环周期可能使交通流量更加均衡,并且可以排除一些失误。
但是需要进行大量的计算,并且不适用于复杂的交通环境。
2. 仿真设计完成后,需要对交通信号灯控制电路进行仿真,以检验控制电路的稳定性和有效性。
仿真软件通常有多种,本文介绍两种常用的仿真软件。
2.1 QucsQucs是一个免费的仿真软件,具有模拟、线性和非线性仿真电路的能力,可以模拟电路和系统的频段、噪声和传输等特性。
在Qucs中,可以很容易地设计复杂的控制电路,通过仿真分析不同方案的控制效果。
2.2 SPICESPICE是一种常用的模拟软件,主要用于电路和系统仿真。
0.引言Multisim 具有丰富的仿真分析能力并且以Windows 为基础的EDA 仿真工具,适用于板级的模拟/数字电路板的设计工作。
通过Multisim 可以交互式地搭建电路原理图,并对电路行为进行仿真。
它是EDA 仿真设计系统的一个重要组成部分。
EDA 代表了当今电子设计技术的最新发展方向,其基本特征是设计人员以计算机为工具,按照自顶向下的设计方法。
随着EDA 技术的发展,可以利用“虚拟仪器”、“虚拟器件”在计算机上进行电子电路设计和实验。
目前,在这类仿真软件中,“虚拟电子实验台”—————Multisim 较为优秀,其应用逐步得到推广。
这种新型的虚拟电子实验技术软件,在创建实验电路时,元器件、测试仪器均可直接从屏幕图形中选取,且仪器的设置、使用和数据读取方法以及外观都与现实中的仪表非常相似。
实际工作中可以利用此软件实现计算机仿真设计与虚拟实验,并且设计与实验可以同步进行,可以边设计边实验,修改调试方便;设计和实验用的元器件及测试仪表齐全,可以完成各种类型的电路设计与实验;仿真时可方便地对电路参数进行测试和分析,可直接打印输出实验数据、测试参数、曲线和电路原理图,并且在实验中不消耗实际上的元器件,实验所需元器件的种类和数量不受限制,从而降低了实验成本低,加快了实验速度,提高了实验效率高。
基于上述优点,我们利用虚拟实验室中的虚拟仪器来组织完成交通灯控制电路的仿真设计。
1.交通灯控制器原理假设有个十字路口,分别有A 、B 两条交叉的道路,交通灯的控制方式为:A 街道先出现在绿灯(3S )、黄灯(1S )时,B 街道为红灯(4S );而A 街道为红灯(4S )时,B 街道出现绿灯(3S )、黄灯(1S );如此循环。
交通灯控制的一个循环为8S ,而采用一片同步十进制计数74LS160来完成时间控制,相当于模8的计数器。
2.电路设计2.1真值表假设A 、B 街道的绿、黄、红灯分别用GA 、YA 、RA 和GB 、YB 、RB 表示,交通灯控制电路的真值表如表1所示:表1交通灯控制电路逻辑真值表2.2设计模8计数器2.2.174LS160简介74LS160是同步10进制计数器,其管脚排列如图1所示:其中A 、B 、C 、D 为预置数输入端,LOAD 为预置数控制端,CLR 为异步清零端,ENP 和ENT 为计数器允许端,CLK 为上长沿触发时钟端,RCO 为输出的进位信号,QA 、QB 、QC 、QD 为十进制输出端。
51单片机交通灯仿真原理引言:交通灯作为城市交通管理的重要组成部分,起到了引导车辆和行人通行的作用。
在现代社会中,交通灯的灯光变化是由电路控制实现的。
本文将以51单片机为基础,介绍交通灯仿真的原理和实现过程。
一、51单片机简介51单片机是一种常见的微控制器,具有高性能、低功耗、易编程等特点。
它广泛应用于各种电子设备中,包括交通灯控制。
二、交通灯的基本原理交通灯一般由红、黄、绿三个灯组成。
红灯表示停车,黄灯表示准备行驶,绿灯表示可以通行。
交通灯的变化是按照一定的时间间隔来进行的,通常为红灯亮一段时间,然后黄灯亮一段时间,最后绿灯亮一段时间。
这种变化方式可以通过51单片机的定时器和IO口控制来实现。
三、交通灯仿真的实现步骤1. 硬件连接需要准备一块51单片机开发板,以及红、黄、绿三个LED灯。
将LED灯连接到51单片机的IO口上,通过电阻限流,确保电流合适。
2. 程序编写使用C语言编写程序,实现交通灯的仿真。
首先,需要定义红、黄、绿三个灯对应的IO口。
然后,设置定时器,按照一定的时间间隔来改变灯的状态。
例如,红灯亮5秒,黄灯亮2秒,绿灯亮8秒。
通过循环控制,可以实现交通灯的循环变化。
3. 烧录程序将编写好的程序通过烧录器下载到51单片机中。
确保烧录成功后,即可进行交通灯仿真。
4. 仿真测试将51单片机开发板连接到电源,打开电源开关。
此时,红灯应亮起,表示停车;随后黄灯亮起,表示准备行驶;最后绿灯亮起,表示可以通行。
通过不断循环,交通灯的状态会一直变化,实现仿真效果。
四、交通灯仿真的应用价值交通灯仿真是对交通灯控制的一种模拟,可以用于交通管理系统的设计和优化。
通过仿真实验,可以模拟不同情况下交通灯的变化,优化交通流量,提高交通效率。
此外,交通灯仿真还可以用于交通安全教育,让行人和驾驶员更好地理解交通灯的意义和规则。
五、总结本文以51单片机为基础,介绍了交通灯仿真的原理和实现过程。
通过硬件连接、程序编写、烧录和测试等步骤,可以实现交通灯的仿真效果。
基于QuartusⅡ的十字路口交通灯控制电路设计与仿真实现西安交通大学 黄览小十字路口车辆通行能否保持较高的效率,将决定城市交通管理水平。
本文结合十字路口交通灯控制要求,采用QuartusⅡ实现了交通灯控制电路设计,并对设计效果进行了仿真分析。
从仿真结果来看,交通灯控制电路可以在车流量过大时将道路通行时间由60s增加至90s,并在车流量过小时将通行时间由60s减少至30s,因此能够实现十字路口车辆通行量的动态控制。
:引言:伴随着私家车数量的不断增加,城市交通压力日渐增大。
而加强十字路口交通灯控制,则能起到缓解城市交通堵塞的重要作用。
目前在交通灯控制设计方面,采用传统的设计形式已经无法满足交通灯的动态控制需求。
为此,还要引入先进的设计软件,采用QuartusⅡ实现十字路口交通灯控制电路设计与仿真分析,提高十字路口的车辆通行效率。
1.QuartusⅡ概述在现代电子产品设计方面,主要采用Electronic Design Automation 技术,即EDA技术。
采用该技术,能够实现对可编程逻辑器件的大规模运用,并通过硬件描述实现系统逻辑表达,然后进行软件开发和实验,最终利用软件完成硬件设计。
伴随着科学技术的发展,新的软件工具得到了进一步开发。
现阶段,可以采用能够实现现场编程的Quar-tusⅡ工具。
QuartusⅡ由Altera公司开发,属于综合性CPLD/FPGA开发软件,能够实现原理图、VerilogHDL等各种设计形式的输入,同时能够利用内部综合器以及仿真器完成设计输入和硬件配置。
2.基于QuartusⅡ的十字路口交通灯控制电路设计2.1 设计要求设计十字路口交通灯控制电路,目的在于实现交通灯信号的控制。
而十字路口由东南方向主干道和西北方向支干道交叉形成,采用的交通灯有黄、绿、红三种,绿灯表示通行,红灯则禁止通行,黄灯为变道提示。
在交通灯控制方面,要求使主干道保持长时间绿灯,同时支干道保持长时间红灯。
基于Proteus的智能交通灯设计与仿真实现智能交通灯是一种通过传感器和智能控制系统实现交通信号灯的智能化管理,能够根据交通流量和道路状况进行智能调控,以提高交通效率和减少交通堵塞。
本文将基于Proteus软件进行智能交通灯的设计和仿真实现。
首先,我们需要明确智能交通灯的基本功能和设计要求。
智能交通灯主要需要实现以下功能:1.根据交通流量进行智能控制。
通过传感器检测道路上的交通流量,智能交通灯可以根据实时的交通情况智能地调整信号灯的时间,以提高交通效率。
2.考虑不同道路的优先级。
在交叉路口附近,智能交通灯需要根据不同道路的优先级来调整信号灯的时间,以确保交通的顺畅和安全。
3.考虑行人的过马路需求。
智能交通灯需要合理地安排行人的过马路时间,以保证行人的安全和顺畅。
接下来,我们将使用Proteus软件进行智能交通灯的设计和仿真实现。
Proteus是一款电子电路设计和仿真软件,可以用来模拟和验证电子电路的性能和功能。
首先,我们需要设计智能交通灯的硬件电路。
在Proteus中,我们可以使用元器件库中的LED灯和开关等元件来构建交通灯的电路。
同时,我们还需要添加传感器来检测交通流量和行人的需求。
在设计电路的过程中,我们需要考虑不同道路的优先级和行人的过马路需求。
根据道路的优先级,我们可以设置不同道路对应的信号灯的亮灭时间。
同时,我们还可以设置传感器来检测行人的需求,以在需要的时候提供行人过马路的时间。
完成电路设计后,我们可以使用Proteus中的仿真功能来验证电路的性能和功能。
在仿真过程中,可以模拟不同道路的交通流量和行人的过马路需求,以观察交通灯是否能够根据实时情况进行智能调控。
在仿真过程中,我们可以观察交通灯的状态变化和信号灯的亮灭时间,以评估交通灯的性能和效果。
如果发现问题,我们可以对电路进行调整和优化,以提升交通灯的智能化管理能力。
总结起来,基于Proteus的智能交通灯设计和仿真实现是一种高效且可靠的方法。
基于数字电路的交通灯控制器的设计与仿真作者:宋朝君来源:《电子技术与软件工程》2013年第20期摘要把数字电路的设计与EDA仿真软件相互结合,设计一个十字路口交通灯控制器。
该控制器能够实现对十字路口交通信号灯控制。
利用EDA这种高效的设计平台,能够方便地设计电路,并通过对电路仿真来验证电路是否达到设计要求。
与传统的设计方法相比,它具有灵活性强、低成本、高效率的优越性。
【关键词】 EDA 数字电路电路仿真数字电路主要有组合逻辑电路和时序逻辑电路两部分组成,交通灯控制器的设计既可以涉及到这两部分的基本原理的运用,又可以锻炼学生对数电综合电路的设计和分析能力,因此交通灯控制器的设计是数字电路一个很好的教学题材,在完成电路设计的同时配合电子设计自动化(EDA)教学,学生无需懂得深入的SPICE技术就可以很快地进行捕获、仿真和分析新的设计,EDA可以很好地、很方便地把刚刚学到的理论知识用计算机仿真真实的再现出来。
并且可以用虚拟仪器技术创造出真正属于自己的仪表。
极大地提高了学员的学习热情和积极性。
真正的做到了变被动学习为主动学习。
目前在各高校教学中普遍使用EDA仿真软件是Multisim10.1,是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。
下面介绍以Muitisim10.1 为平台设计一个十字路口交通控制器系统的过程.1 设计要求设计一个十字路口的交通灯控制器,要求主干道和支干道交替运行,主干道每次通行时间都设为30秒;支干道每次通行时间都设为20秒;绿灯可以通行,红灯禁止通行;每次绿灯变红灯时,要求黄灯先亮5秒钟(此时另干道的红灯不变);十字路口要有数字显示,作为等候的时间提示。
要求主干道和支干道通行时间及黄灯亮的时间均以秒为单位做减法计数。
黄灯亮时,原红灯按1Hz的频率闪烁。
2 交通控制器电路设计与仿真2.1 状态控制器的设计根据设计要求,主干道和支干道红、绿、黄灯正常工作时,只有四种可能:主干道车道绿灯亮,支干道车道红灯亮,用S0表示,绿灯亮足规定的时间间隔30秒时,控制器发出状态转换信号,转到下一工作状态;主干道车道黄灯亮,支干道车道红灯闪烁,用S1表示,黄灯亮规定的时间间隔5秒时,控制器发出状态转换信号,转到下一工作状态;主干道车道红灯亮,支干道车道绿灯亮,用S2表示,绿灯亮足规定的时间间隔20秒时,控制器发出状态转换信号,转到下一工作状态;主干道车道红灯闪烁,支干道车道黄灯亮,用S3表示,黄灯亮足规定的时间间隔5秒是,控制器发出状态转换信号,系统又转换到最初种状态。
注:0表示灯灭,1表示灯亮。
3、扩展功能能够用倒计时计数及显示模块,实现有效状态下交通灯的持续亮的时间,且用数码管显示,方便行人。
二、总体方案设计方案:用时间控制交通灯的状态转换1、原理本方案的主要思想是用时间控制交通灯状态的转换,时间变化是有规律的。
先南北直行红灯亮,而后黄灯亮3秒,再直行绿灯亮27秒,黄灯亮3秒;然后南北转弯绿灯亮,黄灯亮,南北交通灯都亮红灯;东西交通灯以同样规律变化。
(1)每次绿灯变红灯时,要求黄灯先亮3秒,黄灯亮时,绿灯灭。
(2)要求在绿灯亮(通行时间内)和红灯亮(禁止通行时间内)时均有倒计时显示。
所以基本符合现实功能,能够指挥车辆在十字路口完成左转和不同路口的直行。
2、基本功能、扩展功能分析考虑交通灯的功能,一个十字路口至少需8组交通灯:东西南北各两组,一组指挥转弯,一组指挥直行。
而设计的关键是控制交通灯的亮灭。
考虑南北、东西方向灯的亮灭规律相同,故可以考虑用四组交通灯来模拟实际的八组交通灯:东西两组灯,南北两组灯,分别用来指示转弯和直行。
可用计数器控制时间,在不同的时间显示不同的灯。
根据设计分析,可以采用如下方案实现交通灯显示:通过计数来计时,不同的时间输出不同的使能信号,使各方向的不同交通灯显示不同的颜色。
夜间车少需交通灯,则红灯、绿灯灭,黄灯闪烁使司机明白前方为十字路口,小心行驶。
倒计时显示需设计不同的倒计时计数器,显示不同方向交通灯的显示时间,通过数码管显示时间,使行人方便。
3、总体方案(1)结构图(2)主要模块交通灯设计主要分以下几个模块:时钟分频模块,交通灯亮灭控制模块,交通灯显示模块,倒计时计数模块,倒计时显示模块。
①时钟分频模块可以将10MHz的信号,用一个二进制计数器,对其进行分频,从而得到适合的频率。
选一个合适的作为时间计数器的扫描信号,另外再选一个作为数码管选通电路的触发信号。
本方案是用一个24位的计数器,倒计时计数的周期比较慢,而数码管比较快所以可以将分得的23位和10位分别给两者作为扫描信号。
交通灯控制器数字电路的设计及仿真随着城市化进程的加快,交通量越来越大,如何科学有效地管理交通成为一个重要的问题。
其中,交通灯控制器是一个涉及电子电路技术的重要设备。
基于数字电路的设计和仿真,进一步提高交通灯控制器的精度和稳定性,对于保障交通安全、提高城市交通效率至关重要。
一、设计方案1.计算时序交通灯控制器的每个阶段均有确定的时间,因此需要计算时序以确定各个信号时序是否正确,以及控制灯的开关时间是否正确。
2.设计状态机根据计算好的时序,可以通过 ISE 设计工具绘制状态图,然后再利用 Verilog HDL 语言编写出状态机。
交通灯控制器的每个阶段都有一个对应的状态,状态机会根据输入信号的状态来判断当前处于何种状态,并根据状态判断应该输出什么信号。
3.确定数字电路结构利用 ISE 设计工具,可以采用 Combinational Logic Circuit 来设计灯的开关逻辑电路,时序电路中以时钟触发器为主。
可以通过该工具绘制仿真波形来检测电路的正确性,检查信号间是否存在错误。
二、仿真过程1.绘制输入信号波形首先,需要绘制出输入信号的波形,并且在仿真时要按照相应的频率和占空比输出。
2.对仿真波形进行仿真分析仿真过程中,可以通过 Xilinx 仿真工具,对仿真波形进行分析,检测电路的正确性和稳定性。
同时,可以通过仿真过程中的输出信号波形,判断各阶段信号的状态。
3.检验仿真结果与设计方案借助仿真工具,可以非常直观地验证数字电路的设计方案是否合理、可靠。
此外,还可以通过不同的应用场景,不断优化和调整设计方案,以实现更高的效率与精度。
三、总结数字电路的设计和仿真,可以有效地提高交通灯控制器的精度和稳定性,在城市交通管理中起到关键的作用。
当前数字电路技术的不断推进,为实现更加高效安全的交通管理提供了强有力的支持。
交通灯控制电路设计与仿真一、实验目的1、了解交通灯的燃灭规律。
2、了解交通灯控制器的工作原理。
3、熟悉 VHDL 语言编程,了解实际设计中的优化方案。
二、实验原理交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。
要完成本实验,首先必须了解交通路灯的燃灭规律。
本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。
依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。
其交通的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,重复上述过程。
在实验中使用 8 个七段码管中的任意两个数码管显示时间。
东西路和南北路的通车时间均设定为 20s。
数码管的时间总是显示为 19、18、17……2、1、0、19、18……。
在显示时间小于 3 秒的时候,通车方向的黄灯闪烁。
三、实验内容本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。
系统时钟选择时钟模块的 1KHz时钟,黄灯闪烁时钟要求为 2Hz,七段码管的时间显示为 1Hz脉冲,即每 1s 中递减一次,在显示时间小于 3 秒的时候,通车方向的黄灯以 2Hz 的频率闪烁。
系统中用 S1 按键进行复位。
实验箱中用到的数字时钟模块、按键开关、数码管与 FPGA 的接口电路,以及数字时钟源、按键开关、数码管与 FPGA 的管脚连接在以前的实验中都做了详细说明,这里不在赘述。
交通灯模块原理与 LED 灯模块的电路原理一致,当有高电平输入时 LED 灯就会被点亮,反之不亮。
只是 LED 发出的光有颜色之分。
其与 FPGA 的管脚连接如下表 19-1 所示:四、实验步骤1、打开 QUARTUSII 软件,新建一个工程。
2、建完工程之后,再新建一个 VHDL File,打开 VHDL 编辑器对话框。
3、按照实验原理和自己的想法,在 VHDL 编辑窗口编写 VHDL 程序,用户可参照光盘中提供的示例程序。
4、编写完 VHDL 程序后,保存起来。
(1)-jtdkz.vhdlibrary ieee;use ieee.std_logic_1164.all;entity jtdkz isport(clk,sm,sb:in std_logic;mr,my0,mg0,br,by0,bg0:out std_logic);end entity jtdkz;architecture art of jtdkz istype state_type is(A,B,C,D);signal state:state_type;begincnt:process(clk) isvariable s:integer range 0 to 45;variable clr,en:bit;beginif(clk'event and clk='1')thenif clr='0'then s:=0;elsif en='0' then s:=s;else s:=s+1;end if;case state iswhen A=>mr<='0';my0<='0';mg0<='1';br<='1';by0<='0';bg0<='0';if(sb and sm)='1' thenif s=45 then state<= B;clr:='0';en:='0';else state<=A;clr:='1';en:='1';end if;elsif(sb and(not sm))='1'then state<=B;clr:='0';en:='0';else state<=A;clr:='1';en:='1';end if;when B=>mr<='0';my0<='1';mg0<='0';br<='1';by0<='0';bg0<='0';if s=5 then state<=C;clr:='0';en:='0';else state<=B;clr:='1';en:='1';end if;when C=>mr<='1';my0<='0';mg0<='0';br<='0';by0<='0';bg0<='1';if(sb and sm)='1' thenif s=25 then state<= D;clr:='0';en:='0';else state<=C;clr:='1';en:='1';end if;elsif sb='0' then state<=D;clr:='0';en:='0';else state<=C;clr:='1';en:='1';end if;when D=>mr<='1';my0<='0';mg0<='0';br<='0';by0<='1';bg0<='0'; if s=5 then state<=A;clr:='0';en:='0';else state<=D;clr:='1';en:='1';end if;end case;end if;end process cnt;end architecture art;(2)cskz.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cskz isport(ina:in std_logic;outa:out std_logic);end entity cskz;architecture art of cskz isbeginprocess(ina) isbeginif ina='1' then outa<='1';else outa<='0';end if;end process;end architecture art;(3)—cnt45s.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt45s isport(sb,clk,en45:in std_logic;dout45m,dout45b:out std_logic_vector(7 downto 0)); end entity cnt45s;architecture art of cnt45s issignal cnt6b:std_logic_vector(5 downto 0);beginprocess(sb,clk,en45)isbeginif sb='0'then cnt6b<=cnt6b-cnt6b-1;elsif(clk'event and clk='1')thenif en45='1'then cnt6b<=cnt6b+1;elsif en45='0' then cnt6b<=cnt6b-cnt6b-1;end if;end if;end process;process(cnt6b)isbegincase cnt6b iswhen "000001"=>dout45m<="01000100";dout45b<="01001001"; when "000010"=>dout45m<="01000011";dout45b<="01001000"; when "000011"=>dout45m<="01000010";dout45b<="01000111"; when "000100"=>dout45m<="01000001";dout45b<="01000110"; when "000101"=>dout45m<="01000000";dout45b<="01000101"; when "000110"=>dout45m<="00111001";dout45b<="01000100"; when "000111"=>dout45m<="00111000";dout45b<="01000011"; when "001000"=>dout45m<="00110111";dout45b<="01000010"; when "001001"=>dout45m<="00110110";dout45b<="01000001"; when "001010"=>dout45m<="00110101";dout45b<="01000000"; when "001011"=>dout45m<="00110100";dout45b<="01101001"; when "001100"=>dout45m<="00110011";dout45b<="00111000"; when "001101"=>dout45m<="00110010";dout45b<="00110111"; when "001110"=>dout45m<="00110001";dout45b<="00110110"; when "001111"=>dout45m<="00110000";dout45b<="00110101"; when "010000"=>dout45m<="00101001";dout45b<="00110100"; when "010001"=>dout45m<="00101000";dout45b<="00110011"; when "010010"=>dout45m<="00100111";dout45b<="00110010"; when "010011"=>dout45m<="00100110";dout45b<="00110001"; when "010100"=>dout45m<="00100101";dout45b<="00110000"; when "010101"=>dout45m<="00100100";dout45b<="00101001"; when "010110"=>dout45m<="00100011";dout45b<="00101000"; when "010111"=>dout45m<="00100010";dout45b<="00100111"; when "011000"=>dout45m<="00100001";dout45b<="00100110"; when "011001"=>dout45m<="00100000";dout45b<="00100101"; when "011010"=>dout45m<="00011001";dout45b<="00100100"; when "011011"=>dout45m<="00011000";dout45b<="00100011"; when "011100"=>dout45m<="00010111";dout45b<="00100010"; when "011101"=>dout45m<="00010110";dout45b<="00100001"; when "011110"=>dout45m<="00010101";dout45b<="00100000"; when "011111"=>dout45m<="00010100";dout45b<="00011001"; when "100000"=>dout45m<="00010011";dout45b<="00011000"; when "100001"=>dout45m<="00010010";dout45b<="00010111"; when "100010"=>dout45m<="00010001";dout45b<="00010110"; when "100011"=>dout45m<="00010000";dout45b<="00010101"; when "100100"=>dout45m<="00001001";dout45b<="00010100"; when "100101"=>dout45m<="00001000";dout45b<="00010011"; when "100110"=>dout45m<="00000111";dout45b<="00010010"; when "100111"=>dout45m<="00000110";dout45b<="00010001"; when "101000"=>dout45m<="00000101";dout45b<="00010000"; when "101001"=>dout45m<="00000100";dout45b<="00001001"; when "101010"=>dout45m<="00000011";dout45b<="00001000"; when "101011"=>dout45m<="00000010";dout45b<="00000111";when others=>dout45m<="00000000";dout45b<="00000000"; end case;end process;end architecture art;(4)cnt05s.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt05s isport(clk,en05m,en05b:in std_logic;dout5:out std_logic_vector(7 downto 0));end entity cnt05s;architecture art of cnt05s issignal cnt3b:std_logic_vector(2 downto 0);beginprocess(clk,en05m,en05b)isbeginif(clk'event and clk='1')thenif en05m='1'then cnt3b<=cnt3b+1;elsif en05b='1'then cnt3b<=cnt3b+1;elsif en05b='0'then cnt3b<=cnt3b-cnt3b-1;end if;end if;end process;process(cnt3b)isbegincase cnt3b iswhen "000"=>dout5<="00000101";when "001"=>dout5<="00000100";when "010"=>dout5<="00000011";when "011"=>dout5<="00000010";when "100"=>dout5<="00000001";when others=>dout5<="00000000";end case;end process;end architecture art;(5)—cnt25s.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt25s isport(sb,sm,clk,en25:in std_logic;dout25m,dout25b:out std_logic_vector(7 downto 0)); end entity cnt25s;architecture art of cnt25s issignal cnt5b:std_logic_vector(4 downto 0);beginprocess(sb,sm,clk,en25)isbeginif sb='0'then cnt5b<=cnt5b-cnt5b-1;elsif sm='0' then cnt5b<=cnt5b-cnt5b-1;elsif(clk'event and clk='1') thenif en25='1' then cnt5b<=cnt5b+1;elsif en25='0' then cnt5b<=cnt5b-cnt5b-1;end if;end if;end process;process(cnt5b)isbegincase cnt5b iswhen "00000"=>dout25b<="00100101";dout25m<="00110000";when "00001"=>dout25b<="00100100";dout25m<="00101001";when "00010"=>dout25b<="00100011";dout25m<="00101000";when "00011"=>dout25b<="00100010";dout25m<="00100111";when "00100"=>dout25b<="00100001";dout25m<="00100110";when "00101"=>dout25b<="00100000";dout25m<="00100101";when "00110"=>dout25b<="00011001";dout25m<="00100100";when "00111"=>dout25b<="00011000";dout25m<="00100011";when "01000"=>dout25b<="00010111";dout25m<="00100010";when "01001"=>dout25b<="00010110";dout25m<="00100001";when "01010"=>dout25b<="00010101";dout25m<="00100000";when "01011"=>dout25b<="00010100";dout25m<="00011001";when "01100"=>dout25b<="00010011";dout25m<="00011000";when "01101"=>dout25b<="00010010";dout25m<="00010111";when "01110"=>dout25b<="00010001";dout25m<="00010110";when "01111"=>dout25b<="00010000";dout25m<="00010101";when "10000"=>dout25b<="00001001";dout25m<="00010100";when "10001"=>dout25b<="00001000";dout25m<="00010011";when "10010"=>dout25b<="00000111";dout25m<="00010010";when "10011"=>dout25b<="00000110";dout25m<="00010001";when "10100"=>dout25b<="00000101";dout25m<="00010000";when "10101"=>dout25b<="00000100";dout25m<="00010001";when "10110"=>dout25b<="00000011";dout25m<="00001000";when "10111"=>dout25b<="00000010";dout25m<="00000111";when "11000"=>dout25b<="00000001";dout25m<="00000110";when others=>dout25b<="00000000";dout25m<="00000000";end case;end process;end architecture art;(6)—xskz.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xskz isport(en45,en25,en05m,en05b:in std_logic;ain45m,ain45b,ain25m,ain25b,ain05:in std_logic_vector(7 downto 0); doutm,doutb:out std_logic_vector(7 downto 0));end entity xskz;architecture art of xskz isbeginprocess(en45,en25,en05m,en05b,ain45m,ain45b,ain25m,ain25b,ain05)is beginif en45='1'then doutm<=ain45m(7 downto 0);doutb<=ain45b(7 downto 0);elsif en05m='1'then doutm<=ain05(7 downto 0);doutb<=ain05(7 downto 0); elsif en25='1'then doutm<=ain25m(7 downto 0);doutb<=ain25b(7 downto 0); elsif en05b='1'then doutm<=ain05(7 downto 0);doutb<=ain05(7 downto 0); end if;end process;end architecture art;(7)—ymq.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ymq isport(clk:in std_logic;ain41,ain42,ain43,ain44:in std_logic_vector(3 downto 0);del:out std_logic_vector(2 downto 0);dout7:out std_logic_vector(6 downto 0));end entity ymq;architecture art of ymq issignal ain4: std_logic_vector(3 downto 0);signal cnt: std_logic_vector(2 downto 0);beginprocess(clk)beginif clk'event and clk='1' thenif cnt="011" thencnt<="000";elsecnt<=cnt+1;end if;end if;end process;process(cnt,ain41,ain42,ain43,ain44)begincase cnt iswhen "000" => ain4<=ain41; del<="111";when "001" => ain4<=ain42; del<="110";when "010" => ain4<=ain43; del<="101";when "011" => ain4<=ain44; del<="100";when "100" => ain4<=ain41; del<="000";when "101" => ain4<=ain41; del<="000";when "110" => ain4<=ain41; del<="000";when "111" => ain4<=ain41; del<="000";end case;end process;process(ain4)isbegincase ain4 iswhen "0000"=>dout7<="0111111";when "0001"=>dout7<="0000110";when "0010"=>dout7<="1011011";when "0011"=>dout7<="1001111";when "0100"=>dout7<="1100110";when "0101"=>dout7<="1101101";when "0110"=>dout7<="1111101";when "0111"=>dout7<="0000111";when "1000"=>dout7<="1111111";when "1001"=>dout7<="1101111";when others=>dout7<="0000000";end case;end process;end architecture art;(8)—jtkzq.vhdlibrary ieee;use ieee.std_logic_1164.all;entity jtkzq isport(clk,sm,sb:in std_logic;mr,mg,my,by,br,bg:out std_logic;del1:out std_logic_vector(2 downto 0);dout:out std_logic_vector(6 downto 0));end entity jtkzq;architecture art of jtkzq iscomponent div_clk isport(clk : in std_logic;clk1:out std_logic);end component div_clk;component jtdkz isport(clk,sm,sb:in std_logic;mr,my0,mg0,br,by0,bg0:out std_logic); end component jtdkz;component cskz isport(ina:in std_logic;outa:out std_logic);end component cskz;component cnt45s isport(sb,clk,en45:in std_logic;dout45m,dout45b:out std_logic_vector(7 downto 0));end component cnt45s;component cnt05s isport(clk,en05m,en05b:in std_logic;dout5:out std_logic_vector(7 downto 0));end component cnt05s;component cnt25s isport(sb,sm,clk,en25:in std_logic;dout25m,dout25b:out std_logic_vector(7 downto 0));end component cnt25s;component xskz isport(en45,en25,en05m,en05b:in std_logic;ain45m,ain45b,ain25m,ain25b,ain05:in std_logic_vector(7 downto 0);doutm,doutb:out std_logic_vector(7 downto 0));end component xskz;component ymq isport(clk:in std_logic;ain41,ain42,ain43,ain44:in std_logic_vector(3 downto 0);del:out std_logic_vector(2 downto 0);dout7:out std_logic_vector(6 downto 0));end component ymq;signal clk11:std_logic;signal en1,en2,en3,en4:std_logic;signal s45m,s45b,s05,s25m,s25b:std_logic_vector(7 downto 0);signal ym1,ym2,ym3,ym4:std_logic_vector(3 downto 0);beginu1:div_clk port map(clk=>clk,clk1=>clk11);u2:jtdkz portmap(clk=>clk11,sm=>sm,sb=>sb,mr=>mr,my0=>en2,mg0=>en1,br=>br,by0=>en4,bg0=>en3) ;u3:cskz port map(ina=>en1,outa=>mg);u4:cskz port map(ina=>en2,outa=>my);u5:cskz port map(ina=>en3,outa=>bg);u6:cskz port map(ina=>en4,outa=>by);u7:cnt45s port map(clk=>clk11,sb=>sb,en45=>en1,dout45m=>s45m,dout45b=>s45b);u8:cnt05s port map(clk=>clk11,en05m=>en2,dout5=>s05,en05b=>en4);u9:cnt25s portmap(clk=>clk11,sm=>sm,sb=>sb,en25=>en3,dout25m=>s25m,dout25b=>s25b);u10:xskz portmap(en45=>en1,en05m=>en2,en25=>en3,en05b=>en4,ain45m=>s45m,ain45b=>s45b,ain25m= >s25m,ain25b=>s25b,ain05=>s05,doutm(3 downto 0)=>ym1,doutm(7 downto4)=>ym2,doutb(3 downto 0)=>ym3,doutb(7 downto 4)=>ym4);u11:ymq portmap(clk=>clk,ain41=>ym1,ain42=>ym2,ain43=>ym3,ain44=>ym4,del=>del1,dout7=>dout) ;end architecture art;(9)—div_clk.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_clk isport(clk : in std_logic;clk1:out std_logic);end div_clk;architecture behav of div_clk issignal cnt:integer range 1000 downto 0;beginprocess(clk)beginif clk'event and clk='1' thenif cnt=999 thencnt<=0;elsecnt<=cnt+1;end if;if cnt<500 thenclk1<='0';elseclk1<='1';end if;end if;end process;end behav;5 引脚分配6 实验现象当主、支道均有车时,两者交替允许通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5s的黄灯作为过度,并进行减计时显示。