保持与隔离直觉:模块断电后,状态怎么留、乱飘的信号怎么办
更新时间:2026-09-15。本文是「集成电路大类 · 低功耗设计与验证」入门层系统篇第 19 篇。第 05 篇说电源门控能把一个不用的模块彻底断电、连漏电一起掐掉,听起来很美。但断电瞬间会冒出两个朴素的麻烦:模块里寄存器记的东西全没了;它伸到外面的那些导线开始乱飘。前者用**保持(retention)解决,后者用隔离(isolation)**解决,它们和电平转换合称电源门控的「配套三件套」。这一篇用直觉讲清这两个小电路为什么必须存在。系统地图见低功耗导读。
本文要回答的问题
- 模块一断电,寄存器里的状态怎么办,醒来会不会全丢?
- 保持寄存器是怎么把状态「记住」的,代价是什么?
- 断电模块的输出为什么危险,什么是贯通电流?
- 隔离单元怎么把乱飘的信号钉死,断电时钳到 0 还是 1?
- 保持、隔离、断电、上电的先后顺序为什么不能错?
一、问题一:断电后状态去哪了——保持寄存器
普通触发器(DFF)靠接在电源上的反相器环存住 0/1。电源门控把它的供电轨切断后,这个记忆在几微秒内就消散了。唤醒时整个域的寄存器都是未知态(X),处理器只能从头初始化——这对「偶尔用一下、希望立刻醒」的模块太慢。
保持寄存器(retention flip-flop,RFF)在普通触发器旁加一个影子锁存器(balloon/save latch),关键在于这个影子锁存器接的是常开电源 VDD_C(always-on),即使主域断电它仍有电:

睡眠序列里,掉电之前发 **SAVE(save/retention enable)**把主触发器值搬进影子锁存器,然后才能断主域电;唤醒时主域重新上电、时钟稳定后发 RESTORE 把值搬回,模块从断电前的状态继续跑,不必完整重启。
代价与选择:保持寄存器比普通 DFF 占面积(常说多 10%~20% 量级)且影子锁存器常年接常开轨、有持续漏电。所以不必所有寄存器都保持:
- 全保持(full retention):唤醒最快、逻辑最简单,但面积/常开漏电最大;
- 选择性保持(selective retention):只保持关键架构状态(PC、必要配置、少量上下文),其余醒来重新初始化,面积漏电更省,是常见折中;
- 完全不保持:整个域当冷启动处理,最省面积,但唤醒软件要做完整恢复。
选哪种,取决于待机模式对唤醒时间的要求和常开漏电预算。
二、问题二:断电域的输出会「乱飘」——隔离单元
更危险的是接口。一个普通输出缓冲器在自己电源被切断后,输出既不是合法 0 也不是合法 1,而是浮空、缓慢漂移的不确定电压。若这根线直接连到仍在通电的常开域输入,后级门的 PMOS 和 NMOS 可能同时微导通,电源到地之间形成一条低阻通路,即贯通/穿通电流(crowbar current):轻则额外耗电、逻辑判错,重则长时间灌流损伤器件。
隔离单元(isolation cell,ISO)插在断电域到通电域的边界上,本质是一个由常开电源供电的使能门(使能 AND/使能 OR/带使能的锁存器),在断电期间把输出钳位(clamp)到一个确定值,与断电域内部是否乱飘无关:
- 使能 AND 型:隔离有效时输出钳 0;
- 使能 OR 型:隔离有效时输出钳 1;
- 钳成什么值由接收侧协议定(例如某使能信号低有效,断电期间必须钉成「无效」的高电平,就用钳 1)。
因为隔离单元的使能逻辑和输出级要在主域没电时仍能工作,它必须由常开轨 VDD_C 供电——这是它和普通与门的根本区别,也是 UPF 要明确它供电连接的原因。

三、隔离放哪、保持多少:两个设计选择
- 源端隔离 vs 目的端隔离:隔离单元可放在断电域输出侧(源端,clamp 在掉电之前就近完成,布线清晰、常用)或通电域输入侧(目的端,适合一个信号扇出多个域时集中处理)。UPF 里用
set_isolation ... -applies_to之类的选项表达。 - 信号方向:从通电域进断电域的信号一般不需要隔离(接收方都没电了),但若是给保持/唤醒逻辑的信号要确认常开接收;双向口要专门处理。
- 保持粒度:如前述,全保持换速度、选择性保持换面积/漏电,按唤醒时延预算定。
四、时序:save / isolate / 断电 / 上电的先后不能错
保持和隔离都是受电源管理控制器控制的有序动作,顺序错了就丢状态或灌电流。一次「睡下去—醒过来」的安全序列大致是:
睡下去:① 停时钟、让域静止
② 发隔离使能 ISO_EN(输出先钳好)
③ 发 SAVE,把状态搬进影子锁存器
④ 确认保持稳定后,断开电源开关(域掉电)
醒过来:⑤ 闭合电源开关,域上电
⑥ 等电压/时钟稳定,发 RESTORE 取回状态
⑦ 撤隔离 ISO_EN,域重新参与通信记忆口诀:先隔离、再保持、后断电;先上电、再恢复、后撤隔离。 这些控制信号本身必须由常开逻辑(电源管理单元/常驻岛)发出,否则「管断电的人先没电了」。合法序列在 UPF 的电源状态表 PST 中定义,并在低功耗流程的 power-aware 仿真里逐条验证。
五、保持与隔离由谁描述、由谁验证
这些单元不是 RTL 里手写的,而是在 UPF 里声明、由综合工具自动插入:
set_retention指定哪些域、哪些寄存器做保持,给出 save/restore 控制和常开供电;set_isolation指定在哪些边界、钳到什么值、隔离单元用哪条常开轨供电、放在源端还是目的端;- 工具据此在网表中摆入气球保持寄存器和隔离单元,并在物理阶段连到正确的电源轨。
之所以必须在 UPF 里讲而不写进 RTL,是因为同一套功能 RTL 可能配不同电源策略,且综合、物理、验证、形式检查要共享同一份意图,避免各工具理解不一致。它们的插入与摆放是低功耗综合与物理流程的固定动作。
验证上,普通功能仿真看不到断电,自然也发现不了「忘隔离」「保持没生效」——这正是必须做 power-aware 仿真的原因:仿真器按 UPF 让掉电域输出真的变未知、隔离真的钳位、保持真的存档取回,才能确认上面的时序被遵守。典型要查:每条跨断电边界的信号是否都有隔离、钳位值是否符合接收侧协议、SAVE/RESTORE 后关键状态是否一致、上下电序列是否会死锁。
六、一个贯穿直觉:三件套各管一件事
电源门控常被一起提的三个单元,职责其实清清楚楚、互不替代:
| 单元 | 解决的问题 | 供电特点 | 缺失的后果 |
|---|---|---|---|
| 电源开关 switch | 要不要给这个域通电 | 串在供电轨上 | 不断电,漏电照漏 |
| 保持寄存器 retention | 断电后状态留不留 | 影子锁存器接常开轨 | 醒来全 X,必须冷启动 |
| 隔离单元 isolation | 断电域输出乱飘怎么办 | 使能/输出级接常开轨 | 后级贯通电流、功能错乱 |
加上跨电压域时才需要的电平转换器,就凑齐了多电源域的标准配套。它们都靠一小块**永远有电的逻辑(常开岛 / always-on domain)**来控制和供电——这块区域即使在深睡也保持通电,因此必须用高阈值、厚氧器件把自身漏电压到极低(见漏电与工艺)。
七、可验算的一笔账:为什么保持+隔离换来电
设某可关断域工作功耗 30mW、深睡漏电 0.5mW(若不断电),用电源门控后域漏电近 0,常开岛+保持/隔离控制自身耗 5µW。设备每 10 秒被唤醒一次、每次工作 20ms:
- 不门控:平均 ≈ 30mW×(0.02/10) + 0.5mW×(约 1) ≈ 0.06 + 0.5 = 0.56mW,漏电主导;
- 门控(带保持隔离):平均 ≈ 0.06mW + 0.005mW ≈ 0.065mW。
待机平均功耗降到约 1/9,而代价仅是一次性的面积、5µW 常开开销和一次保持/恢复带来的唤醒延迟(几十~几百微秒级)。对长待机的电池设备,这笔交易几乎总是划算的——这也是为什么睡眠电流(而非峰值电流)决定续航。
八、涌流与开关尺寸:电源门控被忽略的一笔物理账
断电/上电不只是「开关一掰」,物理上还有个棘手问题:上电瞬间要给整个域的去耦电容充电。若电源开关瞬间全导通,充电电流(涌流 in-rush current)会非常大,在电源走线电阻上砸出一个动态 IR-Drop 深坑,可能把仍在工作的常开域电压也拖垮、甚至误触发复位。因此工程上:
- 电源开关不是一个大管子,而是沿电源域分布的一串开关单元(header/footer),上电时分批/按斜坡(daisy-chain 或 staged enable)依次导通,把涌流摊到一段时间;
- 要在「上电够快(唤醒延迟小)」和「涌流够小(不砸电源)」之间折中,并在签收时做涌流与动态压降仿真;
- 开关有导通电阻,导通时会在域电源轨上产生一点压降(virtual VDD 略低于真 VDD),开关尺寸要按域内电流选——太小则域内电压不足、时序变差,太大则面积和开关控制开销大。
这也回到一个整体判断:电源门控不是零成本魔法,它背后是开关面积、保持/隔离单元、涌流控制、独立电源网络和一整套上下电时序。正因为这些代价集中且可观,它被安排在省电手段的「最后一层」——先靠架构、门控把动态电压下去、确有长期空闲可利用时,才值得为某个域建设这套基础设施(决策次序见手段全景,电源网络与压降在后续《IR-Drop》《电源网络》篇细化)。
这一篇在知识体系里的位置
- 为什么要断电、和时钟门控的区别 → 第 05 篇《电源门控直觉》、第 04 篇《时钟门控》;
- 域怎么划、常开岛概念 → 第 07 篇《电源域是什么》、后续《SoC 电源架构》篇;
- 意图怎么写、流程怎么插 → 第 08 篇《UPF》、第 18 篇《低功耗流程》;
- 跨电压而非跨断电边界 → 下一篇《电平转换直觉》;
- 更细的保持/隔离设计 → 芯片设计域《电源域 保持与隔离 电源门控》。
总结
一句话总结:电源门控把一个域断电在省掉全部漏电的同时必然带来两个副作用,必须分别用两个专用单元补救——其一是普通触发器靠通电反相器环维持的状态会随掉电消散,若想快速唤醒而不冷启动,就要用保持寄存器(在主触发器旁挂一个由常开电源 VDD_C 供电的气球影子锁存器,睡前发 SAVE 把值搬进常开泡、域上电时钟稳定后发 RESTORE 搬回,可在面积和常开漏电代价下选全保持或只保 PC/关键配置的选择性保持);其二是断电域输出引脚会变成浮空不确定电压,若直连仍通电的常开域会把后级门的 PMOS/NMOS 同时微导通形成贯通电流、既额外耗电又可能灌伤器件,必须在边界插由常开轨供电的隔离单元(使能 AND 钳 0 / 使能 OR 钳 1 / 使能锁存器,钳位值按接收侧协议选),在断电期间把信号钉成确定值。两者都不在 RTL 手写而由 UPF 的 set_retention/set_isolation 声明、综合自动插入,并严格遵守「停时钟→先隔离→再保持→后断电,先上电→再恢复→后撤隔离」的上下电时序,控制信号必须由常开岛发出(管断电的人不能先没电),且只能在 power-aware 仿真里验证,因为普通仿真假设电源永远有效、断电域照样跑照样输出,根本暴露不了忘隔离、保持失败醒来全 X、上下电死锁、X 传播这些典型 bug;它们与电源开关(管通不通电)、电平转换器(管跨电压摆幅而非断电)各司其职、不可互相替代,而承载这些控制和常开供电的 always-on 岛自身必须用高阈值厚氧器件把漏电压到极低。一笔可验算的账显示 30mW 工作、0.5mW 漏电、占空比 0.2% 的域在门控后平均功耗可从约 0.56mW(漏电主导)降到约 0.065mW(约 1/9),代价只是面积、约 5µW 常开开销和保持恢复唤醒延迟,这正是睡眠电流决定电池产品续航的原因。