1. 功耗分析基础:功耗的物理定义、动态功耗与静态功耗、CMOS电路功耗模型、功耗与能量的区别

做嵌入式系统这么多年,我见过太多工程师一上来就闷头调代码、降频率,结果功耗死活降不下来。为什么?说白了,连功耗的“根”都没摸清楚。今天咱们就把功耗分析的基础打牢,后面优化起来才能有的放矢。

1.1 功耗的物理定义

功耗,从物理上讲,就是单位时间内消耗的能量。公式很简单:P = dE / dt。但在芯片里,这个能量是怎么“花”掉的?

我习惯把芯片想象成一个微型城市。电流就是城市里的车流,电压就是道路的宽度。车流越大、道路越宽,消耗的“油”(能量)就越多。功耗,就是单位时间里的“油耗”。

核心公式:

P = V × I

其中 V 是供电电压,I 是总电流。这个公式虽然简单,但它是所有功耗分析的起点。

嗯,这里要注意:芯片里的电流不是恒定的。它随着时钟翻转、数据变化而剧烈波动。所以功耗分析,本质上是在分析电流的“行为”。

1.2 动态功耗与静态功耗

芯片的功耗,可以拆成两大部分:动态功耗静态功耗。这两者的物理机理完全不同,优化手段也天差地别。

1.2.1 动态功耗

动态功耗,就是芯片“干活”时消耗的功耗。它又分两块:

  • 开关功耗:门电路翻转时,给负载电容充放电消耗的能量。这是动态功耗的大头。
  • 短路功耗:翻转瞬间,PMOS和NMOS同时导通,形成从VDD到GND的直流通路。虽然时间极短,但电流不小。

动态功耗的公式:

P_dynamic = α × C_L × V_DD² × f

其中:

  • α:翻转活动因子(0到1之间,表示每个时钟周期翻转的概率)
  • C_L:负载电容
  • V_DD:供电电压
  • f:时钟频率

你看,电压是平方项!这意味着降低一点点电压,功耗下降非常明显。我在项目中遇到过,把电压从3.3V降到1.8V,动态功耗直接砍掉70%。当然,代价是速度变慢了,需要权衡。

1.2.2 静态功耗

静态功耗,就是芯片“闲着”的时候也在消耗的功耗。以前工艺老的时候,静态功耗几乎可以忽略。但现在工艺到了28nm以下,静态功耗已经成了“心头大患”。

静态功耗主要来自:

  • 漏电流:晶体管关断时,仍然有微弱的电流流过。包括亚阈值漏电流、栅极漏电流、源漏穿通漏电流等。
  • 偏置电流:模拟电路、I/O电路中的恒定偏置电流。

静态功耗公式:

P_static = I_leak × V_DD

我曾经调试过一个低功耗产品,待机时电流总是降不下去。查了三天,最后发现是某个GPIO上拉电阻没关,漏了十几微安。嗯,这种坑,踩过一次就记住了。

个人经验:动态功耗和静态功耗的占比,取决于芯片的工作状态。全速运行时,动态功耗占90%以上;深度睡眠时,静态功耗就是主角。优化时一定要区分场景,别搞混了。

1.3 CMOS电路功耗模型

CMOS电路的功耗模型,是咱们做功耗分析的理论基础。我习惯把它画成一张图,方便理解:

CMOS电路功耗模型 总功耗 P_total 动态功耗 P_dynamic 静态功耗 P_static 开关功耗 P_sw = α·C_L·V²·f 短路功耗 P_sc = I_sc·V·t_sc·f 漏电流功耗 P_leak = I_leak·V 偏置电流功耗 P_bias = I_bias·V 动态功耗 = 开关功耗 + 短路功耗 静态功耗 = 漏电流功耗 + 偏置电流功耗 注:深亚微米工艺下,漏电流功耗占比显著上升

这张图把CMOS功耗模型拆得很清楚。你想想看,动态功耗和静态功耗的优化方向完全不同:动态功耗靠降电压、降频率、降活动因子;静态功耗靠工艺选择、电源门控、漏电流控制。

1.4 功耗与能量的区别

这个问题,我见过太多人搞混了。功耗和能量,不是一回事。

  • 功耗(Power):单位时间消耗的能量,单位是瓦特(W)。它描述的是“消耗速度”。
  • 能量(Energy):一段时间内消耗的总能量,单位是焦耳(J)。它描述的是“总消耗量”。

公式关系:

E = P × t

举个例子:

  • 一个芯片功耗100mW,运行10秒,消耗能量1J。
  • 另一个芯片功耗200mW,运行5秒,消耗能量也是1J。

你想想看,哪个更好?这取决于你的需求。如果是电池供电,能量决定了续航时间,所以更关心能量。如果是散热设计,功耗决定了发热量,所以更关心功耗。

避坑指南:我曾经设计一个物联网终端,客户要求“功耗低于10mW”。我吭哧吭哧把待机功耗做到了5mW,结果客户说续航不够。后来才发现,客户真正关心的是“每天消耗的能量”,而不是瞬时功耗。因为设备大部分时间在休眠,偶尔才工作几秒钟。所以,一定要搞清楚对方说的是功耗还是能量,不然白忙活。

在低功耗设计中,我们经常用“能量效率”这个指标,比如每MHz消耗多少微瓦,或者每MIPS消耗多少毫瓦。这样可以把频率和电压的影响归一化,方便比较不同方案的优劣。

我的习惯:做功耗分析时,我会同时记录峰值功耗、平均功耗和总能量。峰值功耗决定电源和散热设计,平均功耗决定电池续航,总能量决定充电频率。三个指标缺一不可。

好了,功耗分析的基础就这些。记住:动态功耗是“干活”的代价,静态功耗是“活着”的代价。能量是总账,功耗是流速。搞清楚了这些,后面咱们聊优化方案时,你就能明白为什么有些招数管用,有些只是心理安慰。