一、DDR基础扫盲:从SDRAM到DDR5
各位同学,咱们今天聊聊DDR。说实话,我入行那会儿,DDR2刚出来没多久,大家还在争论DDR能不能取代SDRAM。现在回头看,这玩意儿已经发展到DDR5了,速度翻了不知道多少倍。
DDR是什么?全称是Double Data Rate,双倍数据速率。说白了,就是一根时钟线的上升沿和下降沿都能传数据。你想想看,同样的时钟频率,数据吞吐量直接翻倍,这买卖划算吧?
1.1 从SDRAM到DDR5:一条性能狂奔的路
我简单梳理一下DDR的发展史,大家感受下这个速度变化:
| 世代 | 推出年份 | 数据传输速率 | 预取宽度 | 工作电压 |
|---|---|---|---|---|
| SDRAM | 1993 | 66-133 MT/s | 1n | 3.3V |
| DDR | 2000 | 200-400 MT/s | 2n | 2.5V |
| DDR2 | 2003 | 400-800 MT/s | 4n | 1.8V |
| DDR3 | 2007 | 800-2133 MT/s | 8n | 1.5V |
| DDR4 | 2014 | 1600-3200 MT/s | 8n | 1.2V |
| DDR5 | 2020 | 3200-6400 MT/s | 16n | 1.1V |
看到没?从SDRAM到DDR5,速率从133 MT/s飙到了6400 MT/s,涨了将近50倍。我个人习惯把DDR5叫做"内存界的超跑",虽然贵,但真香。
1.2 DDR的核心优势:双倍速率与预取技术
DDR最核心的两个技术点,一个是双倍速率,一个是预取。咱们一个一个说。
双倍速率,这个好理解。传统SDRAM只在时钟上升沿采样数据,DDR在上升沿和下降沿都采样。举个例子,同样是100MHz的时钟,SDRAM每秒只能传100M次数据,DDR能传200M次。我在项目中遇到过有人问:"那DDR的时钟频率是不是要翻倍?" 不是的,时钟频率不变,只是数据采样点翻倍了。
预取技术,这个稍微绕一点。预取的意思是,DDR内部一次读操作,会从存储阵列中取出多个数据位,然后通过多路选择器分时送到IO口。说白了,就是内部干活快,外部慢慢吐。
预取宽度与核心频率的关系
核心频率 = 数据传输速率 / (2 × 预取宽度)
比如DDR3-1600,预取8n,核心频率 = 1600 / (2×8) = 100MHz
你看,外部跑1600 MT/s,内部核心才100MHz,这就是预取的功劳。
为什么会这样?因为存储阵列的访问速度很难做快,但IO接口可以跑得很快。预取技术就是在这两者之间搭了一座桥。我刚开始学的时候也觉得这玩意儿有点反直觉,后来自己画了个时序图才明白。
下面这张图是我自己画的,展示了DDR内部预取和双倍速率的关系:
避坑指南
我曾经在调试DDR3控制器时,发现读写数据总是不对。查了两天才发现,原来是预取宽度配置错了。DDR3是8n预取,我配成了4n,结果数据错位。所以大家做设计时,一定要确认DDR的预取宽度,不同代DDR不一样。
1.3 为什么DDR这么重要?
说白了,DDR就是CPU和存储之间的高速公路。CPU再快,如果内存跟不上,那就是"木桶效应"。我见过不少项目,CPU选得很高端,结果DDR接口没设计好,整体性能被拖垮。
DDR控制器的设计,说白了就是要在正确的时间,把正确的数据,送到正确的地方。这里面涉及的东西不少:初始化序列、命令调度、数据对齐、时序约束...嗯,后面我们会一个一个讲。
注意
DDR的时序非常敏感,PCB走线长度、阻抗匹配、电源噪声都会影响信号质量。我在项目中遇到过因为DDR走线等长没做好,导致高速模式下数据出错的情况。所以硬件设计和软件调试要配合好,缺一不可。
好了,这一章我们搞清楚了DDR是什么、怎么发展过来的、核心优势在哪。下一章咱们开始动手,看看DDR控制器的整体架构长什么样。