FPGA状态机怎么写?一段式两段式三段式区别?状态编码怎么选?FPGA面试

浏览量:249
时间: 2026-09-23 16:24:13
一句话答案

状态机分一段式(时序+组合混写)、两段式(时序状态寄存器+组合输出)、三段式(时序状态寄存器+组合次态+时序输出);推荐三段式,输出寄存器化无毛刺;状态编码用二进制(省资源)或独热码(快、译码简单)。

本文概述

状态机是 FPGA 设计核心,面试常考:一段两段三段区别、状态编码、输出毛刺。回答要讲清三段式结构和优势。

核心要点

  • 一段式:一个 always 块混写时序和组合,简单但易出毛刺

  • 两段式:时序状态寄存器 + 组合逻辑(次态+输出),输出可能有毛刺

  • 三段式:时序状态寄存器 + 组合次态 + 时序输出,输出寄存器化无毛刺,推荐

  • 状态编码:二进制(省触发器)、独热码(译码简单、快)、格雷码(减少翻转)

  • 状态机要完整:复位态、所有转移、默认态

屏幕显示状态机状态转移图和 Verilog 代码,FPGA 开发板

面试官:三段式状态机为什么推荐?输出为什么不会有毛刺?

面试官考察点

FPGA 基础题。面试官看你是否理解状态机写法。重点听:输出寄存器化、三段结构。

回答思路

讲三段式结构,输出用寄存器所以无毛刺。

参考回答

三段式结构。

// 第一段:时序逻辑,状态寄存器
always @(posedge clk) begin
  if(!rst_n) curr_state <= IDLE;
  else curr_state <= next_state;
end

// 第二段:组合逻辑,次态判断
always @(*) begin
  case(curr_state)
    IDLE: if(start) next_state = WORK;
    WORK: if(done) next_state = IDLE;
    default: next_state = IDLE;
  endcase
end

// 第三段:时序逻辑,输出寄存器
always @(posedge clk) begin
  case(next_state) // 或 curr_state
    IDLE: out <= 0;
    WORK: out <= 1;
  endcase
end

为什么输出无毛刺。

  • 一段/两段式输出是组合逻辑,状态转移瞬间多个信号变化可能产生竞争冒险(毛刺);

  • 三段式输出用寄存器(D 触发器),只在时钟沿更新,时钟之间保持稳定;

  • 寄存器输出没有组合逻辑毛刺,适合驱动外部器件(如 SPI 时钟、片选)。

写法结构输出适用
一段式1 个 always组合/时序混合简单状态机
两段式时序+组合组合(可能毛刺)内部逻辑
三段式时序+组合+时序寄存器(无毛刺)推荐,外部输出

状态编码。

编码特点适用
二进制触发器少,译码复杂状态多、资源紧张
独热码 one-hot每个状态 1 个触发器,译码简单状态少、速度要求高
格雷码每次只变 1 位,减少翻转功耗低功耗、异步跨时钟

注意。

  • 状态机一定要有默认态(default),防止综合出锁存器;

  • 复位态要明确,上电进入 IDLE;

  • 状态转移条件要完整,不要有死状态;

  • 复杂状态机可以分子状态机(分层)。

面试官可能追问

追问 1:一段式为什么不推荐?
时序和组合混在一个 always,代码难维护,输出可能有毛刺,综合工具难优化。
追问 2:独热码为什么快?
独热码每个状态一个触发器,次态判断只看一个 bit,不需要译码器,延迟小。
追问 3:状态机输出用 curr_state 还是 next_state?
第三段用 next_state 可以提前一拍输出(Mealy 型),用 curr_state 是 Moore 型。看需求。
追问 4:Mealy 和 Moore 区别?
Moore 输出只和状态有关,Mealy 输出和状态+输入有关。Mealy 响应快但可能有毛刺,Moore 稳定但慢一拍。
追问 5:状态机怎么验证?
写 testbench 覆盖所有状态转移,看状态跳变和输出是否正确。

常见失分表达

✗ 状态机没有 default — 综合出锁存器,状态不确定。
✗ 外部输出用组合逻辑 — 毛刺导致外部器件误触发。
✗ 状态编码随便选 — 状态多用独热码浪费资源,状态少用二进制译码慢。

准备动作

1
写一个三段式状态机(如 SPI 控制器)
2
准备一个状态机毛刺最终改三段式解决的案例
3
了解独热码和二进制编码综合结果

核心关键词

状态机三段式一段式两段式独热码MealyMoore


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

中间继电器是一种常见的电气元件,广泛应用于各种电路中,其作用是将信号放大或转换为另一种形式。在了解中间继电器的工作原理和作用之前,我们先来了解一下什么是继电器。... 详情>>

2023-09-09 14:36:37
STM32外部中断EXTI怎么配置?中断优先级怎么设?按键消抖怎么处理?嵌入式面试

一句话答案EXTI 配置:GPIO 设为输入/复用、SYSCFG 选端口、EXTI 设触发沿(上升/下降/双边)、NVIC 使能中断并设优先级、写中断服务函数;... 详情>>

2026-09-24 09:22:57
LDO线性稳压器怎么选型与降噪?电源工程师面试从PSR讲到输出电容

电源设计中级技术基础题本文概述LDO(低压差线性稳压器)是模拟电路、射频电路、传感器等对电源噪声敏感场景的首选供电方案。面试中需要讲清LDO的关键参数(压差Dr... 详情>>

2026-08-30 10:54:26
简要说明linux内核的基本构成?(结构模块表示)

MMU:内存管理单元,完成地址映射(应用虚拟地址方式)VFS:虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方便传输... 详情>>

2024-03-27 11:31:24
FPGA的建立时间和保持时间分别是什么?违例会有什么后果?

FPGA设计面试中非常高频的时序基础题,必须讲清采样沿前后两个不同的稳定窗口,并能联系静态时序分析。面试回答的核心建立时间是有效采样时钟沿到来前数据需要稳定的最... 详情>>

2026-10-29 23:06:27
开班信息