存储器件基础(上):SRAM与DRAM的工作原理、优缺点,在存算一体中的应用场景
各位同学,今天我们来聊聊存储器件的基础。说实话,做NPU架构这些年,我见过太多人一上来就盯着计算单元猛优化,结果发现瓶颈全在数据搬运上。你想想看,算力再强,数据喂不进去,那就是白搭。
所以,理解SRAM和DRAM,是搞懂存算一体架构的第一步。我个人的习惯是,先把存储器的脾气摸透,再谈怎么用它们。
一、SRAM:静态随机存取存储器
SRAM,全称Static Random-Access Memory。静态,意思是只要不掉电,数据就能一直保持住,不需要像DRAM那样隔一阵子就得刷新一次。
1. 工作原理
SRAM的存储单元,说白了就是一个双稳态触发器。通常由6个晶体管组成(6T结构)。两个交叉耦合的反相器,加上两个访问管。
为什么叫“静态”?因为它的状态是锁死的。你写进去一个“1”,它就老老实实待在那里,除非你强行改写或者断电。我在项目中遇到过一种情况,就是SRAM的漏电导致数据翻转,那真是让人头大。
核心要点:SRAM用锁存器存数据,速度快,但面积大、功耗高。
2. 优缺点分析
| 优点 | 缺点 |
|---|---|
| 访问速度快,纳秒级延迟 | 面积大,6T结构占地方 |
| 不需要刷新,控制简单 | 静态功耗高,漏电严重 |
| 与CMOS工艺兼容性好 | 容量做不大,成本高 |
| 随机访问,无行/列延迟 | 单位比特成本是DRAM的6-10倍 |
嗯,这里要注意。SRAM虽然快,但你不能指望用它做大容量存储。我曾经在一个边缘AI芯片项目里,试图用SRAM做整个权重缓存,结果芯片面积直接爆了。后来学乖了,SRAM只做寄存器文件和一级缓存。
3. 在存算一体中的应用场景
- 计算近存架构:SRAM作为PE(处理单元)的本地缓存,存放中间计算结果。我建议把最频繁访问的权重放在SRAM里。
- 查找表(LUT):在量化推理中,SRAM可以用来存储激活函数的查找表,延迟极低。
- 寄存器文件:NPU中的标量处理器和向量处理器的寄存器堆,几乎全是SRAM。
- 小规模存内计算:有些设计用SRAM单元直接做乘累加操作,但面积代价很高。我个人不太推荐这种做法,除非你工艺特别先进。
避坑指南:我曾经在28nm工艺下做过一个设计,SRAM的漏电占了总功耗的30%以上。如果你做低功耗NPU,一定要考虑SRAM的电源门控(Power Gating)策略。
二、DRAM:动态随机存取存储器
DRAM,Dynamic Random-Access Memory。动态,意味着它需要不停地刷新,否则数据就丢了。
1. 工作原理
DRAM的存储单元简单得令人发指——一个晶体管加一个电容(1T1C)。电容里存电荷,有电荷代表“1”,没电荷代表“0”。
但问题来了。电容会漏电。漏电速度还挺快,毫秒级别就漏光了。所以DRAM必须每隔几十毫秒刷新一次,把所有数据读出来再写回去。这就是“动态”二字的由来。
为什么会这样?因为电容的绝缘层不可能做到完美,总会有漏电路径。我记得在DDR3时代,刷新周期是64ms,到了DDR5,因为密度更高,刷新压力更大了。
2. 优缺点分析
| 优点 | 缺点 |
|---|---|
| 单位比特成本低,容量大 | 访问速度慢,几十纳秒延迟 |
| 密度高,同样面积容量是SRAM的几十倍 | 需要周期性刷新,增加功耗和复杂度 |
| 动态功耗相对较低 | 行/列访问有额外延迟 |
| 成熟工艺,供应稳定 | 对温度敏感,高温下漏电更严重 |
说白了,DRAM就是拿速度换容量。你想想看,如果NPU的模型权重全部用SRAM存,那成本得飞到天上去。所以大模型推理时,权重必须放在DRAM里,只把当前计算层的数据搬到SRAM。
3. 在存算一体中的应用场景
- 近存计算(Processing Near Memory):DRAM作为主存,NPU通过高带宽接口(如HBM)访问。这是目前最主流的方案。
- 存内计算(Processing In Memory):在DRAM阵列内部做计算。这个方向很热,但挑战也大。我参与过一个项目,在DRAM的sense amplifier旁边加计算逻辑,结果因为工艺偏差,良率惨不忍睹。
- 权重存储:大模型的权重参数,必须放在DRAM里。推理时按需加载到SRAM缓存。
- 数据缓冲区:视频帧、音频流等连续数据,用DRAM做环形缓冲区很合适。
警告:千万不要在DRAM上做频繁的随机小粒度访问。DRAM的行激活开销很大,随机访问会导致严重的性能下降。我曾经见过一个团队,把稀疏矩阵的索引查找放在DRAM里,结果带宽利用率不到5%。
三、SRAM vs DRAM:关键对比
| 对比维度 | SRAM | DRAM |
|---|---|---|
| 存储单元 | 6T锁存器 | 1T1C电容 |
| 访问速度 | 1-5ns | 10-50ns |
| 密度 | 低 | 高(6-10倍于SRAM) |
| 功耗 | 静态功耗高 | 刷新功耗高 |
| 成本 | 高 | 低 |
| 刷新需求 | 无 | 有(64ms周期) |
| 存算一体适用性 | 小规模、低延迟计算 | 大规模、高容量场景 |
四、存算一体架构中的存储层次
在实际的NPU设计中,我们不会只用一种存储器。而是构建一个存储层次结构。我习惯这样设计:
- L0:寄存器文件(SRAM),容量几KB,延迟1个时钟周期
- L1:本地SRAM缓存,容量几十到几百KB,延迟2-3个时钟周期
- L2:共享SRAM,容量几MB,延迟5-10个时钟周期
- L3:DRAM(HBM或LPDDR),容量几GB到几十GB,延迟几十到上百纳秒
你想想看,如果所有数据都在DRAM里,每次计算都要等几十纳秒,那算力再高也发挥不出来。所以,好的NPU架构师,一定是个“数据搬运专家”。
我的经验:在存算一体芯片中,SRAM和DRAM不是二选一,而是协同工作。SRAM负责快,DRAM负责大。关键是把数据流安排好,让SRAM命中率尽可能高。
五、知识体系结构图
下面这张图,是我梳理的本章知识体系。你可以看到SRAM和DRAM在存算一体中的位置和关系。
这张图把SRAM和DRAM的核心特征、子特性以及在存算一体中的应用都串起来了。你可以看到,两者各有千秋,最终要协同工作。
好了,这一章的内容就到这里。SRAM和DRAM是存算一体架构的基石,搞懂它们,后面的内容你会学得更轻松。
想要更多资料,联系可可