《状态机设计》译文

状态机设计

简介

状态机的设计被广泛地用于时序控制逻辑中,它是许多数字系统的核心。状态机可以应付众多应用场合的需求,覆盖宽范围的性能和复杂度;例如微处理器与VLSI外围接口的低级别控制,常规微处理器中的总线裁决和时序产生,定制的位片微处理器,数据加密和解密,传输协议等。

通常在设计周期中,控制逻辑的细节安排在最后处理,因为系统需求的改变和特征的增强会对其造成影响。对于控制逻辑设计,可编程逻辑是一个很宽松的解决方案,因为它允许简单的修改而不必扰乱PCB板布局。其灵活性提供了在不影响市场化时间的前提下,允许设计改动的机会。大多数带寄存器的PAL器件应用都是需要使用状态机设计技术的时序控制逻辑。随着技术的发展,新的高速、高性能的器件不断出现,它们简化了状态机设计的任务。对于状态机设计,宽范围的不同功能与性能的解决方案是可行的。在本次讨论中,我们将检验状态机执行的功能,它们在多种器件中的实现,以及它们的选择。

什么是状态机?

状态机是一个以有序的方式,遍历预定的状态序列的数字设备。状态是在电路的不同部分,测量到的一组数值。一个简单状态机可以由以下几部分构成:基于PAL器件的组合逻辑,输出寄存器和状态寄存器。这样一个序列发生器中的状态由状态寄存器和/或输出寄存器中所存储的值来决定。

状态机的通用形式可以用图1所示的设备来描述。除了这一设备的输入和输出,状态机还有两个必需的组成元件:组合逻辑和存储器(寄存器)。这类似于前面所讨论的带寄存器的记数器设计,它们本质上就是简单的状态机。存储器用来存储状态机的状态,组合逻辑可以看成两个截然不同的功能模块:下一状态解码器和输出解码器(图2)。当输出解码器产生实际的输出时,下一状态解码器决定状态机的下一状态。尽管它们执行截然不同的两个功能,但是它们通常被组合成如图1所示的组合逻辑阵列。

状态机的基本操作有两部分:

1、   状态机遍历状态序列,下一状态解码器基于当前状态和输入条件来决定下一状态。

2、   状态机提供基于状态转换的输出信号序列,输出解码器基于当前状态和当前输入条件来决定输出。

用输入信号决定下一状态也被称为分支。除了分支,复杂序列发生器提供循环的能力和子程序。从一个状态到另一个状态的转换被称为控制定序,决定下一状态所需的逻辑被称为转换函数(图2)。在决定输出的进程中,输入信号的使用决定了状态机的类型。有两种被广泛知道的状态机,MealyMoore(图3)。Moore型状态机的输出只是当前状态的函数。而对于更为普遍的Mealy型状态机,输出是状态和输入信号的函数。所需的逻辑被称为输出函数。无论哪种类型,控制定序都取决于状态和输入信号。

多数实际的状态机是依赖于时钟信号来触发状态转换的同步时序电路。单个时钟被连接到所有状态和输出边沿触发器,允许在时钟上升沿处发生状态转换。异步状态机也是可能的,它利用组合逻辑的传输延迟来完成状态机的存储功能。这样的状态机容易出故障,难以设计,很少被使用,在我们的讨论中,只着重于时序状态机。

1  简单状态机的功能块框图

2  状态机,带独立的输出和下一状态解码器

3  两种标准状态机的模型

状态机应用

状态机适用于很多系统控制应用领域。下面举个应用的例子,讨论一下状态机是怎样被应用的。

在数字信号处理(DSP)的应用中,状态机不需要复杂微处理器的处理就可以提供高速高效的函数。对于简单的算法,例如快速傅立叶变换的算法,状态机可以控制相乘和相加的向量组。对于复杂的DSP操作,可编程DSP芯片更佳。另外,可编程DSP方案不太可能得到和专用硬件方案一样快的速度。

再考虑视频控制器的例子。它使用各种次序和长度的记数器来产生用于扫描的地址。不是用实际的计数器来实现它们,而是用状态机的转换来实现该序列。除了节约成本外,这种方法还有一个优点,就是释放了微处理器的资源,计数配置被设置或初始化后就不需要微处理器的管理了。

在外围控制中,简单的状态机会非常有效。例如RLLrun-length-limited)代码。编码和解码都可以被翻译成状态机,状态机可以在连续的数据流被读出时对其进行检查,并产生输出数据。工业控制和机器人提供了更广泛的领域来使用简单的控制函数。如定位机器人的手臂,简单的决策,三角函数计算这样的任务,通常不需要微处理器用堆栈和指针进行的高功耗操作,只需要一个可以存储有限多个状态并允许在各种条件下的简单分支的器件。

数据的解码和编码遇到了对大量媒体进行编码解码时相类似的问题,因为只有这儿不要求所制的图表很明显。对于这样的问题,带安全位的可编程状态机是最理想的解决方案,因为存储器是内部编程的,不会被使用这个系统的人所访问。

所执行的功能

控制器执行的所有系统设计功能都可分为归类到以下的状态机功能:

          仲裁

          事件监视

          多条件的测试

          时序延时

          控制信号的产生

稍后我们会以一个设计实例来显示在设计状态机时,这些功能是如何被使用的。

状态机理论

我们来简要分析一下所有时序逻辑系统的原理,有限状态机或简单状态机。数字系统中,输出取决于过去的输入和当前状态的那部分可被定义为状态机。其历史可用其内部状态值来概括。当有新的输入时,FSM依据该输入和当前状态,会产生一个输出,FSM因此而转入下一状态。这个新的状态同样依据该输入和当前状态。图2显示了FSM的结构。内部状态存储在一个标为“Memory”的模块中。如前所述,需要两个组合函数:转换函数,产生下一状态的值;输出函数,产生状态机输出。

状态图表示

    如图4所示,FSM的行为可以以图形的方式来说明。这被称为状态图,或状态转换图,每个椭圆代表一个状态,每个箭头代表状态间的一次转换。引起转换的输入被显示在各自转换箭头的附近。

4  状态机图示

5显示了控制定序的状态转换图。直接控制定序需要一个以状态A到状态B的无条件转移,相似的,条件控制定序显示了根据输入信号I1来决定状态C到状态D还是状态E的条件转换。

5  控制定序

对于Moore型状态机,输出的产生是用带状态的输出(圆圈)的方法表示,如图6。类似的,对于Mealy型状态机,输出的产生是用输出赋值到转换(箭头)的方法表示,如图4。有关MealyMoore输出产生的更多细节将在后面给出。

6  输出的产生

对于这种表示法,当有效的输入或输出信号同时出现在同一箭头附近时,输入输出区分不清。解决的方法通常是在输入个输出之间加一条斜线(图4和图6)。有时,采用一个附加的引脚列表来说明逻辑极性和输入输出。

如图4所示的状态转换图写出了引起转换的输入值,如果取而代之以转换,用布尔表达式定义输入组合或引起该转换的组合,该状态转换图会更加紧凑。举个例子,如图7所示,一些转换用带输入STARTX1X2的机制来显示。在状态12的转换中,输入X1X2被忽略,因而不出现在转换图中。这样节约了空间,使得其功能更显而易见。

7  带记忆功能的状态转换图

该方法不小心就会出这样的问题。如图8所示的状态转换,这里有三组输入组合,(I0, I1, I2, I3) ={1011}, {1101} {1111},使得(/I0 * /I2 +I3)(I0 * I1 + I0 * I2)都为真。因为转换到两种下一状态是不可能的,所以这里就出现了错误。因此必须保证这些输入组合不出现,或修改转换条件。在本例中,修改(I0 * I1+ I0 * I2)(I0 * I1 + I0 * I2) * / I3就可以解决这个问题。

8  带冲突分支条件的状态转换图

状态转换表格表示

    第二种状态机表示法是如表1所示的状态转换表格形式。顶部列出所有可能的输入组合和内部状态。每行给出下一状态和下一输出,因而,该表格指定了转换函数和输出函数。然而这种类型的表格不适用于定义实际的状态机,因为实际的状态机有大量的输入,而每个输入组合就占用表格的一行。举个例子,10个输入的状态机需要1024行。

1  状态转换表

当前状态

输入

下一状态

产生的输出

S0 – Sn

I0 - Im

S0 – Sn

O0 - Op

流程图

    另一种流行的表示法是流程图,状态用矩形框来表示,可选的状态转换用菱形框中的字符串来决定。该单元可能有多个入口,但通常只有一个出口。写在矩形状态框内的状态名作为第一个入口。任何Moore输出表示都写在下面的状态框中,没有寄存的状态前面加一个插入符号(^)。而状态代码赋值,如果已知的,就写在状态框的右上方。决策框是菱形或六边形框,其中包含输入信号和逻辑表达式。分别标识了01的两个出口,通向另一个决策框、状态框或Mealy输出。

    卵圆形被用作Mealy型状态机的输出。插入符号(^)后面跟的状态表示没有寄存。所有这些框都被用来适应大量的输出信号。

    这些符号的使用如图9所示。每个路径通过决策框后,从一种状态转换到另一种状态,定义输入变量的组合或组合集。一条路径不必包括所有的输入变量,因此它适应"忽略"。这些决策树会比表达法更占空间,但是在许多实际情况中,状态机控制器只测试每个状态的输入变量的很小的子集。并且,决策链通常会反映出设计者所考虑的控制器的行为。特别需要注意的是,这些测试在FSM中并不顺序运行,而是被FSM状态转换逻辑并发进行。

转换说明的这种方法,其好处在于可以避免图8中所示的问题。因为一个路径不可能被分支来定义两个状态路径,所以不会出现这种冲突。

由于可以定义多重的下一状态,因此不存在冲突危险,可以使用更多的复杂决策,使得流程图表示法更加紧凑。表达式可以被测试,如图10a所示,或多个分支可以从一个译码框引出,如图10b所示。在第二种情形中,把二进制输入组排列成矢量,对该矢量的不同值进行分支都很方便。

对于状态机的三种表示方法:状态图,状态表和流程图,因为它们都描述相同的硬件结构,所以它们是等价的,可以互换。每种表示方法都有它特别的优势。虽然状态转换图最流行,但是因为转换条件被直接记录在转换箭头上,在状态转换要依靠很多输入的情况时,它就会遇到复杂性的问题。尽管任务繁重,但是状态表允许设计者紧密控制信号逻辑。当每个状态少于十个,每个状态有多至两到三个的输入或输入表达式要测试时,所遇到的问题对于流程图就很方便了。对于较大的问题,它们就显得笨拙了。

一旦状态机被定义,它就必须在一个设备上实现。然后,软件包就被用在该设备上实现设计。它的任务是将状态机描述转换为转换函数和输出函数。软件包还解释特定设备结构的变量和限制,以提供一个统一的用户接口。

一些软件包可以接受这三种不同的状态机表示法,直接作为设计输入。然而,最普遍的设计方法是把这三种不同的状态机状态表示法转换成一种简单的文本描述。虽然语法多样化,但文本会被大多数软件包接受。

因为最流行的状态机表示法是状态机转换表示法。在后面的讨论中,我们都使用它。转换表格和流程图表示法非常相似。

9  流程图表示法

10  使用流程图

状态机类型Mealy & Moore

为了使状态机的表示法清晰,我们现在返回到图1所示的通用序列发生器模型,图11对其进行了标识,以显示当前状态(PS)、下一个状态(NS)和输出(OBOA)。下面我们来举例说明Mealy型状态机和Moore型状态机是如何被实现的,基于多数序列发生器设备为下一状态和输出解码函数提供单个组合逻辑阵列。序列发生器有四种使用方法,其中两种实现Moore型状态机,两种实现Mealy型状态机。首先,让我们来看看Mealy型状态机的构成。

12给出了Mealy型状态机的标准形式。图11所标识的信号,表明寄存器和输出已被使用。寄存器输出(PS)被反馈到阵列中,并且定义当前状态。组合逻辑实现转换函数,它产生下一状态触发器的输入(NS);和输出函数,它可以产生状态机输出(OB)。这是异步的状态机形式。

11  FSM的通用模型

12  异步Mealy型状态机的形式

13显示了另一种Mealy型状态机的形式。其输出通过一个附加的输出寄存器(OA),因此不立刻回应输入变化。这是同步的Mealy型状态机形式。

13  同步Mealy型状态机的形式

14给出了标准的Moore型状态机的形式。其输出OB只依靠当前的状态PS。这是异步Moore型状态机的形式。同步Moore型状态机的形式,如图15所示。在这种情况下,组合逻辑可以假定是单一功能,则输出OB可以直接和当前状态PS一起产生。虽然这些形式都已经分别介绍过了,但是假设设备中存在所需路径,单个序列发生器也可以体现出组合它们的机制。

在同步Moore型状态机的形式中,输出发生的状态是它们在状态转换图中被命名时的状态。类似的,在异步Moore型状态机和Mealy型状态机的形式中,输出发生在它们被命名的状态,但是由于输出解码器的传输延时的关系,稍有延迟。这是因为它们是该状态的组合函数(Mealy型状态机中,是该状态和输入的组合函数)。

14  异步Moore型状态机的形式OA

15  异步Moore型状态机的形式

然而,同步Mealy型状态机是不同的。它的输出不发生在它被命名的那个状态,因为它要首先进入另外一个寄存器。因此它出现在下一个状态中,也就是延迟了一个时钟周期。图16在状态转换图中显示了状态转换的所有可能性。

16  标识不同输出类型的状态图

对于表示方法,Moore型状态机输出时常被放置在状态椭圆中,而Mealy型状态机的输出被放置在激活它们的路径或箭头附件。

Mealy型状态机和Moore型状态机的关系,同步和异步的状态输出都显示在图17中。

设备选择的考虑

对于为设计选择正确的状态机设备,有三个主要标准:

          输入/输出的数目

-        输入/输出灵活性

-        输出寄存器的数目

          速度

          智能/功能性

-        乘积项的数目

-        触发器的类型

-        状态寄存器的数目

I/O的数目

输入、输出和I/O引脚的数目决定了状态机可以取样或产生的信号。

时序和速度

序列发生器设计的时序考虑类似于那些带寄存器的逻辑设计。一个系统的时钟周期形成评估控制函数行为的基本核心。大致上,所有的输入和输出函数的指定都与正沿相关。带寄存器的输出在经过时间间隔tCO(时钟到输出的传输延时)后有效。异步的输出需要一个附加的传输延迟(tPD)才有效。

基于电路操作的可靠性考虑,所有触发器输入必须在下一个有效时钟边沿到来之前稳定一段时间,该时间为触发器的最小建立时间(tS)。如果其中的一个输入在临界之后改变,那么将错误地存储下一状态或同步输出,电路可能会发生故障。为了避免这种情况,时钟周期(tP)必须远大于触发器的建立时间和时钟到输出的传输时间的总和(tS+tCO)。这就决定了电路的最小周期以及由此而得出的最大周期频率。如果违背以上规定,系统可能出现亚稳态和错误操作。

时序关系如图18所示。每个周期内都有两个区域:稳定区域,当所有的信号都稳定时;转换区域,当机器正处于状态转换,而且信号不稳定时。在有效时钟沿到来时,触发器基于其输入来装载新的状态值。

17  状态机时序框图

18  最大操作频率的时序框图

在这之后,当前状态和输出触发器的输出将开始改变到它们的新值。稍等片刻,最慢的触发器输出将稳定在其新值上。此时忽略输入的变化,状态寄存器的变化会引起结合逻辑开始为触发器的异步输入和输出产生新的值。如果逻辑的传输延迟是tPD,那么稳定时间的开始时间等于tCO的最大值和tPD的和。

异步输入

异步状态机的输入时序通常超出设计者的控制或者是随机的,就像是传感器或键盘输入,或者它们有可能来自另一个同步系统,该系统有一个不相关的时钟。无论哪种情况,都不能对输入到达或不到达的时间做出假设。这个事实引起可靠性问题,该问题不能被完全消除,只能减小到合理的水平。

19显示了两种可能的转换:从状态S1(代码00)要么返回到它本身,要么转换到S2状态。究竟执行哪种转换取决于与时钟异步的输入变量A。状态位B1B2的转换函数逻辑包括这项输入。变量A可能出现在时钟周期的任何部分。为了保证触发器的正确运行,B1B2的逻辑必须正确地在时钟到来前保持稳定。输入应该在时钟到来前稳定tS(建立时间),在时钟到来之后稳定tH(保持时间)。如果输入在这个范围内改变,那么两个触发器可能不改变,从而导致序列跳到状态01或者10,这两者都是未作定义的转换。这个类型的错误行为被称作是输入竞争。

19  异步输入级联竞争

该问题的解决办法是改变状态赋值,以便只有一个状态变量依赖于异步输入.。因此,11代码一定是被转换成0110。现在,由于唯一的非同步触发器输入,要么输入及时地发生引起转换,要么就不发生,也任何转换。对于迟来的输入,如果输入维持足够长的时间,机器将晚回应一个周期,以提供充足的输入时间。

但是仍然有输入变化违反内部触发器的建立时间,驱动其进入亚稳态的可能性。这种情况可能引起系统故障,它只能被最小化,但不能消除。当输出依赖于一个异步输入时,也会出现相同的问题。

如果不对状态机设计进行严格的约束,几乎没办法处理异步输入。唯一解决输入任意性的方法就是将它们转换成同步输入,如图20所示,分配触发器给每个输入。这些同步触发器被序列发生器时钟同步,还可能是序列发生器自己的内部触发器。这种方法并不简单,但是能显著地减少亚稳态情况的发生机会。

功能性

不同设备之间的功能性难以比较,因为不同设备的结构是有联系的。一个设备中寄存器的数目决定了可能的状态组合的数目。然而,不是所有可能的状态组合都是必然有用的,因为可能有其他设备约束。一个设备中寄存器的数目给我们提供了有效状态的概念。其他功能性的测量包括乘积项的数目和触发器的类型。在这些测量中,一个设备可能比另一个强,但总的来说,其他缺点导致其不是很有用。选择最好的设备需要技术和经验。

为了给出设备功能性的好方案,我们要考虑每一个适用于设计者的结构选项,评估其功能性。

20  输入同步寄存器

PAL器件作为序列发生器

相当多的状态机设计使用了PAL设备。软件的早期版本需要用户手写出“和-乘积”布尔方程,以使用PAL设备。第二代软件允许用户用状态机语法来定义设计,自动处理转换到“和-乘积”逻辑。PAL器件通过用户可编程AND阵列和固定OR阵列来实现“和-乘积”形式的输出和转换函数。

PAL器件可以实现最快速的序列发生器,很适合于在时序情况下,由专门的控制器影响的,被少数输入和输出信号所特征化的简单控制应用。典型PAL设备的触发器数目从812,它可以提供一百个以上的状态值。因为一些触发器被用于输出,乘积项的数目受限制,有用的状态数目急剧减少。通常至多35个状态被利用。

PAL器件触发器

基于PAL器件的序列发生器实现小的状态机设计,它们有较大数目的输出转换。因为输出寄存器在多数状态转换时都变化,一旦状态寄存器被仔细选定,输出寄存器可以和状态寄存器同时使用。多数PAL设备被用于小型状态机,基于输出和状态函数,有效地共享相同的寄存器。在共享比较困难时,基于序列发生器的高性能的PAL设备提供专门的状态寄存器。

当状态机从一个状态到另一个状态时,每个输出既要进行转换(改变逻辑电平)或保持(停留在相同的逻辑电平)。小性状态机设计需要较少的转换和较多的保持。

多数PAL器件提供D类型输出寄存器。D触发器只为从低电平到高电平的有效转换和高电平的保持,使用乘积项。JKSRT触发器为低电平到高电平和高电平到低电平使用乘积项,但是去除保持项。而D触发器更适用于小型状态机设计。有些PAL设备提供JKSRT触发器的配置能力,这对于大型状态机设计非常有效,因为它们不需要保持项。

基于PAL器件的序列发生器的多数例子可以在基于功能的系统时间、特殊计数器、中断控制器和某些类型的视频显示硬件中被发现。

PAL设备运用了多种技术,可进行多种应用,提供了速度-功耗的选项。

 
原文:State Machine Design,
Publication# 90005 Rev. A Amendment /0
Issue Date: June 1993
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值