利用有限状态机的交通灯控制系统设计与仿真

2011-05-21 00:41冯竞楠
电子设计工程 2011年12期
关键词:交通灯状态机倒计时

冯竞楠

(陕西科技大学 陕西 西安 710021)

实现路口交通灯控制器系统的方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些方法在进行功能修改及调试时,都涉及硬件电路的调整,在一定程度上增加了工作的难度。随着电子技术的迅猛发展,集成电路的设计方法也在不断地更新,传统的“固定功能集成电路+连线”的手工电子设计方法已被现代的对“芯片”进行设计的电子设计自动化(EDA)的设计方法所替代[1-3],使用“语言”进行电子电路设计已成为一种趋势。笔者设计开发的交通信号灯控制器系统,采用EDA技术和可编程逻辑器件FPGA,应用VHDL有限状态机来设计控制系统的控制功能,并可根据实际情况对灯亮时间进行自由调整,整个系统通过QuartusⅡ软件平台进行了仿真,并下载到FPGA器件EP1C12Q240C8中进行调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能。该系统可以较好地缓解交通压力,并可实现对突发事件进行紧急处理,具有一定的实用性。

1 有限状态机的基本特性

有限状态机FSM(finite state machine)由有限的状态及其相互之间的转移关系构成。从有限状态机的角度看,许多数字系统中的时序电路都可以用其来描述,因此,有限状态机是一种重要的、易于建立的、比较规范、以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。但这并不意味着其只能进行有限次的处理。相反,有限状态机是闭环系统,可以用有限的状态,处理无穷的事务。

在用VHDL语言来设计实用系统的控制功能时,通常会选用有限状态机方法来实现,因为无论与VHDL的其他设计方案相比,还是与可完成相同功能的CPU相比,有限状态机有其独特的、难以超越的优越性,主要表现在以下几个方面[4]:

1)有限状态机由纯硬件来实现,工作方式是根据控制信号按照预先设定的状态进行顺序运行,在运行和控制方式上类似于控制灵活和方便的CPU,而在设计中能使用各种完整的容错技术,使其在运行速度和工作可靠性方面又都优于CPU。

2)用VHDL设计有限状态机,设计流程和方案相对固定,程序层次分明,程序结构简单清晰,特别是可以定义符号化枚举类型的状态,使VHDL综合器对状态机具有强大的优化功能。

3)状态机容易构成性能良好的同步时序模块,为了消除电路中的毛刺现象,在有限状态机设计中有多种设计方案可供选择,相比其他硬件设计方法,电路的完善性更能得到保证。

因此,在控制灵活、高速、高可靠性要求的系统设计中应用VHDL设计有限状态机将是非常实用的选择。

利用VHDL的有限状态机设计不同实用逻辑控制系统时,通常采用枚举类型来定义状态机的状态,这样可以获得可综合的、高效的VHDL描述,并且使用多进程方式来描述状态机的内部逻辑。例如:可用两个进程来描述,一个进程描述时序逻辑功能,通常称为时序进程;另一个进程描述组合逻辑功能,即组合进程,必要时还可以引入第3个进程完成其他的逻辑功能,另外还需要相应的说明部分,在说明部分用TYPE定义新的数据类型和状态名,以及在此新数据下定义的状态变量[5]。

2 基于有限状态机的交通灯控制系统设计

2.1 功能分析

作为一个十字路口交通信号灯控制系统,每条道路都需要有一组红、绿、黄灯和倒计时计数器,用于指挥车辆的有序通行。为便于区分,将十字路口交通信号灯分为主路a和支路b,应具有以下功能:

1)主路a和支路b各设置两组(双向)红灯、绿灯、黄灯,以指示通行状态;同时还设置数字式的时间显示,以倒计时方式显示每一路允许通行或禁止通行的剩余时间。

2)具有复位功能,当出现故障时,可复位回到初始设置状态。

3)当主路a或支路b出现紧急情况时,按紧急情况键可进入紧急情况状态,各方向(两路)均亮红灯,倒计时停止。当特殊情况结束时,控制其恢复到电路的原来状态继续运行。

4)主路a或支路b的通行时间可在一定范围自定义设置。

2.2 交通灯控制系统整体设计

按照功能分析的要求,自顶向下,设计交通灯控制系统的整体组成框图如图1所示,它主要由分频模块,交通灯控制与倒计时模块和动态扫描显示控制模块组成。分频电路用于产生倒计时控制电路所需的周期为1 s的时钟信号频率;倒计时控制电路控制交通信号灯(红、绿、黄)的亮灯时间和亮灯顺序。根据对VHDL的使用熟悉程度,可对各模块继续分解,可视情而定。

图1 交通灯控制系统整体组成框图Fig.1 Block diagram of traffic light control system

2.3 控制与倒计时模块的有限状态机设计2.3.1 建立状态转移图

在交通灯控制系统中,交通灯控制与倒计时模块是系统的核心部分,采用有限状态机设计实现。主路a和支路b分别控制该方向上红、绿、黄信号灯的亮灯时间和亮灯顺序,正常工作时共有St0、St1、St2、St3 4种状态,每个状态之间的具体关系如表 1 所示,其中,red1_cnt、green1_cnt、yellow1_cnt和red2_cnt、green2_cnt、yellow2_cnt分别表示主路 a和支路 b 上红绿黄灯所亮灯的时间,这里可自己定义倒计时时间。其状态转换图如图2所示。cnt为倒计时的计数值,同时用它来判断是否进入下一个状态。

表1 交通灯状态控制关系表Tab.1 Relationship of traffic light state control

图2 交通灯控制与倒计时模块的状态转移图Fig.2 State transfer of traffic light control and count down module

2.3.2 控制与倒计时模块的VHDL描述

用VHDL设计有限状态机并没有固定的格式,但需要遵循一定的编码风格。一般采用进程(process)描述,有限状态机描述方式有如下3种:三进程描述、双进程描述和单进程描述。这里采用双进程描述:一个是时钟进程,控制状态机在时钟有效沿,根据时钟有效沿和某些输入信号条件得到下一状态并进行状态迁移;另一个是组合进程,不受时钟控制,由输出相关的信号触发,该进程根据触发信号决定状态机的输出信号值[6],即通过简便地定义状态变量,将状态描述成进程,每个状态均可表达为CASE_WHEN语句结构中的一条CASE语句,状态的转移通过IF_THEN_ELSE语句实现[7],并输出信号以控制其他进程,从而实现状态的转移。

在时序进程中,状态机是随时钟脉冲信号clk以同步方式工作,同时还受异步复位信号rst的控制。在rst=1时,状态机复位,当rst=0(复位无效)而clk发生变化时,状态机的状态发生变化,转向状态机的下一状态;在组合进程中,状态机根据外部输入的控制信号 (如hold),以及来自状态机内部(如cnt)信号,或当前状态机的状态值,确定其下一状态的走向。

基于有限状态机的VHDL交通灯控制与倒计时模块的源程序的实体和结构体部分如下:

ENTITY rgy IS

PORT(clk,hold,rst:IN STD_LOGIC;

light:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

a,b:OUT INTEGER RANGE 0 TO 35 );

END rgy;

ARCHITECTURE rtl OF rgy IS

TYPE states IS (st0,st1,st2,st3);

SIGNAL state :STATES:=st0;

SIGNAL cnt :INTEGER RANGE 0 TO 35:=1;--cnt

计数值

SIGNAL cnt_enb :STD_LOGIC:='0';--cnt_enb 计 数的使能端

BEGIN PROCESS(clk,rst) --状态机的时序进程(控制状态的转换)

BEGIN

IF(rst='1')THEN state<=st0; cnt<=1; --清零部分

ELSIF(rising_edge(clk))THEN

IF(cnt_enb='1')THEN

IF(hold='0')THEN cnt<=cnt+1; --紧急情况的倒计时计数处理

ELSE cnt<=cnt;

END IF;

ELSE cnt<=1;

END IF;

CASE state IS

WHEN st0=>IF(cnt=green1_cnt)THEN state<=st1;

ELSE state<=st0;

END IF;

WHEN st1=>……

WHEN st2=>……

WHEN st3=> IF (cnt=yellow2_cnt)THEN

state<=st0;

ELSE state<=st3;

END IF;

END CASE;

END IF;

END PROCESS;

PROCESS(state,cnt,hold) --状态机的组合逻辑进程

VARIABLE counta,countb:integer range 0 to 35;

BEGIN

IF (hold='1')THEN light<="100100";--紧急情况灯信号的处理

ELSE

CASE state IS --各个状态的逻辑处理

WHEN st0=>light<="001100";--该状态下灯的信号赋值

cnt_enb<='1'; --开启计数,开始倒计时

counta:=green1_cnt;--给主路倒计时赋初值

countb:=red2_cnt;--支路倒计时赋初值

IF (cnt=green1_cnt)THEN--当 cnt计数满足该状态下的时间长度 则进入下一状态

cnt_enb<='0'; --- --停止计数,进入下一状态开始计数

END IF;

WHEN st1=>light<="010100";

……

WHEN st2=>light<="100001";

……

WHEN st3=>light<="100010";

……

END CASE;

END IF;

a<=counta-cnt;b<=countb-cnt; --给倒计时赋值

END PROCESS;

END rtl;

将编译后的程序进行仿真,得到交通灯控制与倒计时模块仿真波形图如图3所示。由仿真波形可以看出,交通灯按St0→St1→St2→St3→St0顺序进行状态循环。light按主路红、主路黄、主路绿、支路红、支路黄、支路绿的顺序排列。如在St0状态下,light的值为“001100”,当hold紧急情况信号为高电平时,主路、支路均亮红灯,并且停止倒计时。当rst复位信号为高电平时,恢复到初态。

3 顶层文件的设计及仿真

将分频模块和显示控制模块均分别用VHDL进行编程、仿真,检查其功能正确性,并包装元件入库建立元件符号。

在上述3个模块设计完成之后,按照图1所示电路结构,用原理图输入方式进行连接,构成交通灯控制系统的顶层文件,并在Quartus II平台上进行编译、仿真,引脚锁定,得到仿真波形如图 4 所示,图中信号 light、a(b)、dec7sa(dec7sb)分别用二进制、十进制、十六进制表示。

图3 交通灯控制与倒计时模块仿真波形Fig.3 Simulation results for traffic light control and count down module

图4 交通灯控制系统仿真波形Fig.4 Simulation results for traffic light control system

从仿真波形中可以看出:当复位信号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),即 5B06,同理当 b 计数到 26 时,dec7sb 的值为5B7D,所以交通灯控制系统的仿真结果完全正确。

最后将顶层文件下载到可编程逻辑器件EP1C12Q240C8中,经测试,交通灯控制系统正常工作,完全符合设计要求。

4 结束语

有限状态机及其设计技术是数字系统中实现高效率、高可靠性逻辑控制的重要途径[7]。在交通灯控制系统设计中,通过对控制功能的分析和实际状态的选择,把交通灯的控制归纳为4种工作状态,并建立状态转移关系,较为准确、直观的反映了实际需求。在用VHDL语言设计实现交通灯控制系统时,既有传统的基于逻辑单元构建的整体组成结构方式,也有利用纯软件编程实现的逻辑模块。设计方法灵活、实现简单、性能稳定的特点。

以上有限状态机的设计方法具有通用性,对于较为复杂的有限状态机可采用多个进程,分别完成任意复杂组合逻辑和时序逻辑,包括进程间状态值的传递以及状态转换值的输出,对类似含有逻辑控制功能的系统,通过自顶向下设计、分步实现,是切实可行的方法。

[1]周飚,谢晓阳.有限状态机在RTC设计中的分析与应用[J].计算机系统应用,2008(5):77-78.ZHOU Biao,XIE Xiao-yang.Analysis and application of finite state machine in RTC design[J].Computer Systems &Applications, 2008(5):77-78.

[2]胡星,唐皓.基于CPLD的道路交通自动控制系统[J].自动化技术与应用,2009(2):92-94.HU Xing, TANG Hao.Traffic light control based on CPLD[J].Techniques of Automation & Applications, 2009(2):92-94.

[3]蔡军,曹慧英.智能交通灯控制系统的设计与实现[J].重庆邮电学院学报,2004(6):129-132.CAI Jun,CAO Hui-ying.Design and implementation of intelligent traffic light control system[J].Journal of Chongqing UniversityofPostsandTelecommunications, 2004(6):129-132.

[4]李云,冯永浩,孟涛.基于VHDL有限状态机控制器的设计方法[J].微计算机信息,2010(5-1):74-75,103.LI Yun, FENG Yong-hao, MENG Tao.A controller design method based on VHDL Finite state machine[J].Microcomputer Information, 2010(5-1):74-75,103.

[5]聂茹.基于Multisim10的十字路口交通灯控制器的设计与仿真[J].现代电子技术,2010(33-11):179-181.NIE Ru.Design and simulation of traffic lights controller at the crossroads based on multisim10[J].Modern Electronics Technique, 2010(33-11):179-181.

[6]徐春娇.基于VHDL状态机设计的智能交通控制[J].电子设计工程,2007(6-2):31-35,39.XUChun-jiao.VHDLstatemachinebasedintelligenttrafficlight[J].Electronic Design Engineering, 2007(6-2):31-35,39.

[7]王振红.VHDL数字电路设计与应用实践教程[M].北京:机械工业出版社,2006.

猜你喜欢
交通灯状态机倒计时
基于有限状态机的交会对接飞行任务规划方法
基于单片机的交通灯模糊控制器研究
为什么交通灯是红黄蓝三种颜色?
一直飘红的交通灯
基于单片机的LED模拟交通灯设计
双口RAM读写正确性自动测试的有限状态机控制器设计方法
基于反熔丝FPGA的有限状态机加固设计
基于VHDL的一个简单Mealy状态机