存储层次与功耗基础:SRAM vs DRAM、片上存储层次结构、存储访问功耗模型、漏电与动态功耗

各位同学,咱们今天聊聊片上存储。说实话,我在低功耗芯片设计这行摸爬滚打了十几年,最头疼的往往不是逻辑电路,而是存储。为什么?因为存储占了芯片面积的大头,功耗也常常是“大户”。你想想看,一个SoC里,Cache、SRAM、寄存器堆,加起来可能超过一半的晶体管都用在存储上。功耗能不高吗?

SRAM vs DRAM:根本差异在哪里?

先搞清楚两个基本概念:SRAM和DRAM。很多刚入行的同学容易混淆,其实它们的存储原理完全不同。

对比项 SRAM(静态随机存取存储器) DRAM(动态随机存取存储器)
存储单元 6个晶体管(6T)构成锁存器 1个晶体管+1个电容(1T1C)
数据保持 不需要刷新,上电即保持 需要周期性刷新(通常64ms)
访问速度 快(1-3ns) 慢(10-50ns)
集成密度 低(6T/bit) 高(1T1C/bit)
功耗特性 静态功耗高(漏电大) 动态功耗高(刷新+访问)
典型应用 Cache、寄存器堆、片上Buffer 主存、大容量存储

我个人习惯把SRAM比作“带锁的抽屉”——你锁上它,数据就在里面,不用管它也不会丢。DRAM呢,就像“漏水的桶”——你得不停地往里加水(刷新),否则数据就没了。这个比喻虽然糙,但道理不糙。

关键认知:SRAM的6T结构决定了它速度快但面积大,适合做片上Cache;DRAM的1T1C结构密度高但需要刷新,适合做主存。低功耗设计时,你得根据应用场景选对存储类型。

片上存储层次结构

现代芯片的存储层次,说白了就是一个“速度与容量”的博弈。越靠近处理器,速度越快,但容量越小、成本越高。我参与过一个AI加速器项目,当时为了平衡性能和功耗,光存储层次就迭代了三版。

典型的片上存储层次是这样的:

  1. 寄存器堆(Register File)——最靠近运算单元,通常用全定制SRAM或触发器实现,容量最小(几十到几百字节),速度最快(亚纳秒级)。
  2. L1 Cache——每个核心私有,通常16-64KB,访问延迟1-3个时钟周期。
  3. L2 Cache——多个核心共享或私有,通常128KB-1MB,延迟5-20个时钟周期。
  4. L3 Cache(可选)——芯片级共享,几MB到几十MB,延迟20-50个时钟周期。
  5. 片上SRAM/Scratchpad——软件管理的片上存储,常用于DSP或AI加速器。
  6. 片外DRAM——主存,容量GB级,但访问延迟上百个时钟周期。

嗯,这里要注意:层次越多,数据搬移的功耗就越大。我曾经见过一个团队,为了省事把所有数据都放在L3 Cache里,结果芯片一跑起来,温度直接飙到85度。这就是典型的“存储层次设计不合理”。

片上存储层次结构 寄存器堆(RF) L1 Cache(I-Cache / D-Cache) L2 Cache L3 Cache(可选) 片上SRAM / Scratchpad 片外DRAM(主存) 速度:快 → 慢 容量:小 → 大 功耗/bit:高 → 低 成本/bit:高 → 低 箭头方向:数据访问路径

存储访问功耗模型

搞低功耗设计,你得会算账。存储访问的功耗,我一般把它拆成两部分:动态功耗和静态功耗(漏电)。

动态功耗

动态功耗发生在读写操作时。说白了,就是给位线充放电、驱动字线、翻转存储节点这些动作消耗的能量。公式很简单:

E_dynamic = α × C_load × Vdd² × N_access

其中:

  • α —— 翻转活动因子(0到1之间,取决于数据模式)
  • C_load —— 负载电容(位线电容、字线电容等)
  • Vdd —— 工作电压
  • N_access —— 访问次数

你看,电压是平方项,所以降压是最有效的降动态功耗手段。我做过一个实验,把SRAM的电压从1.0V降到0.8V,动态功耗直接降了36%。但代价是访问时间变长了,时序裕量变小了。这就是trade-off。

实战技巧:在低功耗模式下,可以考虑降低SRAM的工作电压(电压缩放),但一定要做够时序仿真。我曾经因为电压降得太狠,导致芯片在高温下读数据出错,那叫一个惨。

静态功耗(漏电)

静态功耗是芯片上电后,即使不访问存储,也会一直消耗的功耗。主要来源有三个:

  • 亚阈值漏电(Isub)——晶体管关不断,电流从源到漏“溜”过去。工艺越先进,这个问题越严重。
  • 栅极漏电(Igate)——栅氧化层太薄,电子直接“隧穿”过去。28nm以下工艺尤其明显。
  • 结漏电(Ijunction)——源/漏与衬底之间的PN结反向漏电。

公式长这样:

P_leakage = Vdd × (I_sub + I_gate + I_junction)

嗯,这里要特别提醒:SRAM的6T结构里,总有一些晶体管处于“半导通”状态,漏电比普通逻辑门大得多。一个64KB的SRAM,漏电功耗可能占到芯片总功耗的30%以上。这在移动设备里是致命的。

避坑指南:我曾经设计过一个IoT芯片,SRAM占了芯片面积的40%,漏电功耗占了总功耗的60%!后来不得不加上电源门控(Power Gating),在休眠时把整个SRAM阵列断电。但要注意,断电后数据就丢了,得提前把关键数据搬到非易失存储里。

漏电与动态功耗的权衡

你可能会问:动态功耗和漏电功耗,哪个更重要?答案是:看场景。

应用场景 主要矛盾 优化方向
高性能计算(CPU/GPU) 动态功耗(频繁访问) 降低电压、减少位线摆幅、优化访问模式
移动设备/物联网 漏电功耗(大部分时间休眠) 电源门控、多阈值电压(HVT/LVT)混合、数据保持模式
AI加速器 两者都重要(计算密集+数据密集) 数据复用、近存计算、存储层次优化

我个人习惯在设计初期就做一个“功耗预算表”,把不同工作模式下动态和静态的占比算清楚。这样后面做优化时,才知道该往哪个方向使劲。

小结

这一章我们聊了SRAM和DRAM的根本区别、片上存储的层次结构、以及存储功耗的两个核心模型。说白了,存储功耗优化的本质就是:在正确的时间,把正确的数据,放在正确的位置,用最少的能量完成访问。后面的章节,我们会深入具体的优化技术,比如多阈值电压设计、电源门控、近存计算等等。

记住一句话:存储优化,永远是芯片低功耗设计的第一战场。