动态调压调频 DVFS:手机和 CPU 为什么会「降频省电」
更新时间:2026-09-15。本文是「集成电路大类 · 低功耗设计与验证」入门层系统篇第 06 篇。第 03 篇讲清了电压和频率的物理底牌——门延迟、关键路径、Vmin、V/F 曲线。这一篇把它用到运行时:既然电压频率越高越耗电、而负载时高时低,那就让芯片边跑边调压调频,这就是 DVFS(Dynamic Voltage and Frequency Scaling,动态调压调频)。手机发热后「变卡」、笔记本拔电后「变慢」,背后都是它。速览可读《低功耗设计直觉》,地图见低功耗导读。
本文要回答的问题
- 芯片为什么不固定跑在一个最高频率,而要做好几档?
- DVFS 调节的「档位」到底是什么?为什么电压和频率必须一起变?
- 升档、降档为什么有严格的先后次序,切换为什么不是瞬间完成?
- 是谁在实时判断「该升还是该降」?根据什么判断?
- 一直压到最低频最省电吗?它和时钟门控、电源门控怎么分工?
一、为什么需要多档:算力需求是波动的,电费却一直照付
如果芯片恒定跑在最高频、最高压,那么即使任务很轻——只是滚动一下网页、等用户触摸、维持心跳——它也在为「峰值算力」付全额功耗。真实负载的特点是剧烈波动:
- 手机绝大多数时间在待机或做轻交互,只有游戏、视频编码、拍照处理等少数时刻才需要峰值性能;
- 服务器 CPU 的平均利用率常年不高,但请求到来时要迅速响应;
- MCU 平时休眠,被唤醒后要在很短时间内把活干完再睡。
为「偶尔的峰值」全天候供电显然浪费。于是自然的设计是:提供多个性能档位,负载高就跑高档(快但耗电),负载低就退到低档(慢但省电)。 这正是 DVFS 的出发点,也是第 00 篇三笔账(电池、热墙、电费)在运行时的直接兑现。
二、档位是什么:一对绑死的(电压,频率)——OPP
DVFS 调的不是一个旋钮,而是电压和频率两个量,它们被第 03 篇那条 V/F 曲线绑死:频率要跑多高,电压就必须高到让关键路径在该周期内来得及收敛;反过来,电压降到某档,最高能跑的频率也被限定。
工程上把曲线上若干净水不漏的工作点固化成一张表,每个点叫一个 OPP(Operating Performance Point,性能点),本质就是「一组配套的电压与频率」:
| OPP | 电压 V | 频率 f | 相对功耗(按 αCV²f 估) | 适用 |
|---|---|---|---|---|
| 高档 | 高(如 0.9V) | 高(如 2.0GHz) | 基准(最大) | 游戏/重计算 |
| 中档 | 中(如 0.75V) | 中(如 1.4GHz) | 明显更低 | 交互/普通负载 |
| 低档 | 接近 Vmin(如 0.6V) | 低(如 0.6GHz) | 最低 | 轻载/待机维持 |
注意功耗对电压是平方关系:中档电压若为高档的 0.83 倍、频率为 0.7 倍,动态功耗约降到 0.83²×0.7 ≈ 0.48,即一半左右。只降频率而不降电压,丢掉了平方红利,省得有限——这就是为什么叫「调压调频」,两个动作缺一不可。
三、安全次序与切换延迟:为什么不能瞬间跳档
频率由 PLL 产生、电压由板上稳压器(regulator)提供,两者都不是说变就变。而且若电压和频率暂时不匹配,电路会因时序来不及收敛而出错。因此切换必须沿安全次序:
- 升档(要更快):先升压、等电压稳定,再提频率。 先把电压抬高到能支撑新频率的值并确认稳压,再让 PLL 切到高频,保证提频那一刻电压已经够用。
- 降档(要更省):先降频率,再降电压。 先退到低档频率(此时电压偏高,时序一定满足),再把电压降到与该频率配套的值。
两步之间都要等待:稳压器把输出调到新电压并稳定需要时间(电压不能突变,还要克服负载),PLL 锁定到新频率也需要若干周期。这段 transition latency(切换延迟,通常几十到几百微秒量级) 里内核可能要停拍等待,因此 DVFS 不是免费、也不能过于频繁地抖动。多电压域怎么供电、稳压器和上下电时序,后续《电源管理芯片 PMIC》篇与《SoC 电源架构》篇再展开。
四、谁在决定档位:负载采样与调频策略 governor
芯片不会自己掐指一算,档位由一层电源管理策略决定(在 CPU 上常是内核里的调频驱动,俗称 governor;在 SoC/MCU 上是 PMU 固件或电源管理协处理器)。它的工作循环是:
- 采样负载:统计一段时间的利用率、队列里待办的工作量、是否有实时任务、温度与功耗预算等;
- 映射到档位:按策略选一个 OPP——例如「性能优先」就尽量待在高档,「省电优先」利用率没满就退低档,「交互/节能折中」则根据升负载快、降负载慢的非对称规则;
- 下发切换:按第三节的安全次序让稳压器和 PLL 动作。
两个常见策略直觉值得记住:
- 升档要快、降档要慢(非对称 + 防抖/滞后 hysteresis):负载突然上来时要迅速升档,否则用户感到卡顿;负载刚降下来却别急着降档,因为很可能马上又有活,频繁升降既付切换延迟、又因稳压器来回动作而不划算。于是策略对「升」敏感、对「降」加一段驻留时间确认。
- 不能只看平均利用率:实时任务、对延迟敏感的交互哪怕占用率不高也需要高档;相反纯后台批处理可以压到低档慢慢算。
五、是不是越低越省:延迟约束与 race-to-idle 之争
直觉上「频率压到最低最省电」,但这里有个反直觉的争论——race-to-idle(全速跑完再睡):
- 完成固定工作量时,动态能耗 ≈
α·C·V²·f × 时间。提高频率会让完成时间缩短,但高档通常要配更高电压(V² 上抬),单位时间更贵;跑完之后可以尽快进入时钟门控/电源门控的低功耗空闲态。 - 于是哪种更省,取决于电压随频率抬升多少、空闲态有多省、任务有没有截止时间。对「干完就能深睡、睡眠态极省电」的负载(典型如 MCU 被唤醒处理一下就睡),race-to-idle 常常更优;对需要持续运行、或 V² 代价很大的场景,停在恰好满足延迟的最低档更省。
- 更根本的约束是 SLA / 实时性:档位不能低到赶不上截止时间。DVFS 优化的不是「功耗最小」,而是「在满足性能与延迟的前提下尽量省电」,即在性能和能效之间沿 V/F 曲线找合适工作点。能量与功率的精确区别、为什么有时「慢就是省」有时相反,后续《能量与功率的区别》篇定量展开。
六、边界:DVFS 只管「还在跑」,空闲要交还给门控
把 DVFS 放回整条省电链,边界很清楚:
- DVFS 作用于「正在运行」的时刻:它通过降低运行中的 V 和 f 拿电压平方红利,但模块仍上电、仍在执行、漏电照付。
- 一旦真的没活:再低的 OPP 也是在空耗,这时应该交给时钟门控(短暂空闲)或电源门控(长时间空闲),把动态甚至漏电都停掉。
- 三者在真实系统里由同一个电源管理框架串起来:忙→合适 OPP 运行,空→关钟,久空→断电。手机「发烫降频」是热预算触发 DVFS 强制退档,「待机省电」则更多靠门控与电源门控。

这一篇在知识体系里的位置
- V/F 曲线、Vmin、为什么降压必须配降频的物理底牌 → 第 03 篇《电压与频率》;
- 跑完即睡的两个极端手段 → 第 04 篇《时钟门控》、第 05 篇《电源门控》;
- 多档电压由谁供、稳压器与上下电时序 → 后续《电源管理芯片 PMIC》《SoC 电源架构》篇;
- 系统软件侧的 idle/C-state/P-state → 后续《CPU 电源管理入门》篇;
- 设计侧总览与 OPP 在 UPF/电源状态表里的表达 → 《低功耗设计与 UPF》。
总结
一句话总结:DVFS 是面向「还在运行」阶段的省电手段,出发点是真实负载剧烈波动、而芯片没必要总为偶尔的峰值性能按最高频最高压付全额功耗,于是把电压频率沿第 03 篇的 V/F 曲线固化成若干成对的性能点 OPP、由电源管理策略(CPU 上的 governor 或 SoC 的 PMU 固件)采样利用率/实时性/温度后实时选档;它必须调压调频成对做——只降频不降压就丢掉了功耗对电压平方这一最大红利,而升降档还要严守安全次序(升档先升压、稳压后再提频,降档先压频、再降压),中间为稳压器响应和 PLL 锁定付出几十到几百微秒的切换延迟,所以要用「升得快、降得慢」的滞后策略防抖;档位选择不是一味求低,而要在满足延迟与吞吐 SLA 的前提下权衡,对跑完即可深睡的负载 race-to-idle 全速冲完再睡反而更省、对持续运行的负载停在恰好够用的最低档更省;最后要划清边界——DVFS 只省运行中的动态功耗、模块仍上电漏电照付,真正空闲应交给时钟门控、长时间深睡交给电源门控,三者由同一电源管理框架按忙闲串成「高档运行→降档→关钟→断电、唤醒再沿升压提频返回」的完整链。