UPF电源意图建模:核心概念、原理机制、实战要点

低功耗设计已经从“单一电源域+全局时钟门控”发展为多电压域、动态电源门控、多阈值单元并存的新架构。RTL 只描述逻辑功能,无法回答“某个模块何时允许断电”“跨域信号是否被隔离”“寄存器数据在掉电时是否必须保留”等问题。UPF(Unified Power Format)是 IEEE 1801 标准定义的电源意图描述语言,为逻辑网表之外建立一套可读、可仿真、可验证的电源规格。

问题背景:形式化验证为什么要先谈电源意图建模

形式化验证通过穷举状态空间来证明属性。如果输入模型没有电源行为约束,工具会把“断电状态”当作普通状态处理,导致大量伪错误或严重漏检。UPF 建模的核心目标,就是为形式化引擎提供一张“电源世界的真值表”,使工具明确知道:什么条件下信号有效、单元可被关闭、数据必须保留。

UPF 电源意图建模相当于给形式化验证提供一份“电源行为契约”。这张契约不完整,验证结果就不可信。

核心概念:UPF 如何表达电源意图

UPF 将“电源意图”分解为可识别、可校验的元素:电源域描述逻辑归属,供电集合描述实际电压轨,电源状态描述可用电压排列,低功耗策略描述隔离、电平转换和数据保持要求。四者共同构成一张完整的电源意图网络。

UPF 电源意图 电源域 供电集合 电源状态 低功耗策略

图:UPF 电源意图建模核心要素

核心概念速查表

概念缩写作用形式化验证意义
电源域Power Domain / PD将逻辑单元划分到同一供电控制的区域界定上电/掉电范围,验证域间隔离
供电集合Supply Set / SS描述一组电压轨(power/ground)追踪电压源连接,检查供电缺失
电源状态Power State描述各域可组合的供电状态驱动 P S T,验证合法状态迁移
隔离策略Isolation在断电域输出端加入钳位逻辑验证隔离使能条件与输出值
电平转换器Level Shifter匹配跨域信号电压范围检查缺失、重复或方向错误
数据保持Retention掉电时保存关键寄存器状态验证保存/恢复时序

原理机制:UPF 定义如何被形式化验证消费

UPF 命令本身是 Tcl 风格文本,例如 create_power_domain。形式化验证工具读入 UPF 后,先解析命令、构建电源意图模型,再把它映射为信号约束、单元属性和状态转换条件。其中最关键的是“电源状态表(PST)”:它列出了各电源域允许的电压组合、状态名和恢复顺序。验证引擎根据 PST 生成状态机约束,从而证明 UPF 与实际逻辑网表的行为一致。

关键命令包括但不限于:

  • create_power_domain:划分电源域;
  • create_supply_set:定义供电集合;
  • add_power_state:补充电源状态;
  • set_isolation / set_level_shifter / set_retention:定义跨域策略。

典型建模流程

  1. 收集各模块供电需求,明确哪些模块常开、哪些可关闭;
  2. 用 create_power_domain 创建电源域,包含域内逻辑;
  3. 用 create_supply_set 为每个域定义/绑定供电集合;
  4. 用 add_power_state 建立电源状态表和合法迁移条件;
  5. 用 set_isolation、set_level_shifter、set_retention 声明跨域策略;
  6. 输出 UPF 文件,交给形式化验证工具做一致性、连通性和时序属性检查。

案例说明:双电源域 UPF 建模片段

假设一个 SoC 包含常开 IO 域和可关断 Core 域。RTL 顶层为 rtl_top,下面给出最小 UPF 建模片段:

set_scope rtl_top

# 创建电源域
create_power_domain PD_CORE -include_scope ./*
create_power_domain PD_IO

# 创建供电端口和供电集合
create_supply_port VDD_CORE
create_supply_port VDD_IO

create_supply_set ss_core -function {power VDD_CORE}
create_supply_set ss_io  -function {power VDD_IO}

# 隔离 Core 域输出
set_isolation iso_core -domain PD_CORE \
                  -isolation_power_net VDD_IO \
                  -isolation_control signal
在形式化验证中,上述 UPF 会被解释为:当 signal 有效且 PD_CORE 掉电时,PD_CORE 输出必须钳位到 VDD_IO 对应的逻辑值。如果钳位值缺失或时序错误,工具将报告反例。

表格总结:UPF 建模元素与验证检查项

建模元素UPF 命令常见验证检查项
电源域create_power_domain域边界完整,无未划分逻辑
供电集合create_supply_set电源端口连接完整,无浮空
电源状态add_power_state状态组合合法,迁移可达
隔离set_isolation隔离使能信号与电源状态同步
电平转换set_level_shifter所有跨电压域信号都有转换
数据保持set_retention保持信号在掉电前建立,恢复后释放

常见误区提醒

  • 把 UPF 当成仿真注释,不参与形式化验证,导致电源关系完全漏检;
  • 只定义电源域,不定义供电集合和 PST,状态机缺少底层数据;
  • 隔离策略的钳位值没有指定或未连接“隔离供电电源”;
  • 多份 UPF 合入时重复定义,默认规则被错误覆盖;
  • 忽略断电域与常开域之间的时钟/复位交叉,跨域路径未加隔离。

工程实践清单

  • 在 RTL freeze 前完成 UPF 基线,并在每个迭代版本运行形式化检查;
  • 验证每个电源域都有明确的常开/可关断属性和 PST 条目;
  • 检查所有跨域信号,确保已有隔离或电平转换策略;
  • 对 PST 做覆盖率检查,确保所有手动声明状态都被使用;
  • 将 UPF 和 RTL/门级网表一起纳入版本控制,保证验证结果可复现。