DDR5 Write leveling详解

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** 开局来张图: ![外部Write leveling](https://i-blog.csdnimg.cn/direct/a02183d98148466199336669088a83c1.png) ***步骤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.。 最终相位关系见该图 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/79f44ed405c64b2aa27567c99e64ce8d.png) > \*参数释义 > > WL_ADJ_start:开始内部write leveling的时候,首先需要移动DQS_t,DQS_c的相位, 方向:左移。 > > WL_ADJ_end: 完成内部write leveling的时候,需要移动DQS_t,DQS_c的相位,方向:右移。 > > WICA:指的是这个内部产生的write leveling 脉冲的delay,方向:左移。 ### 3 时序 外部training开始时,可以看到DQ\[15:0\]全部输出低电平: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/12d1de0197f04cdfb1b0de8c87ae45d2.png) **图 1 '步骤5'对应波形** 外部training完成时,可以看到DQ\[15:0\]已经全部输出高电平了: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f2c495a2198a44d2b60153eeb3ab33ef.png) **图 2 '步骤6'对应波形** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b7990d24b78942a39a89b3c453fa4c3d.png) **图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的开发角度来看,难度可谓是增加了亿点点。

相关推荐
禾仔仔1 天前
USB MSC从理论到实践(模拟U盘为例)——从零开始学习USB2.0协议(六)
嵌入式硬件·mcu·计算机外设
The Electronic Cat1 天前
树莓派使用串口启动死机
单片机·嵌入式硬件·树莓派
先知后行。1 天前
常见元器件
单片机·嵌入式硬件
恒锐丰小吕1 天前
屹晶微 EG2302 600V耐压、低压启动、带SD关断功能的高性价比半桥栅极驱动器技术解析
嵌入式硬件·硬件工程
Free丶Chan1 天前
dsPIC系列-1:dsPIC33点灯 [I/O、RCC、定时器]
单片机·嵌入式硬件
恒锐丰小吕1 天前
屹晶微 EG2106D 600V耐压、半桥MOS/IGBT驱动芯片技术解析
嵌入式硬件·硬件工程
Ghost Face...1 天前
U-Boot与PMON:配置与设备树解析对比
linux·单片机·嵌入式硬件
冲,干,闯1 天前
操作MCU内存
单片机·嵌入式硬件
猫猫的小茶馆1 天前
【ARM】从零封装STM32标准库
汇编·arm开发·stm32·单片机·嵌入式硬件·架构