1. 低功耗验证工程导论
在先进工艺节点下,功耗已经不再是设计完成后的“优化项”,而是与性能、面积并列的一等设计约束。低功耗验证工程的核心任务,是确认芯片在真实工作场景中是否按设计意图进入、保持并退出各种低功耗状态,同时不破坏功能正确性。它验证的不是“功耗数值本身”,而是控制低功耗行为的逻辑、时序与协议是否被正确实现。
一、功耗从哪里来:动态功耗与静态功耗
CMOS 电路的功耗可粗略分为两类。动态功耗来自信号翻转时对负载电容的充放电,以及翻转瞬间的短路电流,其主导项为 Pdyn = α·C·V²·f,其中 α 是翻转活动率、C 是负载电容、V 是供电电压、f 是时钟频率。静态功耗则来自亚阈值漏电、栅氧漏电等,随工艺缩小和温度升高而显著增大,即使电路不翻转也在持续消耗。
由此衍生出低功耗设计的三条主线:降电压(多电压域、DVFS)、降活动率(时钟门控、操作数隔离)、切断漏电(电源门控、体偏置)。这些手段都会引入新的控制结构,例如电源开关、隔离单元、电平转换器、状态保持寄存器,而这些结构正是验证的重点对象。
二、低功耗设计意图:UPF 如何描述“应该怎样省电”
低功耗设计意图通常用 UPF(Unified Power Format)描述,它独立于 RTL,声明电源域、供电网络、电源状态表、隔离与保持策略等。一个典型的电源域与状态定义如下:
create_power_domain PD_CPU -include_scope
create_supply_port VDD -domain PD_CPU
create_supply_net VDD -domain PD_CPU
connect_supply_net VDD -ports VDD
add_power_state PD_CPU.primary \
-state {ON -supply_expr {power == {FULL_ON, 1.0}}} \
-state {OFF -supply_expr {power == {OFF, 0.0}}}
set_isolation iso_cpu -domain PD_CPU -isolation_power_net VDD \
-clamp_value 0 -applies_to outputs
set_retention ret_cpu -domain PD_CPU -retention_power_net VDD
这段描述的含义是:CPU 域可以在 ON 与 OFF 之间切换;关断时其输出必须被隔离并钳位到 0,关键寄存器用保持单元保存状态。验证要回答的问题就是:RTL 与 UPF 是否一致?关断时输出是否真的被钳位?唤醒后保持寄存器的值是否恢复?
三、低功耗验证的典型挑战
- 状态空间爆炸:多个电源域组合出的合法/非法状态远多于普通功能验证,需要覆盖“非法状态不得进入”的检查。
- 跨域信号在关断期间的行为:隔离单元是否在正确时刻使能,钳位值是否符合接收端预期。
- 电源开关的时序:上电顺序、掉电顺序、握手信号(如 power ready、ack)是否满足协议。
- 保持与恢复:retention 寄存器的 save/restore 控制是否在正确窗口生效。
- 仿真与静态检查的互补:仿真能观察动态行为,但难以穷尽;静态检查能穷尽结构规则,但看不到时序交互。
四、Synopsys 低功耗验证工具链概览
Synopsys 的低功耗验证方案围绕“静态结构检查 + 动态仿真 + 形式化验证”三条路径展开。VC LP 负责 UPF 与 RTL 的静态低功耗规则检查,例如隔离单元缺失、电平转换器缺失、保持策略不完整;VCS 配合原生低功耗仿真(Native Low Power)在仿真中加载 UPF,动态执行电源状态切换并检查隔离、保持、电源开关行为;VC Formal 则用形式化方法证明某些低功耗属性在所有状态下成立。三者关系可用下面的信号与检查链表示。
图中可以看到,三类工具共享同一组输入(RTL、UPF、验证平台、工艺库),但检查角度不同:VC LP 在编译前发现结构性缺陷,VCS+NLP 在仿真中观察动态行为,VC Formal 对关键属性做穷尽证明。实际项目中通常先用 VC LP 清理静态问题,再用 VCS 跑电源状态序列,最后对高风险模块用 VC Formal 补强。
五、一个最小验证闭环示例
假设某设计含 PD_CPU 与 PD_GPU 两个域,验证目标是“PD_GPU 关断时其输出被隔离为 0,且 PD_CPU 不受影响”。可构造如下电源状态序列:
# 示例电源状态序列(教学用,非实测)
1. 初始:PD_CPU=ON, PD_GPU=ON
2. 配置 GPU 进入 IDLE,等待 gpu_idle_ack=1
3. 置 PD_GPU=OFF,等待 gpu_pwr_ready=0
4. 检查:gpu_to_cpu 总线输出 == 0(隔离生效)
5. 检查:PD_CPU 内寄存器值保持不变
6. 置 PD_GPU=ON,等待 gpu_pwr_ready=1
7. 检查:retention 寄存器恢复为关断前值
在 VCS 中加载 UPF 后运行该序列,若第 4 步观察到非零值,说明隔离单元未使能或钳位值配置错误;若第 7 步数据丢失,说明保持策略未覆盖该寄存器。VC LP 则可在仿真前直接报告“gpu_to_cpu 缺少隔离单元”这类结构问题。两者结合,才能既快又全地定位低功耗缺陷。
理解功耗来源、设计意图描述方式与工具链分工,是后续所有低功耗验证工作的基础。只有明确“省电行为由谁控制、在什么条件下生效、出错时表现为什么”,才能设计出有针对性的验证方案。