低功耗设计基础: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功耗模型的核心逻辑串起来了。你可以把它当作本章的思维导图:
2.5 本章小结
好了,咱们把低功耗设计的基础打牢了。核心就三件事:
- 动态功耗:跟电压平方成正比,跟频率成正比。降电压是第一优先级。
- 静态功耗:工艺越先进越要命。选工艺时得算清楚休眠电流。
- 工艺缩放:带来性能红利,也带来漏电噩梦。没有免费的午餐。
这些概念后面每一章都会用到。尤其是做Bootloader的时候,你需要在启动阶段就把功耗控制策略初始化好——比如先跑在低频低电压,等系统稳定了再切到高性能模式。这些实战技巧,咱们后面慢慢展开。