APP下载

基于VerilogHDL的状态机设计探讨

2016-11-02黄金凤张红

电脑知识与技术 2016年23期
关键词:状态机

黄金凤 张红

摘要:在日常生活中,我们经常看到很多循环控制产品,如十字路口的交通灯、自动饮料收货机、电梯运行、微波炉、电饭锅等,它们的控制系统其实都可以用Verilog HDL的状态机设计方法来完成。该论文首先讲述了状态机设计方法,然后讲述了如何有效的运用3种过程描述来设计状态机。

关键词:Verilog HDL;状态机;过程描述

中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2016)23-0204-02

1 概述

有限状态机(Finite State Machine,FSM)是时序电路设计中经常采用的一种方式,尤其适合设计数字系统的控制模块,在一些需要控制高速器件的场合,用状态机进行设计是一种很好的解决问题的方案,具有速度快、结构简单、可靠性高等优点。

有限状态机非常适合用FPGA器件实现,用Verilog HDL的case语句能很好地描述基于状态机的设计,再通过EDA工具软件的综合,一般可以生成性能极优的状态机电路,从而使其在执行时间、运行速度和占用资源等方面优于用CPU实现的方案。

2 状态机设计

有限状态机可以认为是组合逻辑和寄存器逻辑的特殊组合,它一般包括组合逻辑和寄存器逻辑两部分,寄存器逻辑用于存储状态,组合逻辑用于状态译码和产生输出信号。根据输出信号产生方法的不同,状态机可分为两类:摩尔型(Moore)和米里型(Mealy)。Moore型状态机的输出只和当前状态有关,和输入无关。 Mealy型状态机的输入是由当前状态和输入共同决定。如图1和图2所示。

使用Verilog HDL语言设计状态机的步骤:

1)将实际问题抽象成状态图

分析实际问题,找出输入信号、输出信号,最好画出一个具有输入和输出的框图,要给输入、输出信号取字母名。取状态机上电的状态为初始状态,并由此状态开始,根据输入条件决定状态机的次态及输出,直至所有情况描绘素完毕,画出完整的状态图。

2)定义变量

定义描写次态逻辑、状态寄存器中需要的变量,注意在always块中使用的变量应该定义成寄存器变量,而连续赋值语句中使用的变量应该定义成连线变量。

3)状态编码

根据状态图选择状态变量,进行状态编码,虽然有多种编码方式,但可以找一种编码试一试。例如,使用自然二进制码。

4)描写次态逻辑

使用always块或是连续赋值语句描写次态逻辑。

5) 描写状态寄存器

使用always块描写状态寄存器。

6)描写输出逻辑

使用always块或是连续赋值语句描写输出逻辑(输出逻辑可以与次态逻辑在一个块中描述)。

7)仿真

根据状态机输入信号的要求,用图形或文本方式编辑输入信号波形,然后进行功能仿真,根据仿真结果的正确与否决定是否修改设计,例如在状态转换时出现不该有的尖峰脉冲,则可以更改状态编码试一试。如果仿真成功,就可以在引脚锁定后,进行编译形成文件下载到芯片中,试一试是否成功。

在用Verilog HDL描述的有限状态机时,其中重要的核心部分是描述方式,有以下3种描述方式。

1)三段式过程描述:即现态(CS)、次态(NS)、输出逻辑(OL)各用一个always过程描述。

2)二段式过程描述:分为两种,第一种:CS+NS、OL双过程描述,使用两个always过程来描述有限状态机,一个过程描述现态和次态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)。第二种,CS、NS+OL双过程描述,一个过程用来描述现态(CS);另一个过程描述次态和输出逻辑(NS+OL)。

3)一段式过程描述:将状态机的现态、次态和输出逻辑(CS+NS+OL)放在一个always过程中进行描述。

3 状态机的3种过程描述

一般而言,对于符合图1或图2两种模块图的状态机设计而言,3种过程描述方式都是适合的,只不过,一段式过程描述一般不推荐使用,因为它只适合设计简单的状态机,对于复杂的状态机,一段式不仅浪费了触发器资源,而且其代码难以修改调试。所以,通常情况下,我们都用二段式过程描述和三段式过程描述。

对于图1(图2)中的次态逻辑模块中的输入信号,如果不受时钟信号控制,二段式和三段式过程描述设计方法是一样的,但如果次态逻辑模块是时序电路,输入信号受时钟信号控制,就适合采用二段式过程描述方法。下面以单通道交通灯设计为例加以验证。

题目要求:单通道交通灯设计,南北方向,初始状态为绿灯,绿灯停留6秒变为黄灯,黄灯停留4秒变为红灯,红灯停留6秒变为绿灯,如此反复。

通过图3和图4的仿真结果图,我们可以看出,图3满足题目要求,而图4却是凌乱的。当次态逻辑模块和现态寄存器模块都受同一时钟控制时,如果采用三段式分开描述这两个模块,那么现态变量和次态变量的值其实相互之间产生了干扰。所以建议使用二段式过程描述方式以避免逻辑的混乱。

4 结语

状态机理论最初的发展在数字电路设计领域。状态机设计是HDL设计里面的精华,几乎所有的设计里面都或多或少地使用了状态机的思想。状态机,顾名思义,就是一系列状态组成的一个循环机制,这样的结构使得编程人员能够更好地使用HDL语言,同时具有特定风格的状态机也能提高程序的可读性和调试性。

参考文献:

[1]魏芳,刘志军,王立华.基于Verilog HDL的可综合有限状态机设计[J].电子工程师,2006(6).

[2]温国忠.基于Verilog HDL的高效状态机设计[J].电子工程师,2006(6).

[3]刘小平,何云斌,董怀国.基于Verilog HDL的有限状态机设计与描述[J].计算机工程与设计,2008(4).

[4]杨庆.有限状态机的设计与优化[J].湖北民族学院学报(自然科学版),2006(1).

猜你喜欢

状态机
FPGA状态机综合可靠性探究 ①
基于有限状态机的交会对接飞行任务规划方法
基于Spring StateMachine的有限状态机应用研究
三段式状态机在单片机中的实现
基于单片机运行的多线程任务状态机
基于状态机比对的状态机推断方案
双口RAM读写正确性自动测试的有限状态机控制器设计方法
FPGA设计中状态机安全性研究
基于反熔丝FPGA的有限状态机加固设计
μC/OS 的层次式状态机在人机界面中的应用