如何验证动态电压频率调整(DVFS)功能?

解读

DVFS 验证的本质是证明“当系统负载变化时,芯片能在规定时间内、以规定顺序、安全地切换电压与频率,且切换后功能正确、性能达标、功耗下降”。国内项目通常把 DVFS 拆成三大场景:

  1. 正常调频调压(P-state 切换);
  2. 异常/紧急降频降压(过热、电池低压、OCP 保护);
  3. 低功耗模式进出(Idle->Retention->OFF,再恢复到目标 P-state)。

面试时,面试官想听到的是:你如何把这三大场景翻译成可执行的验证计划,如何穷尽边界,如何 sign-off。

知识点

  1. 协议与规格:ARM SCMI/PMU、MIPI SPMI、AVSBus、Intel IMVP9、SMARC 电压域划分、P-state 表、OPP(Operating Performance Point)定义。
  2. 关键时序:电压稳定时间(TVS)、频率锁定时间(Tlock)、电压-频率先后关系(Always V↓先于 F↓,F↑先于 V↑)、异步时钟域握手、切换窗口内禁止中断/AXI 传输。
  3. 功耗与性能:切换前后 V×F 比值、能量节省比例、CoreMark/Dhrystone 分数下降比例、瞬态电流过冲(dI/dt)。
  4. 验证方法学:UVM-SystemVerilog、UVM-ML 结合 Python 做功耗模型、形式验证(SVA 检查死锁)、硬件加速(Palladium 热表回灌)、FPGA 原型(真实电源板+电子负载)。
  5. 风险点:电压毛刺触发 CMOS 闩锁、频率滑移导致时序违例、PLL 失锁产生时钟毛刺、切换期间寄存器被误写、DVFS 握手信号跨时钟域漏采、温度反压逻辑死区。

答案

一、验证计划(V-plan)

  1. 功能点分解:
    a. P-state 表遍历(min~max,步长 1);
    b. 随机负载触发切换(CPU 占比 0~100 % 随机);
    c. 错误注入:PMU 下发非法 P-state、SCMI 超时、SPMI 应答异常、PLL 失锁、温度传感器跳变;
    d. 低功耗耦合:在 DVFS 中途插入 WFI/Retention 请求,验证能否完成切换或安全回退。
  2. 覆盖率指标:
    a. 代码覆盖:RTL 行覆盖 100 %,分支覆盖 >95 %,FSM 状态/迁移 100 %;
    b. 功能覆盖:OPP 交叉覆盖(电压×频率×温度×工艺角)≥ 90 %;
    c. 断言覆盖:SVA 覆盖率 100 %,包含“切换期间无事务丢失”、“电压稳定后频率才使能”等 18 条关键属性。

二、测试平台架构

  1. UVM 环境:
    • agent:
      ‑ CPU 配置通道(APB3)
      ‑ SCMI 消息通道(I2C 快速模式 1 MHz)
      ‑ SPMI 电源通道(26 MHz)
    • reference model:SystemVerilog-DPI 调用 Python 脚本,实时计算功耗曲线,与 PMU 采样值对比,误差 <3 %;
    • scoreboard:检查切换完成后寄存器 PSTATE_STAT、实际电压采样值、PLL 锁定标志、CoreMark 得分;
    • 时序检查器:SVA 实时采样 tv/sv/fv 信号,若 tv↑→fv↑ 延迟 > 10 μs 则报错。
  2. 形式验证:
    • 对“电压-频率顺序”属性做 Formal,穷举 2^32 种输入序列,证明无死锁;
    • 对跨时钟域握手信号做 CDC 形式验证,确保无漏采、无亚稳态传播。
  3. 硬件加速:
    • 在 Palladium 上跑 Linux+CoreMark,用电子负载板回灌 0→2 A 阶跃电流,观察 dI/dt 是否触发过冲保护;
    • 将温度传感器模型换成热表真实数据,跑 24 小时循环切换,统计失效率。
  4. FPGA 原型:
    • 外接真实 PMIC(如 TI TPS65086),用示波器量电压纹波,确认 <20 mV;
    • 用频率计测时钟,验证频率误差 <0.1 %。

三、典型测试用例

  1. 正向用例:
    • 顺序切换 0→1→3→7→3→1→0,每阶停留 1 ms,检查功耗下降比例是否符合 spec(≥ 25 %)。
  2. 反向用例:
    • 在电压未稳定前强制写频率寄存器,预期触发安全门闩,系统保持原 P-state 并上报中断。
  3. 压力用例:
    • 每 10 µs 切换一次,连续 1 万次,统计 PLL 失锁次数 = 0。
  4. 边界用例:
    • 在 125 °C 下请求最高 P-state,验证温度反压逻辑是否自动降到 P-state4,并触发内核 thermal 中断。

四、sign-off 标准

  1. 功能:所有用例通过,无严重性 ≥L1 的 bug;
  2. 性能:切换延迟 < 50 µs(spec < 80 µs);
  3. 功耗:同负载下,开 DVFS 比固定频率省电 ≥ 30 %;
  4. 时序:PT 在 85 °C/0.72 V 下仍满足 1.1×频率目标;
  5. 文档:交付《DVFS 验证报告》《覆盖率分析报告》《形式验证报告》《硬件加速长稳日志》,评审一次性通过。

拓展思考

  1. 异构 DVFS:大核、小核、NPU、GPU 各自独立电压域,如何验证跨域调度时的总线瓶颈与 LLC 频率一致性?
  2. 数字孪生:用 Python 建立电源网络 RLC 模型,与 RTL 协同仿真,提前预测电压跌落,是否值得在流片前投入?
  3. 安全场景:若遭遇 Rowhammer 攻击导致温度骤升,验证环境如何注入“恶意升温”向量,确保 DVFS 不会误降到无法恢复的频率?
  4. 车规 AEC-Q100:-40 °C 启动时 PMIC 响应慢,DVFS 初始化序列可能超时,如何设计冷启动用例并通过 1000 次循环?