看过上几篇文章的那个例子,其实在学术上被分类Moore(摩尔,)形FSM。还有一种就叫做Mealy形FSM。如果对计算机理论感兴趣的话两类FSM的数学定义请参照Wiki这里就不拿出来了~

大家可以看到,上一个路灯的例子中,输出仅仅依赖于当前状态。这也就是Moore机的特征而所谓Mealy形FSM就是输出不仅仅依赖于当前状态,还依赖于当前的输入。(为此Mealy机也被用作密码机)具体什么意思呢,看例子。

 需求:

  我们想设计一个特征字符识别的机器。要求是识别特征字符串 1101 。也就是说如果在一大串字符中连续从左至右出现1101的话就输出1,如果没有的话就输出0.为了方便,理想的规定,每个时钟周期,该机器检测1个bit。

  实现:

  我们用Moore和Mealy两种方式来实现。首先我们来看我们熟悉的Moore吧。


1.这里 “状态” 大家会感觉到有些抽象,是的。不过其实状态的定义和上一个例子是一样的。

我们的1101就相当于上个例子里的交通灯感应器。输入1进入某个状态,输入0进入下一个状态。。。等等。输出当然就是0或1咯。这里直接给出状态图:

2.8 FSM之Moore和Mealy part1_字符串。看着有点懵?别怕,首先要试着用已经学过的知识去解释它。如果实在不行的话看我的分析。(提醒:看分析的人能学到这部分的知识,但是不看分析经过自己努力的人会培养自己举一反三的能力和附带的知识,而不看分析一下就明白的人就是智商比较高的。大家属于哪一类~)


=================================(天才分割线)=======================================


分析:这里我们用了5个状态。而1101这个字符串就像上面说的,和路灯感应器一样,把FSM放入下一个状态。首先我们Reset也就是输出为0(圆圈中的数字代表输出)。之后我们可能碰到0或1两种字符。如果当前检测到1,则FSM从S0进入S1状态。如果是0的话返回S0.为神马返回S0而不是定义一个新的S2状态?因为Reset状态根本就不可能检测到完整的1101字符串也就是下一个无论输入什么字符都不会进入检测1101的状态(例如 当前是0,下一个字符可能是0或1,也就是00或01,而这两种组合都不是1101的开头字符,注意需求中的字符顺序!)。同理,继续分析下去,当机器幸运的运行到S4状态的时候输出为1也就是机器找到了一个1101字符串,而机器继续运行下去我们下一个字符当然是1或0,若是0的话自然返回Reset的S0状态,周而复始。那么当输入为1的时候为什么跳入S2?-----和刚刚说过的一样,进入S4状态之前的输入必须为1,而进入S4状态之后的输入如果为1的话,不就正好是1101的前两个bit么(11)。而如果进入S2状态之后,下一个输入为0的话我们就有了连续的前三位110,而输入一次1的话我们有111,两次1的话我们有1111,n次就有n个1,但是我们总取后两个1(换句话说总取第n-1和第n位的1),我们总处在检测到1101的前两位的状态也就是一直处于S2状态。 剩下的自己做练习吧~。


2.下一个part我们来设计这个Moore机