3. SRAM vs DRAM:片上缓存为什么用SRAM?SRAM的6T单元结构、功耗与面积分析
好,咱们今天聊个硬核话题——片上缓存为什么非得用SRAM?
我刚开始做芯片设计那会儿,也纳闷过:DRAM那么便宜,容量又大,为啥不直接拿它做缓存?后来被流片回来的测试结果狠狠教育了一回。嗯,这里面的门道,咱们一条条掰开说。
3.1 SRAM vs DRAM:根本差异在哪?
说白了,SRAM和DRAM最大的区别就两个字:刷新。
DRAM靠电容存电荷,电荷会漏。所以你得每隔几毫秒给它刷一次,不然数据就丢了。这个刷新操作,在片上缓存这种高频访问的场景下,简直就是灾难。
SRAM呢?它靠锁存器(latch)存数据。只要不断电,数据稳稳的。不需要刷新,访问延迟低得多。
我举个例子你就明白了:
| 对比项 | SRAM | DRAM |
|---|---|---|
| 存储原理 | 锁存器(6T结构) | 电容+晶体管(1T1C) |
| 是否需要刷新 | 不需要 | 需要(约64ms刷新一次) |
| 访问速度 | 1~3ns | 10~50ns |
| 单元面积 | 大(6个晶体管) | 小(1个晶体管+1个电容) |
| 静态功耗 | 有漏电,但可控 | 刷新功耗大 |
| 典型应用 | 片上缓存、寄存器文件 | 主存、大容量存储 |
你看,SRAM在速度上碾压DRAM。但代价是面积——一个SRAM单元要6个晶体管,DRAM只要1个晶体管加1个电容。所以DRAM才能做到单颗芯片几十GB,SRAM做到几十MB就顶天了。
3.2 SRAM的6T单元结构:到底怎么工作的?
咱们来拆解一下这个经典的6T结构。我画了个图,你一看就明白。
图:SRAM 6T单元结构示意图
这个结构其实挺巧妙的。你看:
- M1~M4:两个反相器交叉耦合,形成一个锁存器。M1和M2是PMOS,M3和M4是NMOS。它们俩互相锁住,一个输出高,另一个就输出低。这就是存储的1和0。
- M5和M6:两个访问晶体管,由字线(WL)控制。读的时候打开,写的时候也打开。平时关着,省电。
- BL和BL̅:一对位线,用来传输数据。读的时候,BL和BL̅上会出现微小的电压差,敏感放大器一检测就知道存的是0还是1。
我当年在做一个28nm的AI加速器时,就遇到过一个问题:SRAM单元的尺寸没调好,导致读操作时BL上的电压差太小,敏感放大器误判。后来把M5和M6的宽长比调大了一点点,问题就解决了。这种细节,仿真时不一定能完全覆盖,流片回来才暴露。
3.3 功耗分析:SRAM的漏电是个大问题
SRAM的功耗分两块:动态功耗和静态功耗。
动态功耗好理解——每次读写,位线充放电,字线跳变,都会耗电。这部分和频率成正比。频率越高,功耗越大。
静态功耗呢?说白了就是漏电。即使SRAM啥也不干,晶体管也在漏电。尤其是先进工艺下(7nm、5nm),漏电占比越来越高。
避坑指南: 我曾经在一个项目中,为了追求极致性能,把SRAM的电压抬高了0.1V。结果性能确实上去了,但漏电功耗翻了一倍。后来学乖了,低功耗模式下一定要用电压降(voltage scaling)和电源门控(power gating)。
给你个参考数据:在7nm工艺下,一个1MB的SRAM,静态漏电功耗大约在10~20mW左右。而同样容量的DRAM,因为需要刷新,静态功耗反而更高。这也是为什么片上缓存宁可用面积大的SRAM,也不用DRAM——DRAM的刷新功耗在片上场景下根本扛不住。
3.4 面积分析:为什么SRAM这么贵?
面积问题,说白了就是钱的问题。
一个SRAM单元要6个晶体管,加上布线、隔离、阱,实际面积大约是晶体管本身面积的2~3倍。在7nm工艺下,一个SRAM bit的面积大约是0.04~0.06μm²。听起来很小对吧?但一个1MB的SRAM,需要8M个bit(1MB = 8Mbit),算下来面积大约是0.4~0.5mm²。
而DRAM呢?一个bit只需要1个晶体管加1个电容,面积大约是SRAM的1/5到1/6。所以DRAM才能做到单颗芯片几十GB,SRAM做到几十MB就顶天了。
但为什么AI芯片还是拼命往片上塞SRAM?
因为带宽。你想想看,AI推理时,权重和激活值要来回读。如果走片外DRAM,带宽瓶颈卡在那,计算单元再快也白搭。片上SRAM可以提供TB/s级别的带宽,DRAM只能给到几百GB/s。这个差距,在AI场景下是致命的。
核心结论: SRAM用面积换速度,DRAM用速度换容量。在AI芯片的缓存层级中,L1/L2缓存必须用SRAM,L3或HBM可以用DRAM。这是架构设计的铁律。
3.5 实际设计中的取舍
我做了这么多年芯片,总结下来,SRAM设计中有几个关键点:
- 单元尺寸:越大越稳,但面积也大。需要根据工艺和电压做权衡。
- 读写辅助电路:比如写辅助(write assist)和读辅助(read assist),在低电压下特别重要。
- 冗余设计:SRAM单元良率不是100%,需要预留冗余行/列来替换坏掉的单元。
- 功耗管理:休眠模式、浅休眠模式、深休眠模式,不同模式漏电差好几倍。
我记得有一次,一个团队设计的SRAM在低温下读写失败。查了半天,发现是NMOS和PMOS的阈值电压在低温下漂移了。后来加了温度补偿电路才搞定。这种坑,仿真时很难覆盖全。
注意: 不要以为SRAM是标准单元就万事大吉。在先进工艺下,SRAM的物理设计(比如布局、布线、阱偏置)对性能和良率影响极大。建议和foundry的PDK团队紧密配合,别自己闷头搞。
好了,关于SRAM和DRAM的对比,以及SRAM的6T结构、功耗和面积分析,就聊到这儿。下一节咱们会深入SRAM的读写时序,看看具体怎么优化延迟和带宽。
想要更多资料,联系可可