📂 分类:FPGA设计📊 经验级别:中级⭐ 难度:★★★☆☆📝 题型:逻辑设计题
本文概述
状态机是FPGA设计中最常用的时序控制模块,写法上分一段式、二段式和三段式三种。一段式把状态寄存器、转移逻辑和输出逻辑写在一个always块里,代码少但结构不清。二段式把时序逻辑和组合逻辑分开,结构清晰但输出可能有毛刺。三段式把状态寄存器、状态转移和输出逻辑分成三个always块,结构最清晰,输出用寄存器打拍消除毛刺。实际项目中三段式用得最多,编码方式推荐独热码,综合效果最好。
核心要点速览
一段式简洁但难维护,二段式结构清晰但输出有毛刺
三段式是工业界主流,输出寄存器化无毛刺
独热码编码综合后多路选择器结构简单,速度快
状态机要设默认转移和默认输出,避免锁存
复位状态和非法状态跳转要考虑周全
考察候选人对状态机设计的掌握程度,判断是只会写简单状态机还是懂不同写法的优劣和适用场景,是否有实际大型状态机的设计经验。
面试官考察点
回答思路
结构
★★★★☆
三段式结构最清晰
编码
★★★☆☆
独热码综合效果好
稳定性
★★★★☆
默认转移防跑飞
可维护性
★★★★☆
模块划分易维护
详细要点
三种写法的区别
一段式把状态寄存器、状态转移判断和输出逻辑都写在一个always块里,代码量少,适合非常简单的状态机,但状态多了之后不好维护。二段式用一个always块做状态寄存器的时序更新,另一个always块用组合逻辑写状态转移和输出,结构比一段式清晰,但组合逻辑输出可能有毛刺。三段式用三个always块,第一个做状态寄存器,第二个做下一个状态的组合逻辑判断,第三个做输出的寄存器化。三段式结构最清晰,输出无毛刺,是工业界的标准写法。
状态编码怎么选
常见的编码方式有二进制码、格雷码和独热码。二进制码用的触发器最少,但组合逻辑复杂,适合状态少的情况。格雷码相邻状态只有一位变化,适合状态顺序跳转的场景,能降低功耗。独热码每个状态一个触发器,虽然用的触发器多,但状态译码只需要一个与门,速度快,综合后布线资源也友好。FPGA触发器资源丰富,大多数情况下推荐用独热码编码。
设计注意事项
第一,组合逻辑的case语句一定要有default分支,否则综合会生成锁存器。第二,输出如果是组合逻辑输出,一定要考虑毛刺问题,如果下游对毛刺敏感就用寄存器输出。第三,状态转移条件要明确,不要有优先级不清的情况。第四,考虑非法状态的处理,比如用default回到IDLE状态,防止状态机跑飞。第五,复位后进入哪个初始状态要设计清楚,同步复位和异步复位选一种保持风格一致。
Moore和Mealy的选择
Moore状态机的输出只跟当前状态有关,Mealy的输出还跟输入有关。Moore的输出更稳定,输入变化不会立即反映到输出,要等下一个时钟周期。Mealy的输出响应更快,输入一变输出就变,但更容易有毛刺。实际项目中用哪种要看具体需求,如果对输出时序要求不高选Moore更稳妥,如果要求输入立即有响应就用Mealy,但输出最好打一拍。
面试官追问(3-5个)
追问 1:为什么组合逻辑没有default会生成锁存器?
参考回答:组合逻辑中如果某些输入组合没有给输出赋值,综合工具会认为输出需要保持原来的值,就会推断出锁存器。锁存器是电平敏感的,不是同步设计,容易出时序问题,所以一般要避免。用完整的if-else或case加default可以避免锁存器。
追问 2:独热码和二进制码哪个更好?
参考回答:没有绝对的好坏,看场景。状态数少(比如4个以下)两者差不多。状态数多的时候,独热码用更多触发器但组合逻辑简单,速度快,在FPGA触发器充足的情况下更有优势。二进制码省触发器但译码逻辑复杂,适合ASIC或状态很多的情况。格雷码适合状态顺序跳转的低功耗场景。
追问 3:状态机跑飞了怎么办?
参考回答:状态机跑飞通常是因为没有处理非法状态。可以在case的default分支里让状态机回到初始状态或安全状态。对于高可靠性设计,还可以加奇偶校验或专用的状态机监控电路,检测到非法状态就复位。用独热码时要特别注意,非法状态更多。
追问 4:怎么判断一个状态机设计得好不好?
参考回答:可以从几个维度看:结构是否清晰、输出是否有毛刺、是否有非法状态处理、时序是否容易收敛、代码可读性和可维护性如何。三段式加独热码加默认转移是比较稳妥的设计方案。
失分表达(避免这样说)
状态机随便写,功能对就行
一段式最方便,就用一段式
default分支不写也没关系
状态编码无所谓,综合工具会自动优化
准备动作
熟练掌握一段式、二段式、三段式状态机的写法
理解Moore和Mealy状态机的区别和适用场景
了解二进制码、格雷码、独热码的特点和选择策略
独立设计过复杂状态机并通过时序收敛
核心关键词:FPGA状态机,Verilog,三段式状态机,独热码,Moore状态机,Mealy状态机,FPGA面试,时序逻辑,状态编码,锁存器

扫码关注





























