UPF / .lib / SDF:DPA 链路里的三大配套格式
DPA 技术报告 里反复出现三个看起来和"活动数据"无关的格式:UPF、.lib、SDF。它们不是活动本身,却是把活动变成可信功耗数字的必要前提。这份文档讲清它们各自负责什么,以及为什么缺一不可。
术语前置:
- UPF(Unified Power Format,统一低功耗格式):IEEE 1801 标准,描述芯片的电源域、电压、隔离(isolation)、保持(retention)等约束;
- .lib(Liberty 工艺库):Foundry 提供的单元库,含每个标准单元的面积、时序、内部/开关功耗查表;
- SDF(Standard Delay Format,标准延时格式):描述门级网表中每条路径的实际延迟,用于时序反标(back‑annotation)。
1 三者各自的角色
一句话分工:
- UPF 告诉工具"这个模块现在工作在什么电压下"(动态功耗 ∝ V²,电压错了功耗全错);
- .lib 告诉工具"每个单元翻转一次消耗多少能量"(活动的燃料单价);
- SDF 告诉工具"信号真实传播延迟多少",用来还原 0‑delay 仿真里丢失的毛刺功耗。
2 UPF:电源意图的描述语言
2.1 它定义了什么
UPF 用 Tcl 风格的命令描述电源架构:
create_power_domain:划分电源域(如 always‑on 域、可关断域);create_supply_net/create_supply_port:电源网络与端口;set_voltage:各域工作电压;set_isolation/set_retention:域间隔离与状态保持策略。
2.2 为什么 DPA 离不开它
动态功耗公式里 V 来自 UPF。如果一个模块实际在 0.8V 跑,但 UPF 写成了 1.0V,算出来的功耗会差 (1.0/0.8)²≈1.56 倍——直接误判。更糟的是电源域关断/隔离逻辑若 UPF 描述不全,工具会把关断域误算成活动域。
这也解释了 报告 5.7 节 里"UPF 不全致功耗算错"那条坑:Runtime 工程师不能擅自改 UPF,必须让低功耗方法学工程师补全。
3 .lib:Foundry 给的"单价表"
3.1 里面有什么
每个标准单元(BUF、AND、DFF…)在 .lib 里有:
- 引脚电容(决定翻转时的充放电量);
- 内部功耗(internal power):单元内部开关消耗的能量,常按输入翻转/输出负载查表;
- 时序弧(供时序分析,但功耗工具也借此选对应功耗查表)。
3.2 它是 DPA 精度的天花板
无论活动采得多准,最终功耗 = Σ(活动 × 单元单价)。.lib 模型不准(尤其非理想翻转、状态依赖功耗),DPA 结果就失真。报告第 6 章误差来源 第一条就是"工艺库模型精度"。
4 SDF:把毛刺"补"回来的关键
4.1 0‑delay 仿真没有毛刺
Emulator 和 RTL 仿真默认零延迟,信号瞬间跳变,不会产生真实门级里因为路径延迟差导致的毛刺(glitch)——一堆本应抵消的短脉冲。但先进工艺下,毛刺可能占动态功耗的 10%~30%。
4.2 用 SDF 回放还原
做法(见 报告 6 章精度闭环):
- 从 DPA‑DB / SAIF 取出活动;
- 用 Xcelium 把活动**回注(PowerPlayback)**到带 SDF 反标的门级网表;
- 真实延迟让毛刺重新出现,重算得到含毛刺的精确 SAIF;
- 交给 PrimePower 出最终功耗与 IR‑Drop。
5 三者与活动格式的配合总览
| 格式 | 类型 | 在 DPA 中的作用 | 缺失后果 |
|---|---|---|---|
| UPF | 电源约束 | 提供电压 V、电源域划分 | 功耗量级错误 |
| .lib | 工艺库 | 单元功耗单价 | 精度天花板失真 |
| SDF | 时序反标 | 还原毛刺功耗 | 先进工艺低估峰值 |
| SAIF/VCD/DPA‑DB | 活动数据 | 翻转次数/波形 | 无输入则无法计算 |
6 一句话总结
UPF 给电压、.lib 给单价、SDF 补毛刺——三类配套格式和活动数据协同,才把"翻转"变成"可信的功耗数字";其中任意一项不全或不准,DPA 结果都会系统性偏离。