INTERVIEW PLAYBOOK / 08 · FPGA设计
面试官让你做一个串行协议识别器或流水灯控制器,往往会追问:为什么选三段式状态机,如何避免输出毛刺?
30秒回答
FSM一般包括状态寄存器、下一状态转移逻辑和输出逻辑。一段式、两段式、三段式只是过程块组织方式,不天然决定电路性能。Moore输出主要由当前状态决定;Mealy输出还依赖当前输入,可能更及时但对组合毛刺更敏感。核心是状态覆盖完整、复位明确、约束和仿真正确。

面试官继续追问:从原理到工程验证
01一段式、两段式、三段式分别怎么理解?
一段式将状态更新、转移和输出放在一个时序过程;两段式通常把状态寄存与组合逻辑分开;三段式则进一步将状态寄存、下一状态转移和输出逻辑分开,输出可按需要寄存。不同团队命名及编码模板可能有所差异,不需要机械强调“三段式永远最好”。
02状态转移逻辑如何避免隐藏Bug?
组合过程要给next_state和输出信号提供完整默认赋值,并覆盖所有分支;时序过程用非阻塞赋值描述寄存器更新。定义安全复位状态并考虑非法状态恢复;状态编码由设计需要和综合工具决定,不是one-hot一定优于二进制。
03为什么Mealy型输出更可能出现毛刺?
当输出组合逻辑直接依赖输入时,输入变化和不同组合路径延迟可能在周期中形成短脉冲。若外部器件不允许毛刺,可评估输出寄存、握手时序或采用Moore式输出,同时注意寄存后延迟一拍可能带来的功能差异。
04面试里如何验证这个FSM?
建立覆盖复位、每条转移、保持状态、异常输入和快速连续事件的仿真;在Vivado等工具中同时观察clk、输入、state、next_state、输出波形,并在布局布线后复核时序。
常见失分点
认为写了三段always就自然不会出现锁存器或亚稳态问题。
没有给组合逻辑输出默认值,或将Mealy输出直接用作异步控制而不评估毛刺。
面试官可能再问一句
同一状态机从Mealy改成Moore输出后,为什么某个响应可能会晚一个时钟周期?
相关高频问答
FSM是否一定需要三段式?
不一定。选择能正确表达时序、易于评审和验证的写法即可。
状态机输出寄存化有何代价?
可能增加一个周期延迟和寄存器资源,但常能改善输出时序与毛刺控制。

扫码关注






























