2. 功耗基础与模型:动态功耗、静态功耗、短路功耗的物理原理与数学建模

各位好,咱们今天聊聊功耗的“老底”。做低功耗设计,说白了就是跟这三种功耗打交道:动态功耗、静态功耗、还有短路功耗。很多人觉得功耗模型就是背公式,其实不然。你想想看,不理解物理本质,你连功耗优化该从哪下手都不知道。

我个人习惯,每次接手一个新项目,第一件事就是把这三种功耗的“账本”拉出来算一遍。为什么?因为不同工艺节点下,它们的占比天差地别。我记得在28nm时代,动态功耗还是老大;到了7nm,静态功耗就开始“造反”了。

2.1 动态功耗:芯片“动起来”的代价

动态功耗,说白了就是电路在翻转时消耗的能量。它主要来自两个部分:负载电容充放电,以及瞬间的短路电流。

2.1.1 开关功耗(Switching Power)

这是动态功耗的大头。每次CMOS门从0变1,或者从1变0,都要给负载电容充电或放电。这个负载电容包括:门输出端的寄生电容、互连线电容、以及下一级门的输入电容。

数学公式很简单,但很实用:

P_sw = α * C_L * V_DD² * f

这里:

  • α:翻转活动因子(0到1之间)。不是每个时钟周期都翻转,所以得打个折扣。
  • C_L:负载电容。包括本级的漏极电容、连线电容、下一级的栅电容。
  • V_DD:供电电压。注意这里是平方关系,所以降压是降功耗的“核武器”。
  • f:时钟频率。

关键洞察:V_DD的平方项意味着,电压从1.0V降到0.9V,功耗能降19%。我在一个AI加速器项目中,就是靠这个把峰值功耗压下来的。

举个例子,一个32位加法器,如果α=0.15,C_L=50fF,V_DD=1.0V,f=1GHz:

P_sw = 0.15 * 50e-15 * 1.0² * 1e9 = 7.5 μW

嗯,单个门看起来不大,但一个SoC里有几亿个门,加起来就恐怖了。

2.1.2 短路功耗(Short-Circuit Power)

这个很多人容易忽略。当输入信号翻转时,PMOS和NMOS会有一小段时间同时导通。这时候,电源到地之间就形成了直流通路,产生短路电流。

短路功耗的近似模型:

P_sc = K * (V_DD - 2*V_th)³ * τ * f

其中:

  • K:与晶体管尺寸相关的常数。
  • V_th:阈值电压。
  • τ:输入信号的上升/下降时间。

避坑指南:我曾经在一个低功耗项目中,为了降低开关功耗,把电压降得很低。结果发现短路功耗占比飙升。为什么?因为V_DD接近2*V_th时,PMOS和NMOS同时导通的时间变长了。所以降压不是万能的,得权衡。

一般来说,短路功耗占动态功耗的10%~20%。但如果输入信号斜率很缓(τ很大),这个比例会显著上升。所以,时钟树的驱动强度设计很重要。

2.2 静态功耗:芯片“睡着”也在耗电

静态功耗,也叫漏电功耗。即使电路不翻转,只要电源开着,就有电流从电源漏到地。在先进工艺下,这已经成了“心头大患”。

2.2.1 亚阈值漏电(Subthreshold Leakage)

这是最主要的漏电机理。当V_GS < V_th时,晶体管理论上应该关断,但实际上载流子仍然能越过势垒,形成弱反型层电流。

数学表达式:

I_sub = I_0 * exp((V_GS - V_th) / (n * V_T)) * (1 - exp(-V_DS / V_T))

简化后,我们常用这个经验公式:

I_sub ∝ 10^(-V_th / S)

其中S是亚阈值摆幅,理想值是60mV/dec,实际工艺中约80~100mV/dec。这意味着,V_th每降低100mV,漏电就增加10倍!

我的经验:在28nm工艺下,我做过一个测试芯片。标准V_th的单元漏电约1nA/门,低V_th的单元漏电直接飙到50nA/门。所以,低功耗设计中,多阈值库(Multi-Vt)是标配。关键路径用低V_th,非关键路径用高V_th。

2.2.2 栅极漏电(Gate Leakage)

随着栅氧化层越来越薄(45nm以下),电子可以直接隧穿通过氧化层,形成栅极漏电。这个在45nm以上可以忽略,但在28nm以下就得认真对待了。

栅极漏电密度与氧化层厚度成指数关系:

J_gate ∝ exp(-T_ox / λ)

高k金属栅(HKMG)工艺的出现,就是为了解决这个问题。用HfO₂等高介电常数材料,可以在物理厚度更大的情况下,保持相同的等效氧化层厚度,从而大幅降低栅极漏电。

2.2.3 其他漏电机理

还有几种漏电,虽然占比小,但也不能完全忽视:

  • 栅感应漏极漏电(GIDL):当V_GD很大时,漏极附近的强电场导致能带弯曲,产生隧穿电流。
  • 穿通漏电(Punchthrough):沟道长度太短时,源漏耗尽区相连,形成穿通。
  • 结漏电(Junction Leakage):源漏与衬底之间的PN结反向偏置漏电。

2.3 总功耗模型与工程实践

把上面这些加起来,就是芯片的总功耗:

P_total = P_sw + P_sc + P_static
         = α * C_L * V_DD² * f + K * (V_DD - 2*V_th)³ * τ * f + V_DD * I_leakage

这个公式看着简单,但每个参数背后都有大量工程细节。我建议你在做功耗估算时,不要只套公式,要结合工艺库的Liberty文件中的功耗模型来算。

功耗类型 主导因素 优化方向 典型占比(28nm)
开关功耗 V_DD², f, α, C_L 降压、门控时钟、降低翻转率 60%~70%
短路功耗 输入斜率, V_DD 优化驱动强度、控制信号边沿 5%~10%
静态功耗 V_th, 温度, 工艺 多阈值库、电源门控、体偏置 20%~30%

工程要点

  • 动态功耗是“频率相关”的,频率越高越严重。
  • 静态功耗是“温度敏感”的,温度每升高10°C,漏电大约翻倍。
  • 短路功耗是“边沿相关”的,信号斜率越缓越严重。

最后说一句,功耗模型不是死的。我在做65nm项目时,动态功耗占90%以上;到了16nm,静态功耗已经能占到40%。所以,每换一个工艺节点,都要重新审视这三种功耗的权重。你想想看,如果不搞清楚这些,你怎么知道该把优化资源投到哪里?

嗯,今天就先聊到这。下一节我们讲功耗估算工具的使用,到时候我会拿一个真实的SoC案例来演示。