摩尔机:摩尔机是具有输出值的有限状态机,其输出仅取决于当前状态。它可以定义为 (Q, q0, ∑, O, δ, λ) 其中:
- Q 是有限状态集。
- q0 是初始状态。
- ∑是输入字母表。
- O 是输出字母表。
- δ 是映射 Q× ∑ → Q 的转移函数。
- λ 是映射 Q → O 的输出函数。
在图 1 所示的摩尔机中,输出用 / 分隔的每个输入状态表示。摩尔机的输出长度比输入长 1。
- 输入: 11
- 过渡: δ(q0,11)=> δ(q2,1)=>q2
- 输出: 000(q0 为 0,q2 为 0,q2 再次为 0)
Mealy 机: Mealy 机也是具有输出值的有限状态机,其输出取决于当前状态和当前输入符号。它可以定义为 (Q, q0, ∑, O, δ, λ’) 其中:
- Q 是有限状态集。
- q0 是初始状态。
- ∑是输入字母表。
- O 是输出字母表。
- δ 是映射 Q× ∑ → Q 的转移函数。
- ‘λ’ 是映射 Q× ∑ → O 的输出函数。
在图 1 所示的粉状机器中,输出由每个状态的每个输入符号表示,由 / 分隔。粉状机器的输出长度等于输入长度。
- 输入: 11
- 过渡: δ(q0,11)=> δ(q2,1)=>q2
- 输出: 00(q0 到 q2 的转换有输出 0,q2 到 q2 的转换也有输出 0)
从 Mealy 到 Moore 机器的转换
让我们以图2所示的粉机转换表为例。
Input=0 | Input=1 | |||
Present State | Next State | Output | Next State | Output |
q0 | q1 | 0 | q2 | 0 |
q1 | q1 | 0 | q2 | 1 |
q2 | q1 | 1 | q2 | 0 |
表格1
步骤 1.首先找出那些与它们相关联的输出超过 1 个的状态。 q1 和 q2 是输出 0 和 1 都与它们相关联的状态。
步骤 2.为这些状态创建两个状态。对于 q1,两个状态将是 q10(具有输出 0 的状态)和 q11(具有输出 1 的状态)。类似地,对于 q2,两个状态将是 q20 和 q21。
步骤 3.使用新生成的状态创建一个空的摩尔机。对于摩尔机,无论输入如何,输出都将与每个状态相关联。
Input=0 | Input=1 | ||
Present State | Next State | Next State | Output |
q0 | |||
q10 | |||
q11 | |||
q20 | |||
q21 |
表 2
步骤 4.使用表 1 所示的粉状机器转换表填充下一个状态的条目。对于输入 0 上的 q0,下一个状态是 q10(q1 与输出 0)。类似地,对于输入 1 上的 q0,下一个状态是 q20(输出为 0 的 q2)。对于输入 0 上的 q1(q10 和 q11),下一个状态是 q10。类似地,对于 q1(q10 和 q11),下一个状态是 q21。对于 q10,输出将为 0,对于 q11,输出将为 1。类似地,可以填充其他条目。
Input=0 | Input=1 | ||
Present State | Next State | Next State | Output |
q0 | q10 | q20 | 0 |
q10 | q10 | q21 | 0 |
q11 | q10 | q21 | 1 |
q20 | q11 | q20 | 0 |
q21 | q11 | q20 | 1 |
表3
这是图1所示的摩尔机转换表。
从摩尔机到粉机的转换
我们以图 1 的摩尔机为例,其转换表如表 3 所示。
步骤 1.使用摩尔机的所有状态构造一个空粉机,如表 4 所示。
Input=0 | Input=1 | |||
Present State | Next State | Output | Next State | Output |
q0 | ||||
q10 | ||||
q11 | ||||
q20 | ||||
q21 |
表 4
步骤 2:每个状态的下一个状态也可以直接从摩尔机转移表中找到:
Input=0 | Input=1 | |||
Present State | Next State | Output | Next State | Output |
q0 | q10 | q20 | ||
q10 | q10 | q21 | ||
q11 | q10 | q21 | ||
q20 | q11 | q20 | ||
q21 | q11 | q20 |
表 5
步骤3:我们可以看到摩尔机转换表中每个输入对应的输出。使用它来填充输出条目。例如; q10、q11、q20、q21对应的输出分别为0、1、0、1。
Input=0 | Input=1 | |||
Present State | Next State | Output | Next State | Output |
q0 | q10 | 0 | q20 | 0 |
q10 | q10 | 0 | q21 | 1 |
q11 | q10 | 0 | q21 | 1 |
q20 | q11 | 1 | q20 | 0 |
q21 | q11 | 1 | q20 | 0 |
表 6
步骤 4:从表 6 中我们可以看出,q10 和 q11 彼此相似(不同 Input 的 next state 和 Output 的值相同)。同样,q20 和 q21 也类似。因此,可以消除 q11 和 q21。
Input=0 | Input=1 | |||
Present State | Next State | Output | Next State | Output |
q0 | q10 | 0 | q20 | 0 |
q10 | q10 | 0 | q21 | 1 |
q20 | q11 | 1 | q20 | 0 |
表 7
这与表 1 中所示的粉机相同。因此我们将粉机转换为摩尔机,并将摩尔机转换为粉机。
注意:粉状机中的状态数不能大于摩尔机中的状态数。
示例:以下状态图描述的有限状态机,以 A 为起始状态,其中弧标为 x / y,x 代表 1 位输入,y 代表 2 位输出?
输出输入的当前位和前一位的总和。
- 每当输入序列包含 11 时,输出 01。
- 每当输入序列包含 10 时,输出 00。
- 都不是。
解决方案:让我们采用不同的输入及其输出并检查哪个选项有效:
输入: 01
输出: 00 01(对于0,输出为00,状态为A。然后,对于1,输出为01,状态为B)
输入: 11
输出: 01 10(对于1,输出为01,状态为B。那么,对于1,输出为10,状态为C)
正如我们所看到的,它给出了当前位和前一位的二进制和。对于第一位,前一位取0。