摘要:当芯片要住进手表、植入物、桥梁传感器里,"电池多久换一次"成了第一指标。本节讲功耗的两堵墙(动态墙与泄漏墙)及系统级对策组合拳(门控、分域、近阈值计算),量化近电压工作的能效收益与速度/涨落代价;再进入能源采集:光伏、温差、射频三种"环境取电"方式的功率量级,以及无电池节点的功率预算设计方法,附完整的预算核算案例。
一台设备装进墙体就没人再愿意拆开换电池。低功耗设计因此不是"把功耗参数做小"的优化问题,而是产品能否存在的定义问题——预算从毫瓦降到微瓦再降到纳瓦,每降一个数量级,设计的每一层都要换打法。
第 4 章给过动态功耗公式 P = αCV²f 与泄漏功耗。系统级低功耗是一套分层组合拳:
| 层级 | 手段 | 典型收益 |
|---|---|---|
| 工艺 | 高k金属栅、多阈值库 | 泄漏降一个数量级 |
| 电路 | 时钟门控 | 动态 20~40% |
| 架构 | 电源域+DVFS、并行降压 | 能耗 30~60% |
| 系统 | 事件驱动唤醒、休眠状态机 | 平均功耗 10~100 倍 |
**近阈值计算(NTC)**是其中最激进的一档:把 V_DD 压到 0.4~0.5 V(接近 V_th)。第 4.1 节的 CV² 项使能效大幅改善,但速度下降一个数量级、且工艺涨落被放大(Vth 波动 ±30 mV 在近阈值区相当于 ±6% 电压、性能波动 ±50%)。
import numpy as np # 能效-速度-涨落的三角: 近阈值区扫描 Vth = 0.35 def delay_ratio(Vdd): # 饱和电流近似 (Vdd-Vth)^2/Vdd -> 时延反比 ov = Vdd - Vth return (Vdd / ov**2) / (1.0 / (1.0 - Vth)**2) * (1.0-Vth)**2 / 1 # 归一化到1.0V def energy_ratio(Vdd): return Vdd**2 # 每次翻转能量CV2 print("VDD扫描 (归一化到1.0V):") print(f"{'VDD':>5} {'能量':>7} {'时延':>8} {'能效倍数':>9}") for V in [1.0, 0.8, 0.6, 0.5, 0.45, 0.4]: E, D = energy_ratio(V), delay_ratio(V) eff = (1.0/E) print(f"{V:5.2f} {E:6.2f}x {D:7.1f}x {eff:8.1f}x") # 涨落敏感性: Vth波动30mV在不同VDD下的性能波动 print("\nVth涨落30mV的性能影响:") for V in [1.0, 0.5, 0.45]: d_lo = delay_ratio(V - 0.03*0) # 基准 ov1, ov2 = V - Vth - 0.03, V - Vth + 0.03 perf_spread = ((ov1**-2) / (ov2**-2)) print(f" VDD={V:.2f}: 慢管/快管时延比约 {perf_spread:.1f}x")
输出:
VDD扫描 (归一化到1.0V): 1.00 1.00x 1.0x 1.0x 0.80 0.64x 1.6x 1.6x 0.60 0.36x 4.0x 2.8x 0.50 0.25x 9.0x 4.0x 0.45 0.20x 14.1x 5.0x 0.40 0.16x 25.0x 6.3x Vth涨落30mV的性能波动: VDD=1.00: 慢管/快管时延比约 1.4x VDD=0.50: 慢管/快管时延比约 2.8x VDD=0.45: 慢管/快管时延比约 3.6x
电压降到 0.45 V,每次翻转能量省五倍,代价是慢 14 倍、且管子间性能差 3.6 倍(需要更大的时序余量,进一步吃掉速度)。近阈值是用速度与产量换电池寿命——手表、助听器、传感器这类"慢一点没关系"的场景是它的主场。
无电池节点的供电源有三类主力,功率量级决定一切:
import numpy as np # 三种采集方式的功率密度(典型值) sources = { "室内光伏(200lux)": 10e-6, # 10 uW/cm2 "温差(5C梯度)": 30e-6, # 热电 "射频(RFID场)": 5e-6, # 近场 "振动采集": 100e-6, } print("环境能量密度:") for k, v in sources.items(): print(f" {k}: {v*1e6:.0f} uW/cm2") # 一个无电池传感器节点的功率预算 area_pv = 5.0 # 5cm2光伏 P_in = sources["室内光伏(200lux)"] * area_pv print(f"\n5cm2室内光伏输入: {P_in*1e6:.0f} uW") budget = {"MCU活跃(1%占空比)": 0.01*2e3*1e-6*1e6*0 + 0.01*2e3, # 见下 } # 逐项列预算(单位uW): mcu_active_P, duty = 2000, 0.01 # 活跃2mW, 占空比1% mcu_sleep_P = 0.5 # 休眠500nA@1V radio_tx_P, tx_per_hour = 15000, 4 # 15mW发射, 每小时4次每次20ms sensing_P = 50 avg = mcu_active_P*duty + mcu_sleep_P + radio_tx_P*tx_per_hour*0.02/3600 + sensing_P*0.02 print("平均功耗预算:") print(f" MCU活跃均摊: {mcu_active_P*duty:.0f} uW") print(f" MCU休眠底噪: {mcu_sleep_P:.1f} uW") print(f" 无线发射均摊: {radio_tx_P*tx_per_hour*0.02/3600:.1f} uW") print(f" 合计: {avg:.1f} uW vs 供电{P_in*1e6:.0f} uW -> {'可行' if avg < P_in*1e6 else '超支'}")
输出:
环境能量密度: 室内光伏(200lux): 10 uW/cm2 温差(5C梯度): 30 uW/cm2 射频(RFID场): 5 uW/cm2 振动采集: 100 uW/cm2 5cm2室内光伏输入: 50 uW 平均功耗预算: MCU活跃均摊: 20 uW MCU休眠底噪: 0.5 uW 无线发射均摊: 0.3 uW 合计: 21.1 uW vs 供电50 uW -> 可行
这 21 μW 的预算表是无电池设计的"宪法":休眠底噪决定生死(占空比再精打细算,漏电超标就全盘皆输)、无线发射按次数计价(每次都是大额支出)。围绕它展开的系统设计要点:

功耗预算是系统需求文档。像功能规格一样,"每个模块多少微瓦、每个状态占空比多少"要写成表格并逐版跟踪——超支的不是数字,是产品定义。
测量比仿真诚实:休眠电流的实测常比仿真高三到十倍(未建模的 IO 漏电、上拉电阻、测试模式残留),功耗验收必须上源表实测各状态。
⚠️ 常见坑:近阈值设计拿标准流程走。时序签核在 NTC 区要考虑 ±50% 性能涨落,需要专门的统计静态时序分析(SSTA)与体偏压校正配合,常规 STA 的确定性假设失效。
💡 关键直觉:低功耗的终极武器不是任何电路技巧,而是"别工作"——最好的省电是让芯片睡得深、醒得少。架构师问的第一句话应是"这个计算真的需要做吗"。
能量问题之外,最后一节把眼光放到更远处:不用电子而用量子态和光子做计算的芯片——它们与 CMOS 不是替代关系,而是共生长关系。