4、功耗管理单元:PMU架构、电源域划分、电压调节器控制

功耗管理单元,也就是PMU,是异构处理器的“大管家”。

我经常跟团队里的小朋友说,没有PMU的芯片就像没有刹车的跑车——性能再猛,你也hold不住。说白了,PMU就是负责监控、决策、执行功耗策略的那个核心模块。

4.1 PMU的架构设计

PMU的架构,我个人习惯把它分成三层:

  • 感知层:收集电压、温度、电流、频率这些实时数据
  • 决策层:根据策略算法,决定要不要降频、要不要关域
  • 执行层:控制电压调节器、时钟门控、电源开关这些硬件

我在项目中遇到过一种情况:感知层采样频率太低,导致芯片温度已经飙到105度了,PMU还在“岁月静好”地跑高频。嗯,那次差点烧片子。所以采样频率至少要做到10kHz以上,才能及时响应瞬态变化。

关键点:PMU的决策延迟必须小于热时间常数。一般控制在10微秒以内比较安全。

你想想看,如果决策层用了复杂的机器学习模型,算半天才出结果,芯片早就冒烟了。所以实际项目中,决策层多用查表法或者简单的状态机,又快又稳。

4.2 电源域划分

电源域划分,说白了就是把芯片切成几块,每块可以独立开关。

为什么要这么干?因为异构处理器里,CPU、GPU、NPU、DSP这些模块,不是时时刻刻都在工作的。比如手机看视频时,GPU可能闲着,NPU可能闲着,那干嘛还给它们供电?

我建议按照以下原则来划分电源域:

  1. 功能独立性:每个域对应一个独立的功能模块
  2. 电压一致性:同一个域内的模块,工作电压范围要一致
  3. 物理布局紧凑:避免跨域走线太长,增加IR drop
  4. 唤醒延迟敏感度:经常唤醒的域,面积不要太大

实战技巧:我曾经把一个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不是配角,它是异构处理器的“心脏起搏器”。设计好了,芯片能省电又稳定;设计不好,流片回来就是一块废铁。