2. 功耗分析与建模基础

在低功耗数字芯片实现中,功耗分析不是“跑一个工具看数字”,而是先要建立对功耗来源的物理认识,再把这些认识映射到工具能够读取的模型与约束上。数字CMOS电路的功耗通常拆成三类:动态功耗(开关功耗)、短路功耗(内部功耗的一部分)和静态功耗(漏电功耗)。三者物理来源不同,对电压、频率、阈值电压、温度、工艺角的敏感度也不同,因此优化手段往往互相牵制。

一、三类功耗的物理机制

动态功耗来自对负载电容的充放电。一个CMOS门翻转时,输出节点从0充到VDD,电源通过PMOS向负载电容注入电荷;从VDD放到0时,电荷经NMOS泄放到地。每完成一次完整的0→1→0翻转,从电源取走的能量为 C_L · VDD²,其中一半存储在电容中、一半在晶体管沟道中以热的形式耗散。若翻转活动率为α(单位时间内等效翻转次数与时钟频率的比值),则平均动态功耗为:

P_dynamic = α · C_L · VDD² · f_clk

这个式子说明三件事:功耗与VDD是平方关系,降压收益最大;与频率线性相关;与等效开关电容和活动率线性相关。因此时钟门控(降低α)、操作数隔离(降低无效翻转)、多阈值/尺寸优化(降低C_L)都是直接作用于动态功耗的手段。

短路功耗发生在输入信号跳变期间。当输入电平处于 VTH_n < Vin < VDD − |VTH_p| 的过渡区时,NMOS和PMOS会同时导通,电源到地之间形成一条短暂直流通路。短路功耗可近似写成:

P_short = t_sc · VDD · I_peak · f · α

其中 t_sc 是短路电流持续时间,I_peak 是峰值短路电流。它与输入转换时间(slew)强相关:slew越慢,过渡区停留越久,短路功耗越大。所以在Liberty中,cell_rise/cell_fall、rise_transition/fall_transition 这些时序表不仅影响时序,也直接影响内部功耗的查表结果。工程上通常把短路功耗与内部充放电损耗合并,统称为“内部功耗(internal power)”,由Liberty的 internal_power 组描述。

静态功耗是电路不翻转时仍然存在的漏电。主要来源包括:亚阈值漏电(弱反型区源漏之间的扩散电流)、栅氧隧穿漏电、栅致漏极泄漏(GIDL)和结反偏漏电。亚阈值漏电对阈值电压呈指数敏感:

I_sub ∝ exp( (VGS − VTH) / (n·kT/q) ) · (1 − exp(−VDS/(kT/q)))

因此降低VTH会指数级抬高漏电,这也是高性能工艺中“漏电墙”的根源。静态功耗还与温度正反馈:温度升高→漏电增大→功耗增大→温度进一步升高,形成热失控风险。多阈值单元(HVT/SVT/LVT)、电源门控(power gating)、体偏置(body bias)是控制静态功耗的主要手段。

CMOS功耗构成与低功耗意图描述映射 物理机制 动态功耗(开关功耗) P = α · C_L · VDD² · f 充放电电流 · 与VDD平方相关 受活动率α、负载电容C_L影响 短路功耗(内部功耗) P = t_sc · VDD · I_peak · f · α NMOS/PMOS同时导通 与输入slew强相关 静态功耗(漏电功耗) I_sub ∝ exp((VGS−VTH)/nkT/q) 亚阈值漏电 · 栅氧隧穿 · GIDL 对VTH指数敏感 · 温度正反馈 电源门控 / 多阈值 / 体偏置 建模与描述格式 Liberty (.lib) cell_rise / cell_fall internal_power 查表 leakage_power 查表 UPF (IEEE 1801) create_power_domain set_isolation / set_retention 电源开关与状态定义 CPF (Cadence) create_power_domain create_power_switch create_isolation / retention 早期Cadence流程常用 分析与输出 静态功耗分析 读Liberty + 网表 + 活动率 输出各模块漏电分布 动态功耗分析 VCD/SAIF活动率反标 时钟树/数据路径功耗 低功耗结构验证 UPF/CPF一致性检查 隔离/保持/开关正确性 功耗优化决策 时钟门控 / 电源门控 多阈值替换 / 电压域划分 三类功耗物理机制不同,需分别建模;Liberty描述单元级功耗,UPF/CPF描述系统级低功耗意图

二、Liberty:单元级功耗与时序的查表模型

Liberty文件是标准单元库的“数据字典”,功耗分析工具首先读它。与功耗直接相关的组包括:

  • leakage_power:给出单元在特定输入状态、温度、电压下的漏电值,通常按 when 条件列出多组,工具根据实际输入状态选择。
  • internal_power:以二维查表形式给出 rise_power / fall_power,索引是输入转换时间(input transition)和输出负载电容(output capacitance)。这正是短路功耗与内部充放电损耗的合并建模。
  • cell_rise / cell_fall:时序延迟表,与功耗表共享同样的索引变量,因此slew和load既影响时序也影响功耗。

一个典型的内部功耗查表片段如下(数值为示例):

internal_power() {
  rise_power(energy_template_7x7) {
    index_1 ("0.01, 0.05, 0.12, 0.25, 0.50, 0.80, 1.20");  /* input transition (ns) */
    index_2 ("0.001, 0.005, 0.02, 0.05, 0.10, 0.20, 0.40"); /* output load (pF) */
    values ( \
      "0.0021, 0.0023, 0.0028, 0.0035, 0.0048, 0.0072, 0.0120", \
      "0.0025, 0.0027, 0.0032, 0.0040, 0.0054, 0.0080, 0.0132", \
      ... );
  }
}

工具在分析时,根据每个实例的实际输入slew和输出load,在表中做双线性插值,得到该次翻转的内部能量,再乘以翻转次数得到平均内部功耗。因此,如果约束或布局导致slew变差,功耗会同步上升——这是时序与功耗耦合的典型体现。

三、UPF与CPF:系统级低功耗意图

Liberty只描述单个单元,无法表达“这个模块在待机时断电”“这个信号跨电源域需要隔离”这类系统级意图。UPF(IEEE 1801)和CPF(Cadence Power Format)就是用来描述这些意图的格式。两者概念相近,语法不同,UPF是IEEE标准,CPF是Cadence早期主推格式,现代流程以UPF为主。

以UPF为例,一个电源域和电源开关的典型描述为:

create_power_domain PD_CPU -elements {u_cpu}
create_power_switch sw_cpu \
  -domain PD_CPU \
  -input_supply_port {vin VDD} \
  -output_supply_port {vout VDD_CPU} \
  -control_port {sleep pwr_en} \
  -on_state {on_state vin {!sleep}}
set_isolation iso_cpu \
  -domain PD_CPU \
  -isolation_supply VDD \
  -clamp_value 0 \
  -applies_to outputs
set_retention ret_cpu \
  -domain PD_CPU \
  -retention_supply VDD \
  -save_signal {save_ff posedge clk}

这段描述告诉工具:u_cpu属于PD_CPU域;该域由sw_cpu开关控制,当sleep为低时导通;域输出需要隔离,隔离时钳位到0;域内部分寄存器需要保持,保存信号为save_ff。功耗分析工具读取UPF后,才能正确判断哪些模块在待机时漏电被切断、哪些信号在断电域与常开域之间需要特殊处理。

UPF与CPF的核心差异在于:UPF使用“supply port/supply net”抽象电源网络,CPF使用“power net”和“power domain”直接绑定;UPF的隔离、保持、开关命令更贴近IEEE标准,跨工具可移植性更好。实际项目中若库和工具支持,优先使用UPF。

四、从物理机制到分析流程的对应关系

把三类功耗与建模格式对应起来,可以形成一条清晰的分析链:动态功耗和短路功耗依赖活动率与slew/load,因此需要VCD/SAIF反标和Liberty内部功耗表;静态功耗依赖输入状态、温度和VTH,因此需要Liberty漏电表和工艺角设置;系统级断电、隔离、保持行为则由UPF/CPF描述。三者缺一,功耗数字就不可信。

例如,若只读Liberty而不反标活动率,工具只能用默认活动率(如0.1或0.2)估算动态功耗,结果可能与实际相差数倍;若UPF中漏写了隔离单元,断电域的输出可能浮空,导致常开域输入级短路功耗异常增大,甚至功能错误。因此,功耗分析的第一步不是看报告,而是检查输入是否完整:库、网表、约束、活动率、UPF/CPF、工艺角是否一致。

静态功耗对温度非常敏感。在高温角(如125℃)下,漏电可能比常温高一个数量级。若只按常温估算静态功耗,可能严重低估待机功耗,导致电源门控策略不足。分析时应至少覆盖典型角和高温角。

理解这三类功耗的物理机制,并清楚Liberty、UPF、CPF各自描述什么、不描述什么,是后续所有低功耗实现与验证工作的基础。只有模型与意图都正确,工具给出的功耗数字才具有工程参考价值。