📅  最后修改于: 2023-12-03 15:17:43.186000             🧑  作者: Mango
在数字电路设计中,Moore 和 Mealy 是常见的状态机模型。在设计过程中,有时需要转换一个模型到另一个模型,这种转换被称为 Moore 到 Mealy 或 Mealy 到 Moore 的转换。
Moore 模型是一种状态机,其输出仅与当前状态有关,与输入无关。通常,该模型由一个状态转移图和一个输出表组成。
以一个简单的计数器为例,我们可以创建一个 Moore 模型,其状态转移图如下:
该状态机有三个状态:0、1 和 2。每个状态之间的转移都有一个标签,表示输入条件。此外,每个状态都有一个输出,表示输出状态。输出值由输出表决定,如下所示:
| 状态 | 输出 | | --- | --- | | 0 | 000 | | 1 | 001 | | 2 | 010 |
Mealy 模型是一种状态机,其输出与当前状态和输入相关。与 Moore 模型不同,Mealy 模型没有单独的输出表。相反,输出值嵌入到状态转移图中。
下面是一个 Mealy 计数器状态转移图的例子:
该状态机的状态与 Moore 模型相同:0、1 和 2。每个状态之间也有标记,表示输入条件。输出值嵌入到状态转移边缘上,如下所示:
| 预测 | 输入 | 输出 | | ---------- | ------ | ------ | | 0 -> 1 | 0 | 000 | | 1 -> 2 | 0 | 001 | | 2 -> 0 | 0 | 010 | | 0 -> 0' | 1 | 011 | | 1 -> 1' | 1 | 100 | | 2 -> 2' | 1 | 101 |
要将 Moore 模型转换为 Mealy 模型,必须将输出值嵌入到状态转移边缘上。此外,我们需要考虑输出延迟。在 Moore 模型中,输出值是在进入新状态后立即计算的,而在 Mealy 模型中,输出值是在状态转移之后计算的。
对于计数器示例,在 Mealy 模型中,我们需要在 0 -> 1、1 -> 2 和 2 -> 0 的状态转移边缘上插入输出值。此外,我们必须将输入 1 的每个输出都添加到下一个状态的状态转移边缘上。由于 Moore 模型中输出值没有延迟,因此不需要处理。
为了实现该转换,我们需要创建两个中间状态,标记为 0' 和 1'。这些状态用于延迟输出的计算,直到进入下一个状态之后。最终的 Mealy 模型如下所示:
输出表和状态转移边缘上的输出被删除了。输出值添加到状态转移边缘上,而输入值则在转移后进行计算。
Moore 到 Mealy 的转换涉及将输出值从输出表移到状态转移边缘上,并添加必要的延迟以避免计算输出时的竞争条件。在输入和输出之间的依赖关系发生变化,因此需要仔细考虑设计来确保满足要求。