第二讲:硬件基础与功耗模型——CMOS功耗从哪来?

各位同学,咱们今天聊点实在的。做低功耗推理引擎,你得先搞清楚功耗到底是怎么产生的。这就像修车,你得先知道发动机为什么会发热,才能谈怎么散热。CMOS电路的功耗,说白了就三大来源:动态功耗、静态功耗、还有短路功耗。

我个人习惯把功耗问题比作「花钱」。动态功耗就像你正常消费,干活就得花钱;静态功耗呢,就像你躺着不动,但手机还在后台跑程序,照样耗电;短路功耗嘛,有点像你刷卡时手抖了一下,多刷了一笔。嗯,咱们一个一个来看。

2.1 动态功耗:干活就得花钱

动态功耗是芯片工作时最主要的功耗来源。它发生在信号翻转的时候——从0变1,或者从1变0。为什么会耗电?因为你要给电容充电啊。

你想想看,CMOS电路里每个门的输出端都连着下一级的栅极,这本质上就是个电容。信号从0跳变到1,你得给这个电容充电,电流从电源VDD流过来,经过PMOS管,灌进电容里。反过来,从1跳变到0,电容放电,电流从电容流经NMOS管,跑到地上去。

每次充放电,都消耗能量。频率越高,翻转次数越多,功耗自然就上去了。这就是为什么我们常说:动态功耗跟频率成正比

核心公式:P_dynamic = α × C × V² × f

其中:

  • α —— 翻转活动因子(0到1之间,表示信号平均每周期翻转的概率)
  • C —— 负载电容(包括栅极电容、互连电容等)
  • V —— 电源电压
  • f —— 工作频率

这个公式太重要了,我建议你刻在脑子里。注意看,电压是平方项!这意味着你把电压从1.0V降到0.8V,功耗直接降到原来的64%。我在做上一款AI加速芯片时,就靠这招把核心电压从0.9V压到0.75V,整体功耗降了将近30%。代价是什么?时序变紧了,得重新做STA。嗯,有得必有失。

2.2 静态功耗:躺着也中枪

静态功耗,也叫漏电功耗。理想情况下,CMOS管关断时应该完全不漏电。但现实世界哪有那么完美?晶体管尺寸缩到纳米级以后,漏电流就成了大问题。

漏电流主要有几种:

  • 亚阈值漏电流 —— 栅压低于阈值电压时,管子并没有完全关断,还是有电流流过。温度越高,漏得越厉害。
  • 栅极漏电流 —— 栅氧化层太薄了,电子直接隧穿过去。我记得28nm以后这问题就开始凸显了。
  • 源漏穿通漏电流 —— 沟道太短,源极和漏极直接「短路」了。

静态功耗的公式很简单:P_static = I_leakage × VDD

我曾经踩过一个坑:某款芯片在25°C下测静态功耗只有5mW,觉得没问题。结果量产以后,用户反馈待机时电池掉电飞快。一查,芯片在85°C下静态功耗飙到了80mW!温度每升高10°C,漏电流差不多翻一倍。从那以后,我每次做低功耗设计,都会把高温工况单独拎出来看。

避坑指南: 我曾经在7nm项目上吃过亏——为了追求性能,用了大量低阈值电压(LVT)单元。结果静态功耗占比从15%直接飙到45%。后来学乖了,关键路径用LVT,非关键路径用高阈值(HVT)或标准阈值(SVT)单元。这叫「多阈值设计」,后面章节会细讲。

2.3 短路功耗:开关瞬间的「短路」

短路功耗很多人容易忽略。它发生在信号翻转的瞬间——当输入电压在中间区域时,PMOS和NMOS会同时导通一小段时间。这时候VDD到GND之间就形成了一条短暂的直流通路,电流「唰」地一下冲过去。

短路功耗的大小取决于:

  • 输入信号的上升/下降时间(斜率越缓,短路时间越长)
  • 晶体管的驱动能力
  • 负载电容(负载越大,短路功耗占比反而越小)

一般来说,短路功耗占总功耗的10%~20%左右。在先进工艺下,由于电压降低,短路功耗占比会有所上升。我建议你在做功耗估算时,别把它当「小头」忽略掉——积少成多嘛。

2.4 工艺节点对功耗的影响

工艺从180nm一路走到3nm,功耗特性发生了翻天覆地的变化。我整理了一张表,你看看就明白了:

工艺节点 典型电压(V) 动态功耗特点 静态功耗特点 主要挑战
180nm ~ 130nm 1.8 ~ 1.2 动态功耗占绝对主导(>90%) 漏电几乎可忽略 电压高,频率受限
90nm ~ 65nm 1.2 ~ 1.0 动态功耗仍为主,但占比开始下降 亚阈值漏电开始显现 漏电与性能的平衡
45nm ~ 28nm 1.0 ~ 0.9 动态功耗占比约70%~80% 漏电占比升至20%~30% 栅极漏电、工艺波动
16nm ~ 7nm 0.8 ~ 0.7 动态功耗占比降至50%~60% 漏电占比可达40%~50% FinFET工艺、热管理
5nm ~ 3nm 0.7 ~ 0.6 动态功耗占比进一步下降 漏电成为主要矛盾 量子效应、可靠性

看到没?随着工艺推进,电压在降,电容在减,动态功耗确实在变小。但漏电却在疯狂增长。到了7nm以下,静态功耗和动态功耗基本「平分秋色」了。这意味着什么?你光靠降电压、降频率已经不够了,必须从电路设计、架构设计层面同时下手。

我的经验: 在做AI推理引擎时,我通常会先跑一遍RTL级的功耗仿真,看看动态功耗和静态功耗的占比。如果静态功耗超过30%,我就会考虑:

  1. 是否可以用电源门控(Power Gating)把空闲模块彻底断电?
  2. 是否可以用多阈值库来平衡性能和漏电?
  3. 是否可以在待机模式下切到更低的电压域?

这些技巧,后面章节会一个一个展开讲。

2.5 功耗模型的实际应用

理论讲完了,咱们看看怎么用。假设你正在设计一个AI推理加速器,核心频率500MHz,电压0.8V,负载电容估算为2nF,平均活动因子0.15。那么动态功耗大概是多少?

P_dynamic = α × C × V² × f
          = 0.15 × 2e-9 × 0.8² × 500e6
          = 0.15 × 2e-9 × 0.64 × 5e8
          = 0.15 × 2 × 0.64 × 0.5
          = 0.096 W
          ≈ 96 mW

嗯,96mW。如果静态功耗估算为30mW,那总功耗就是126mW。这时候你就要想:这个功耗水平,散热能不能扛住?电池能撑多久?

我习惯在项目初期就建一个简单的功耗预算表,把每个模块的α、C、V、f都列出来,算一遍总功耗。这样到后端实现时,心里就有底了。别等到芯片回来了才发现功耗超标——那可就晚了。

好,这一讲就到这里。下一讲咱们聊聊「电压频率调节技术」,也就是DVFS。说白了就是怎么让芯片在干活时跑快点,闲着时跑慢点,省电又不耽误事。到时候见。