1. DDR技术概述:从SDRAM到DDR5的演进
做DDR时序调了十几年,我经常被年轻工程师问:“这些时序参数到底怎么来的?”要回答这个问题,得先搞清楚DDR是怎么一步步演进的。
很多人觉得DDR就是SDRAM加个双沿传输,其实没那么简单。每个代际的更迭,背后都是带宽、功耗、信号完整性三个维度的博弈。别的先不说,你想想看,从SDR到DDR5,频率翻了将近30倍,电压从3.3V降到了1.1V。这可不是改个接口那么简单。
1.1 为什么会有DDR?
SDRAM当年跑在66MHz、100MHz,最高也就133MHz。单沿传输,每个时钟周期只做一个操作。那时候CPU主频已经飙到几百兆赫了,内存读取速度成了瓶颈。说白了,就是CPU太快,内存跟不上。
我刚开始做设计时,用的还是SDRAM。那时候调时序基本靠手册里的表格,没那么多花里胡哨的东西。但很快,SDRAM就撑不住了。
DDR1的解决方案很聪明——双数据率(DDR)。上升沿和下降沿各采一次,同样的时钟频率,带宽直接翻倍。同时引入了差分时钟(CK/CK#)、DQS选通信号,用源同步的方式传递数据。我个人觉得,这是DDR架构最精妙的设计之一。
下面这张图,基本概括了DDR演进的核心逻辑:
1.2 从DDR1到DDR5,每次迭了什么?
我习惯用“三个核心参数”来理解每个DDR代际:VDDQ电压、prefetch深度、最大时钟频率。下面这个表,是我自己做设计时常用来做对比的:
| 代际 | VDDQ电压 | Prefetch | 最高速率(MT/s) | 关键变化 |
|---|---|---|---|---|
| SDRAM | 3.3V | 1n | 133 | 单沿传输 |
| DDR1 | 2.5V / 2.6V | 2n | 400 | 引入DQS、差分时钟 |
| DDR2 | 1.8V | 4n | 800 | ODT、OCD、posted CAS |
| DDR3 | 1.5V | 8n | 2133 | Fly-by拓扑、ZQ校准 |
| DDR4 | 1.2V | 16n | 3200 | VREFDQ训练、DBI |
| DDR5 | 1.1V | 32n | 8800 | 片内ECC、双32bit通道 |
注意看那个prefetch列,它是DDR架构的精髓。什么叫prefetch?其实就是内存内部一次读操作可以取多少比特数据。DDR1是2n,DDR2翻到4n,DDR3到8n,DDR4到16n,DDR5直接干到32n。
举个例子,DDR3-1600。接口时钟800MHz,双沿传输,数据速率1600MT/s。但DRAM核心只需要跑200MHz就行——内部一次读8个数据,分8个时钟周期串行发送。如果不用prefetch,核心频率得冲到800MHz,功耗和信号完整性根本扛不住。
1.3 每个代际的模式寄存器变化
做DDR时序参数配置,说白了就是写模式寄存器(MR)。MR里的每一比特,控制着DDR的行为。不同代际MR结构差别很大,这里列一下核心差异:
- DDR1:MR只有3个(MR0、MR1、MR2)。CAS Latency、Burst Length、Burst Type。比较简单,基本就是配个读延迟和突发长度。
- DDR2:增加到4个MR(MR0-MR3)。加入了OCD(Off-Chip Driver)校准、ODT(On-Die Termination)配置、Additive Latency。我开始做DDR2时,在ODT配置上踩过坑,阻抗没配好,信号过冲直接导致数据出错。
- DDR3:MR0、MR1、MR2。增加了ZQ校准、CWL(CAS Write Latency)、动态ODT。个人感觉DDR3的时序参数已经算复杂了,写一个完整的MRS序列至少需要几十个步骤。
- DDR4:增加了MR3-MR6。引入了VREFDQ训练、CRC、CA Parity、DBI(Data Bus Inversion)。我曾经在一个项目中,因为CA Parity没使能,板子跑高频时总出现随机错误,查了三天才发现是命令信号被噪声干扰了。
- DDR5:MR扩展到128个(64个MRX + 64个MRY)。双通道、片内ECC、PDA(Per-DRAM Addressability)等等。DDR5的时序配置,已经不是单纯写个表能解决的问题了。
1.4 时序参数跟着变
随着代际演进,时序参数本身也在变。有些参数是共通的,比如tRCD、tCL、tRP、tRAS这些,每个代际都有,但数值差异很大。DDR3 1333的tRCD大概在9-10个周期,而DDR5 6400,tRCD已经到44-48个周期了。
为什么会这样?因为随着速率提升,时钟周期越来越短。虽然tRCD的值(纳秒级别)变化不大,但换算成时钟周期数就涨了很多。很多从DDR3转过来做DDR5的朋友,第一反应是“怎么延迟这么大”,其实不是延迟大,而是时钟快了。
举个例子。DDR3-1333,tRCD=9,时钟周期1.5ns,延迟13.5ns。DDR5-6400,tRCD=44,时钟周期0.3125ns,延迟13.75ns。你看,时间没差多少。
总体来看,DDR每个代际的出现,都是为了解决上一代在更高频率下暴露出的信号完整性问题。电压降、prefetch增、训练机制变多——大方向就是这几个。
学到这里,你大概能明白:DDR时序参数不是凭空造出来的,它是架构演进的产物。知道了每个参数背后解决的是什么问题,你再去配那些数值时就有底了。嗯,这也是我开这个课想做的事。