数字IC入门
除了三段式结构本身,笔试里状态机题目最容易丢分的地方其实是状态编码和输出逻辑的处理。我当年面试就被问过为什么用独热码,以及什么时候该用格雷码。
先说编码选择。如果状态数少(比如小于4),用二进制或格雷码都行,但题目如果提到“低功耗”或“状态顺序切换”,那格雷码就是加分项,因为相邻状态跳转只有一位变化,减少翻转功耗。独热码在状态多(比如5个以上)且需要高速或简单译码时用,但笔试里通常状态不多,你如果用独热码,一定要说明理由:比如减少组合逻辑延迟、避免毛刺。
输出逻辑这块,很多同学栽在毛刺上。如果输出是组合逻辑,当状态变化时,由于路径延迟不同,输出可能会有毛刺。笔试里如果要求“稳定输出”,或者输出直接作为控制信号(比如使能),最好用寄存器输出,也就是把输出逻辑也放在 always@(posedge clk) 里。虽然这会延迟一个周期,但避免了毛刺。
还有一个坑是锁存器推断。如果你在组合逻辑的 always 块里,没写全 case 分支,或者 if 缺少 else,综合就会生成锁存器。笔试里一定要检查:组合逻辑 always 块用 case 语句时,加上 default 分支;if 语句配齐 else。
最后,优化点可以提一句“状态最小化”。比如序列检测题,是不是所有状态都需要?能不能合并?画状态转移图时先简化,再编码,这能体现你的设计思维。
