1. 低功耗验证与UPF标准导入
移动SoC、AI加速器和车规芯片的功耗预算越来越紧:一颗中端手机SoC的峰值功耗可能超过8W,而待机漏电要求却压到毫瓦级。设计团队因此普遍采用多电压域(Multi-Voltage Domain)、电源门控(Power Gating)、动态电压频率调节(DVFS)和体偏置(Body Bias)等手段。这些手段在RTL里几乎"看不见"——RTL只描述逻辑功能,不描述"这个模块在什么条件下被断电""断电时它的输出应该保持还是隔离"。低功耗验证要回答的正是这类问题:功能在电源状态切换前后是否仍然正确,电源关断是否真的省了电,上电复位序列有没有毛刺或竞争。
UPF(Unified Power Format,IEEE 1801)就是把这些"看不见的意图"写成机器可读的约束。它不替代RTL,而是叠加在RTL之上,描述电源域、供电网络、隔离、电平转换、保持寄存器和电源状态表。验证工具读取RTL + UPF,构造出一个带电源语义的仿真模型,再让测试用例去驱动电源状态变化。Xcelium对UPF的支持覆盖了从 elaboration 到仿真运行期的完整链路:在编译阶段解析UPF并建立电源域层次,在仿真阶段提供电源状态控制、隔离/保持行为建模,以及低功耗相关的覆盖率与检查。
UPF在验证流程中的位置
一个典型的低功耗验证流程可以这样理解:RTL与UPF同时进入Xcelium,工具先做"电源感知elaboration",把UPF中的电源域、电源开关、隔离单元、电平转换器、保持寄存器映射到RTL实例上;随后仿真运行,测试用例通过UPF命令或PLI接口切换电源状态,工具根据UPF规则自动插入或模拟隔离、保持、电平转换行为;最后通过断言、覆盖率、电源状态检查来判断设计是否满足低功耗意图。这个链条中,UPF既是"约束输入",也是"行为模型来源",还是"检查依据"。
Xcelium对UPF的支持范围
Xcelium支持IEEE 1801-2013及后续版本的主要命令集,包括create_power_domain、create_supply_net、create_supply_port、connect_supply_net、set_domain_supply_net、set_isolation、set_retention、set_level_shifter、add_power_state等。在仿真中,工具会依据UPF建立电源域层次,并在电源状态切换时自动应用隔离、保持和电平转换语义。需要注意的是,UPF本身不描述"省了多少电",它描述的是"电源行为应该是什么样";功耗数值需要配合功耗分析工具或Xcelium的功耗估算能力来获得。
验证目标可以归纳为三个层次。第一层是功能正确性:电源关断再上电后,寄存器能否恢复到预期值,隔离输出是否被钳位到安全电平,跨域信号是否经过正确的电平转换。第二层是电源意图一致性:RTL中实际连接的电源域、隔离单元、保持寄存器是否与UPF描述一致,是否存在"UPF写了但RTL没实现"或"RTL实现了但UPF没约束"的偏差。第三层是覆盖率:电源状态组合、域切换路径、隔离使能条件是否被测试用例充分覆盖。
一个最小可运行的UPF示例
下面给出一个简化的双域示例,用于说明UPF如何描述电源意图。假设设计中有两个域:PD_TOP常开,PD_GPU可关断,GPU域输出需要隔离,且有一个保持寄存器保存配置。
# 创建电源域
create_power_domain PD_TOP -include_scope
create_power_domain PD_GPU -elements {u_gpu}
# 创建供电网络与端口
create_supply_port VDD -domain PD_TOP
create_supply_port VDD_GPU -domain PD_GPU
create_supply_net VDD -domain PD_TOP
create_supply_net VDD_GPU -domain PD_GPU
connect_supply_net VDD -ports {VDD}
connect_supply_net VDD_GPU -ports {VDD_GPU}
# 隔离:GPU域输出到TOP域时,关断期间钳位为0
set_isolation iso_gpu_out -domain PD_GPU \
-isolation_power_net VDD -isolation_ground_net VSS \
-clamp_value 0 -applies_to outputs
# 保持:配置寄存器在关断期间保持
set_retention ret_cfg -domain PD_GPU \
-retention_power_net VDD -retention_ground_net VSS \
-elements {u_gpu.u_cfg.reg_cfg[*]}
# 电源状态表
add_power_state PD_GPU.primary -state {ON -supply_expr {power == `{FULL_ON, 1.0}}}
add_power_state PD_GPU.primary -state {OFF -supply_expr {power == `{OFF, 0.0}}}
add_power_state PD_GPU.primary -state {RETENTION -supply_expr {power == `{RETENTION, 0.8}}}
这段UPF在Xcelium中加载后,仿真时若将PD_GPU切到OFF,工具会自动把GPU域输出钳位为0,并让reg_cfg保持关断前的值。测试用例可以这样驱动:先让GPU域正常工作并写入配置,再切到RETENTION确认配置保持,再切到OFF确认输出被隔离,最后切回ON确认功能恢复。每一步都可以用断言检查隔离输出是否为0、保持寄存器是否等于预期值。
-elements {u_gpu}指向的实例在RTL中不存在或路径写错,Xcelium在elaboration阶段会报错或产生未约束的域,导致仿真行为与预期不符。建议每次修改RTL层次后重新检查UPF的实例路径。
理解低功耗验证的挑战、UPF的角色和Xcelium的支持范围,是后续所有实验的基础。接下来的章节会逐步展开电源域建模、隔离与保持的仿真行为、电源状态切换的测试用例设计,以及覆盖率收集与结果判读。