利用有限状态机的交通灯控制系统设计与仿真
扫描二维码
随时随地手机看文章
摘要:基于硬件电路设计软件化的思想,根据路口交通灯控制功能要求,以可编程逻辑器件(FPGA)为硬件基础,以有限状态机为设计基础,通过对系统状态及其转移关系的定义,运用多进程方式描述硬件模块的逻辑关系,用VHDL语言编程实现了交通灯控制系统,经仿真,并在实验箱上进行功能测试,正确实现了预期功能。仅用一片可编程逻辑器件,即完成需要的控制功能,设计思路清晰,实现过程灵活。
关键词:有限状态机;交通灯;控制系统;设计
实现路口交通灯控制器系统的方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些方法在进行功能修改及调试时,都涉及硬件电路的调整,在一定程度上增加了工作的难度。随着电子技术的迅猛发展,集成电路的设计方法也在不断地更新,传统的“固定功能集成电路+连线”的手工电子设计方法已被现代的对“芯片”进行设计的电子设计自动化(EDA)的设计方法所替代,使用“语言”进行电子电路设计已成为一种趋势。笔者设计开发的交通信号灯控制器系统,采用EDA技术和可编程逻辑器件FPGA,应用VHDL有限状态机来设计控制系统的控制功能,并可根据实际情况对灯亮时间进行自由调整,整个系统通过OuartusⅡ软件平台进行了仿真,并下载到FPGA器件EP1C120240C8中进行调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能。该系统可以较好地缓解交通压力,并可实现对突发事件进行紧急处理,具有一定的实用性。
1 有限状态机的基本特性
有限状态机FSM(finite state machine)由有限的状态及其相互之间的转移关系构成。从有限状态机的角度看,许多数字系统中的时序电路都可以用其来描述,因此,有限状态机是一种重要的、易于建立的、比较规范、以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。但这并不意味着其只能进行有限次的处理。相反,有限状态机是闭环系统,可以用有限的状态,处理无穷的事务。
在用VHDL语言来设计实用系统的控制功能时,通常会选用有限状态机方法来实现,因为无论与VHDL的其他设计方案相比,还是与可完成相同功能的CPU相比,有限状态机有其独特的、难以超越的优越性,主要表现在以下几个方面:
1)有限状态机由纯硬件来实现,工作方式是根据控制信号按照预先设定的状态进行顺序运行,在运行和控制方式上类似于控制灵活和方便的CPU,而在设计中能使用各种完整的容错技术,使其在运行速度和工作可靠性方面又都优于CPU。
2)用VHDL设计有限状态机,设计流程和方案相对固定,程序层次分明,程序结构简单清晰,特别是可以定义符号化枚举类型的状态,使VHDL综合器对状态机具有强大的优化功能。
3)状态机容易构成性能良好的同步时序模块,为了消除电路中的毛刺现象,在有限状态机设计中有多种设计方案可供选择,相比其他硬件设计方法,电路的完善性更能得到保证。
因此,在控制灵活、高速、高可靠性要求的系统设计中应用VHDL设计有限状态机将是非常实用的选择。
利用VHDL的有限状态机设计不同实用逻辑控制系统时,通常采用枚举类型来定义状态机的状态,这样可以获得可综合的、高效的VHDL描述,并且使用多进程方式来描述状态机的内部逻辑。例如:可用两个进程来描述,一个进程描述时序逻辑功能,通常称为时序进程;另一个进程描述组合逻辑功能,即组合进程,必要时还可以引入第3个进程完成其他的逻辑功能,另外还需要相应的说明部分,在说明部分用TYPE定义新的数据类型和状态名,以及在此新数据下定义的状态变量。
2 基于有限状态机的交通灯控制系统设计
2.1 功能分析
作为一个十字路口交通信号灯控制系统,每条道路都需要有一组红、绿、黄灯和倒计时计数器,用于指挥车辆的有序通行。为便于区分,将十字路口交通信号灯分为主路a和支路b,应具有以下功能:
1)主路a和支路b各设置两组(双向)红灯、绿灯、黄灯,以指示通行状态:同时还设置数字式的时间显示,以倒计时方式显示每一路允许通行或禁止通行的剩余时间。
2)具有复位功能,当出现故障时,可复位回到初始设置状态。
3)当主路a或支路b出现紧急情况时,按紧急情况键可进入紧急情况状态,各方向(两路)均亮红灯,倒计时停止。当特殊情况结束时,控制其恢复到电路的原来状态继续运行。
4)主路a或支路b的通行时间可在一定范围自定义设置。
2.2 交通灯控制系统整体设计
按照功能分析的要求,自顶向下,设计交通灯控制系统的整体组成框图如图1所示,它主要由分频模块,交通灯控制与倒计时模块和动态扫描显示控制模块组成。分频电路用于产生倒计时控制电路所需的周期为1 s的时钟信号频率;倒计时控制电路控制交通信号灯(红、绿、黄)的亮灯时间和亮灯顺序。根据对VHDL的使用熟悉程度,可对各模块继续分解,可视情而定。
2.3 控制与倒计时模块的有限状态机设计
2.3.1 建立状态转移图
在交通灯控制系统中,交通灯控制与倒计时模块是系统的核心部分,采用有限状态机设计实现。主路a和支路b分别控制该方向上红、绿、黄信号灯的亮灯时间和亮灯顺序,正常工作时共有St0、St1、St2、St3 4种状态,每个状态之间的具体关系如表1所示,其中,red1_cn t、green1_cnt、yellow1_cnt和red2_cnt、green2_cnt、yellow2_cnt分别表示主路a和支路b上红绿黄灯所亮灯的时间,这里可自己定义倒计时时间。其状态转换图如图2所示。ent为倒计时的计数值,同时用它来判断是否进入下一个状态。
2.3.2 控制与倒计时模块的VHDL描述
用VHDL设计有限状态机并没有固定的格式,但需要遵循一定的编码风格。一般采用进程(process)描述,有限状态机描述方式有如下3种:三进程描述、双进程描述和单进程描述。这里采用双进程描述:一个是时钟进程,控制状态机在时钟有效沿,根据时钟有效沿和某些输入信号条件得到下一状态并进行状态迁移;另一个是组合进程,不受时钟控制,由输出相关的信号触发,该进程根据触发信号决定状态机的输出信号值,即通过简便地定义状态变量,将状态描述成进程,每个状态均可表达为CASE_WHEN语句结构中的一条CASE语句,状态的转移通过IF_THEN_ELSE语句实现,并输出信号以控制其他进程,从而实现状态的转移。
在时序进程中,状态机是随时钟脉冲信号clk以同步方式工作,同时还受异步复位信号rst的控制。在rst=1时,状态机复位,当rst=0(复位无效)而clk发生变化时,状态机的状态发生变化,转向状态机的下一状态;在组合进程中,状态机根据外部输入的控制信号(如hold),以及来自状态机内部(如cnt)信号,或当前状态机的状态值,确定其下一状态的走向。
基于有限状态机的VHDL交通灯控制与倒计时模块的源程序的实体和结构体部分如下:
将编译后的程序进行仿真,得到交通灯控制与倒计时模块仿真波形图如图3所示。由仿真波形可以看出,交通灯按St0→*St1→St2→St3 →St0顺序进行状态循环。light按主路红、主路黄、主路绿、支路红、支路黄、支路绿的顺序排列。如在St0状态下,light的值为“001100 ”,当hold紧急情况信号为高电平时,主路、支路均亮红灯,并且停止倒计时。当rst复位信号为高电平时,恢复到初态。
3 顶层文件的设计及仿真
将分频模块和显示控制模块均分别用VHDL进行编程、仿真,检查其功能正确性,并包装元件入库建立元件符号。在上述3个模块设计完成之后,按照图1所示电路结构,用原理图输入方式进行连接,构成交通灯控制系统的顶层文件,并在Quartus II平台上进行编译、仿真,引脚锁定,得到仿真波形如图4所示,图中信号light、a(b)、dec7sa(dec7sb)分别用二进制、十进制、十六进制表示。
从仿真波形中可以看出:当复位信号rst=1有效时,电路复位,此时light复位为“001100”状态,置a方向和b方向计数器为最大值24和29;当rst=0无效,紧急信号hold=1有效时,light为“100100”表示两路红灯均亮的状态;当rst=0,hold=0时,恢复电路原来的light为“001100”状态,a和b进行倒计时计数。7段显示译码器a方向的dec7sa和b方向的dec7sb分别显示计数器a和b的数值,如当a计数到21时,dec7sa的高位2和低位1的0gfedcba=01011011B(5B)和00000110 B(06),即5806,同理当b计数到26时,dec7sb的值为5B7D,所以交通灯控制系统的仿真结果完全正确。
最后将顶层文件下载到可编程逻辑器件EP1C12Q240C8中,经测试,交通灯控制系统正常工作,完全符合设计要求。
4 结束语
有限状态机及其设计技术是数字系统中实现高效率、高可靠性逻辑控制的重要途径。在交通灯控制系统设计中,通过对控制功能的分析和实际状态的选择,把交通灯的控制归纳为4种工作状态,并建立状态转移关系,较为准确、直观的反映了实际需求。在用VHDL语言设计实现交通灯控制系统时,既有传统的基于逻辑单元构建的整体组成结构方式,也有利用纯软件编程实现的逻辑模块。设计方法灵活、实现简单、性能稳定的特点。
以上有限状态机的设计方法具有通用性,对于较为复杂的有限状态机可采用多个进程,分别完成任意复杂组合逻辑和时序逻辑,包括进程间状态值的传递以及状态转换值的输出,对类似含有逻辑控制功能的系统,通过自顶向下设计、分步实现,是切实可行的方法。