一、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内部预取和双倍速率的关系:

DDR预取与双倍速率原理图 存储阵列 核心频率 100MHz 一次读出8位数据 预取缓冲区 8n 预取 存储8位数据 IO接口 时钟 200MHz 上升沿+下降沿采样 8位并行 2位串行 时钟信号: ↑ ↓ ↑ ↓ ↑ ↓ ↑ ↓ ↑ ↓ ↑ ↓ 每个时钟周期采样2次数据(上升沿+下降沿) 数据输出: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 每个时钟周期输出2个数据,速率 = 2 × 时钟频率

避坑指南

我曾经在调试DDR3控制器时,发现读写数据总是不对。查了两天才发现,原来是预取宽度配置错了。DDR3是8n预取,我配成了4n,结果数据错位。所以大家做设计时,一定要确认DDR的预取宽度,不同代DDR不一样。

1.3 为什么DDR这么重要?

说白了,DDR就是CPU和存储之间的高速公路。CPU再快,如果内存跟不上,那就是"木桶效应"。我见过不少项目,CPU选得很高端,结果DDR接口没设计好,整体性能被拖垮。

DDR控制器的设计,说白了就是要在正确的时间,把正确的数据,送到正确的地方。这里面涉及的东西不少:初始化序列、命令调度、数据对齐、时序约束...嗯,后面我们会一个一个讲。

注意

DDR的时序非常敏感,PCB走线长度、阻抗匹配、电源噪声都会影响信号质量。我在项目中遇到过因为DDR走线等长没做好,导致高速模式下数据出错的情况。所以硬件设计和软件调试要配合好,缺一不可。

好了,这一章我们搞清楚了DDR是什么、怎么发展过来的、核心优势在哪。下一章咱们开始动手,看看DDR控制器的整体架构长什么样。

可可精品资料库