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

开局来张图:

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

相关推荐
大爱编程♡4 小时前
GPIO-I2C
stm32·单片机·嵌入式硬件
振南的单片机世界6 小时前
PVD掉电中断——让单片机“咽气前”写完遗书
arm开发·stm32·单片机·嵌入式硬件
续写烂尾8 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
zlinear数据采集卡10 小时前
USB HS 480M高速传输与SRAM记录仪:DABM-D223数据存储系统全解析
arm开发·嵌入式硬件·fpga开发·开源
Crkylin11 小时前
Cortex-M SysTick系统滴答定时器详解
单片机·嵌入式硬件
Hello_Damon_Nikola12 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
gscsded12 小时前
AUTOSAR CanTp 模块学习笔记
单片机·嵌入式硬件·汽车
Hello_Damon_Nikola12 小时前
扰流筋从原理到应用
人工智能·单片机·嵌入式硬件
某林21213 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗
luiyarch13 小时前
IP8到底是什么?
嵌入式硬件·车载系统