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就撑不住了。

核心瓶颈:SDRAM采用单数据率(SDR)传输,每个时钟周期只能传输1比特数据。频率提高后,信号在单端总线上反射严重,再往上提时钟频率,信号完整性直接崩掉。

DDR1的解决方案很聪明——双数据率(DDR)。上升沿和下降沿各采一次,同样的时钟频率,带宽直接翻倍。同时引入了差分时钟(CK/CK#)、DQS选通信号,用源同步的方式传递数据。我个人觉得,这是DDR架构最精妙的设计之一。

下面这张图,基本概括了DDR演进的核心逻辑:

DDR技术演进核心脉络 SDRAM 单沿传输 DDR1 2.5V/2.6V DDR2 1.8V / 4n prefetch DDR3 1.5V / 8n prefetch DDR4 1.2V / 16n prefetch DDR5 1.1V / 32n prefetch 带宽:时钟频率 × 数据位宽 × 2 功耗:VDDQ逐步从3.3V降至1.1V 架构:prefetch宽度 ×2 per gen → 内部核心频率追赶接口频率

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。

为什么要增大prefetch?接口速率越来越高,但DRAM核心的速度(即阵列访问速度)几乎没怎么提升。通过增加prefetch,用宽位内部总线把数据先存到IO缓冲区,再按接口时钟高速串行输出。说白了,就是用并行换串行,用宽度换速度。

举个例子,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时序,先别急着背数字。从DDR演进的角度去理解为什么某个参数会变化,比你死记硬背50个参数名称有用得多。做时序调优时,先看同一代产品的JEDEC规范,再根据实际PCB质量微调。
注意:不同代际的DDR不能混用。MCU的PHY和控制器必须匹配指定代次。DDR3的控制器不能驱动DDR4颗粒,电压和ODT逻辑都不同。我见过有人把DDR4颗粒焊在DDR3板子上,上电直接冒烟。

总体来看,DDR每个代际的出现,都是为了解决上一代在更高频率下暴露出的信号完整性问题。电压降、prefetch增、训练机制变多——大方向就是这几个。

学到这里,你大概能明白:DDR时序参数不是凭空造出来的,它是架构演进的产物。知道了每个参数背后解决的是什么问题,你再去配那些数值时就有底了。嗯,这也是我开这个课想做的事。