UPF 电源意图实战:power domain、supply、隔离/保持/电平转换
更新时间:2026-09-14。本文是低功耗进阶层正文。概念先读 低功耗设计与 UPF,断电边界单元见 电源门控、隔离与保持。本篇聚焦 UPF(Unified Power Format, IEEE 1801)怎么写、怎么被工具消费。
一、为什么电源策略不能写进 RTL
RTL 描述功能,UPF 描述供电意图。同一个 RTL IP 可以在 A 产品中常上电,在 B 产品中整体断电;如果把隔离、保持、电源开关写进 RTL,IP 复用、物理实现和功能验证都会被污染。UPF 的价值是让仿真、综合、插入、物理实现、功耗签核读同一份策略:
RTL:功能行为,不关心哪个 supply 供电
UPF:电源域、电源轨、开关、隔离、保持、电平转换、合法状态
工具:power-aware 仿真 / 综合插入 / 物理连接 / 功耗签核二、最小 UPF 文件骨架
下面是教学骨架,不同厂商 UPF 版本关键字略有差异,但语义一致:
# 1. 顶层供电网络
create_supply_net VDD_SW -domain TOP
create_supply_net VSS -domain TOP
create_supply_net VDD_AON -domain TOP
create_supply_port VDD_SW -domain TOP
create_supply_port VSS -domain TOP
create_supply_port VDD_AON -domain TOP
# 2. 可关断电源域 PD_GPU,父域是 TOP
create_power_domain PD_GPU -elements {u_gpu}
# 3. 为 PD_GPU 建独立 supply set,并经电源开关接 VDD_AON/SW
create_supply_net VDD_GPU -domain PD_GPU
create_supply_set SS_GPU -function {power VDD_GPU} -function {ground VSS}
create_power_switch SW_GPU \
-domain PD_GPU \
-input_supply_port {vin VDD_AON} \
-output_supply_port {vout VDD_GPU} \
-control_port {ctrl pwr_on_gpu}
# 4. 断电时,PD_GPU 输出到常开区的信号 clamp 成 0
set_isolation ISO_GPU \
-domain PD_GPU \
-isolation_power_net VDD_AON \
-clamp_value 0 \
-applies_to outputs \
-isolation_signal iso_gpu_en
# 5. GPU 中标记为 ret 的寄存器,掉电前保存、上电后恢复
set_retention RET_GPU \
-domain PD_GPU \
-retention_power_net VDD_AON \
-save_signal {ret_save posedge} \
-restore_signal {ret_restore posedge}
# 6. PD_GPU 与 TOP 电压不同,边界自动插 level shifter
set_level_shifter LS_GPU -domain PD_GPU -applies_to outputs不要把示例当生产模板直接用;真实项目还需要 supply set 关联、domain refinement、power state table、always-on buffer 和层次化策略。
三、每个命令解决什么问题
| UPF 元素 | 解决的问题 | 写错的典型后果 |
|---|---|---|
create_power_domain | 哪些层次属于哪个可关断/电压域 | 跨域信号漏做隔离,或整个域无法断电 |
| supply net / set | power/ground/nwell 等供电从哪来 | retention/ISO 无 always-on 电,掉电时失效 |
create_power_switch | 常开供电到可关断供电之间的开关 | 开关控制不可达,rush current 无控制 |
set_isolation | 断电域输出 clamp 到安全值 | X 灌入常开区、接口直通电流 |
set_retention | 掉电时保存关键寄存器 | 唤醒状态丢失,restore 后行为不确定 |
set_level_shifter | 不同电压域间电平转换 | 高压/低压接口误判或可靠性问题 |
| PST/电源状态表 | 哪些电压/开关组合合法 | 工具允许未定义状态,仿真和实现不一致 |
四、隔离与保持控制顺序
UPF 不只是插单元,还隐含电源状态机时序。安全关电顺序通常是:
idle_ack → block_new_req → save(retention) → assert isolation → open switch
上电:close switch(ramp) → wait power_good → restore → deassert isolation → unblock req最常见错误是让软件或 PSM 在隔离使能前就断电,或电源未稳定就撤隔离。power-aware 仿真应能在 RTL 阶段报出 X 穿过边界;若仿真没抓到,门级 X-prop 仍可能暴露,见 门级仿真、SDF 与 X 传播。
五、power-aware 仿真怎么读结果
跑 power-aware 仿真时重点看四件事:
- 断电域输出:断电后是否按策略 clamp,而不是出现 X/Z;
- retention 寄存器:save 时状态是否进入 backup,restore 后是否一致;
- 电源状态机:iso、save、restore、switch control 是否按顺序;
- 常开区行为:掉电/上电期间是否继续接收请求、是否错误等待已断电模块。
波形里建议同时显示 supply 电压状态(OFF/ON)、switch enable、iso enable、retention nS/nR、跨域接口,而不只看数字信号。
六、UPF 审查报告怎么读
工具完成 low-power 插入和检查后,重点不只看是否报错,还要核对策略有没有落到正确对象上:
| 报告项 | 应该确认什么 | 常见异常 |
|---|---|---|
| domain mapping | RTL 层次是否落在预期电源域 | 某个子模块漏到 TOP,断电后仍吸主电源 |
| isolation summary | 每条跨域输出是否插入 ISO、clamp 值是否正确 | 低有效信号被统一 clamp 0,反而表示有效 |
| retention summary | retention cell 是否由 backup supply 供电 | save/restore 控制来自会断电的域 |
| level shifter summary | 不同电压边界是否双向插入 | 只插输出、漏输入,或同电压域误插 |
| power switch network | switch enable、ack、ramp 链可达 | PSM 在 AON,但控制缓冲被放进可关断域 |
| power state table | 所有合法状态和过渡态完整 | ON/OFF 有定义,RETENTION 或过渡态缺失 |
审查时建议从一张「跨域信号表」开始:逐个信号列出源域、目的域、两端电压、有效电平、断电安全值、是否需要保持。工具报告必须和这张表一一对应。只看工具自动插入的单元数量没有意义,因为工具可以在错误边界上插入很多「正确单元」。
七、落地检查清单
- [ ] 每个可关断层次在 UPF 中归属明确,无跨域漏网信号;
- [ ] ISO、RET、PSM 都有 always-on supply;
- [ ] clamp 值符合接口协议,valid/request 类信号默认钳为无效;
- [ ] retention 只覆盖必要状态,不是全域无差别保存;
- [ ] level shifter 只用于电压不同的边界,不和 isolation 混淆;
- [ ] 电源状态表覆盖 ON/OFF/SLEEP/RETENTION/过渡态;
- [ ] power-aware 仿真覆盖多次上下电和上电中请求;
- [ ] 综合/物理/签核使用同一版本 UPF,策略报告可追溯。
总结
UPF 用独立文件声明电源域、供电网络、开关、隔离、保持、电平转换和合法电源状态,让同一份电源意图贯穿 power-aware 仿真、综合插入、物理实现和签核;写 UPF 的关键不是背命令,而是保证域边界完整、always-on 供电正确、隔离先于断电、恢复后于电源稳定、retention 只保存必要状态,并让工具报告和波形验证每个跨域信号在所有电源状态下都安全。