电源门控直觉:把不用的模块彻底断电,和时钟门控差在哪
更新时间:2026-09-15。本文是「集成电路大类 · 低功耗设计与验证」入门层系统篇第 05 篇。第 04 篇讲的时钟门控站在收益—代价阶梯最低一级:它止住翻转、状态不丢、一个周期就能醒,但电源始终接着,漏电一分没省。这一篇往上走一级,看长时间深睡时怎么把漏电也一并干掉——电源门控(power gating,PG):把不用的模块彻底断电。速览可读《低功耗设计直觉》,系统地图见低功耗导读。
本文要回答的问题
- 既然时钟门控那么划算,为什么还需要电源门控?
- 电源门控到底在电路上「断」了什么?开关加在哪里?
- 断电会带来哪三个时钟门控没有的麻烦?
- 模块断电后,里面寄存器存的状态怎么办?对外的信号怎么办?
- 它和时钟门控、DVFS 各管什么场景,真实芯片怎么叠加使用?
一、为什么时钟门控不够:漏电是「只要上电就交」的税
回忆第 02 篇的拆分:总功耗 = 动态功耗 + 静态(漏电)功耗。时钟门控把模块里所有触发器的时钟沿挡住,动态翻转功耗几乎归零;但它没有改变任何一根电源线,模块里成千上万的晶体管仍接在 VDD 和 GND 之间。只要上电,第 01 篇讲的亚阈值漏电、栅极漏电就持续存在。
这在两类情形下会成为主要矛盾:
- 工艺越先进,漏电占比越高:纳米节点阈值电压低、栅氧薄,单管漏电上升。一颗芯片里即使大部分模块都门控了时钟,只要它们还接着电,汇总起来的漏电仍可能在待机时占主导(漏电与工艺的关系,后续《漏电与工艺》篇展开)。
- 设备绝大部分时间在睡觉:手环、电表、IoT 节点可能 99.9% 的时间在等一个偶发事件,干活只要几毫秒。这种场景下平均功耗几乎由「睡眠电流」决定,而睡眠电流的大头正是漏电。时钟门控只能把它压到「上电待机」水平,再往下只能断电。
于是有了电源门控的核心想法:既然这块逻辑长时间不用,干脆别给它供电。 电都没了,动态和漏电自然一起消失。
二、它在电路上做了什么:供电回路上加一个开关
正常模块的电源引脚直接连到常供电轨 VDD。电源门控在「电源轨」和「模块内部电源网」之间插入一个电源开关(power switch):
- 常见用一个高阈值(HVT)的大尺寸 PMOS 接在 VDD 与模块之间,称 header switch(高边开关);也有用 NMOS 接在地侧的 footer switch(低边开关)。用高阈值管是因为它本身漏电小。
- 开关由电源门控控制信号(睡眠请求)驱动:导通时模块正常得电;关断时模块与电源轨断开,内部电源节点掉到悬空状态。
- 被开关控制的这块区域叫可切换域(switchable domain);芯片里唤醒逻辑、实时时钟、电源管理等必须一直醒着的部分,则挂在不经开关的**常开域(always-on, AON)**上。

开关不是免费的:导通时有电阻,持续大电流下会在开关上产生压降(相当于一点点 IR-Drop),所以开关要做得足够大、常常由许多小开关单元拼成片上「开关网络」,这会占面积。这也是电源门控比时钟门控「重」的物理原因之一。
三、代价一:状态会丢——保持寄存器与软件保存
模块断电后,里面所有触发器、锁存器失去供电,存的内容全部消失。可很多场景醒来还得接着断电前的状态跑,于是有两类补救:
- 硬件保持:保持寄存器 / 保持单元(retention FF)。这是一种带「影子存储」的特殊触发器:断电前把关键状态(save)存进一个由常开域供电、漏电极小的影子寄存器;断电后主寄存器没电,影子仍留着;重新上电后把状态恢复(restore)回去。它要常开域供电、面积比普通触发器大,通常只给真正需要保住的那一小撮寄存器用,而不是全模块都上。
- 软件保存(save to memory):进入深睡前由固件/驱动把必要上下文(寄存器、现场)写到始终供电的内存(如保持供电的 SRAM 或 DDR 自刷新),醒来再读回。省硬件、但搬运和恢复更慢。
这也解释了「深睡」与「浅睡」的差别:浅睡只门控时钟,硬件状态全在,瞬间醒;深睡断了电源,必须先解决状态保存恢复,醒来慢得多。保持/隔离的直觉后续《保持与隔离直觉》篇细化。
四、代价二:输出悬空——隔离单元必须钳位
被断电的模块,其输出引脚不再被有效驱动,会变成悬空/未知(仿真里是 X,硅上电平漂移)。如果这些信号连到还在工作的模块的输入,可能造成两类问题:下游逻辑收到乱跳电平产生误动作;输入级 PMOS/NMOS 可能同时微导通,形成从电源到地的直通电流,既白耗电又可能损伤器件。
办法是在跨域边界放隔离单元(isolation cell):在模块断电期间,把它的输出强制钳到一个安全固定值(钳 0、钳 1,或钳到断电前最后一个值)。隔离单元的使能由电源管理逻辑在断电前提前打开、上电稳定后再撤销,时序要安排好。隔离放哪、钳什么值,正是后续《保持与隔离直觉》篇和 UPF 要声明的重点之一。
五、代价三:上下电是一套「序列」,不是扳开关
正因为要保存状态、隔离输出、等电压稳定,电源门控的进入和退出必须按电源状态机控制的有序序列进行,典型次序:
- save:把需要保持的状态存入 retention(或软件写内存);
- isolate:使能隔离单元,固定对外输出;
- ack / 停钟:确认模块已空闲、停掉时钟;
- power-down:断开电源开关,域断电(此时动态与漏电都近零);
- (长时间睡眠,常开域守候唤醒事件);
- power-up:收到唤醒事件,闭合开关,域重新得电;电压是逐步爬升的,还伴随对去耦电容充电的浪涌电流(in-rush current),太大要靠分批开启开关来限制;
- restore / de-isolate:恢复 retention 状态、撤销隔离、恢复时钟,模块继续运行。
完成这一圈需要时间(微秒到毫秒级,取决于状态量和电压爬坡),这就是电源门控的唤醒延迟和能量代价。因此它只划算在「睡得够久」时——省电必须能抵掉上下电额外花的能量,存在一个最短值得断电的时间门槛。
六、三种手段叠在一起:短空闲关钟、长睡眠断电
| 手段 | 省动态 | 省漏电 | 状态 | 恢复代价 | 适合 |
|---|---|---|---|---|---|
| 时钟门控 | ✅ | ❌ | 全保留 | 几乎零(1 周期) | 短暂空闲 |
| 电源门控 | ✅ | ✅ | 需保持/恢复 | 大(上下电序列) | 长时间深睡 |
| DVFS | ✅(降 V 降 f) | 间接 | 全保留、还在跑 | 中(稳压/锁相) | 还在运行、负载低 |
真实芯片三者叠加:模块忙就高频高压;负载变轻先 DVFS 降档;短暂空闲门控时钟;判定会很久不用,才走完保存/隔离序列去电源门控断电;始终要醒的那点逻辑留在常开域。具体何时进哪个状态由电源状态机/系统软件决定(后续《待机与睡眠模式》《SoC 电源架构》篇)。
这一篇在知识体系里的位置
- 想先弄清「为什么漏电省不掉、要靠断电」→ 第 02 篇《动态 vs 静态》;
- 对比零代价的关时钟 → 第 04 篇《时钟门控直觉》;
- 断电域怎么组织、什么是常开域 → 第 07 篇《电源域是什么》;
- 断电时的隔离/保持怎么用语言声明与验证 → 第 08 篇《UPF 是什么》;
- 设计侧总览与 switch/isolation/retention 细节 → 《低功耗设计与 UPF》。
总结
一句话总结:电源门控是收益—代价阶梯上比时钟门控更高一级的手段,针对的是后者无能为力的漏电——时钟门控只挡住翻转、电源轨仍接着,先进工艺下「只要上电就交」的漏电在长时间待机时会成为平均功耗的主导,而电源门控在电源轨与模块之间插入大尺寸高阈值的电源开关(PMOS header 或 NMOS footer),长时间空闲时整块断开,让动态功耗和漏电一起趋近于零,代价是三件时钟门控没有的麻烦:①断电使触发器状态丢失,要用常开域供电的保持寄存器 retention 做 save/restore、或由软件把上下文存到保持供电的内存;②断电域输出悬空成 X、可能让下游误动作甚至产生直通电流,必须在边界放隔离单元在断电期间把输出钳到安全值;③上下电要按 save→隔离→停钟→断电→(守候)→上电(含对去耦电容充电的浪涌电流)→恢复/撤隔离的有序序列走,带来明显唤醒延迟和能量、只在睡得够久时才划算;因此工程判断是「短空闲关时钟、长睡眠断电源、还在跑且负载轻用 DVFS」,三者在真实芯片里按忙闲分级叠加,而永远要醒的 RTC/PMU/唤醒逻辑放进最小的常开域 AON。