摩尔机和米利机

有限自动机可能有与每次转换相对应的输出。有两种类型的有限状态机可生成输出 −

  • Mealy 米利机
  • Moore 摩尔机

Mealy 米利机

Mealy 机是一种 FSM,其输出取决于当前状态以及当前输入。

它可以用 6 元组 (Q, ∑, O, δ, X, q0) 来描述,其中 −

  • Q 是一组有限的状态。

  • 是一组有限的符号,称为输入字母表。

  • O 是一组有限的符号,称为输出字母表。

  • δ 是输入转换函数,其中 δ: Q × ∑ → Q

  • X 是输出转换函数,其中 X: Q × ∑ → O

  • q0 是处理任何输入的初始状态 (q0 ∈ Q)。

Mealy 机的状态表如下所示 −

当前状态 下一个状态
输入 = 0 输入 = 1
状态 输出 状态 输出
→ a b x1 c x1
b b x2 d x3
c d x3 c x1
d d x3 d x2

上述 Mealy 机的状态图为 −

Mealy 机的状态图

Moore 机

Moore 机是一种 FSM,其输出仅取决于当前状态。

Moore 机可以用 6 元组 (Q, ∑, O, δ, X, q0) 来描述,其中 −

  • Q 是一组有限的状态。

  • 是一组有限的符号,称为输入字母表。

  • O 是一组有限的符号,称为输出字母表。

  • δ 是输入转换函数,其中 δ: Q × ∑ → Q

  • X 是输出转换函数,其中 X: Q → O

  • q0 是处理任何输入的初始状态 (q0 ∈ Q)。

摩尔机的状态表如下所示 −

当前状态 下一个状态 输出
输入 = 0 输入 = 1
→ a b c x2
b b d x1
c c d x2
d d d x3

上述 Moore 机的状态图为 −

Moore 机状态图

Mealy 机与 Moore 机

下表重点介绍了 Mealy 机与 Moore 机的区别。

Mealy 机 Moore 机
输出取决于当前状态和当前输入 输出仅取决于当前状态。
通常,它的状态比 Moore 机少。 通常,它具有比 Mealy 机具有更多的状态。
当对当前状态进行输入逻辑时,输出函数的值是转换和变化的函数。 当状态发生变化时,输出函数的值是当前状态和时钟边缘变化的函数。
Mealy 机对输入的反应更快。它们通常在同一个时钟周期内做出反应。 在 Moore 机中,需要更多逻辑来解码输出,从而导致更多的电路延迟。它们通常会在一个时钟周期后做出反应。

Moore 机到 Mealy 机

算法 4

输入 − Moore 机

输出 − Mealy 机

步骤 1 − 取一个空白的 Mealy 机转换表格式。

步骤 2 − 将所有 Moore 机转换状态复制到此表格式中。

步骤 3 − 检查 Moore 机状态表中的当前状态及其对应的输出;如果对于状态 Qi 输出为 m,则将其复制到 Mealy 机状态表的输出列中,无论 Qi 出现在下一个状态中的位置如何。

示例

让我们考虑以下 Moore 机 −

当前状态 下一个状态 输出
a = 0 a = 1
→ a d b 1
b a d 0
c c c 0
d b a 1

现在我们应用算法 4 将其转换为 Mealy 机。

步骤 1 和 2

当前状态 下一个状态
a = 0 a = 1
状态 输出 状态 输出
→ a d b
b a
c c c
d b a

步骤 3

当前状态 下一个状态
a = 0 a = 1
状态 输出 状态 输出
=> a d 1 b 0
b a 1 d 1
c c 0 c 0
d b 0 a 1

Mealy 机到 Moore 机

算法 5

输入 − Mealy 机

输出 − Moore 机

步骤 1 − 计算 Mealy 机状态表中每个状态 (Qi) 的不同输出数量。

步骤 2 − 如果 Qi 的所有输出都相同,则复制状态 Qi。如果它有 n 个不同的输出,则将 Qi 拆分为 n 个状态,即 Qin,其中 n = 0, 1, 2.......

步骤 3 −如果初始状态的输出为 1,则在开头插入一个新的初始状态,该状态输出为 0。

示例

让我们考虑以下 Mealy 机 −

当前状态 下一个状态
a = 0 a = 1
下一个状态 输出 下一个状态 输出
→ a d 0 b 1
b a 1 d 0
c c 1 c 0
d b 0 a 1

这里,状态"a"和"d"分别只给出 1 和 0 的输出,因此我们保留状态"a"和"d"。但状态"b"和"c"产生不同的输出(1 和 0)。因此,我们将 b 分为 b0、b1,将 c 分为 c0、c1

当前状态 下一个状态 输出
a = 0 a = 1
→ a d b1 1
b0 a d 0
b1 a d 1
c0 c1 C0 0
c1 c1 C0 1
d b0 a 0