数字电子技术

状态编码的艺术

10 分钟

状态要变成电路,先得变成编码

第一章画状态机:圆圈加箭头。可真要搭电路,每个状态得对应一组 0 和 1。4 个状态至少需要 2 个触发器,怎么分配这 4 组编码,学问不小——这就叫状态编码。

两种主流打法

顺序码:状态 0、1、2、3 编成 00、01、10、11,省触发器,但从 01 跳到 10 时两位同时翻转,中间可能闪过一个不存在的瞬间状态。独热码:4 个状态用 4 个触发器,每个状态只亮一位(0001、0010、0100、1000),多费触发器,但每次转移只有两位变化,判断「现在处于哪个状态」只需看一根线,组合逻辑又少又不容易出毛刺。FPGA 里触发器便宜,独热码几乎成了默认选择。

设计状态机的标准四步

画状态图 → 定状态编码 → 对每个触发器写出「下一状态」逻辑式 → 写出输出逻辑式。走完四步,图纸就能直接翻译成门电路或 Verilog。工程上还有一条铁律:所有触发器用同一个时钟(同步设计),异步电路只留给真正的高手。

常见误区:触发器越少越好是旧观念。省一个触发器换来一堆复杂组合逻辑和毛刺风险,常常得不偿失。

练一练:给交通灯的红、绿、黄三个状态分别写出顺序码和独热码,各需要几个触发器?

小纸条

说说独热码为什么受 FPGA 设计欢迎。

登录 后可看答案