低功耗设计基础:CMOS电路功耗模型

做嵌入式开发的朋友,尤其是搞过电池供电设备的,一定对「功耗」这两个字又爱又恨。我刚开始做低功耗设计那会儿,总觉得不就是把主频降下来、不用的时候睡个觉嘛。结果产品做出来,电池续航跟理论值差了快一倍……后来才老老实实把CMOS功耗模型啃了一遍。

说白了,你要想控制功耗,就得先搞清楚功耗从哪来、怎么算、哪些因素说了算。这一节咱们就把这些底层的门道捋清楚。

2.1 CMOS电路的功耗构成

CMOS电路的功耗,可以拆成两大部分:动态功耗和静态功耗。我习惯用一个公式来概括:

P_total = P_dynamic + P_static
         = (α × C_L × V_DD² × f) + (I_leak × V_DD)

这个公式看着简单,但每个参数背后都有故事。咱们一个一个说。

2.1.1 动态功耗

动态功耗,就是电路在翻转时消耗的能量。它又分两块:

  • 开关功耗:给负载电容充放电消耗的。这是大头。
  • 短路功耗:PMOS和NMOS同时导通瞬间的穿通电流。占比小,但频率高时不能忽略。

开关功耗的公式是:

P_sw = α × C_L × V_DD² × f

这里α是翻转活动因子,C_L是负载电容,V_DD是供电电压,f是时钟频率。

关键洞察:动态功耗与电压的平方成正比,与频率成正比。这意味着——降电压的效果比降频率猛得多。

我在一个穿戴设备项目里遇到过这种情况:把核心电压从1.8V降到1.2V,动态功耗直接砍了一半多。频率只降了20%,但电压降了33%,效果立竿见影。

2.1.2 静态功耗

静态功耗,就是电路不干活的时候也在漏电。这个在深亚微米工艺下越来越要命。

静态功耗主要来自:

  • 亚阈值漏电流:晶体管关不断,微弱电流从源极漏到漏极
  • 栅极漏电流:栅氧化层太薄,电子直接隧穿过去
  • PN结漏电流:源/漏与衬底之间的反向偏置漏电

公式很简单:

P_static = I_leak × V_DD

你想想看,一个芯片里几千万个晶体管,每个都漏那么一丁点,加起来就相当可观了。我记得有次做28nm工艺的芯片,静态功耗占了总功耗的40%以上,吓我一跳。

2.2 电压与频率对功耗的影响

电压和频率是功耗的两个核心旋钮。但它们对功耗的影响方式完全不同。

2.2.1 电压的影响

从公式里就能看出来,V_DD在动态功耗里是平方项。这意味着:

  • 电压降10%,动态功耗降19%
  • 电压降20%,动态功耗降36%
  • 电压降30%,动态功耗降51%

但有个坑——电压不能无限降。电压低了,电路速度就慢了。为什么呢?因为晶体管的延迟跟电压有关系:

t_d ∝ V_DD / (V_DD - V_th)²

V_th是阈值电压。电压越接近阈值,延迟增长得越快。我曾经在一个项目中把电压从1.2V降到0.9V,功耗降了44%,但时序直接崩了,setup violation满天飞。

注意:降电压必须同时考虑时序余量。建议先做静态时序分析(STA),确认最差工况下还能满足频率要求,再动手调电压。

2.2.2 频率的影响

频率对动态功耗是线性关系。降频到一半,动态功耗也降到一半。这个效果很直接,但代价也明显——性能跟着降。

实际项目中,我常用的策略是:

  • 动态电压频率调整(DVFS):高负载时高频高电压,低负载时低频低电压
  • 时钟门控:不用的模块直接把时钟掐掉,动态功耗归零
  • 多电压域:不同模块用不同电压,关键路径用高电压,非关键路径用低电压

举个例子,一个MCU跑在72MHz/3.3V时功耗可能是50mW,但降到36MHz/1.8V时可能只有8mW。性能降了一半,功耗降了80%以上。这就是电压和频率联动的威力。

2.3 工艺缩放对功耗的影响

工艺从微米级走到纳米级,功耗特性发生了根本性变化。我整理了一个对比表:

工艺节点 典型电压 动态功耗密度 静态功耗占比 主要矛盾
180nm 1.8V 低 <5% 动态功耗
90nm 1.2V 中 10-20% 动态+静态
28nm 0.9V 高 30-50% 静态功耗
7nm 0.7V 极高 >50% 漏电+散热

为什么会这样?工艺缩小的好处是:

  • 晶体管尺寸变小,负载电容C_L降低
  • 电压可以跟着降,动态功耗下降
  • 集成度提高,同样功能面积更小

但坏处也很明显:

  • 栅氧化层越来越薄,栅极漏电暴增
  • 沟道长度变短,亚阈值漏电增加
  • 阈值电压不能等比降低,导致电压下降空间受限

实战建议:选工艺节点时,别光看性能和密度。如果你的产品是电池供电、大部分时间休眠,那静态功耗就是第一指标。我见过有人用7nm工艺做IoT传感器,结果休眠电流比28nm方案还大,得不偿失。

2.4 知识结构总览

下面这张图把CMOS功耗模型的核心逻辑串起来了。你可以把它当作本章的思维导图:

CMOS电路功耗模型总览 总功耗 P_total 动态功耗 P_dynamic 静态功耗 P_static 开关功耗 短路功耗 亚阈值漏电 栅极漏电 PN结漏电 α · C_L · V_DD² · f I_leak · V_DD 工艺缩放 → C_L↓ V_DD↓ 但漏电↑ 设计策略:DVFS + 时钟门控 + 多电压域

2.5 本章小结

好了,咱们把低功耗设计的基础打牢了。核心就三件事:

  • 动态功耗:跟电压平方成正比,跟频率成正比。降电压是第一优先级。
  • 静态功耗:工艺越先进越要命。选工艺时得算清楚休眠电流。
  • 工艺缩放:带来性能红利,也带来漏电噩梦。没有免费的午餐。

这些概念后面每一章都会用到。尤其是做Bootloader的时候,你需要在启动阶段就把功耗控制策略初始化好——比如先跑在低频低电压,等系统稳定了再切到高性能模式。这些实战技巧,咱们后面慢慢展开。