2. DDR4/DDR5协议基础:读写命令时序,DQ与DQS的关系,Fly-by拓扑结构

做Write Leveling校准,你得先搞懂DDR协议里那些最基本的读写动作。说白了,就是CPU怎么告诉内存“我要读/写”,以及数据是怎么从颗粒里掏出来的。

我记得刚入行那会儿,总觉得时序图太抽象,密密麻麻的波形看得头疼。后来在实验室里抓了几次波形,才真正明白——这些时序不是纸上谈兵,错一个周期,系统就崩给你看。

2.1 读写命令时序

DDR4和DDR5在命令格式上大同小异。命令是通过CS_n(片选)、ACT_n(激活)、RAS_n、CAS_n、WE_n这些信号组合来编码的。我习惯把这组信号叫做“命令总线”。

一个典型的读操作流程是这样的:

  1. Activate(激活):先发激活命令,打开指定Bank的某一行。这步是“开路”,把存储单元准备好。
  2. Read(读):等tRCD(RAS-to-CAS Delay)时间过后,发读命令,带上列地址。
  3. CAS Latency(CL):读命令发出后,要等CL个时钟周期,数据才会出现在DQ总线上。CL是个关键参数,Write Leveling就是为了让DQS和CK对齐,从而精确控制这个延迟。
  4. Burst(突发):DDR4一次传8个数据(BL8),DDR5一次传16个(BL16,但拆成两个8-beat)。

写操作稍微不同:

  1. 同样先Activate。
  2. 发写命令,带上列地址和写数据。注意,写数据是跟写命令一起送出去的,不需要等CL。
  3. 但是DQS相对于CK要有一定的建立/保持时间。这就是Write Leveling要校准的核心——让DQS的上升沿正好落在CK的低电平中间区域。
实战小贴士: 我建议初学者先在仿真里把CL、tRCD、tRP这几个参数调一遍,看看它们对读写窗口的影响。纸上得来终觉浅。

2.2 DQ与DQS的关系

这是个重点。DQ是数据线,DQS是数据选通信号。你可以把DQS想象成“时钟”,它告诉接收端:“嘿,DQ上的数据现在可以拿了!”

核心关系:

  • 读操作:DQS由DDR颗粒产生,边沿对齐于DQ。也就是说,DQS的每个跳变沿(上升沿和下降沿)都正好在DQ数据的中间。接收端用DQS的边沿来采样DQ。
  • 写操作:DQS由控制器产生,中心对齐于DQ。DQS的边沿正好在DQ数据的边界上。所以,在DQ数据有效窗口的中间,DQS的电平是稳定的(高或低)。

你想想看,如果写操作时DQS和CK没对齐,那DQS的边沿就会歪到DQ数据窗口里,采到错的数据。这就是Write Leveling要解决的问题。

我在一个DDR5项目中遇到过一个问题:颗粒在高温下频繁报CRC错误。排查到最后,发现是DQS的duty cycle失真了,导致采样窗口偏移。后来通过Write Leveling调整了相位,问题解决。

千万别搞反了: 读是边沿对齐,写是中心对齐。这是新手最容易犯的错。

2.3 Fly-by拓扑结构

Fly-by,也叫菊花链。它跟T型(Tree)拓扑是DDR布线的两大流派。DDR3以后,Fly-by就成了主流。为什么?说白了,T型拓扑在高频下阻抗匹配太难做,走线分支太多,信号反射严重。

Fly-by的特点:

  • 地址、命令、控制信号和时钟(CK)从一个颗粒串到下一个颗粒,像链条一样。
  • 每个颗粒的CK到达时间不一样。离控制器最近的颗粒最先收到CK,最远的最后收到。
  • 这种时延差叫做“Fly-by skew”。

对Write Leveling来说,Fly-by skew是必须补偿的。因为每个颗粒的CK相位不同,它们需要的DQS相位也就不同。Write Leveling就是给每个颗粒独立设置DQS的延迟,让DQS和它自己的CK对齐。

特性 T型拓扑 Fly-by拓扑
走线结构 所有分支等长 串行链式
CK到达时间 所有颗粒同时到达 依次时延
信号完整性 高频下差(反射多) 高频下好(单负载)
Write Leveling需求 所有颗粒统一延迟 每个颗粒独立延迟
主流应用 DDR2、低速DDR3 DDR3/DDR4/DDR5

嗯,这张表很重要。我在做DDR4设计时,用仿真工具跑过两种拓扑的眼图。Fly-by的电压裕量比T型至少多了15%。这就是大家为什么都用它。

2.4 本章知识结构

下面这张图把这三个概念串起来了。读命令、写命令、DQ/DQS关系、Fly-by拓扑,它们怎么相互作用,一目了然。

DDR读写控制核心关系 读写命令 Activate / Read / Write 通过CK采样 CL / tRCD / tRP 读等待 + 行/列延迟 决定数据何时出现 DQ & DQS 读:边沿对齐 写:中心对齐 Fly-by拓扑 CK依次到达颗粒 Write Leveling 补偿每个颗粒的CK相位差 原理: 控制器通过CK发出读写命令 ➔ DQ/DQS根据操作类型(读/写)建立对齐关系 ➔ Fly-by拓扑的CK时延差 由Write Leveling逐颗粒校准,最终保证DQS边沿正好落在CK低电平的中间。

从图上你看得清楚:Fly-by拓扑造成了CK相位差,而Write Leveling的终极目标,就是给每个颗粒“打补丁”——把DQS延迟到和它自己的CK对齐。只有这一步做对了,后面的CL、tRCD这些时序参数才有意义。