2. DDR物理层与协议基础
DDR验证的第一道门槛不是写测试用例,而是能看懂物理层上到底跑了什么。DDR接口在物理上是一组并行同步信号,在协议上则是一套以命令、时序参数和存储阵列结构为核心的访问规则。理解这三层——信号、时序、结构——才能为后续的读写训练、眼图测量和协议解码建立共同语言。
一、DDR信号组成:三类信号各司其职
以DDR4/DDR5常见的并行接口为例,信号可归为三类。第一类是时钟与选通:差分时钟 CK_t/CK_b 提供采样基准,DQS_t/DQS_b 是数据选通,读写时由发送方随数据一起发出,接收方用它来对齐数据窗口。第二类是命令与地址:CS_n 片选、ACT_n 激活、RAS_n/CAS_n/WE_n 命令编码、BG[1:0] Bank组、BA[1:0] Bank地址、A[17:0] 行/列地址复用,以及 CKE 时钟使能、ODT 片上终结、RESET_n 复位。第三类是数据:DQ[63:0] 双向数据线,配合 DM_n/DBI_n 做数据掩码或反转,ECC 版本还有 CB 校验位。
关键点在于:地址线是复用的。同一组 A[17:0] 在 ACT 命令时表示行地址,在 RD/WR 命令时表示列地址,因此验证时必须结合命令类型才能正确解释地址含义。DQS 与 DQ 的相位关系、ODT 的开启时机,直接决定采样窗口是否可靠,这也是后续眼图与建立/保持时间测量的对象。
二、命令时序:用参数描述“什么时候可以做什么”
DDR 命令不是任意时刻都能发。控制器必须满足一组以时钟周期为单位的时序参数,典型包括:tRCD(ACT 到 RD/WR 的最小间隔)、tCL(读命令到数据输出的 CAS 延迟)、tCWL(写命令到数据输入的延迟)、tRP(预充电时间)、tRAS(行激活到预充电的最小时间)、tRRD/tFAW(不同 Bank 激活间隔与四激活窗口)、tWTR/tRTW(读写切换)、tCCD(列命令间隔)。这些参数由 JEDEC 按速度等级规定,控制器通过模式寄存器 MR 配置,验证时要确认实际波形满足参数约束。
下面这张图把“命令—时序—数据”的因果关系串起来,展示一次典型的“激活—读—预充电”序列中各参数落在哪个位置,便于对照波形理解。
三、读写操作:从命令到数据的完整链路
一次读操作的标准链路是:控制器发 ACT 打开目标 Bank 的某一行,等待 tRCD 后发 RD 命令并给出列地址,再经过 tCL 个周期,DRAM 通过 DQ 输出突发数据,DQS 同步翻转供控制器采样。写操作则是:ACT 打开行,等待 tRCD 后发 WR,经过 tCWL 后控制器驱动 DQ 与 DQS 写入,DM/DBI 决定哪些字节被写入或反转。读写之间需要 tWTR/tRTW 切换时间,避免总线冲突。
验证时最值得关注的是:DQS 与 DQ 的相位是否落在采样窗口中心、ODT 是否在正确时刻开启以抑制反射、突发长度 BL8/BC4 是否与模式寄存器一致。这些都可以在示波器或协议分析仪上直接观察。
四、Bank与Rank结构:决定访问粒度与并发能力
DDR 存储阵列按 Bank Group → Bank → Row → Column 组织。以 DDR4 x8 器件为例,通常有 4 个 Bank Group,每组 4 个 Bank,共 16 个 Bank;每个 Bank 内是二维的行列阵列,行激活后整行进入感应放大器,列命令再从中选出突发数据。Bank Group 的引入是为了让不同组之间可以交错激活,用 tCCD_L/tCCD_S 区分同组与跨组列命令间隔,从而提升有效带宽。
Rank 是共享同一组命令/地址/数据总线的多个器件集合,由 CS_n 区分。一个 Rank 内所有器件同时响应命令,数据位宽叠加(例如 8 颗 x8 组成 64 位)。多 Rank 系统里,不同 Rank 可以交错访问以隐藏预充电和激活延迟,但共享总线意味着同一时刻只能有一个 Rank 驱动 DQ,因此 ODT 与片选时序必须严格协调。
五、把基础落到验证动作上
建立物理层与协议基础后,后续验证可以按以下顺序展开:先用模式寄存器读回确认 MR 配置(BL、CL、CWL、ODT、DBI)与预期一致;再用简单 ACT-RD-PRE 序列在示波器上测量 tRCD、tCL、tRP 是否满足规格;接着做 Bank 交错与多 Rank 切换测试,观察带宽与冲突;最后引入眼图与抖动测量,评估 DQS/DQ 的采样余量。每一步的输入是命令与地址,观察对象是波形与数据,判断依据是 JEDEC 参数与模式寄存器配置。
需要强调的是,本节给出的时序数值均为按常见速度等级举例的示意值,实际应以所用器件的 JEDEC 规格书和控制器 MR 配置为准。验证工程师的核心能力,正是把“信号—时序—结构”三者对应到真实波形与数据上,并能据此判断一次访问是否合法、可靠。