一、DDR5 基础架构概述

各位好,我是老李。做 DDR 信号完整性十几年了,从 DDR2 一路摸到 DDR5。今天咱们聊聊 DDR5 的基础架构,重点是它跟 DDR4 到底差在哪,通道和 Bank Group 又是怎么设计的。

说实话,第一次看到 DDR5 的 spec 时,我愣了一下——这变化比从 DDR3 到 DDR4 大得多。你想想看,一条通道被劈成两半,每个子通道独立访问,连 Command Address 都是单独给的。嗯,咱们一点点拆开讲。

1.1 DDR5 与 DDR4 的差异

先上硬货。下表列出了我工作中最常拿来对比的关键参数,你在仿真报告里也一定会碰到它们。

对比项目 DDR4 DDR5
数据速率 (MT/s) 1600–3200 4800–8400+
通道架构 单通道 ×64 双通道 ×32(2个子通道)
Bank Group 4–8组 8组(每组4个Bank)
VDD 电压 1.2V 1.1V
预取宽度 8n 16n
片上 ECC 无(部分支持) 强制内置

我个人习惯拿数据速率和电压先看。DDR5 把 IO 电压从 1.2V 降到 1.1V,速度却翻倍,这对信号完整性的挑战非常大。我在项目中遇到过两次因为 Vref 噪声没控好而导致 Write Leveling 失败的案例,后面会细讲。

还有一个容易被忽略的点:DDR5 强制内置了片上 ECC。你可能会问,「ECC 不是服务器才需要的吗?」实际上,随着颗粒密度提高(16Gbit、24Gbit、32Gbit),单比特翻转概率增加,片上 ECC 用来修复内部 Cell 的软错误。但注意,它和系统级 ECC 是两回事,两者可以共存。

核心要点: DDR5 的「双通道×32」和 DDR4 的「单通道×64」不只是位宽减半,它彻底改变了 PCB 布线策略。每根 DQ 的数据速率跑更高,但单根线的长度匹配要求反而更苛刻。在仿真时,我建议你把 Intra-byte Skew 的容忍度放到 ±5ps 以内。

1.2 通道架构:双子通道的设计哲学

DDR5 把一条 64-bit 总线拆成了两个 32-bit 的独立子通道(Sub-Channel 0 和 Sub-Channel 1)。每个子通道都有自己的 Command Address 总线、数据总线和 DQS。说白了,一个 DDR5 颗粒内部相当于有两个独立的 DDR4×32 颗粒,只是封装在了一起。

实际应用提示: 我曾经帮客户排查一个 DDR5 主板读失败的问题,发现是 Sub-Channel 0 和 Sub-Channel 1 的 CA 走线长度差了 800 mil。因为每个子通道独立采样 Command,时序窗口不能共享,结果短的通道抢早了,长的通道采错了。把两个 CA 信号绕到等长,问题解决。

这种双通道设计带来的好处很明显:

  • 带宽翻倍: 两个子通道可以同时进行不同 Bank 的访问,提高并行度
  • 功耗优化: 不需要访问的子通道可以进入低功耗状态
  • 信号完整性简化: 32-bit 总线比 64-bit 更容易控制串扰和 SSO

但是,代价是控制复杂度上升。每个子通道需要独立的 Write Leveling 流程——是的,每个子通道都要做一次。我在指导团队做仿真时,都会让他们在仿真脚本里把两个子通道的 Write Leveling 流程分开跑,不能偷懒复用。

1.3 Bank Group 结构

DDR4 有 4 组 Bank Group(有些高端颗粒做到 8 组),每组 4 个 Bank。DDR5 直接翻倍——固定 8 组 Bank Group,每组 4 个 Bank,总共 32 个 Bank。但别忘了,每个子通道是独立的,所以 每个子通道内部都是 8 组 × 4 个 Bank,一共 32 个 Bank per sub-channel。

项目 DDR4 (8Gbit) DDR5 (16Gbit)
Bank 总数 16 (4BG×4BK) / 32 (8BG×4BK) 64 (16BG×4BK) / 128 (32BG×4BK)
Bank Group 数 4 或 8 8 或 16
每组 Bank 数 4 4
Bank Group 间访问 可以并行 可以并行(tCCD_L 更短)

这里有个关键点:Bank Group 之间的访问可以做到 tCCD_L = 4nCK,而同一 Bank Group 内的访问需要 tCCD_L = 8nCK。所以在写代码或者做仿真激励时,你应该尽量把连续的读写请求打散到不同的 Bank Group,否则带宽会掉一半。

为什么 DDR5 要增加 Bank Group 数量?直接原因是颗粒密度上升,单 Bank 的 Row Buffer 容量不够用,需要更多 Bank 来隐藏行激活的延迟。更深层的原因是为了配合 DDR5 的 16n 预取——数据预取宽度变大后,如果 Bank 不够多,很容易出现 Bank Conflict。

注意: 在 Write Leveling 过程中,你操作的是每个子通道下的 Bank Group 吗?不是。Write Leveling 只针对子通道的 DQS 和 CK 相位关系,不涉及 Bank 选择。但我看到过一些新人,把 Bank Group 的概念套到了 DQS 延迟链的配置上,结果调出来的延迟值完全不对。记住:Write Leveling 是 DQS 相对于 CK 的延迟调整,和 Bank Group 没关系。

整体架构示意图

下面这张图是我做培训时必画的。它把 DDR5 的双子通道、每个子通道内部的 Bank Group、以及外部接口的关系串起来了。

DDR5 双通道 ×32 架构总览 Memory Controller CA0+DQ0+ DQS0 CA1+DQ1+ DQS1 Sub-Channel 0 Bank Group 0-3 Bank Group 4-7 BK0 BK1 BK2 BK3 Sub-Channel 1 Bank Group 0-3 Bank Group 4-7 BK0 BK1 BK2 BK3 每个子通道独立 · 独立 CA 总线 · 独立 DQ x32 · 独立 DQS · 独立 Write Leveling Bank Group 关键时序 同 BG: tCCD_L = 8nCK 异 BG: tCCD_L = 4nCK 注意 Write Leveling 不操作Bank 只调 DQS-CK 相位

画这张图的时候,我特意把 Bank Group 和 Bank 的细节画在了每个子通道内部。你看到了吗?两个子通道完全对称。但实际产品中,两个子通道的物理位置可能不同——有些厂商把 Sub-Channel 0 放在 Die 左侧,Sub-Channel 1 放在右侧,走线长度天然就不一样。我建议你在做仿真提取的时候,一定要分别提取两个子通道的 S-parameter,不要偷懒只提取一组然后镜像。

小结几个关键认知

  • DDR5 是两条「物理上独立、逻辑上独立」的 32-bit 通道的集合体。
  • 每个子通道有 8 组 Bank Group × 4 个 Bank = 32 个 Bank,共用 DQ 总线。
  • Write Leveling 必须分别针对每个子通道执行,不能一次搞定全部。
  • Bank Group 的并行访问特性,决定了你在设计测试激励时要有意识地跨 Group 访问来压带宽。