设计有限状态机:从概念到实现
迄今我们聚焦组合逻辑,其输出仅依赖当前输入。许多实际应用中,电路必须保留过去输入记忆并据此调整输出。此类电路称为时序电路。
本文演示设计时序电路的端到端流程,以实用示例说明:数字问答游戏,每次用户按按钮需产生单时钟周期高脉冲。
步骤 1 — 定义需求
用自然语言阐述期望行为:
“我们需要一个辅助电路,当按钮被按下时发射单个时钟周期的高脉冲,并忽略后续按下,直到按钮释放再按下。”
步骤 2 — 绘制状态图
状态图可视化机器操作。每个圆圈代表状态,箭头指示每时钟周期由输入触发的跃迁。下图为 Moore 有限状态机,输出仅依赖当前状态。

状态描述:
- 待机 — 初始等待状态。
- 激活脉冲 — 产生高输出。
- 等待循环 — 保持低输出直到按钮释放。
箭头标注触发跃迁的输入值。例如,从待机态输入 ‘1’ 进入激活脉冲;‘0’ 保持待机。
步骤 3 — 状态二进制编码
为每状态分配二进制码,初始态从 0 开始。下面编码用两位,足够三状态。

步骤 4 — 构建状态表
状态表列出所有当前状态与输入组合,及下一状态与输出。列对应当前状态位、输入位、下一状态位、输出位。本例表如下。

要点:
- 每行覆盖状态与输入所有二进制组合。
- 对应不存在状态的行标记不在乎 (X)。
- 输出列反映 Moore 输出,与输入无关。
步骤 5a — 准备 D 触发器实现
实现状态机通常用触发器。对 D 触发器,达到下一状态所需输入即下一状态值本身。在状态表扩展每 D 输入列。

步骤 5b — 准备 JK 触发器实现
若选 JK 触发器,每触发器加两列 (J 和 K)。其值从 JK 激励表导出:

示例映射:从 0 到 1 跃迁,置 J=1、K=X(不在乎)。

步骤 6 — 通过卡诺图导出布尔函数
用卡诺图化简各触发器输入及输出表达式。下图演示 D 与 JK 实现过程。
D 触发器输入:

JK 触发器输入:


输出函数:


步骤 7 — 构建物理电路
得布尔方程后,用触发器与逻辑门组装电路。记得将时钟接所有触发器。完成的 D 触发器设计如下。

JK 触发器版本如下:

组装后,电路将为每次按钮按下产生干净单时钟周期高脉冲,无论按钮按住多久。
关键要点
- 时序逻辑保留过去输入记忆,实现动态行为。
- 有限状态机为建模此类行为提供严谨框架。
- 触发器在硬件中实现 FSM,将状态跃迁转化为物理输出。
- 系统化设计流程——需求、图、编码、表、逻辑综合、组装——确保可靠电路。
工业技术