第三章 电压调节技术:DVFS、AVS与电源门控

各位同学,今天我们来聊聊多核处理器里最核心的电压调节技术。说实话,这部分内容我做了十几年,每次回头看都有新感悟。电压调节不是简单的“降降压”就完事了,它背后牵扯到性能、功耗、可靠性的三方博弈。

我个人习惯把电压调节技术分成三类:动态的、自适应的、以及粗暴关断的。咱们一个一个来拆解。

3.1 DVFS——动态电压频率调整

DVFS,全称Dynamic Voltage and Frequency Scaling。说白了,就是根据负载动态调整电压和频率。负载重了就升压提频,负载轻了就降压降频。

为什么要把电压和频率绑在一起?这里有个物理常识:芯片的工作频率越高,需要的供电电压也越高。频率和电压的关系,不是线性的,而是近似于平方关系。你想想看,频率降一半,电压可能只需要降20%,但功耗却能降一半以上。

核心公式:动态功耗 P ∝ C × V² × f

其中C是负载电容,V是供电电压,f是工作频率。

电压降10%,功耗降19%。电压降20%,功耗降36%。

我在项目中遇到过一件事。有个客户的产品,待机时CPU温度总是偏高。我们一查,发现DVFS策略太保守了,最低频率只降到标称的60%。我建议把最低频率降到30%,同时把对应的电压从1.0V降到0.75V。结果呢?待机功耗直接降了40%,温度也下来了。

DVFS的实现,通常需要三个环节:

  1. 负载监测——通过性能计数器看CPU利用率、缓存命中率、指令吞吐量
  2. 决策算法——根据负载预测下一步需要的性能等级
  3. 电压频率切换——通过PMIC或片上LDO调整供电,同时调整PLL输出频率

这里有个坑,我必须要提醒大家。

切换时序问题:升频时,必须先升压再升频。降频时,必须先降频再降压。顺序搞反了,芯片会直接挂掉。

我曾经见过一个团队,降频时先降压再降频,结果芯片在过渡态因为电压不足导致逻辑错误,整批板子都出了问题。

DVFS的粒度也很关键。粗粒度DVFS,比如整个芯片统一调压,实现简单但效率低。细粒度DVFS,比如每个核心独立调压,效率高但代价大——每个核心都需要独立的电压域和频率域。

DVFS粒度 优点 缺点 适用场景
芯片级 实现简单,控制开销小 无法独立调节各核心 单核或简单多核
簇级 折中方案,面积可控 簇内核心共享电压 大小核架构
核心级 效率最高,每核独立优化 面积大,电源网络复杂 高端服务器芯片

3.2 AVS——自适应电压调整

AVS,Adaptive Voltage Scaling。这个名字听起来和DVFS有点像,但本质不同。DVFS是根据负载调压,AVS是根据芯片个体差异调压。

为什么会需要AVS?因为芯片制造有工艺偏差。同一批晶圆,有的芯片体质好,1.0V就能跑1GHz;有的体质差,1.2V才能跑1GHz。如果所有芯片都用同一个电压,那就只能按最差体质来——这太浪费了。

AVS的思路是:每颗芯片出厂后,通过片上传感器测量它的实际性能,然后为它量身定制一个最低工作电压。这样,体质好的芯片用低压,体质差的用高压,整体功耗就降下来了。

我的经验:AVS通常能带来10%~20%的功耗节省。但要注意,AVS需要片上传感器和校准逻辑,这会增加芯片面积。我建议在量产规模超过百万颗时再考虑AVS,否则成本不划算。

AVS的实现方式有两种:

  • 开环AVS:利用片上环形振荡器或延迟链,测量工艺角,查表得到电压值。简单,但精度一般。
  • 闭环AVS:通过复制关键路径的延时检测电路,实时反馈电压是否足够。精度高,但设计复杂。

我记得有一次,一个项目用了闭环AVS,结果发现电压波动太大,导致芯片偶尔出现时序违例。排查了很久,才发现是反馈环路带宽不够,跟不上负载瞬变。后来我们在环路里加了一个低通滤波器,问题就解决了。

AVS和DVFS可以共存。实际上,很多现代处理器都是两者结合:先用AVS确定每颗芯片的基准电压,再用DVFS根据负载动态调整。这叫“AVS+DVFS”混合方案,效果最好。

3.3 电源门控技术

电源门控,Power Gating。这个技术最粗暴,也最有效——直接把不用的模块断电。

你想想看,DVFS再怎么降,电压还是有的,漏电流还在流。电源门控就不一样了,电压直接拉到0,漏电流也归零。对于长时间空闲的模块,电源门控是唯一有效的省电手段。

电源门控的核心元件是电源开关。通常用PMOS管做高侧开关,或者用NMOS管做低侧开关。开关的尺寸要仔细权衡:太大了浪费面积,太小了IR drop太大。

电源门控的关键参数:

  • 唤醒时间:从断电到恢复工作的时间,通常几十到几百微秒
  • 浪涌电流:唤醒瞬间的冲击电流,可能达到正常工作电流的10倍
  • 状态保持:是否需要保存寄存器状态

我曾经踩过一个坑。一个多核处理器,每个核心都做了独立的电源门控。结果某个核心频繁唤醒,每次唤醒都产生巨大的浪涌电流,导致电源电压跌落,其他核心也跟着受影响。后来我们在每个电源域里加了软启动电路,让唤醒过程缓慢进行,浪涌电流就控制住了。

电源门控的设计要点:

  1. 隔离逻辑:断电模块的输出必须用隔离单元钳位,否则浮空信号会传到其他模块,导致漏电甚至逻辑错误。
  2. 状态保存:如果模块需要保存状态,可以用寄存器组加备份电源,或者用SRAM加保持电压。
  3. 唤醒策略:是立即唤醒还是延迟唤醒?这取决于延迟容忍度。我一般建议用两级唤醒:先快速唤醒关键路径,再慢慢恢复其他部分。

电源门控的粒度也有讲究。粗粒度门控,比如整个CPU簇断电,实现简单但灵活性差。细粒度门控,比如每个功能模块独立门控,灵活性好但控制复杂。

门控粒度 面积开销 唤醒时间 省电效果
粗粒度(簇级) 长(~100μs)
中粒度(功能模块) 中(~10μs) 较好
细粒度(寄存器级) 短(~1μs) 一般

最后说一句,这三种技术不是互斥的。一个成熟的多核处理器电源管理方案,往往是DVFS、AVS、电源门控的组合拳。DVFS负责动态调节,AVS负责个体优化,电源门控负责彻底关断。三者配合好了,才能实现最佳的能效比。

嗯,这一章的内容就到这里。下一章我们会讲电源管理单元(PMU)的架构设计,到时候会把这些技术串起来讲。有什么问题,咱们课后交流。