4. 状态机基础回顾

在低功耗SoC的电源管理单元(PMU)中,状态机是描述电源模式切换、上电时序、时钟门控与复位释放顺序的核心建模工具。PMU的行为本质上是一组离散状态在事件驱动下的迁移过程,因此有限状态机(Finite State Machine,FSM)模型是理解PMU控制逻辑的第一块基石。本节将回顾FSM的基本模型、Moore与Mealy两种输出类型,以及状态图与状态表两种表示方法,为后续PMU状态机的设计与编码打下基础。

一、有限状态机FSM模型的核心要素

有限状态机是一个五元组模型,可用 M = (S, Σ, δ, s₀, F) 描述。其中 S 是有限状态集合,Σ 是输入事件集合,δ 是状态转移函数,s₀ 是初始状态,F 是输出或接受条件集合。在PMU场景中,状态通常对应电源模式,例如 OFF、DEEP_SLEEP、LIGHT_SLEEP、ACTIVE;输入事件则包括唤醒中断、定时器到期、软件请求、电源就绪信号等。

FSM的关键特征是“状态有限”和“转移确定”。任一时刻,状态机只处于一个状态;在给定当前状态和输入事件后,下一状态是唯一确定的。这种确定性使PMU行为可预测、可验证,也便于用硬件描述语言实现综合。

FSM = 状态集合 + 输入事件集合 + 转移规则 + 初始状态 + 输出规则。PMU中每个电源模式就是一个状态,每次模式切换就是一次状态转移。

二、Moore型与Mealy型状态机

根据输出是否直接依赖输入,FSM分为Moore型和Mealy型。Moore型状态机的输出仅由当前状态决定,即 输出 = f(当前状态);Mealy型状态机的输出由当前状态和当前输入共同决定,即 输出 = f(当前状态, 当前输入)。

在PMU设计中,Moore型常用于电源模式指示、稳压器使能等需要稳定输出的场景,因为输出与状态同步,不会因输入毛刺而立即变化。Mealy型则适合快速响应类控制,例如检测到唤醒事件后立即拉高时钟请求,输出可在同一周期内响应输入,但组合路径可能引入毛刺风险。

对比维度 Moore型 Mealy型
输出依赖 仅当前状态 当前状态 + 当前输入
输出时序 与时钟同步,滞后一个周期 可同周期响应,组合输出
状态数量 通常较多 通常较少
毛刺风险 低 较高
PMU典型用途 电源模式指示、LDO使能 中断响应、时钟请求

三、状态图与状态表表示方法

状态图以图形方式表达状态与转移关系:圆圈表示状态,带箭头的边表示转移,边上标注“输入/输出”。状态表则以表格形式列出每个当前状态在每种输入下的下一状态和输出,适合直接映射为Verilog的case语句。

下面给出一个PMU简化状态机的状态表片段,描述从ACTIVE到LIGHT_SLEEP再到DEEP_SLEEP的迁移逻辑:

当前状态      输入事件          下一状态        输出
ACTIVE        idle_req          LIGHT_SLEEP     clk_gate=1
ACTIVE        wake_irq          ACTIVE          clk_gate=0
LIGHT_SLEEP   deep_req          DEEP_SLEEP      vdd_low=1
LIGHT_SLEEP   wake_irq          ACTIVE          clk_gate=0
DEEP_SLEEP    wake_irq          ACTIVE          vdd_low=0
DEEP_SLEEP    por_rst           OFF             rst_assert=1

状态图与状态表是同一逻辑的两种视图。状态图便于人工审查转移是否完备,状态表便于检查是否遗漏输入组合、是否存在不可达状态。工程实践中通常先画状态图,再转成状态表,最后编码实现。

PMU简化状态机状态图(Moore/Mealy混合示意) OFF rst_assert=1 DEEP_SLEEP vdd_low=1 LIGHT_SLEEP clk_gate=1 ACTIVE clk_gate=0 por_rst deep_req wake_irq idle_req wake_irq wake_irq 说明:圆圈内为状态名与Moore输出;箭头旁为Mealy输入事件;转移条件确定后下一状态唯一。

四、案例场景:PMU上电与休眠迁移

假设某低功耗SoC的PMU需要实现如下行为:系统上电复位后进入OFF,电源就绪后进入ACTIVE;软件写入idle_req后进入LIGHT_SLEEP并门控时钟;若继续收到deep_req,则关闭低压域进入DEEP_SLEEP;任一唤醒中断wake_irq都使系统返回ACTIVE。

用Moore型实现时,clk_gate、vdd_low等输出直接绑定到状态编码,状态稳定则输出稳定。用Mealy型实现时,wake_irq可在当前周期立即产生clk_req,加快唤醒响应。实际PMU常采用混合方式:模式指示用Moore,快速请求用Mealy。

在PMU中,建议将“电源模式”作为Moore状态输出,将“中断响应、时钟请求”作为Mealy输出。这样既保证模式稳定,又兼顾唤醒速度。

五、常见误区与复盘要点

  • 误区一:状态遗漏。只画了正常迁移,忘记复位、错误恢复、超时等异常路径,导致状态机跑飞。复盘时应检查每个状态是否都有默认转移。
  • 误区二:Moore与Mealy混用不清。把组合输出直接接到异步复位或时钟使能,容易产生毛刺。应明确哪些输出必须寄存。
  • 误区三:状态表不完整。某些输入组合未定义下一状态,综合后可能产生锁存器或不可综合逻辑。应补全所有输入组合或设置默认分支。
  • 误区四:状态编码随意。PMU中状态编码影响功耗与译码复杂度,建议采用独热码或格雷码,并评估面积与功耗。
状态机设计完成后,必须进行可达性分析和死锁检查。任何无法从初始状态到达的状态,或无法退出的状态,都会在PMU中造成系统无法唤醒或无法关断的严重后果。

掌握FSM模型、Moore与Mealy的区别,以及状态图与状态表的互转方法,是后续编写PMU状态机RTL代码、进行低功耗优化和形式验证的前提。在PMU项目中,状态机不仅是控制逻辑,更是功耗策略的载体,每一个状态和转移都对应着明确的电源域、时钟域和复位域行为。