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的开发角度来看,难度可谓是增加了亿点点。

相关推荐
Darken031 小时前
基于单片机STM32的---断点调试操作
stm32·单片机·嵌入式硬件·断点调试
d111111111d1 小时前
在STM32F103C8T6中什么是读写寄存器模型,有什么用,可以干什么,详细解释。
笔记·stm32·单片机·嵌入式硬件·学习
猫猫的小茶馆2 小时前
【ARM】ARM体系结构与开发基础
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网
三佛科技-134163842122 小时前
PL3367C 离线反激式PWM控制芯片兼容DP2525JD 典型应用电路
单片机·嵌入式硬件·智能家居·pcb工艺
研华嵌入式2 小时前
用Edge Impulse开启你的边缘AI之旅
arm开发·图像处理·嵌入式硬件·目标检测·视觉检测·边缘计算
知南x2 小时前
【正点原子STM32MP157 启动篇】(3) STM32MP1 二进制头部信息+Linux 系统启动过程
linux·stm32·嵌入式硬件·stm32mp157
richxu202510012 小时前
嵌入式学习之路>单片机核心原理篇>(5)串口通信核心原理
单片机·嵌入式硬件·学习
小鱼儿电子3 小时前
56-基于LoRa的水质监测系统设计与实现
stm32·单片机·嵌入式硬件·lora·腾讯云平台
猫猫的小茶馆3 小时前
【ARM】eclipse 中创建汇编工程
c语言·汇编·arm开发·stm32·单片机·嵌入式硬件·eclipse