FPGA状态机设计有哪些常见写法和注意事项?FPGA面试题

浏览量:7
时间: 2026-08-10 11:38:07

📂 分类:FPGA设计📊 经验级别:中级⭐ 难度:★★★☆☆📝 题型:逻辑设计题

本文概述

状态机是FPGA设计中最常用的时序控制模块,写法上分一段式、二段式和三段式三种。一段式把状态寄存器、转移逻辑和输出逻辑写在一个always块里,代码少但结构不清。二段式把时序逻辑和组合逻辑分开,结构清晰但输出可能有毛刺。三段式把状态寄存器、状态转移和输出逻辑分成三个always块,结构最清晰,输出用寄存器打拍消除毛刺。实际项目中三段式用得最多,编码方式推荐独热码,综合效果最好。

核心要点速览

  • 一段式简洁但难维护,二段式结构清晰但输出有毛刺

  • 三段式是工业界主流,输出寄存器化无毛刺

  • 独热码编码综合后多路选择器结构简单,速度快

  • 状态机要设默认转移和默认输出,避免锁存

  • 复位状态和非法状态跳转要考虑周全

下载 (7).jpg
FPGA工程师编写Verilog状态机代码

面试官考察点

考察候选人对状态机设计的掌握程度,判断是只会写简单状态机还是懂不同写法的优劣和适用场景,是否有实际大型状态机的设计经验。

回答思路

结构

★★★★☆

三段式结构最清晰

编码

★★★☆☆

独热码综合效果好

稳定性

★★★★☆

默认转移防跑飞

可维护性

★★★★☆

模块划分易维护

详细要点

三种写法的区别

一段式把状态寄存器、状态转移判断和输出逻辑都写在一个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分支不写也没关系

  • 状态编码无所谓,综合工具会自动优化

准备动作

  1. 熟练掌握一段式、二段式、三段式状态机的写法

  2. 理解Moore和Mealy状态机的区别和适用场景

  3. 了解二进制码、格雷码、独热码的特点和选择策略

  4. 独立设计过复杂状态机并通过时序收敛

核心关键词:FPGA状态机,Verilog,三段式状态机,独热码,Moore状态机,Mealy状态机,FPGA面试,时序逻辑,状态编码,锁存器


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
开班信息