3. 电源域划分与电压调节:多电压域划分策略、DVFS与AVS技术
各位同学,咱们今天聊点实在的。电源域划分和电压调节,说白了就是给芯片的各个模块“分灶吃饭”。你不能让一个跑在1.8V的IO口和一个只需要0.7V的核心逻辑吃同一锅饭,对吧?我当年刚入行时,就吃过这个亏——一个项目为了省事,整个芯片共用一个电压域,结果功耗爆炸,散热片都能煎鸡蛋了。
好,咱们一步步拆解。先看多电压域怎么划,再看DVFS和AVS这两个调压利器。
3.1 多电压域划分策略
为什么要划分电压域?你想想看,芯片里各个模块对电压的要求天差地别:
- Core(核心逻辑):追求高性能,电压通常最低(0.6V~0.9V),但电流最大。
- IO(输入输出):要跟外部接口匹配,电压高(1.8V、3.3V),电流小。
- Memory(存储器):SRAM、寄存器堆,对噪声敏感,需要稳定电压。
- PLL(锁相环):模拟电路,对电源纹波要求极高,必须单独伺候。
我个人习惯,划分电压域时遵循三个原则:
- 功能隔离:不同功能的模块,如果电压需求差异超过0.3V,就坚决分开。
- 噪声隔离:数字模块的开关噪声会污染模拟模块。PLL和高速IO必须用独立的LDO或PMIC供电。
- 功耗优化:能关掉的模块,单独设一个域。比如摄像头接口不用时,直接断电。
举个例子,一个典型的车规SoC,我建议这样划分:
| 电压域 | 典型电压 | 包含模块 | 备注 |
|---|---|---|---|
| VDD_CORE | 0.7V~0.9V | CPU、GPU、NPU | 支持DVFS |
| VDD_IO | 1.8V/3.3V | GPIO、SPI、UART | 固定电压 |
| VDD_MEM | 1.1V~1.2V | SRAM、Cache | 低噪声 |
| VDD_PLL | 1.8V | PLL、DLL | 独立LDO |
| VDD_SAFE | 1.2V | 安全岛、看门狗 | 永不掉电 |
关键点:每个电压域之间必须加电平转换器(Level Shifter),否则跨域信号会出问题。我曾经见过一个设计,忘了在Core和IO之间加Level Shifter,结果IO口输出高电平时,Core那边直接烧了。
3.2 DVFS(动态电压频率调节)原理
DVFS,说白了就是“看人下菜碟”。芯片负载重时,提高电压和频率;负载轻时,降低电压和频率。这样既能保证性能,又能省电。
它的核心逻辑很简单:
// 伪代码:DVFS控制逻辑
while (1) {
load = get_current_load(); // 获取当前负载
if (load > HIGH_THRESHOLD) {
set_voltage(V_HIGH);
set_frequency(F_HIGH);
} else if (load < LOW_THRESHOLD) {
set_voltage(V_LOW);
set_frequency(F_LOW);
} else {
set_voltage(V_MID);
set_frequency(F_MID);
}
sleep(10ms); // 每10ms调整一次
}
嗯,这里要注意:DVFS不是随便调的。电压和频率必须匹配。频率越高,需要的电压也越高。这个关系叫“F-V曲线”,每个芯片都得实测标定。
我在项目中遇到过一个问题:DVFS切换太快,导致电压还没稳定,频率就上去了,结果芯片直接死机。后来我加了一个“电压稳定等待”机制——每次调压后,等LDO输出稳定了,再调频率。这个坑,你们以后肯定会遇到。
实战技巧:DVFS的切换时间,建议控制在10μs~100μs之间。太快了容易出问题,太慢了又跟不上负载变化。我一般用硬件状态机来实现,比软件中断靠谱得多。
3.3 AVS(自适应电压调节)技术
AVS比DVFS更“聪明”。DVFS是根据负载调压,而AVS是根据芯片的“体质”调压。你想想看,同一批晶圆,有的芯片漏电流大,有的小。如果都用同一个电压,那漏电大的芯片功耗就高,漏电小的又浪费了性能。
AVS的原理是这样的:芯片内部放一个“电压监测环”(Voltage Monitor Ring),实时监测芯片的临界路径延迟。如果延迟偏大,说明电压不够,就调高一点;如果延迟偏小,说明电压有余量,就调低一点。
我画个图,帮你们理解AVS的闭环控制:
AVS的好处很明显:
- 省电:每颗芯片都能找到自己的“最佳电压”,平均能省10%~20%的功耗。
- 补偿工艺偏差:同一批芯片,性能一致性更好。
- 适应老化:芯片用久了,延迟会变慢。AVS会自动调高电压,延长寿命。
注意:AVS不是万能的。它依赖电压监测环的精度。如果监测环本身不准,那整个闭环就失控了。我建议在芯片量产时,每颗芯片都做一次“AVS校准”,把监测环的偏差标定出来。
3.4 DVFS与AVS的协同工作
实际项目中,DVFS和AVS经常一起用。DVFS负责“粗调”,根据负载切换电压档位;AVS负责“细调”,在每个档位内微调电压。
举个例子:
- 系统检测到负载升高,DVFS把电压从0.7V切换到0.8V。
- AVS监测到延迟仍然偏大,再微调0.05V,最终稳定在0.85V。
- 负载降低后,DVFS切回0.7V,AVS再微调回0.72V。
这样配合,既能快速响应负载变化,又能精确控制电压。我做过一个项目,用这种方案,芯片的功耗比单纯用DVFS又降了8%。
我的经验:DVFS的切换频率建议在1kHz~10kHz,AVS的调节频率可以慢一些,100Hz~1kHz就够了。太快了反而容易引起振荡。
好了,这一节的内容就这些。记住:电源域划分是基础,DVFS是策略,AVS是精度。三者结合,才能让你的车规SoC既跑得快又吃得少。
公众号:蓝海资料掘金营,微信deep3321