Power-aware UVM:用 UPF 验证隔离、保持、掉电与恢复
更新时间:2026-09-14。本文是数字验证系列第 13 篇,也是低功耗验证的关键衔接。UPF 写法见 UPF 低功耗设计实践,电源门控结构见 Power Gating、隔离与保持,硅后流程见 电源域 bring-up 案例。
一、为什么普通仿真验证不了电源门控
普通仿真中所有信号都是逻辑值,没有“供电”概念:
- 模块断电后输出不会自动变 X/Z;
- isolation cell 是否插、插在哪边、输出什么值看不到;
- retention register 的 save/restore 时序不会报错;
- power switch 上电斜坡、ack、复位次序无法体现;
- level shifter 跨压接错也可能仿真通过。
Power-aware 仿真使用同一套 UPF 与 RTL/网表,让 supply 有 ON/OFF/状态,工具按电源语义传播 X/Z 和保持值。
二、环境结构
Power agent 驱动或监听 VDD/VSS、power enable、isolation enable、retention save/restore、pwr_ack;Bus agent 在状态迁移中施加正常访问、错误访问和边界事务。
三、电源状态与状态图
先定义电源状态表(PST, Power State Table),再生成迁移序列:
| 状态 | PD_CORE | PD_RAM | ISO | RET | 允许访问 |
|---|---|---|---|---|---|
| RUN | ON | ON | off | off | 全部 |
| LIGHT_SLEEP | ON | ON | off | on | 核心时钟停 |
| DEEP_SLEEP | OFF | ON | on | on | 仅恢复控制 |
| OFF | OFF | OFF | on | off/on | 禁止功能访问 |
| BOOT_RESTORE | ON ramping | ON | on→off | restore | 等待 pwr_ack |
必须覆盖合法迁移,也要测非法/激进迁移:未隔离先断电、未 save 就 restore、ISO 过早撤销、pwr_ack 未完成就访问、复位与掉电同时发生。
四、Sequence 怎么写
virtual task power_down_core();
// 1. 停止新事务并等待 outstanding 排空
mst.stop_new_req();
wait (vif.outstanding == 0);
// 2. 先保存上下文
vif.ret_save <= 1'b1;
repeat (2) @(posedge vif.pwr_clk);
// 3. 打开隔离,再断电
vif.iso_en <= 1'b1;
vif.pwr_sw_en <= 1'b0;
wait (vif.pwr_ack == 1'b0);
endtask顺序错了,硅上可能表现为总线挂死、RAM 数据损坏或漏电没降下来。虚拟 sequence 应随机化:事务停留点、断电持续时间、恢复次数、电压状态、复位穿插、主设备访问窗口。
五、必须检查什么
- 断电边界:OFF 域输出是否为规定隔离值(0/1/clamp/latch last)。
- X 传播:断电不得把 X 传入 ON 域控制逻辑。
- 保持寄存器:save 时数据稳定,restore 后值一致,非保持寄存器为复位/X。
- 电源开关 ack:enable 到 good-power ack 的时序与 PMU 状态机一致。
- level shifter:高压域与低压域方向、使能、断电值正确。
- 协议行为:断电域 slave 不应响应正在进行的 AXI 事务;fabric 返回错误或由桥保证安全。
- 功耗意图一致:RTL、综合、网表、PR 后 UPF 版本一致。
六、报告与覆盖率
- 每个电源状态、每条合法迁移、关键非法迁移均有 functional coverage。
- ISO/RET/power switch 控制信号的时序交叉覆盖。
- supply ON/OFF 与复位、总线 valid/ready、时钟 gate 的交叉。
- PA(power-aware)仿真中 X propagation 的源头和目的地记录。
- 门级 power-aware 仿真要结合真实隔离单元和 power switch 模型。
七、调试一个断电挂死的典型路径
现象是系统进入深睡眠后,恢复时 AXI 总线偶尔挂死,且功能仿真无法复现。先不要从 CPU 固件猜起,应在 power-aware 波形中按固定顺序定位:断电前 outstanding 是否为零、isolation enable 是否先于 power switch 关闭、pwr_ack 是否已经返回、恢复时 reset 是否先撤销再解除隔离。若总线在隔离仍有效时发起读操作,slave 接口返回的是钳位值而不是合法响应,主设备就可能等待一个永远不到的 RVALID。
第二类问题来自 retention 时序。save 有效期间数据必须稳定,若 CPU 在同一周期仍写最后一个上下文寄存器,保持单元可能采到变化中的值;恢复时又必须先供电稳定、再释放 reset/隔离、最后撤销 restore。波形检查要把电源状态、时钟、复位、ISO、RET、总线 valid/ready 放在同一时间轴。只看 UPF 静态连接无法发现“顺序合法但窗口重叠”的错误。
第三类问题来自网表与 RTL UPF 不一致。综合时工具可能把隔离单元优化到另一侧,物理实现时 level shifter 因 floorplan 被移动,power switch enable 还可能被插入缓冲导致 ack 延迟变化。每个阶段都要做 low-power structural check,并将门级 power-aware 最小恢复序列纳入回归。这样硅后 PMU 固件使用的时序图才与签核网表一致。
Checklist
- [ ] UPF 中 PD、supply、ISO、RET、level shifter、PSW 与设计意图一致。
- [ ] 所有合法电源状态及迁移覆盖。
- [ ] 断电期间无未定义 X 进入 always-on 域。
- [ ] save/restore/iso 顺序满足 spec。
- [ ] 断电期间总线访问有明确错误/阻塞策略。
- [ ] RTL UPF、综合 UPF、PR/网表 UPF 做一致性检查。
- [ ] 门级 power-aware 仿真和硅后 PMU 序列可互相对应。
相关与延伸
UVM 数据流见 Sequence/Driver/Scoreboard;X-prop 见 门级仿真、SDF 与 X-prop;电源签核见 IR-Drop 与 EM 签核。
总结
Power-aware 验证把“电源”从文档里的框图变成仿真中的状态:UPF 定义域和隔离/保持结构,UVM 驱动真实断电恢复序列,checker 证明断电值不外泄、保持值能恢复、协议不挂死;这些问题只靠普通功能仿真必然漏。