时钟同步状态机设计全解析
1. 状态表的构建与完善
在设计状态机时,最初的状态表构建是一个关键步骤。由于对机器启动时的情况描述不明确,我们通常假设系统上电后进入一个初始状态,这里称为 INIT。在 INIT 状态下,输出 Z 为 0,因为此前没有输入。
为了填充 INIT 行的下一状态条目,我们引入了 A0 和 A1 两个状态,它们用于“记住”上一个时钟周期输入 A 的值。在这两个状态下,Z 仍为 0,因为尚未满足输出为 1 的条件。
当处于 A0 状态时,如果当前输入 A 再次为 0,我们进入新状态 OK 且 Z = 1;若 A 为 1,则进入 A1 状态。同理,在 A1 状态下,若再次输入 1 则进入 OK 状态,输入 0 则进入 A0 状态。
然而,当进入 OK 状态后,若 B = 0,就会出现问题。因为当前输入 A 可能是连续相等输入的第二个,也可能不是,所以无法确定是继续处于“OK”状态还是回到 A0 或 A1 状态。为解决这个问题,我们将 OK 状态拆分为 OK0 和 OK1 两个状态,它们能“记住”上一个输入 A 的值。这样,状态表就实现了“闭合”,描述了一个有限状态机。
下面是状态表构建过程的简单示意:
|状态|A = 0, B = 0|A = 0, B = 1|A = 1, B = 0|A = 1, B = 1|Z|
|----|----|----|----|----|----|
|INIT|A0|A0|A1|A1|0|
|A0|OK0|OK0|A1|A1|0|
|A1|A0|A0|OK1|OK1|0|
|OK0|OK0|OK0|A1|OK1|1|
|O
超级会员免费看
订阅专栏 解锁全文
2628

被折叠的 条评论
为什么被折叠?



