4、电压与频率调节:动态电压频率调整(DVFS)、自适应电压调节(AVS)、体偏置技术

各位工程师朋友,咱们今天聊点实在的。功耗优化这件事,说白了就是跟电压和频率较劲。你想想看,芯片的功耗公式 P = C·V²·f 摆在那里,V 和 f 是我们可以主动调节的两个旋钮。怎么拧好这两个旋钮,就是本章要讲的核心。

我个人习惯把电压频率调节技术分成三类:DVFS、AVS 和体偏置。它们各有各的脾气,也各有各的适用场景。咱们一个一个来拆解。

4.1 动态电压频率调整(DVFS)

DVFS 是最经典、最常用的技术。它的思路很简单:根据负载动态调整电压和频率。负载重的时候,跑高频高电压;负载轻的时候,降频降压。

我在项目中遇到过这样一个场景:一个视频解码芯片,播放 4K 视频时功耗飙到 3W,但播放 720p 时其实只需要 0.8W。如果不做 DVFS,芯片全程跑在最高性能状态,那 720p 场景下就白白浪费了 2.2W 的功耗。这就是 DVFS 要解决的问题。

DVFS 的实现通常包含以下几个关键环节:

  • 负载监测:通过硬件计数器监测 CPU 利用率、总线带宽、任务队列深度等指标
  • 策略决策:根据负载信息,决定下一时刻的目标频率和电压
  • 频率切换:通过 PLL 或 FLL 调整时钟频率
  • 电压切换:通过 PMIC 或片上 LDO 调整供电电压

这里有个容易踩的坑——频率和电压的切换顺序。我刚开始做 DVFS 时,曾经先降电压再降频率,结果芯片直接挂了。为什么呢?因为频率还没降下来,电压已经不够支撑当前频率了,时序就崩了。

避坑指南:升频时先升压再升频,降频时先降频再降压。这个顺序千万不能搞反。我曾经因为搞反了这个顺序,让一块芯片在实验室里反复复位,查了两天才找到原因。

下面是一个简单的 DVFS 状态机伪代码,大家可以参考一下:

// DVFS 状态机示例
enum dvfs_state {
    LOW_PERF,   // 低频低压
    MID_PERF,   // 中频中压
    HIGH_PERF   // 高频高压
};

void dvfs_update(uint32_t load) {
    if (load > HIGH_THRESHOLD) {
        // 升频:先升压,再升频
        set_voltage(HIGH_VOLT);
        delay_us(10);  // 等待电压稳定
        set_frequency(HIGH_FREQ);
    } else if (load < LOW_THRESHOLD) {
        // 降频:先降频,再降压
        set_frequency(LOW_FREQ);
        delay_us(5);
        set_voltage(LOW_VOLT);
    }
}

4.2 自适应电压调节(AVS)

AVS 和 DVFS 有什么区别?嗯,这里要注意区分。DVFS 是根据负载来调,而 AVS 是根据芯片本身的工艺偏差和温度来调。说白了,AVS 解决的是「同一款芯片,不同个体之间性能有差异」的问题。

你想想看,同一批晶圆上切下来的芯片,有的体质好,1.0V 就能跑 1GHz;有的体质差,1.1V 才能跑同样的频率。如果所有芯片都用同一个电压,那体质好的芯片就白白多耗了功耗。AVS 就是给每颗芯片「量身定制」电压。

AVS 的典型实现方式有两种:

  • 闭环 AVS:通过片上的时序监测电路(比如复制路径、延迟链)实时检测时序裕量,然后反馈调节电压
  • 开环 AVS:通过工艺角检测电路(比如环形振荡器)测量芯片的工艺偏差,查表得到对应的电压

我个人更倾向于闭环 AVS,因为它能同时补偿工艺偏差和温度变化。开环 AVS 虽然简单,但温度变化时就不太准了。

关键点:AVS 的电压调节粒度通常比 DVFS 更细。DVFS 可能只有 3-5 个电压档位,而 AVS 可以做到几十甚至上百个微调步进。我见过一个设计,AVS 的电压步进是 10mV,配合 0.5% 精度的 PMIC,能把功耗再压下去 15%。

4.3 体偏置技术

体偏置(Body Biasing)是个相对小众但效果显著的技术。它通过改变晶体管的衬底偏压来调节阈值电压 Vth,从而影响漏电流和性能。

体偏置分为两种:

  • 正向体偏置(FBB):降低 Vth,提高性能,但漏电流增加
  • 反向体偏置(RBB):提高 Vth,降低漏电流,但性能下降

我在一个 IoT 芯片项目中用过体偏置。那个芯片大部分时间处于待机状态,漏电流占了总功耗的 60% 以上。我们给待机模块加了 RBB,把漏电流压下去了 40%,待机功耗从 50μW 降到了 30μW。效果非常明显。

但体偏置也有它的局限性:

  • 需要额外的负压或正压电源,增加了电源设计的复杂度
  • 体偏置的效果在先进工艺节点(比如 7nm 以下)会减弱
  • 大电流场景下,体偏置的调节范围有限
实用技巧:体偏置最适合用在「性能-漏电流」需要动态权衡的场景。比如一个模块在活跃时跑高频,用 FBB 提性能;休眠时切到 RBB 压漏电流。我曾经在一个无线收发芯片上这样设计,整体功耗降低了 22%。

4.4 三种技术的对比与协同

这三种技术不是互斥的,而是可以协同工作的。我习惯把它们放在一个统一的框架里:

技术 调节对象 调节粒度 响应速度 适用场景
DVFS 频率 + 电压 粗粒度(3-10档) 慢(ms级) 负载变化大的场景
AVS 电压 细粒度(10-100档) 中(μs级) 工艺/温度补偿
体偏置 阈值电压 中粒度(3-5档) 慢(ms级) 漏电流优化

在实际项目中,我通常这样组合使用:

  1. 宏观层面:用 DVFS 响应负载变化,决定工作点
  2. 微观层面:用 AVS 微调电压,补偿工艺和温度偏差
  3. 待机层面:用体偏置压漏电流,降低静态功耗

举个例子,一个手机 SoC 的 CPU 核心:跑游戏时 DVFS 切到高频档,AVS 根据芯片温度微调电压,同时体偏置切到 FBB 提性能;待机时 DVFS 切到最低频,AVS 保持最低安全电压,体偏置切到 RBB 压漏电流。三个技术各司其职,配合默契。

注意:三种技术同时使用时,要小心它们之间的耦合。比如 AVS 调电压时,DVFS 的状态机可能会误判;体偏置改变 Vth 后,AVS 的时序监测结果也会变化。我建议在系统层面做一个统一的电源管理控制器,协调这些技术的动作时序。

好了,关于电压频率调节的三种核心技术就讲到这里。下一章咱们聊聊时钟门控和电源门控,这两个技术在数字芯片里也是功耗优化的重头戏。到时候见。