只读分享解决方案文档原理方案设计📅 2026-10-05🔖 V1.0✅ 长期有效
🔧解决方案&应用市场分析 -> 原理方案设计 -> DRAM系列产品方案 -> DDR5_软件设计规范

DDR5_软件设计规范

生成时间 2026-10-06 10:25:55 长期有效
同系列 · 原理方案设计

DDR5 软件设计规范

编制日期 2026-10-05 | 版本号 Rev 1.4

面向 DDR5 SDRAM(JESD79-5)3200 ~ 8800 MT/s 的控制器驱动设计约定 —— 覆盖 PMIC 先行的上电初始化、双子通道并发寻址、模式寄存器与 MPC 体系、 七类训练(CA / CS / WL / Read Leveling / 内部 VREF / DFE / DCA)、 REFsb 与 RFM 刷新管理、片上 ECC 与系统级 ECC 的边界,逐条给出可落地的命令序列、时序门限与状态判据。

文档编号DDR5-SW-SPEC-001
版本 / 状态V1.0 · 正式发布
适用器件DDR5 SDRAM 3200 / 3600 / 4000 / 4400 / 4800 / 5600 / 6400 / 7200 / 8000 / 8800 MT/s,颗粒(FBGA-82 x8 / FBGA-102 x16)与模组(UDIMM / SODIMM / RDIMM / LRDIMM)
参考标准JEDEC JESD79-5 · 目标型号 datasheet · 主控 DDR 控制器设计指南(PDG / Design Guide)· SPD / PMIC 规范
配套文档DDR5_电路设计指南.html(硬件 / 原理图 / 布线 / 端接 / 电源与 PMIC)

0. 目的与范围

本规范约束 DDR5 器件在服务器 / PC / 边缘计算 / SoC 内存控制器中的软件行为:电源与 PMIC 就绪判定、上电与复位初始化、模式寄存器与 MPC 配置、训练流程、读 / 写 / 刷新命令时序、ZQ 与内部校准、ODT 与端接、ECC / CRC / 命令奇偶错误处理、低功耗与复位恢复。凡本文与器件 datasheet 冲突,以 datasheet 为准。

  • 统一初始化序列:PMIC 配置并确认 Power Good → RESET_n 低 ≥ tPW_RESET → 释放后等 tXPR → 时钟稳定 → MRW 基础项(BL / CL / WR / RTT_PARK 等)→ ZQCL → 等 tZQINIT → 七类训练 → IDLE,固化一套标准流程。
  • 统一寄存器配置:BL / CL / CWL / WR / RTP / RTT / DFE / VREF / DCA / 刷新 / ECC / CRC 全部通过 MRW 或 MPC 写入;上电必须完整写一遍关键寄存器,不允许依赖上电默认值。
  • 统一训练口径:两个子通道各自独立训练;逐 Byte Lane 独立扫描;VREF 与延时二维搜索;训练失败降频重试,禁止硬编码参数。
  • 统一刷新与错误处理:以 tREFI 为节拍并按实测温度切换倍率;业务态优先 REFsb;RFM / ARFM 行锤防护必须启用;ECC / CRC / 奇偶错误有重试、计数告警与降频重训策略。
不在本规范范围:SDRAM 颗粒物理层与 PCB 布线、电源与 PMIC 硬件设计、端接电阻选型(见《DDR5 电路设计指南》);PHY 层比特级训练算法的具体实现;操作系统页表与缓存一致性策略;BIOS / UEFI MRC 源码。

一句话结论:DDR5 是「双子通道 + 串行命令 + 训练决定存亡」的器件 —— 一次访问只覆盖 32 bit,靠 BL16 凑出 64 B 缓存行;命令全部由 CA 总线在 1~2 个 CK 内串行传输; 没有 PMIC 就绪就初始化、没有 DFE 与内部 VREF 训练、没有 CA 训练的采样点、没有按温度缩短的 tREFI、没有 REFsb 的细粒度调度、没有把片上 ECC 与系统级 ECC 区分开,都会让系统表现为偶发位错甚至完全无法训练。

文档使用说明

  • 本文是《DDR5 电路设计指南》的软件配套篇:硬件篇解决「怎么接、怎么供电、PMIC 怎么配、怎么走线、怎么端接」,本文解决「控制器怎么初始化、怎么训练、命令怎么发、时序怎么等、错误怎么处理、热与功耗怎么闭环」。
  • 命令码、寄存器位、时序值以 JESD79-5 与目标 datasheet 为准。不同厂商(Micron / Samsung / SK hynix / CXMT)、不同密度、不同速率档存在明显差异,移植前必须逐条核对。
  • 文中 C 代码为协议骨架伪代码,演示流程与判断条件,非特定平台可直接编译的完整实现;ddr5_cmd()、now_ns()、pmic_write() 等为平台相关底层。
  • 凡标注「典型」「约」的数值均为量级参考,仅用于排程与方案筛选,不能作为失败判据;判据一律取 datasheet 的 max / min。
贯穿全文的五条铁律

① PMIC 未就绪不得开始 DRAM 初始化——DDR5 上电无响应的头号原因是 PMIC 未配置或未 Power Good; ② 训练参数禁止硬编码——VREF × 延时是二维搜索空间,必须用扫描结果,不做扫描等于把批次差异、高低温、电压波动的风险全部留给现场; ③ 两个子通道各自独立训练、独立保存结果——不能用 A 通道的参数顶替 B 通道; ④ 片上 ECC 不等于系统级 ECC——片上 ECC 只修阵列内部,不修链路传输错误,高可靠系统仍须 Side-band / Link ECC; ⑤ 时序门限一律按 datasheet max 留余量——typ 值只用来排程;温度越高 tREFI 越短,必须动态切换。

1 · 器件定位与子通道架构

DDR5 相对 DDR4 是架构级的升级,不是简单的提速:通道被拆成两个独立子通道、命令地址被串行化到 CA 总线、突发长度翻倍到 BL16、Bank 数翻倍到 32、电源调节下沉到模组 PMIC。软件若仍按 DDR4 的单通道模型调度,最多只能拿到一半带宽。

1.1 器件定位与关键参数

3200~8800
速率范围 MT/s
tCK 0.625 ~ 0.227 ns
2 × 40 bit
双子通道(32 数据 + 8 校验)
各自独立 CK / CA / CS
32
Bank 数(8 BG × 4 Bank)
DDR4 为 16(x4/x8)
BL16
标准突发长度
BC8 半突发,预取 16n
1.1 V
VDD / VDDQ
VPP 1.8 V,容限 ±3% 量级
≤ 1e-16
目标 BER
依赖 DFE + 训练达成
维度DDR5 取值对软件的直接影响
通道形态2 × (32 + 8) bit 子通道调度器必须能并发向两个子通道下发命令;地址映射需跨子通道交织
突发长度BL16 / BC8单子通道一次 BL16 = 64 B,正好一个缓存行;列地址按 16 突发对齐
Bank 结构8 BG × 4 Bank = 32 BankBank 位更多;tFAW / tRRD 需按新结构核算;页命中率提升
命令传输CA 总线 1T / 2T必须做 CA 训练确定采样点;逻辑分析仪无法直读命令,需协议解码
电源VDD/VDDQ 1.1 V,VPP 1.8 V,模组 PMIC初始化前必须经管理总线配置 PMIC 并确认 Power Good
刷新粒度REFab / REFsb / RFM / ARFM业务态优先 REFsb;必须启用行锤防护
ECC 层次On-die + Link(CB)+ Side-band三层保护范围不同,不可互相替代
训练项CA / CS / WL / RL / VREF / DFE / DCA / Loopback训练时间与日志量较 DDR4 翻倍;两个子通道分别进行

1.2 双子通道与地址映射

一个 DIMM 在逻辑上被拆成两个完全独立的 32 bit 子通道(Sub-channel A / B),各有独立的 CK、CA、CS 与数据通路,可并行操作。软件必须显式感知这一结构:

  • 一次访问只覆盖 32 bit:为凑出 64 B 缓存行,突发长度加倍到 BL16(16 拍 × 32 bit = 64 B)。「两个子通道 × BL16」才能拼出 128 B。
  • 地址映射必须跨子通道交织:让连续地址交替落到 A / B 两个子通道。映射不当 → 带宽直接减半
  • 调度器要能并发下发:把 DDR5 当单通道调度的控制器,只能用到一半的并发度。
  • 两个子通道分别训练、分别保存结果:一个训练失败不应污染另一个的参数。
映射位推荐来源作用常见错误
子通道选择位物理地址低位(如 A[6])让相邻缓存行分到 A / B,保证并发用高位选子通道 → 连续访问全打在一侧
Bank Group / Bank 位地址中段跨 BG 才能流水(tCCD_S 而非 tCCD_L)与子通道位重叠 → 同 BG 冲突加剧
Row / Column 位地址高位 / 次低位提高行命中率与列突发效率列低位未考虑 BL16 对齐
Rank 位(多 Rank)可配置为高位或交织Rank 间交织可隐藏 tRC 约束多 Rank 但地址连续落在同一 Rank
交织粒度怎么定

子通道交织粒度建议取缓存行(64 B)或其整数倍:太小会让单个大块读写的子通道切换过于频繁、增加总线翻转惩罚;太大会让短突发集中在一个子通道。工程上以「连续 128 B 均匀分布在 A / B 两个子通道」为基线,再用实测带宽微调。

1.3 CA 总线与信号分组

DDR5 取消了 RAS# / CAS# / WE# / ACT# 与分立地址引脚,所有命令由 CA 总线在 1 个(1T)或 2 个(2T)CK 周期内串行传输。

信号组成员方向软件关注点
命令地址CA[13:0]、CS_n主控 → DRAM1T / 2T 命令时序;CA 训练决定采样点;高频下常自动切 2T,属正常现象
时钟CK_t / CK_c(每子通道独立)主控 → DRAM初始化时必须先稳定;DCA 训练补偿占空比失真
数据DQ[31:0](每子通道)双向BL16 突发;逐 Byte Lane 训练
校验CB[7:0](每子通道)双向同帧 ECC;不用时按 datasheet 处理,不得凭经验悬空
选通 / 掩码DQS_t/c ×4、DM_n ×4双向 / 主控 → DRAMWrite Leveling 对齐 DQS 与 CK;Read Leveling 确定 DQS 门控
管理与告警ALERT_n、RESET_n、TEN双向 / 主控 → DRAMALERT_n 必须接中断并上拉;RESET_n 脉宽与释放时序;TEN 用于测试模式
模组管理I²C / I3C(PMIC、SPD Hub、RCD、TS)主控 → 模组初始化第一段:配置 PMIC 电压、读 SPD、确认 Power Good
2T 不是故障

高频下主控常自动切换到 2T 命令时序(命令占用两个 CK 周期),会损失少量带宽,这是为换取 CA 建立保持裕量的正常行为。不要把它当故障去「修」,应通过改善 CA 走线与端接来争取回到 1T。

2 · 术语与缩写

2.1 命令与寄存器术语

缩写全称含义与软件语义
MRW / MRRMode Register Write / Read模式寄存器写 / 读。2T 命令;写后需满足 tMRD / tMOD 才能发下一条
MPCMulti-Purpose Command多用途命令,承载训练模式进出、DFE 使能、VREF 设置、Loopback 使能等
ACTActivate打开一行(2T);32 Bank 需要更多 Bank 位
RD / WRRead / Write1T 或 2T;携带列地址、BG/Bank 与 AP(自动预充电)标志
PRE / PREAPrecharge(single / all)关闭行,为下一次 ACT 做准备
REFabAll-Bank Refresh全 Bank 刷新,需满足 tRFC1;期间所有 Bank 不可访问
REFsbSame-Bank Refresh同 Bank 刷新,仅阻塞目标 Bank,其余 31 个可继续服务
RFM / ARFMRefresh Management / Adaptive RFM行锤缓解刷新:按激活计数对相邻行发起额外刷新
ZQCL / ZQCSZQ Calibration Long / ShortZQ 长 / 短校准,分别用于上电与运行期补偿
SRE / SRXSelf Refresh Entry / Exit自刷新进入 / 退出;退出后需等待 tXS,读命令需 tXSDLL
PDE / PDXPower-Down Entry / Exit掉电模式进入 / 退出
BG / BABank Group / Bank AddressDDR5 为 8 BG × 4 Bank;时序参数按同组 / 跨组分支
CBCheck Bits每子通道 8 bit 校验位,与数据同帧传输(Link ECC)
RCD / DBRegistering Clock Driver / Data BufferRDIMM 的 CA/CK 寄存、LRDIMM 的 DQ 缓冲,训练与排错需额外考虑

2.2 训练与信号完整性术语

术语含义失败时的典型表现
CA Training命令地址总线训练:确定 CA 的采样延时与 CA VREFMRS 回读比对不一致;偶发命令丢失;完全无法初始化
CS Training片选训练:多 Rank 时逐 Rank 单独训练 CS_n 时序多 Rank 配置下某一 Rank 无响应
Write Leveling写均衡:对齐 DQS 与 CK 的相位关系写数据全错;训练阶段直接报 WL 失败
Read Leveling读训练:确定 DQS 门控与逐 Byte Lane 的读延时读数据错;高低温下窗口漂移出错
Internal VREF Training内部参考电压训练:逐子通道、逐字节扫描最优 VREF高温 / 低压下随机错;窗口过窄告警
DFEDecision Feedback Equalization,判决反馈均衡高插损通道眼图闭合;DFE 不收敛;高温后误码率上升
DCADuty Cycle Adjuster,占空比调整CK 占空比失真 > 2% 时读写窗口不对称
Loopback环回训练:DRAM 把接收到的数据回送给主控比对需要 PCB 上 Loopback 网络连通,误接上拉 / 下拉则失败
Eye / Margin眼图与裕量:训练窗口的宽度窗口过窄 → 高低温失效;应取窗口中心而非边缘
1D / 2D Training一维(仅延时)/ 二维(延时 × VREF)扫描只做 1D 会漏掉 VREF 维度的最优解

3 · 控制器架构与初始化

DDR5 的初始化比 DDR4 多出电源管理这一层:必须先完成 PMIC 配置并确认 Power Good,才能开始 DRAM 侧的复位与寄存器配置;之后是 ZQCL 与七类训练。任何一步跳过,都可能表现为「常温能跑、高低温死机」。

3.1 分层职责

L0
电源 / 管理总线层
PMIC 配置与 Power Good 判定、SPD / SPD Hub 读取、温度传感器读数、RCD / DB 配置。提供 pmic_write()、spd_read()。
对上暴露:电源就绪标志与电压 / 温度读数;不感知 DRAM 协议
L1
PHY 层
比特级:DQS 门控、读写延时线、内部 VREF 档位、DFE 抽头系数、DCA 控制、CA/CK 延时。
对上暴露:延时 / 门限 / 系数可调接口;不感知协议
L2
训练层
执行 CA / CS / Write Leveling / Read Leveling / 内部 VREF / DFE / DCA / Loopback;逐子通道、逐 Byte Lane 输出延时与系数。
对上暴露:ddr5_train() 与训练结果;失败可降频重试
L3
协议层
命令编码与时序仲裁:MRW / MPC 序列、刷新节拍与 REFsb 调度、Bank Group 判定、tCCD_S/L、Power-Down 进出。
对上暴露:读写事务接口;负责时序合法性
L4
服务层
地址映射与子通道交织、刷新温度补偿、RFM 计数、ECC 错误计数与告警、自检与重训触发、休眠与唤醒上下文。
对上暴露:ddr5_init() / ddr5_read() / ddr5_write() / ddr5_suspend()
L5
热与可靠性层
温度采集与刷新率联动、重训触发、降频 / 限流决策、不可纠正错误处置。
对上暴露:策略回调;可跨 DRAM 与 PMIC 协同
分层边界怎么划

训练层不能直接发 MRW / MPC 命令(应调用协议层的 mrw() / mpc()),否则 tMRD / tMOD 与 DES 插入会被绕过;协议层不能自己决定延时、VREF 与 DFE 系数(应由训练层给值),否则训练结果会被硬编码覆盖;电源层必须在协议层之前完成,否则「上电无响应」无从排查。

3.2 上电初始化 16 步

以下为 DDR5 通用初始化骨架,步骤顺序不可调整;具体寄存器编号、位定义与等待门限以目标 datasheet 与主控 MRC 为准:

  1. 管理总线就绪:初始化 I²C / I3C,确认 SPD Hub、PMIC、温度传感器在线并可读。
  2. 读 SPD 并确定配置:容量、位宽、Rank 数、速率档、PMIC 电压档、RCD / DB 存在性。初始化后需与实际识别结果交叉校验。
  3. 配置 PMIC 输出电压:按 SPD 档位写 VDD / VDDQ / VPP(典型 1.1 V / 1.1 V / 1.8 V),并使能各路输出。
  4. 等待 Power Good:轮询 PMIC 状态位,确认所有电源轨在容差内(±3% 量级)。PMIC 未就绪 = DDR5 上电无响应头号原因
  5. 拉低 RESET_n(并按需处理 TEN),保持 ≥ tPW_RESET(典型 1 µs 量级,工程上建议与冷启动对齐取更长);其它输入可不确定。
  6. RESET_n 释放(拉高),等待 tXPR(典型数百 ns ~ µs 量级)。
  7. 启动并稳定 CK:时钟稳定 ≥ 10 ns 或 5 tCK(取大者)后方可发第一条命令;两个子通道各自的 CK 均需稳定。
  8. MRW 基础项第一批:突发长度 BL=16、CL、tWR / RTP、驱动强度、RTT_PARK。每条之间满足 tMRD。
  9. MRW 基础项第二批:CWL、RTT_WR / RTT_NOM_RD / RTT_NOM_WR、刷新与温度相关项、ECC / CRC 相关项。每条之间满足 tMRD。
  10. ZQCL:启动 ZQ 长校准,等待 tZQINIT(典型 1 µs 量级);校准窗口内通道保持静默,只发 DES。
  11. MPC 进入 CA / CS 训练模式 → 逐子通道扫描 CA 延时与 CA VREF → 用 MRS 回读比对确认采样正确 → 退出训练模式。
  12. MPC 进入 Write Leveling 模式 → 逐子通道、逐 Byte Lane 对齐 DQS 与 CK → 退出。
  13. Read Leveling / DQS 门控训练:确定读方向的门控窗口与逐 Lane 延时。
  14. 内部 VREF 训练:逐子通道、逐字节扫描 VREF 与延时的二维空间,取窗口中心。禁止硬编码。
  15. DFE 使能 + 系数训练,随后做 DCA(占空比)训练;若平台与颗粒支持,再做 Loopback 训练。
  16. 回到正常模式:确认所有训练模式位已清零,进入 IDLE;做一遍读写自检与容量 / 配置校验,然后开放正常访问。
四个最容易踩的坑

① PMIC 未确认 Power Good 就发命令——表现为完全无响应,且容易被误判为焊接问题; ② ZQCL / 内部校准窗口内发了非 DES 命令——校准失真,阻抗与门限全部偏掉; ③ 训练模式位忘记清零——训练做完不退出,正常读写数据全错; ④ 只训练一个子通道或只用一个子通道的参数——另一个子通道在高温或低压时先崩。

PMIC 配置 写电压档 + 使能 Power Good 轮询状态位确认 RESET_n 低 ≥ tPW_RESET + tXPR 时钟稳定 ≥10ns / 5tCK,双子通道 MRW 批次 BL/CL/WR/RTT/ECC/刷新 ZQCL 等 tZQINIT 七类训练 CA/CS/WL/RL/VREF/DFE/DCA 等待门限:tPW_RESET / tXPR(复位) · tMRD(MRW 之间) · tMOD(部分寄存器写后) · tZQINIT(ZQCL 之后) · 训练窗口内只发 DES DDR5 初始化相对 DDR4 的四处新增 ① 电源层:PMIC 配置 + Power Good 判定必须在 DRAM 命令之前完成 ② 命令层:训练模式进出走 MPC,而非像 DDR4 那样只靠 MRW ③ 训练层:新增 DFE 均衡、DCA 占空比、Loopback 环回三类 ④ 双通道:CA / CS 与全部读写训练需对子通道 A、B 各做一遍 任一子通道训练失败即整条通道不可用,不得单边放行 训练结果需做合理性检查:窗口宽度、DFE 系数、VREF 档位 训练结果应记录到日志,供现场排查与批次差异分析 失败一律先降频重试,再报硬件问题 初始化期间的六条硬约束 ① 所有电源轨在容差内且 Power Good 之后,才能释放 RESET_n ② RESET_n 低电平宽度 ≥ tPW_RESET,释放后等 tXPR 才发命令 ③ CK 稳定 ≥ 10 ns 或 5 tCK,两个子通道各自满足 ④ MRW 之间满足 tMRD,寄存器写后按需满足 tMOD ⑤ ZQCL / 内部校准窗口内通道静默,只发 DES ⑥ 训练模式位在训练结束后必须全部清零才能进入 IDLE ⑦ 初始化完成后校验容量、位宽、Rank 数与 SPD 一致 ⑧ 上电绝不假设 DRAM 中还保留上次数据
图 1 · DDR5 上电初始化主链路:PMIC → Power Good → RESET_n → 时钟 → MRW → ZQCL → 七类训练

3.3 复位与再初始化

电源稳定的情况下做热复位(不断电)流程如下:

  1. 停止所有新访问,等待在途事务完成;所有 Bank 预充电到空闲态。
  2. 拉低 RESET_n,保持 ≥ tPW_RESET;其它输入可不确定。
  3. 释放 RESET_n,等待 tXPR。
  4. 重新执行完整初始化(MRW 批次 → ZQCL → 全部训练),不得省略任何一步。
  5. 复位后按需做读写自检;若怀疑硬件状态变化,强制执行一次全量重训。
热复位 ≠ 只重发几条命令

DDR5 复位后内部延时链、DFE 系数、VREF 档位全部回到默认,必须重跑训练。只重发 MRW 就恢复业务,是最典型的「复位后数据错」来源。

3.4 初始化伪代码

int ddr5_init(const struct ddr5_cfg *cfg)
{
    int rc;

    /* ---- 阶段 1:电源与模组管理(DDR5 新增) ---- */
    rc = pmic_set_voltage(PMIC_RAIL_VDD,  cfg->vdd_mv);
    if (rc) return DDR5_ERR_PMIC;
    rc = pmic_set_voltage(PMIC_RAIL_VDDQ, cfg->vddq_mv);
    if (rc) return DDR5_ERR_PMIC;
    rc = pmic_set_voltage(PMIC_RAIL_VPP,  cfg->vpp_mv);
    if (rc) return DDR5_ERR_PMIC;

    rc = pmic_wait_power_good(POWER_GOOD_TIMEOUT_MS);   /* 必须等,不能只写不等 */
    if (rc) return DDR5_ERR_PMIC_PG;

    /* ---- 阶段 2:复位与时钟 ---- */
    gpio_set(RESET_N, 0);
    delay_us(T_PW_RESET_US);                 /* ≥ tPW_RESET */
    gpio_set(RESET_N, 1);
    delay_ns(T_XPR_NS);                      /* ≥ tXPR */
    clk_enable_and_wait_stable();            /* ≥ 10 ns 或 5 tCK,A/B 两个子通道 */

    /* ---- 阶段 3:模式寄存器 ---- */
    mrw(MR0, bl_cl_wr_encode(cfg));   wait_tmrd();
    mrw(MR1, drv_rtt_encode(cfg));    wait_tmrd();
    mrw(MR2, cwl_rttwr_encode(cfg));  wait_tmrd();
    mrw(MR3, refresh_encode(cfg));    wait_tmrd();
    mrw(MR4, ecc_crc_encode(cfg));    wait_tmrd();
    mrw(MR5, misc_encode(cfg));       wait_tmod();

    /* ---- 阶段 4:ZQ 长校准 ---- */
    zq(ZQCL);
    wait_ns(T_ZQINIT_NS);                    /* 窗口内只发 DES */

    /* ---- 阶段 5:训练(逐子通道) ---- */
    for (int ch = 0; ch < 2; ch++) {
        rc = train_ca_cs(ch);        if (rc) goto retry_lower_freq;
        rc = train_write_leveling(ch); if (rc) goto retry_lower_freq;
        rc = train_read_leveling(ch);  if (rc) goto retry_lower_freq;
        rc = train_internal_vref(ch);  if (rc) goto retry_lower_freq;
        rc = train_dfe(ch);            if (rc) goto retry_lower_freq;
        rc = train_dca(ch);            if (rc) goto retry_lower_freq;
        train_exit_all_modes(ch);            /* 训练模式位全部清零 */
    }

    /* ---- 阶段 6:校验与开放 ---- */
    rc = verify_capacity_and_config(cfg);
    if (rc) return DDR5_ERR_CAPACITY;
    return DDR5_OK;

retry_lower_freq:
    cfg->speed_bin = lower_bin(cfg->speed_bin);
    if (cfg->speed_bin < MIN_BIN) return DDR5_ERR_TRAIN_FAIL;
    return ddr5_init(cfg);                   /* 降频后完整重来 */
}

4 · 模式寄存器与 MPC 体系

DDR5 的模式寄存器数量显著多于 DDR4,且训练相关设置被分散到多个 MR 与 MPC(多用途命令)中。软件侧的原则很简单:凡是影响电气行为的项,上电必须显式写一遍;凡是训练模式,进出必须成对且可回读确认。

4.1 寄存器总览与寻址

类别可配置内容写错 / 漏写的后果
MR0–MR5(基础)突发长度 BL、CL、WR/RTP、驱动强度、ODT 基础项、CWL、RTT 系列初始化第一批要写;写错会直接导致训练失败或读写全错
训练类 MR / MPCWrite Leveling 使能、Read Leveling 延时链、内部 VREF 档位与范围、DFE 使能 / 抽头 / 系数、DCA、CA 与 CS 训练模式、Loopback训练不收敛;或训练后未退出导致正常读写错
ODT / 端接类RTT_NOM_RD、RTT_NOM_WR、RTT_WR、RTT_PARK、CA ODT信号反射与眼图闭合;多 Rank 时尤其明显
刷新类REFsb 使能、FGR 比例、RFM / ARFM 配置刷新停顿过大;行锤防护失效
温度类温度读出、热节流阈值、ALERT_n 温度事件使能高温下刷新率不切换,数据保持失效
ECC / CRC 类ECC 使能、写 CRC、错误状态与计数读出错误可见性丧失;两侧配置不一致导致数据异常
MR 与 MPC 的分工

MR(Mode Register)存「长期生效的配置」:BL、CL、端接、刷新、ECC 等,用 MRW 写、MRR 读;MPC 承载「动作型操作」:进入 / 退出某种训练模式、触发 DFE 系数加载、设置 VREF 档位、使能 Loopback。软件应按这个边界组织代码——配置走 MRW,动作走 MPC,不要混用。

4.2 MR0 突发长度与 CL

字段取值说明
突发长度 BLBL16(默认)/ BC8BL16 与 64 B 缓存行天然对齐;BC8 用于不满 32 B 的访问以减少无用搬移
CAS 延迟 CL随速率档(如 5600 MT/s 为 46)读命令到首个数据有效之间的 CK 数;与 tAA 强相关
写恢复 tWR / RTP按速率档编码DDR5 的 tWR 较 DDR4 明显变长,写调度要预留
DLL / 内部时序复位按需触发内部时序重置的寄存器写后,等待时间更长(对应 tMOD)

4.3 MR1–MR5 基础项

MR主要字段工程要点
MR1驱动强度(RON)、RTT_NOM_RD、RTT_NOM_WR驱动与端接成对配置;改驱动后需重训
MR2CWL、RTT_WR、RTT_PARK写方向端接;多 Rank 时非目标 Rank 落在 Park 态
MR3刷新相关(FGR 比例、REFsb 使能)、RFM / ARFM业务态建议开 REFsb;行锤防护必须启用
MR4ECC 使能、写 CRC、错误状态与计数读出控制器与 DRAM 两侧必须一致;改动后重训
MR5杂项与器件特性配置按 datasheet 逐位核对,RFU 位写 0

4.4 训练类 MR

训练项承载方式典型流程
Write LevelingMPC 进入 + MRW 使能进入模式 → 逐 Lane 扫 DQS 相位 → 找 0→1 跳变 → 退出
Read LevelingMPC 进入 + MRW 延时链进入模式 → 读已知图案 → 扫 DQS 门控与延时 → 退出
内部 VREFMRW 档位 + MPC 触发设范围与步进 → 二维扫描(延时 × VREF)→ 取窗口中心 → 写入
DFEMPC 使能 + 系数加载使能 → 训练 / 加载系数 → 确认收敛 → 运行期支持重训
DCAMPC 触发测量占空比失真 → 调整 → 复核读写窗口对称性
CA / CS 训练MPC 进入 + 回读比对进入模式 → 扫 CA 延时与 CA VREF → MRR 比对 → 退出
LoopbackMPC 使能使能反馈通路 → 回送比对 → 关闭;需 PCB 网络连通

4.5 刷新与温度类 MR

  • REFsb 使能:开启后调度器可用同 Bank 刷新替代全 Bank 刷新,显著降低延迟尖峰。
  • FGR 比例:Fine Granularity Refresh,把刷新开销摊薄,高温场景优先启用。
  • RFM / ARFM:行锤缓解刷新的阈值与使能;由主控维护激活计数或由 DRAM 内部计数触发。
  • 温度读出:从 DRAM 的温度 MR 读取,并与 SPD Hub 上的温度传感器(TS)交叉核对,取保守值。
  • 热节流阈值与 ALERT_n 事件:配置阈值并使能告警,让温度事件通过 ALERT_n 上送到控制器中断。

4.6 MRW / MRR 准则

  • 每次 MRW 之间满足 tMRD;触发内部时序动作的寄存器写后满足 tMOD。
  • 寄存器按整寄存器重写,不做「读改写位」的假设;所有 RFU 位写 0。
  • 关键配置写完后用 MRR 回读比对,不一致即报错,不静默继续。
  • 训练模式进出成对:进入后有超时保护,退出后回读确认模式位清零。
  • 改驱动强度、端接、ECC / CRC 等电气相关配置后,必须重新训练。
  • 寄存器写入序列集中在一处管理,禁止散落在训练与业务代码中。
扫码打开本页
微信扫码 · 展会可扫

再分享给同事

同事可直接打开这份资料《DDR5_软件设计规范》,在线阅读;完整章节请下载芯参谋。