DDR5 Write leveling
-
- [0 开始之前](#0 开始之前)
- [1 背景](#1 背景)
- [2 步骤](#2 步骤)
- [3 时序](#3 时序)
- [4 总结](#4 总结)
本系列博客中介绍,记录一些DDR5 中涉及的特性和调试经验,大家有需要可以收藏,有问题欢迎交流讨论,不足之处欢迎指出。
0 开始之前
博主之前调试过LPDDR4 内存控制器的上电Calibration。对于LPDDR4来说,Write leveling的实现方式,简单又粗暴:调整DQS(从memory controller到DRAM方向)与DRAM CK的相位关系,并且以DRAM CK为参考,调整DQS直到与DRAM CK对齐(上升沿对上升沿)。
然而对于DDR5来说,有一些不同之处,需要先进行外部write leveling,对齐管脚,再进行内部write leveling以"降低功耗与延时"(JESD79-5的官方套话)。
对于内部write leveling 的具体作用,
Deepseek表示:"DDR5的数据速率能达到6400Mbps甚至更高,在这种极端速度下,不仅仅是PCB板级的信号延迟问题(这是External Write Leveling解决的),连芯片内部路径的微小差异都会成为瓶颈。之前几代速度没那么高,内部路径的时序差异可以靠设计余量消化掉,但DDR5不行了,必须主动进行内部校准。"
整体来看复杂了不少,因此写下这篇博文进行记录。
1 背景
本文中并不过多赘述,write leveling 的目的。
DDR5中,在write leveling方面有更新。支持两种模式,外部write leveling,内部write leveling,并且是先进行外部write leveling, 在此基础上进行内部write leveling。
如何理解这两种模式?
外部Write leveling: 使用DRAM内部产生的write leveling 脉冲作为"参考",这个脉冲信号与CK的上升沿对齐。DDR5中,DQS不再是需要单纯地,调节管脚上的DQS与CK之间的相位。而是进一步的,加入了write latency。
内部Write leveling: 在外部Write leveling的基础上,继续调节DQS,并且还要调节 DRAM内部产生的write leveling 脉冲的相位。
2 步骤
2.1 外部Write leveling
开局来张图:

步骤1,t0之前:将DQS_t拉低,DQS_c拉高
步骤2,t0,t1: 发送MRW配置Mode register MR02 第1bit,进入write leveling 模式
步骤3,t1-ta:等待至少tWLPEN(15ns)
步骤4,ta+1,ta+2:发送 写 命令
步骤5,tb+3时,内部脉冲会拉高,memory controller 发出的DQS脉冲如果在tb, tb+1处,那么采到的内部脉冲将会是0,经过tWLO之后,从DQ中返回采样值。(可参考时序部分图1)
步骤6 ,给DQS_t, DQS_c加延时
重复步骤1-6,直到DQ采样值从0变为1(大概是DQS_t,DQS_c右边的上升沿与tb+3对齐的样子),表示此时的DQS已经能够采样到内部write leveling 脉冲的高电平。(可参考时序部分图2)
2.2 内部Write leveling
在外部Write leveling 已经完成的情况下,此时DQS理当能够采集到write leveling 脉冲高电平。
步骤7 ,把DQS_t, DQS_c 往左移,移动的步长为WL_ADJ_start*,他的值需要依据write preamble来决定,JESD79-5上面有相应关系的表格。举例来说,如果Write preamble=2, WL_ADJ_start=-0.75tCK。
此时的DQ采样值应当是'0',(可参考时序部分图3)
步骤8,通过写mode register MR03设置,把内部脉冲向左移动,单位是tCK。目的是使DQ采样值从'0' 变为'1'。
步骤9,继续把DQS_t, DQS_c 往左移,知道采样值又变为'0'。目的是跟内部脉冲对齐,因为内部脉冲它每次delay的单位是tCK,步长太大。
步骤10 ,最终步。将DQS_t, DQS_c向右移动,移动的步长为WL_ADJ_end*,这个值也是根据write preamble来决定的。举例来说,如果Write preamble=2, WL_ADJ_end=+1.25tCK.。
最终相位关系见该图

*参数释义
WL_ADJ_start:开始内部write leveling的时候,首先需要移动DQS_t,DQS_c的相位, 方向:左移。
WL_ADJ_end: 完成内部write leveling的时候,需要移动DQS_t,DQS_c的相位,方向:右移。
WICA:指的是这个内部产生的write leveling 脉冲的delay,方向:左移。
3 时序
外部training开始时,可以看到DQ15:0全部输出低电平:

图 1 '步骤5'对应波形
外部training完成时,可以看到DQ15:0已经全部输出高电平了:

图 2 '步骤6'对应波形

图3 '步骤7'对应波形
4 总结
在LPDDR4 中,完成write leveling 之后,只能保证DQS与CK的相位关系,write latency错了也没关系。真正调节write latency,是在 write training中进行调节的。
但是从DDR5外部Write leveling的步骤来看,似乎DDR5的机制更加科学合理,完成write leveling之后,既保证了DQS和CK的相位关系,又保证了匹配的write latency,因此,到了后面的write training中,只需要调节DQ的延迟即可,不必再考虑write latency。
然而,做完外部和内部Write leveling,从memory controller的开发角度来看,难度可谓是增加了亿点点。