一、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、以及外部接口的关系串起来了。
画这张图的时候,我特意把 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 访问来压带宽。