第3章:DRAM原理与设计
大家好,我是你们的老朋友。今天我们来聊聊DRAM——大模型芯片里最绕不开的存储元件。
说实话,DRAM这东西看着简单,但坑特别多。我当年刚入行时,就因为没搞懂刷新机制,导致芯片在高温下数据全丢,那叫一个惨。嗯,今天咱们就把这些坑一个个填上。
3.1 1T1C DRAM单元:存储的最小单元
DRAM存储单元的核心结构,说白了就是一个晶体管加一个电容——1T1C。为什么叫这个名字?因为每个bit只需要1个晶体管(Transistor)和1个电容(Capacitor)。
你想想看,SRAM需要6个晶体管才能存1个bit,DRAM只用1个,密度优势太明显了。这也是为什么大模型芯片里,主存几乎全是DRAM。
核心原理:电容里存电荷,有电荷代表1,没电荷代表0。晶体管就是个开关,控制读写操作。
但这里有个致命问题——电容会漏电。我做过测试,室温下电容里的电荷大概只能保持几十毫秒。所以DRAM必须不停地刷新,否则数据就没了。
3.2 刷新机制:为什么DRAM需要“续命”
刷新,就是定期给电容重新充电。听起来简单,但实现起来门道很多。
我记得第一次设计DRAM控制器时,以为刷新就是简单地把所有行都读一遍。结果发现,刷新期间不能正常读写,性能直接腰斩。后来才明白,刷新需要和正常访问交错进行。
我的经验:刷新周期一般是64ms。也就是说,每64ms内,所有行必须被刷新一次。温度越高,漏电越快,刷新间隔要缩短。工业级芯片通常按32ms设计,留足余量。
刷新方式主要有三种:
- 自动刷新(Auto Refresh):控制器发个命令,DRAM自己搞定。最简单,但占用带宽。
- 自刷新(Self Refresh):DRAM进入低功耗模式,内部定时刷新。适合休眠场景。
- 按行刷新(Row Refresh):精确控制每一行。我一般在性能敏感的场景用这个。
这里有个避坑指南——我曾经在某个项目中,把刷新间隔设得太紧,结果刷新占用了30%的带宽,性能惨不忍睹。后来改成按行交错刷新,带宽占用降到5%以下。
3.3 Bank与Rank结构:DRAM的内部组织
DRAM芯片内部不是一个大平层,而是分成了多个Bank。每个Bank相当于一个独立的存储阵列,有自己的行缓冲。
为什么要分Bank?因为这样可以并行操作。你想想看,一个Bank在读数据时,另一个Bank可以同时准备下一笔数据。这就是所谓的Bank级并行。
| 概念 | 说明 | 我的建议 |
|---|---|---|
| Bank | 芯片内部的独立存储阵列 | 大模型推理时,尽量让不同Bank处理不同tensor |
| Rank | 多个芯片共享同一条数据总线 | Rank越多,容量越大,但时序约束更严 |
| 行缓冲 | Bank内当前打开的行数据 | 行命中率直接影响延迟,我一般优化到80%以上 |
Rank这个概念,说白了就是一组DRAM芯片的集合。它们共享地址线和控制线,但数据线是独立的。比如一个Rank有8颗x8的芯片,那数据总线就是64位。
我个人习惯,在大模型芯片里用4个Rank,每个Rank配8个Bank。这样既能保证容量,又能充分利用Bank级并行。
3.4 DDR接口协议:从SDR到DDR的演进
DDR,全称Double Data Rate,双倍数据速率。什么意思?就是时钟的上升沿和下降沿都传输数据。相比SDR(单倍速率),带宽直接翻倍。
我刚开始接触DDR时,总觉得协议很复杂。其实核心就几个点:
- 命令总线:ACT(激活)、READ(读)、WRITE(写)、PRE(预充电)、REF(刷新)
- 地址总线:行地址、列地址、Bank地址
- 数据总线:双向,DQS(数据选通信号)做同步
DDR的读写流程是这样的:
- 先发ACT命令,打开某一行到行缓冲
- 再发READ或WRITE命令,指定列地址
- 数据在DQS的同步下传输
- 最后发PRE命令,关闭当前行
这里有个关键参数——CAS延迟(CL)。它表示从发出读命令到数据出现在总线上的时钟周期数。DDR4一般是16-22个周期,DDR5可以做到32以上。
注意:CAS延迟不是越小越好。频率越高,延迟周期数反而可能增加。我见过有人为了追求低CL,把频率降得很低,结果带宽反而上不去。要平衡。
DDR接口协议还有一个重要概念——突发长度(Burst Length)。DDR4固定为8,DDR5可以配置为16或32。突发长度越大,单次访问的数据量越大,但延迟也越高。
我在做大模型芯片时,一般把突发长度设成8。因为大模型的权重和激活值通常按64字节对齐,8次突发正好凑一个cache line。
3.5 知识体系总览
下面这张图,是我自己画的DRAM知识体系。你看一眼,就能把今天讲的内容串起来。
这张图把DRAM的核心知识点都串起来了。从底层的1T1C单元,到上层的DDR协议,每一层都有它的设计哲学。你想想看,为什么DRAM能在大模型时代依然占据主导地位?说白了,就是因为它用最少的晶体管实现了最大的容量。
好了,今天的内容就到这里。DRAM的原理虽然基础,但真正用好它,需要大量的实践积累。我建议你回去后,找个DDR控制器的手册,对照着今天讲的内容,一行一行地看。相信我,收获会很大。
一句话总结:DRAM的核心就是1T1C单元+刷新机制+Bank/Rank结构+DDR协议。搞懂这四点,DRAM设计你就入门了。
公众号:蓝海资料掘金营,微信deep3321