低功耗设计与 UPF:电源域、时钟门控、电源门控、隔离与保持寄存器
更新时间:2026-09-04。本篇是 功耗分析与电源完整性 的"设计侧"姊妹篇:功耗分析篇回答"功耗从哪来、怎么测、IR-Drop 怎么收敛",本篇回答"设计阶段怎么主动把功耗做下去,以及怎么用 UPF 把电源策略描述清楚、验证到位"。
功耗是移动/电池设备的命门,也是服务器芯片的散热与电费命门。但低功耗不是流片后"分析出来"的,而是在架构、RTL、物理实现各阶段主动设计出来的:该停的时钟停掉、该断电的区域断掉、不用高电压就降压。这些手段要动电源网络、要在断电时保住关键状态、要防止断电区的乱信号烧坏下游——需要一整套特殊单元和一套描述语言,这就是低功耗设计与 UPF。
本文要回答的问题
- 动态功耗和静态(漏电)功耗的公式是什么?为什么先进工艺漏电越来越头疼?
- **时钟门控(clock gating)和电源门控(power gating)**有什么区别?各自省哪种功耗?
- 什么是电源域(power domain)?为什么不同区域要不同电压、甚至可以整体断电?
- 断电区域和工作区域交界要插哪些特殊单元:电平转换器、隔离单元、保持寄存器?它们分别解决什么?
- DVFS 动态调压调频怎么省电?为什么降压比降频更"划算"?
- **UPF(IEEE 1801)**是什么?为什么电源策略不写进 RTL、而是用单独文件描述?
- 低功耗设计怎么验证(power-aware 仿真、UPF 检查)?
一、先看功耗从哪来:两个公式
芯片功耗分两大类,低功耗手段就是冲着它们分别下手:
1. 动态功耗(dynamic power)——信号翻转产生
开关功耗 P_switch = α · C · V² · f
α:翻转率(0~1) C:负载电容 V:工作电压 f:时钟频率
短路功耗 P_short = 翻转瞬间 PMOS/NMOS 同时导通的直通电流(占比小)- 关键启示:功耗与电压的平方成正比(降压收益最大),与频率、翻转率线性相关。
- 时钟网络是翻转最活跃的负载:时钟树驱动全芯片几十万个触发器、每拍都翻转,即使模块没干活时钟也在空翻——这就是时钟门控的靶子。
2. 静态功耗(static power)/ 漏电(leakage)——只要上电就有
静态功耗 P_leak ≈ V · I_leak
主要是晶体管关断时的亚阈值漏电流(sub-threshold leakage)
与栅极隧穿电流;工艺越先进、阈值电压越低,漏电占比越高。- 先进工艺(尤其 40nm 以下)漏电可占总功耗的 30~50%,待机时更是主导。
- 时钟门控省不了漏电——只要还上电,晶体管照样漏。要灭漏电只能断电(power gating)。
二、时钟门控(Clock Gating):最划算的动态功耗手段
模块空闲时,它的时钟还在每拍翻转,驱动整棵时钟树和触发器——纯浪费。时钟门控就是在时钟路径上插一个门控单元(ICG,Integrated Clock Gating cell):当该模块"使能有效"才放时钟过去,空闲时把时钟关掉。
无门控:clk ────────────────► 所有FF每拍都翻转(空闲也空翻)
有门控:clk ──[ICG 门控单元]──► 模块FF
en(模块使能)──┘
空闲时 en=0 → ICG 输出时钟停住 → 该模块时钟树和FF都不翻转- 省的是动态功耗(时钟网络 + 触发器翻转),实现简单、EDA 综合工具能自动插入(RTL 里写
if (en) q <= d;综合器就会识别并门控); - ICG 是专用单元(内部带锁存防毛刺),不能用简单与门直接门控时钟——否则时钟线上会产生毛刺(glitch),造成触发器误触发;
- 代价几乎为零,是低功耗设计的"基本功",现代芯片大规模自动插入。
时钟门控只停翻转、芯片仍上电,所以漏电照常在;要彻底省电还得靠电源门控。
三、电源门控(Power Gating)与电源域:不用就断电
3.1 电源域(Power Domain)
把芯片按"能不能一起断电/调压"划分成若干区域,每个区域叫一个电源域,有自己的电源轨(VDD)。
- 常开区(always-on domain):电源管理逻辑、唤醒电路、保持寄存器供电——永远通电;
- 可关断区(switchable domain):如手机里待机时不用的 GPU、摄像头 ISP、基带某模块——空闲时整块断电,漏电归零;
- 不同域可以跑不同电压(多电压域):核心逻辑低压省功耗、I/O 高压保证接口电平。
3.2 电源门控:用电源开关切断 VDD
在可关断域的电源轨上插 电源开关单元(power switch,一排大尺寸 header/footer MOS 管),由电源管理逻辑控制通断:
- 关断(switch off):切断该域 VDD(或 VSS),域内晶体管没电、动态和漏电功耗都趋近于零,省电效果最彻底;
- 导通(switch on):重新上电,但需要时间稳定(rush current 冲击、唤醒延迟);
- 通常用粗粒度(整个模块一个开关)或细粒度(标准单元内自带开关)两种方式折中。
3.3 断电交界的三种特殊单元(低功耗设计的核心硬件)
断电不是"一切了事",断电域和常开区交界必须插特殊标准单元,否则功能和物理都会出问题:
| 特殊单元 | 解决什么问题 | 工作方式 |
|---|---|---|
| 隔离单元 isolation cell | 断电域输出变成悬空(X/不确定),会让工作区误动作、甚至 PMOS/NMOS 同时导通产生大电流 | 断电时把输出钳位到固定值(常钳 0,中断信号钳 1),由隔离使能控制 |
| 电平转换器 level shifter | 不同电压域电平不匹配(如核 0.8V 信号送进 I/O 1.8V 域),低压管输出在高压域识别不了、或过载 | 在跨电压域信号上插入,把一种摆幅转成另一种摆幅 |
| 保持寄存器 retention FF | 断电后域内触发器内容全丢,重新上电要从头初始化、唤醒慢 | 断电前把关键状态存到常开区的影子寄存器/低漏电保持位,上电后快速恢复,不用重新加载 |
一次电源门控的完整时序(由电源管理状态机控制):
进入低功耗:① 保存状态到 retention FF → ② 置隔离钳位(isolation enable)
→ ③ 切断电源开关(断电) → 漏电≈0
唤醒: ④ 合上电源开关(上电、等稳定) → ⑤ 撤销隔离
→ ⑥ 从 retention 恢复状态 → 模块继续工作
顺序错了会出现:未隔离就断电 → 下游收 X;未恢复就撤隔离 → 用错状态。四、多电压域与 DVFS:降电压比降频率更划算
回顾动态功耗公式 P ∝ V²·f:
- 多电压域(multi-Vdd):把芯片分成多个电压岛,跑得慢的模块用低电压(如外设 0.8V,核心 1.0V),各域按需供电。
- 多阈值单元(multi-Vt):HVT(高阈值)单元漏电小但慢,用在非关键路径省漏电;LVT(低阈值)快但漏电大,用在关键时序路径。综合器按时序余量自动混搭。
- DVFS(Dynamic Voltage and Frequency Scaling,动态调压调频):负载轻时同时降低频率和电压。因为功耗随 V²f 变化,"降压+降频"比单纯降频省得多。典型如手机大核满载跑高频高压、待机时降到低频低压甚至关核。
| 手段 | 主要省 | 是否需特殊单元 | 代价/限制 |
|---|---|---|---|
| 时钟门控 clock gating | 动态 | ICG(工具自动插) | 几乎无,最常用 |
| 多阈值 multi-Vt(HVT) | 漏电 | HVT/LVT 单元库 | HVT 慢,只放非关键路径 |
| 多电压域 multi-Vdd | 动态+漏电 | level shifter | 电源网络/布局复杂 |
| DVFS | 动态 | level shifter + 调压电路 | 需电压调节器、切换延迟 |
| 电源门控 power gating | 动态+漏电(最彻底) | power switch + isolation + retention | 唤醒延迟、面积、控制复杂 |
五、UPF(IEEE 1801):把"电源意图"从 RTL 里分离出来
一个关键设计哲学问题:电源域怎么划、哪里插隔离/电平转换/保持、什么时候断电——这些该写进 Verilog RTL 吗?
不应该。 原因:RTL 描述的是"功能",而电源策略是"实现/架构选择"——同一套 RTL 在低功耗芯片上要多电源域,在 FPGA 原型或高功耗版本上可能不分域。如果把电源开关、隔离单元写进 RTL,功能代码就和某个供电方案死死绑住,无法复用、也无法在不带电源模型的仿真器里跑。
UPF(Unified Power Format,IEEE 1801 标准) 就是解决这个问题:用一份独立于 RTL 的文件描述"电源意图(power intent)",工具(综合、仿真、物理实现、功耗分析)读取它后自动插入特殊单元、按电源状态仿真。
UPF 描述的核心内容:
| UPF 概念 | 含义 |
|---|---|
| supply net / power domain | 定义电源网络、划分电源域、哪个域属于哪个电源 |
| isolation rule | 指定哪条跨域信号、断电时钳位到 0 还是 1、插隔离单元的位置 |
| level shifter | 指定哪些跨电压域信号需要电平转换 |
| retention | 指定哪些寄存器断电时要保持、用哪个 always-on 电源 |
| power switch | 定义可关断域的电源开关及控制信号 |
| power state table (PST) | 定义合法的电源状态组合(哪些域开/关、电压多少),供验证遍历 |
设计分工:
功能逻辑 → RTL (Verilog/VHDL),不关心电源怎么供
电源意图 → UPF (.upf),描述电源域/隔离/保持/开关/电源状态
↓ 工具读取 UPF + RTL
综合/物理 → 自动插入 isolation cell、level shifter、retention FF、power switch
仿真验证 → power-aware 仿真,断电时信号变 X、隔离钳位、保持恢复都被建模UPF 的价值:同一份 RTL 可配不同 UPF 得到不同供电方案(FPGA 原型用空 UPF 不分域,量产芯片用完整多电源域 UPF),功能与供电解耦,是低功耗设计流程的"标准语言"。主流工具(Synopsys DC/PrimePower、Cadence Conformal/Innovus、西门子 Precision 等)都支持 UPF/CPF。
六、电源管理单元(PMU)与低功耗验证
- PMU(Power Management Unit)/ PCU:常开区里的一个控制器(常是个小 CPU 或状态机,配合固件),根据负载决定何时开关某个域、切换 DVFS 档位、并严格按"保持→隔离→断电 / 上电→撤隔离→恢复"的时序发出控制信号。它是低功耗策略的执行者。
- 低功耗验证(power-aware verification):普通功能仿真假设所有管子都通电,根本发现不了"断电后下游收到 X""恢复时状态丢失"这类 bug。要用 power-aware 仿真(加载 UPF,工具建模断电=X、隔离钳位、保持行为),并配合:
- UPF/电源规则检查(如 Conformal Low Power、CLP):静态检查该插隔离的信号漏插没有、电平转换缺失、电源域短路等;
- 电源状态表(PST)遍历:把所有合法的开/关/电压组合都跑到,覆盖状态切换边界;
- 关注断电域的输出是否都被隔离、保持寄存器是否真能保住/恢复状态、上电唤醒时序是否满足。
常见误区与工程提醒
| 误区/错误 | 后果 | 对策 |
|---|---|---|
| 用与门直接门控时钟 | 时钟线上产生毛刺,触发器误触发 | 用专用 ICG 集成时钟门控单元(内部带锁存) |
| 以为时钟门控能省漏电 | 待机漏电依旧,电池照样掉电 | 要灭漏电必须电源门控断电 |
| 断电域输出没插隔离单元 | 下游收到悬空 X,误翻转甚至直通大电流 | UPF 里定义隔离规则,CLP 静态检查兜底 |
| 跨电压域信号缺 level shifter | 电平不匹配,功能错乱或过载损伤 | 跨域信号一律插电平转换器,UPF 标注 |
| 断电前没保持关键状态 | 唤醒后从头初始化,唤醒慢/状态丢失 | 需要快速恢复的用 retention FF |
| 把电源策略写死在 RTL 里 | RTL 与供电方案绑死,无法复用/原型验证 | 电源意图放 UPF,RTL 只写功能 |
| 只做普通仿真、不做 power-aware | 断电/恢复类 bug 流到硅片才暴露 | 加载 UPF 跑低功耗仿真 + PST 状态遍历 |
| 隔离/上电顺序接反(先断电后隔离) | 下游短暂收 X | 严格按"保持→隔离→断电 / 上电→撤隔离→恢复" |
相关与延伸
本篇是设计侧:功耗的来源、IR-Drop、功耗分析流程与工具见姊妹篇 功耗分析与电源完整性;时钟门控/多周期等与时序的关系见 时序分析 STA;低功耗特殊单元在物理实现阶段插入,见 物理实现(布局布线);电源策略同样要在功能验证阶段做 power-aware 检查,见 功能验证;RTL 层面的同步/复位基本功见 RTL 设计。
一句话总结
低功耗设计与 UPF:功耗分两类——动态功耗 α·C·V²·f(翻转产生,与电压平方成正比)和静态漏电(上电就有,先进工艺占比可达 30~50%);时钟门控用 ICG 单元在空闲时停时钟、省动态功耗(工具自动插、不能用与门防毛刺),电源门控用电源开关把整个可关断域断电、动态漏电一起归零(最彻底);芯片按能否断电/调压划分电源域(常开区 + 可关断区),断电交界必须插三种特殊单元——隔离单元(断电时钳位输出防 X/直通)、电平转换器(跨电压域转摆幅)、保持寄存器(断电前存状态、上电快速恢复),时序严格按"保持→隔离→断电 / 上电→撤隔离→恢复";多阈值 HVT/LVT 混搭省漏电、多电压域 + DVFS 利用 V²f 规律降压调频;**UPF(IEEE 1801)**把电源意图(电源域/隔离/保持/开关/电源状态表)独立于 RTL 描述,工具据此自动插入特殊单元、做 power-aware 仿真,实现"功能 RTL"与"供电方案"解耦,配合 PMU 电源管理单元执行、CLP 静态检查与 PST 状态遍历完成低功耗验证。