2. UPF核心概念与Cadence工具链
低功耗设计的本质,是把“电”当作一种需要被显式管理的资源。UPF(Unified Power Format,IEEE 1801)就是用一套与 Verilog 分离的描述语言,把电源意图从功能逻辑中剥离出来:哪里是一个电源域、什么时候断电、断电时哪些信号要隔离、哪些寄存器要保电、跨域信号电平如何转换。理解这些概念,并清楚 Cadence 各工具在哪个阶段消费哪部分信息,是后续所有实现与签核工作的基础。
一、五个核心概念:从“域”到“跨域”
Power Domain(电源域)是电源管理的最小分区单位。一个 domain 内的所有实例共享同一套供电网络(power/ground net),因此它们的开与关是同步的。UPF 中用 create_power_domain 定义,并通过 set_domain_supply_net 或 add_power_state 绑定供电网络。域的划分通常与设计的功能分区一致,例如一个 SoC 可划分为 CPU 域、GPU 域、DDR 域、Always-On 域。Always-On 域始终带电,是隔离控制信号、保留寄存器和电源管理控制器的落脚点。
Power Switch(电源开关)负责真正切断或接通域内供电。它可以是细粒度的标准单元开关(header/footer switch),也可以是粗粒度的电源门控单元(Power Gating Cell,如 MTCMOS)。UPF 用 create_power_switch 描述开关的控制信号、输入输出供电端口以及导通条件。开关的使能信号本身必须来自常开域,否则会出现“关不掉”或“开不了”的逻辑死锁。开关的导通电阻会带来 IR drop,因此开关数量、尺寸与分布是后续 Voltus 分析的重点。
Isolation(隔离)解决的是“关断域输出悬空”问题。当一个域断电后,其输出信号会漂移到不确定电平,若直接驱动常开域输入,会在接收端产生直通电流甚至逻辑误判。隔离单元(Isolation Cell)在断电时把输出钳位到已知值(通常为 0 或 1),由隔离控制信号(来自常开域)决定何时启用。UPF 用 set_isolation 指定隔离位置(域边界、端口或具体实例)、钳位值和隔离使能条件。隔离策略的关键是“钳位值必须与接收端在该状态下的期望值一致”,否则会引入功能错误。
Retention(保持)针对的是“断电后仍需记住的状态”。Retention Register 内部有主、从两套供电:主供电来自可关断域,从供电(或 shadow 供电)来自常开域。断电时,寄存器把值保存到 shadow 侧;上电后恢复。UPF 用 set_retention 指定哪些寄存器需要保持、保存与恢复的控制信号、以及保持供电网络。Retention 的代价是面积和漏电,因此只对真正必要的状态寄存器使用,例如配置寄存器、状态机当前状态、计数器关键位。
Level Shifter(电平转换)处理的是“不同电压域之间的信号传递”。当 1.2V 域驱动 0.8V 域,或 0.8V 域驱动 1.2V 域时,直接连接会导致驱动不足、阈值误判或长期可靠性问题。Level Shifter 分为升压(LH)、降压(HL)和双向三类,UPF 用 set_level_shifter 指定方向、位置和阈值策略。需要注意的是,Level Shifter 本身也需要供电,其输入侧和输出侧分别接对应域的供电网络,因此它通常被放置在两个域的边界上。
二、Cadence 工具链的分工与数据流
UPF 不是某一个工具的文件,而是贯穿整个实现与签核流程的“电源意图契约”。在 Cadence 流程中,各工具消费 UPF 的侧重点不同,理解这一点可以避免“UPF 写了但工具没生效”的常见问题。
Genus 是综合阶段的 UPF 消费者。它读取 RTL 与 UPF,在综合过程中完成三件事:一是根据 power domain 信息把逻辑划分到不同域;二是插入 isolation、level shifter、retention 等低功耗单元;三是生成带电源信息的网表(PG netlist)。Genus 还会做初步的 UPF 语法与语义检查,例如隔离控制信号是否来自常开域、retention 供电是否完整。综合阶段如果 UPF 有误,后续物理实现会继承错误,因此 Genus 的 UPF 检查报告是第一道关口。
Innovus 是物理实现阶段的 UPF 消费者。它接收 Genus 输出的网表和 UPF,完成电源网络(PG Mesh)规划、电源开关的物理摆放、隔离与 level shifter 的合法化(legalization),以及跨域信号的布线约束。Innovus 关注的是“UPF 描述的逻辑关系能否在物理上落地”:开关放在哪里、PG 网格是否覆盖所有域、隔离单元是否真的位于域边界。Innovus 还会输出带物理信息的数据库,供后续签核工具使用。
Voltus 负责电源完整性签核。它读取 Innovus 的物理数据库和 UPF,进行静态与动态 IR drop 分析、电迁移(EM)检查、以及电源开关导通电阻带来的压降评估。Voltus 的关键输入包括:每个域的供电网络、开关的导通特性、以及各域的工作电流波形。分析结果会反馈给 Innovus 调整 PG 网格或开关分布,形成“实现—分析—修正”的迭代闭环。
Tempus 负责时序签核,但低功耗设计给它增加了额外维度:跨电压域的 level shifter 延迟、isolation 单元的使能路径时序、retention 寄存器的保存/恢复时序。Tempus 需要读取 UPF 来识别这些特殊单元和路径,否则会把它们当作普通逻辑处理,导致时序分析不完整。特别是 retention 的 save/restore 控制信号,通常有时序要求,必须在 Tempus 中显式约束。
Conformal Low Power 是 UPF 一致性与等价性检查工具。它做两类检查:一是 UPF 与 RTL/网表的一致性,例如 UPF 中定义的 isolation 是否真的在网表中存在对应单元;二是低功耗插入前后的逻辑等价性,确保插入 isolation、retention、level shifter 后功能没有被改变。Conformal 是签核前的最后一道防线,尤其适合检查“UPF 写了但综合没插”或“插了但连接错误”的问题。
三、一个可执行的 UPF 片段示例
下面给出一个简化的 UPF 片段,描述 CPU 域的可关断、隔离与保持策略。示例参数为教学假设,实际项目需根据工艺库和电源规格调整。
# 定义电源域
create_power_domain PD_CPU -elements {u_cpu}
create_power_domain PD_AON -elements {u_pmu}
# 定义供电网络
create_supply_net VDD_CPU
create_supply_net VDD_AON
create_supply_port VDD -direction in
# 绑定供电
set_domain_supply_net PD_CPU -primary_power_net VDD_CPU
set_domain_supply_net PD_AON -primary_power_net VDD_AON
# 电源开关
create_power_switch sw_cpu \
-domain PD_CPU \
-input_supply_port {vin VDD_AON} \
-output_supply_port {vout VDD_CPU} \
-control_port {sleep_ctrl u_pmu/sleep_en} \
-on_state {on vin {sleep_ctrl}}
# 隔离策略:CPU 域输出到 AON 域时钳位为 0
set_isolation iso_cpu_out \
-domain PD_CPU \
-isolation_power_net VDD_AON \
-clamp_value 0 \
-applies_to outputs
# 保持策略:关键配置寄存器
set_retention ret_cpu \
-domain PD_CPU \
-retention_power_net VDD_AON \
-elements {u_cpu/cfg_reg[*]}
# 电平转换:CPU(0.9V) 到 DDR(0.8V)
set_level_shifter ls_cpu_ddr \
-domain PD_CPU \
-applies_to outputs \
-location self
这段 UPF 的关键判断点在于:sleep_ctrl 必须来自 AON 域(u_pmu/sleep_en),否则开关无法被可靠控制;set_isolation 的 -isolation_power_net 必须接常开供电,否则断电时隔离单元自身也失效;set_retention 的 -retention_power_net 同理。这些约束在 Genus 综合时会被检查,在 Conformal 中会被再次验证。