存储器功耗入门:SRAM 为什么是耗电大户,休眠 SRAM 又是什么
更新时间:2026-09-15。本文是「集成电路大类 · 低功耗设计与验证」入门层系统篇第 35 篇。很多初学者把注意力都放在 ALU、乘法器这些「会算」的逻辑上,结果打开真实 SoC 的功耗报告发现头号大户常常是存储器:CPU 的缓存、GPU 的寄存器堆和本地 SRAM、各类缓冲和查找表。这一篇讲清楚存储器为什么费电、它的三笔功耗账各是什么,以及「休眠 SRAM」「保留电压」这些词到底在说什么。系统地图见低功耗导读。
本文要回答的问题
- 一颗 SRAM 只是「存着」数据,为什么读一下也那么费电?
- 6T 单元、位线、字线、灵敏放大器各自在什么时候耗电?
- 大容量 SRAM 的漏电为什么往往比同等面积的逻辑还夸张?
- retention SRAM 是怎么做到「断电一半还不丢数据」的?
- 架构、RTL、电路三层各能做什么来省存储器的电?
一、6T SRAM:先认识最小的存储单元
标准静态存储单元由六个晶体管组成:

关键点:单元本身保持数据时几乎不花动态能量(没有翻转就没有充放电),但访问它需要驱动整列的位线和整行的字线,那是挂着成百上千个单元的巨大电容网络。存储器的动态功耗主要不在「存」,而在「找和读」。
二、三笔功耗账:读、写、保持
| 操作 | 发生了什么 | 功耗特征 |
|---|---|---|
| 读 | 位线对先预充到 VDD → 字线拉高接通一行 → 被选中单元把其中一根位线微微拉低 → 灵敏放大器检测差分 | 每次访问都做,与读出的是 0 是 1 关系不大;预充和灵敏放大是大头 |
| 写 | 字线接通,写驱动把 BL/BLB 强制摆到目标电平,盖过单元的双稳态 | 位线全摆幅驱动,能量与读同量级 |
| 保持 | 单元通电维持双稳态,无访问 | 动态≈0,但漏电随容量和温度累积 |
一个量化直觉:片上 SRAM 读一次的能量常以 pJ 计,而同样一次 32 位加法可能只有它的几分之一到几十分之一;更要命的是缓存每取一条指令都要访问,频率极高。所以在现代 CPU/GPU 里,存储层次(寄存器→L1→L2→LLC→DRAM)本质上是一套按访问能量和容量分级的供应链:越快越小越近的存储器每字节访问越省,大而远的越费。
三、为什么大容量阵列的漏电特别凶
两个结构性原因:
- 管子数量巨大且密度优先:几 MB SRAM 包含几千万个晶体管,为了塞下密度,单元管常使用阈值较低、漏电较大的器件;即使每个单元漏电极小,乘以几千万就是宏观电流。
- 漏电随温度指数涨:亚阈值漏电大致随温度每升十几度翻一番(机理见漏电与工艺)。高温下保持几 MB 缓存的漏电可能超过运算逻辑本身。
这带来一个反直觉结论:不用的 SRAM 通着电,是在按容量和温度持续缴税。 手机 SoC 深睡时大面积缓存必须进 retention 或电源门控,否则待机电流根本压不下去(系统侧机制见待机与睡眠模式和SoC 电源架构)。
四、休眠 SRAM(retention SRAM):省外围不省核心
标准 SRAM 宏的供电可以分成两部分理解:核心的单元阵列(保持数据真正需要的)和外围(行/列译码、字线驱动、位线预充、灵敏放大器、控制逻辑)。外围面积未必最大,但活动时很费电;保持数据却完全不需要它们。
retention(休眠/保持)模式做的事:
- 切断或大幅降低外围供电,停止预充和灵敏放大(它们在保持时本来就无用);
- 单元阵列改接到较低的保持供电(retention VDD),通常只需标称电压的五六成——只要高过数据保持电压下限 DRV(data retention voltage),双稳态就不会翻;
- 漏电因此可降到正常工作漏电的几分之一,数据完整保留,唤醒只需恢复外围和电压,比电源门控后整块重灌快得多。
三档策略的对比:
| 模式 | 阵列供电 | 外围 | 数据 | 漏电 | 恢复时间 |
|---|---|---|---|---|---|
| 活跃 | 标称 VDD | 全开 | 在 | 最高(访问另计动态) | 0 |
| retention | 降到 DRV 以上 | 关 | 保留 | 低 | 几个时钟周期~µs |
| power gating | 全断 | 全断 | 丢失 | 近零 | 需重新加载(µs~ms) |
选择逻辑与三种省电模式对比完全同构:短时空闲 retention(省漏电又保状态),长时间不用才整块断电(最省但要付重载代价)。
五、架构层:访问次数比电路优化更值钱
存储功耗的第一杠杆在架构,因为能量≈每次访问能量 × 访问次数,而次数的差异可达数量级:
- 缓存与局部性:提高命中率等价于把访问从大而费的低层存储器挪到小而省的高层;数据密集型算法按块处理(blocking/tile)让数据在小缓冲里被复用多次,是最经典的节能优化。
- 压缩与位宽:能存 16 位就别占 32 位阵列;窄位宽直接减半字线/位线摆动的电容。
- bank 分区与门控:大 SRAM 切成多个 bank,访问只点亮一个,其余 bank 的字线/预充/灵敏放大全关;未用 bank 可 retention 或断电。这与电源域划分的「按使用聚类」思想一致。
- 便笺式存储/显式管理:嵌入式加速器用软件可控的 scratchpad RAM 代替硬件缓存,可做到「只在需要时取、取来必复用」,消除缓存未命中的浪费访问。
- 关掉预取投机:高性能核的预取、投机执行会触发大量「最终用不到」的缓存访问;能效核偏向顺序、简单、少投机(大小核权衡见CPU 电源管理)。
一个算例体会数量级:某 SRAM 宏每次读 4pJ。一个循环每周期读一次、跑 100 万周期,仅读功耗能量就是 4µJ;若通过块复用把访问降到 10 万次,省 3.6µJ——比在灵敏放大器上抠 10% 有效得多。
六、RTL 与电路层的责任
低功耗 RTL 篇的存储器守则在这里具体化为:
- 真实的片选
cs:未选中周期必须为 0,确保宏内部预充/灵敏放大不启动;地址/控制信号要寄存干净,避免毛刺误开字线(一次假字线脉冲就是一次整行位线放电)。 - 减少无谓写:读改写前先比较;只在值真变化时写回(对寄存器堆和缓存标签尤其有效)。
- 睡眠握手:电源管理 FSM 在系统睡眠时显式把宏置 retention 或请求断电(UPF 中宏通常有专用 retention power pin 模型,见 UPF 入门)。
- 电路/编译器技术(了解即可):多阈值单元(外围用快管、阵列用漏电小的管)、位线低摆幅读出、分段字线、读写辅助电路、近阈值保持。
七、其他存储器:Flash、DRAM、ROM 的功耗侧面
| 存储 | 动态功耗特征 | 保持/待机 |
|---|---|---|
| 片上 SRAM | 预充+灵敏放大,按访问次数计费 | retention/PG 两档省电 |
| NOR/NAND Flash | 读较快;写/擦需要电荷泵产生高压,又慢又费电(写一页的能量可能顶几千次读) | 断电不丢,待机极低 |
| DRAM | 电容存电荷,必须定期刷新;行列寻址、激活/预充命令本身耗能 | 自刷新模式保留数据但持续耗电;深睡常断电挂起 |
| ROM/OTP | 读低功耗、无写 | 基本无保持成本 |
固件含义:避免把 Flash 当频繁擦写的工作内存(也损寿命);DRAM 自刷新电流是手机「内存保持待机」的重要成分(见待机睡眠模式);无电源态要保留的数据走 Flash/写回磁盘,愿意丢的缓存直接断电最省。
八、一张「访问能量阶梯」教学表
数量级随工艺差异很大,关键是相对关系(越往下越费、越远):
| 层级 | 相对访问能量(示意) | 相对速度 |
|---|---|---|
| 寄存器 | 1× | 最快 |
| L1 SRAM | ~5~10× | 1~几周期 |
| L2/LLC SRAM | ~几十× | 十几~几十周期 |
| 片外 DRAM | ~几百~上千×(含 PHY/IO) | 上百周期 |
| Flash 写 | 读的上千~上万倍 | 极慢、需高压 |
这张表是所有「数据移动才是能耗大头」论断的来源:在大模型加速器里,把权重从 DRAM 搬一遍的能量可能超过片上算很多次——所以现代架构拼命做数据复用和近存/存算,本质是在跟这张阶梯的电费作战。
八·补、工程实例:一块缓存的省电改造走查
用一个贴近真实的小设计收尾,把全片概念串起来。某传感器 SoC 有一块 8KB 结果缓存 SRAM,原始设计问题与改造步骤:
- 现状测量:DPA 显示采样状态机空闲时,该宏每 64µs 出现一次电流小鼓包;查 RTL 发现片选由组合译码生成,地址总线在无关周期仍跳变,误触发了预充。
- 第一步(RTL,零成本):把片选寄存一拍、仅在读写使能时拉高;地址/数据在非访问周期冻结为 0。空闲鼓包消失,宏平均动态电流下降——对应第六节的「干净 cs」纪律。
- 第二步(架构):发现固件每次只写 4 字节却按 32 位宽宏的单字访问处理,且 8KB 中 6KB 长期不用。把宏切成两个 4KB bank,采样数据只落 bank0;bank1 在初始化后即被电源管理 FSM 置 retention。
- 第三步(睡眠):整机深睡时 bank0 进 retention 保存未落发数据,bank1 断电;实测保持电流从整块常开的十几 µA 降到 retention 档的几 µA(数值随工艺,方向明确)。
- 验收:功耗报告对比改造前后的宏功耗分项;residency 计数器记录 bank1 断电时间占比;功耗异常排查流程确认无「假片选」回归。
这个走查的典型性在于:收益最大的两步(干净 cs、bank 划分)都在架构/RTL,且顺序恰好是「先少访问、再关外围、最后断电」;一上来换低漏电库或加 decap 是抓错了杠杆。
常见误区与排查直觉(补充)
retention 电压不是随便给:高了省不了漏电,低过 DRV 会静默写坏数据(表现为偶发位翻转、且与温度相关);DRV 必须在高温/低温/快慢角都硅 characterization,签核留 margin。
retention 的进/出有时序窗口:进 retention 前要先停访问、等在途操作完成;退出要等 retention 电源切回标称并稳定。这些窗口由电源管理 FSM 保证、由低功耗验证覆盖。
ECC 与保持:大容量或低电压保持时,软翻转风险上升,关键缓存的 retention 模式要配合 ECC 或唤醒后校验。
误区:存储器不用就不耗电。 保持漏电和(DRAM 的)刷新从不休息,不用必须 retention/断电。
误区:cs 接 1 省事。 等于让宏每周期都做读前的预充准备,是最常见也最容易修的存储浪费。
误区:缓存越大越省电。 大缓存命中率高但每次访问和保持漏电都贵,存在最优点,嵌入式场景小缓存+scratchpad 常更省。
排查:DPA 曲线上存储器在无事务窗口仍有周期性脉冲,先查 cs/地址毛刺和刷新配置;睡眠电流偏高时查宏是否真进了 retention 档(功耗异常排查的典型步骤)。
补充直感:寄存器堆、缓存、宏虽然名字不同,电费模型一致——「选中的行/体全额付动态钱,未选中的容量按温度付漏电钱」。评审存储方案时先问两句:典型工作时实际被点亮的容量占比是多少?最长空闲时多大比例能进 retention 或断电?两问答不上来,后续任何电路级省电都缺乏靶心。
这一篇在知识体系里的位置
- 上游:功耗从哪来给 ½CV²f,翻转率给 α,漏电与工艺给温度漏电机制。
- 本片:把这些机制对到「阵列-位线-外围」的具体结构和三档电源策略。
- 下游:RTL 守则见低功耗 RTL 直觉,系统睡眠见待机睡眠模式与 SoC 电源架构,预算方法见功耗预算实战示例。
一句话收口:存储器的电费「访问按次收、保持按容量和温度收」;省电的顺序是先少访问(架构)、再关外围(retention)、最后断整电(power gating),顺序反了事倍功半。
总结
SRAM 的动态功耗不在「存」而在「找和读」——每次访问都要预充大电容位线、驱动整行字线、灵敏放大,与数据多少无关,而大容量阵列因管子多、密度优先用低阈器件,保持漏电随温度指数上涨常超过逻辑;省电三档是活跃、retention(只给高于 DRV 的保持供电、切断外围,漏电大降且数据不丢)、power gating(最省但丢状态)。第一杠杆在架构减访问次数(局部性、bank 划分、便笺式暂存、关投机),RTL 要给寄存后的真实片选,顺序永远是先少访问、再关外围、最后断电。