4、功耗管理单元:PMU架构、电源域划分、电压调节器控制
功耗管理单元,也就是PMU,是异构处理器的“大管家”。
我经常跟团队里的小朋友说,没有PMU的芯片就像没有刹车的跑车——性能再猛,你也hold不住。说白了,PMU就是负责监控、决策、执行功耗策略的那个核心模块。
4.1 PMU的架构设计
PMU的架构,我个人习惯把它分成三层:
- 感知层:收集电压、温度、电流、频率这些实时数据
- 决策层:根据策略算法,决定要不要降频、要不要关域
- 执行层:控制电压调节器、时钟门控、电源开关这些硬件
我在项目中遇到过一种情况:感知层采样频率太低,导致芯片温度已经飙到105度了,PMU还在“岁月静好”地跑高频。嗯,那次差点烧片子。所以采样频率至少要做到10kHz以上,才能及时响应瞬态变化。
关键点:PMU的决策延迟必须小于热时间常数。一般控制在10微秒以内比较安全。
你想想看,如果决策层用了复杂的机器学习模型,算半天才出结果,芯片早就冒烟了。所以实际项目中,决策层多用查表法或者简单的状态机,又快又稳。
4.2 电源域划分
电源域划分,说白了就是把芯片切成几块,每块可以独立开关。
为什么要这么干?因为异构处理器里,CPU、GPU、NPU、DSP这些模块,不是时时刻刻都在工作的。比如手机看视频时,GPU可能闲着,NPU可能闲着,那干嘛还给它们供电?
我建议按照以下原则来划分电源域:
- 功能独立性:每个域对应一个独立的功能模块
- 电压一致性:同一个域内的模块,工作电压范围要一致
- 物理布局紧凑:避免跨域走线太长,增加IR drop
- 唤醒延迟敏感度:经常唤醒的域,面积不要太大
实战技巧:我曾经把一个NPU和ISP放在同一个电源域里,结果拍照时NPU不工作,但ISP一启动,NPU也跟着漏电。后来拆成两个域,待机功耗直接降了30%。
电源域之间需要加隔离单元,比如电平转换器和隔离cell。否则一个域断电了,信号飘到另一个域,会把那边的管子烧掉。这个坑我踩过,真的会冒烟。
4.3 电压调节器控制
电压调节器,也就是VR,是PMU的执行抓手。
常见的VR控制方式有两种:
| 控制方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| PWM(脉宽调制) | 效率高,纹波小 | 响应慢,有开关噪声 | 大电流、稳态场景 |
| LDO(低压差线性稳压) | 响应快,噪声低 | 效率低,发热大 | 小电流、噪声敏感场景 |
我个人习惯的做法是:大核用PWM,小核和IO用LDO。这样既保证了效率,又照顾了噪声。
电压调节器的控制接口,通常是通过I2C或者SPI来配置。PMU写一个目标电压值到VR的寄存器,VR内部会通过反馈环路把输出电压稳定到目标值。
// 伪代码示例:PMU控制VR升压
void pmu_set_voltage(uint8_t domain_id, uint16_t target_mv) {
// 1. 查表获取VR配置参数
vr_config_t cfg = vr_lookup_table[domain_id][target_mv];
// 2. 通过I2C写入VR寄存器
i2c_write(VR_ADDR, cfg.vsel_reg, cfg.vsel_value);
// 3. 等待电压稳定(软启动)
delay_us(cfg.soft_start_time_us);
// 4. 读取VR状态,确认电压到位
uint8_t status = i2c_read(VR_ADDR, VR_STATUS_REG);
if (status & VR_READY_MASK) {
// 电压稳定,可以继续
} else {
// 异常处理,触发中断
pmu_trigger_fault_handler(domain_id);
}
}
注意:电压切换时,一定要做软启动。我曾经为了省那几十微秒,直接硬切电压,结果导致电源域内的时序逻辑全部误翻转,系统直接死机。软启动时间一般控制在50-200微秒,具体看负载电容大小。
还有一个容易被忽略的点:电压调节器的输出电容不能太小。太小了,负载瞬变时电压会掉得很厉害。我一般建议至少留2.2μF的去耦电容,靠近VR输出引脚放置。
嗯,关于PMU的内容,今天就先聊这么多。记住一句话:PMU不是配角,它是异构处理器的“心脏起搏器”。设计好了,芯片能省电又稳定;设计不好,流片回来就是一块废铁。