状态机状态最小化

      对于有限状态机,如何实现用最少的状态实现所需的功能是重要的,因为这意味着可以减少表示状态的触发器的使用,从而降低FSM中组合电路的复杂性。如果FSM中的状态减少了,这意味着原始设计中存在一些等效状态。我们先看以下等效状态的定义:

     当且仅当任意可能的输入序列,无论哪个状态作为起始状态,只要两个状态Si和Sj产生的输出序列相同,则认为两个状态Si和Sj是等效的

     下面我们来看如何划分最小化过程:假设一个状态机有一个单端输入w,如果该状态机在状态Si中输入信号w=0,使得状态机进入状态Su,我们可以说Su是Si的一个0后继状态。类似的,如果该状态机在状态Si中输入信号w=1,使得状态机进入状态Sv,我们可以说Sv是Si的一个1后继状态。总之,我们将Si的后继状态称为k后继状态。当FSM只有一个输入,那么k可以为0或1,但如果有多个输入,那么k将代表所有可能的输入组合。如果Si和Sj是等效的,那么它们的k后继状态也是等效的。根据这个事实,我们可以制定一个状态最小化的过程,该过程将状态机的所有状态当作一个合集,并将肯定不等效的状态分为包含不同子集的划分。

      一个划分由一个或者多个类组成,每个类是等效状态的一个子集,但每个类中的状态肯定不和其它类中的状态相等效

     我们假设一开始所有的状态都是等效的,这构成了最初的划分P1,其中所有的状态都在同一个区域中,下一步,我们将创建P2,其中状态被划分为不同的区域,且每个区域中的状态产生相同的输出值,显然,产生不同输出的状态不可能等效。然后,我们继续测试每个区域中状态的k后继状态是否还在该区域中来创建新的划分。那些k后继状态在不同区域的状态不能在同一个区域中。因此,在每个划分中,形成新的区域。当新的划分和之前的划分相同时整个过程结束。此时,在一个区域中的所有状态都是等效的。

    例子:

现在状态 下一个状态 输出
w=0 w=1 z
A B C 1
B D F 1
C F E 0
D B G 1
E F C 0
F E D 0
G F G 0

      如上图的状态表,初始划分P1=(ABCDEFG),根据输出z=1和z=0,新的划分P2=(ABD),(CEFG),在每个区域中考虑0,1后继状态的情况,(ABD)的0后继状态为(BDB),(ABD)的1后继状态为(CFG),这些后继状态都还在P2的同一个区域中,所以(ABD)保留在P3中,(CEFG)的0后继状态为(FFEF), 仍在P2的同一个区域中,1后继状态为(ECDG),不在P2的任一区域中,这意味着(CEFG)中至少有一个状态与其它的状态不等效。特别是状态F,它的1后继状态是D,与CEG的不在同一个区域中,因此创建新的划分P3=(ABD)(CEG)(F)。重复上述过程:(ABD)的0后继状态(BDB)在P3的同一个区域中,(ABD)的1后继状态(CFG)不在P3的同一个区域中。由于F已经和CD不在同一个区域中,所以所以B和AD不等效。(CEG)的后续状态为(FFF)和(ECG),仍在P3的同一个区域中,因此可以得到P4=(AD)(B)(CEG)(F),同样的方法,可以得到P5=(AD)(B)(CEG)(F),由于P4=P5,这个划分就是最小划分,可以得知,AD等效,CEG等效,所以我们可以用4个状态表示这个状态表。


现在状态 下一个状态 输出
w=0 w=1 z
A B C 1
B A F 1
C F C 0
F C A 0








原文地址:https://www.cnblogs.com/mikewolf2002/p/10275451.html