首页 > 其他分享 >DDR Study - LPDDR Write and Training

DDR Study - LPDDR Write and Training

时间:2024-10-25 20:49:26浏览次数:3  
标签:Training DQS DDR Study Write 信号 DRAM DQ

参考来源:JESD209-4B,JESD209-4E
LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR Read and Training → LPDDR Write and Training → LPDDR Clock Switch → PIM Technical

Write Command

基于JEDEC标准中可以看到Write Timing信息如下:
Write Timing

图中的相关参数信息解析如下:

  • WL - Write Latency,从CAS-2命令结束的第一个CLK上升沿T3开始,到对齐第一个有效DQS信号的CLK上升沿Ta3
  • tDQSS - Write场景下,第一个有效DQS信号和对应的CLK信号上升沿Ta3之间的skew,分为Min/Normal/Max三档,分别为0.75tCK(红线)/1tCK(黄线)/1.25tCK(蓝线)三个skew范围
  • tDQS2DQ - Write场景下,第一个有效DQS信号和第一个有效DQ信号之间的skew
  • tWPRE - Write场景下,DQS的前导时间段,用于产生稳定的DQS
  • tWPST - Write场景下,DQS的后导时间段,用于结束DQS的翻转
  • tDSS - Write场景下,DQS信号下降沿到下一个CK信号上升沿的时间,Setup Time
  • tDSH - Write场景下,DQS信号下降沿距离上一个CK信号上升沿的时间,Hold Time
  • tDQSL - Write场景下,DQS信号输出为低的时间宽度
  • tDQSH - Write场景下,DQS信号输出为高的时间宽度

而Command信息中的Write-1和CAS-2就是CA/CS Bus上给出的Write Command信号,首先基于JESD209-4B Table 95真值表内容来看这部分信息:
Truth Table

这里的缩写定义如下:

  • H - High Level
  • L - Low Level
  • BL - Burst Length,高低电平区分BL-32和BL-16
  • BA0/1/2 - Bank Address, 最高支持x8 Bank Width
  • V - 可以为High或者Low电平,但不可以为浮动电平信号
  • C - Column信息,其中Column[1:0]信号不在CA Bus传输,默认为0(也保证了Column地址永远32B对齐)
  • AP - Auto Pre-Charge开关信号

和Read类似,一次Write + CAS命令都需要在CS的High/Low Level两个不同电平状态下发送不同的内容,才能组成一次完整的Write命令。
相比Read,在CA信号的高低电平组合上发生了变化。

Write Training

Write Training中Delay主要也是聚焦在 DQS和CLK之间的skew + DQS和DQ之间的skew,也就是tDQSS + tDQS2DQ的Training。
JEDEC中对于这两个skew也有明确的限制:

SymbolMinMaxUnit
tDQSS0.751.25tCK
tDQS2DQ200800ps
Write是MC控制器送数据到DRAM,所以CLK/DQ/DQS都是从MC控制器发出,DRAM通过DQS进行采样。

因为已经完成了Read Training,所以MC可以写一组数据(Ex: 0xAA55 - 10101010 01010101)到DRAM,再读回来看数据是否一致。
在不断循环中,不断调整Voltage Reference + Delay + Duty Cycle,根据读到的数据fail与pass的边界生成数据的左边界(1st Fail → Pass)和右边界(1st Pass → Fail)生成眼图数据。
通过不断递归获取合适的Voltage和Delay Value,能够让眼图数据中的眼睛处于睁得最大的状态。
所以在DDR Training Flow中,一般都是先保证Read Training Pass之后,再做Write Training。否则MC控制器无法确认Write Value是否正确写入到了DRAM。

在Delay和Duty Cycle调整的硬件选择上,一般也是采用基于DLL和Delay Line的电路设计实现。 和上一篇内容一致:
DDR Study - LPDDR Read and Training

Write SIPI

关于如何在SIPI波形图中计算tDQSS和tDQS2DQ,首先就是需要确定一段Write的波形。
与Read波形不同的是,不论高频还是低频,Write场景的DQS均不会出现明显的抬起前导区域。所以都是通过比较DQS与CK信号之间是否对齐(无相位差)来判断:
Write SIPI

tWPRE

至于tWPRE不像tRPRE有static/toggle两种mode,只有一种情况,第三个上升沿开始算作是有效DQS信号:
在这里插入图片描述

tDQS2DQ

在确定tWPRE之后,关于tDQS2DQ的计算较为简单,就是在tWPRE之后的第一个DQS上升沿到DQ有效高电平之间的skew,如下图所示:
tDQS2DQ

关于为什么Read中的DQS和DQ是对齐,而Write中DQS和DQ则需要有90度相位差,可能是和DQ的信号眼图质量有关。
Read场景下的DQ信号由DRAM端发出,由于DRAM本身不像SOC端具有庞大的硬件计算和信号优化资源,可能只能产生粗略优化后的DQ信号,所以需要严格对齐保证读取到每个DQ Data Value。
Write场景下的DQ信号由MC控制器端发出,在SOC端的信号优化处理后,能保证DQ信号眼图足够优秀,因此90度相位差能保证每次DQS采样都能在眼图中间区域任意位置读取到每个DQ Data Value。

另外tDQS2DQ的参数对于Periodic Training中的DRAM DQS re-training也有重要意义,下面基于JESD209-4B Chap 4.36 简单讲一下:
DRAM长期工作下的电压和温度都会发生变化,所以在Write场景下,DRAM内部收到的来自SOC的DQS Delay也会发生变化,所以需要重新训练。
常见的方法就是通过MC控制器端发送一次START和STOP指令,时间间隔由MC控制器设定。
DRAM的内部振荡器 Interval Oscillator 在这段时间内开始计数接收到的DQS Counter,计数的结果会存放在MR18和MR19的寄存器内部。
最终计数的值和MC设定的时间间隔比较,就能确定应该如何调整delay来保证Write场景下DRAM收到的DQS仍然有效。

但是需要注意这里DRAM Interval Oscillator的计数结果还需要考虑一部分粒度误差,也就是默认情况下tDQS2DQ对DRAM Internal DQS计数的影响。
因为DRAM内部收到外部DQS差分信号后,经过的Clock Tree本身就存在Delay,这个Delay就是为DQS差分信号和DQ信号之间的skew补偿,也就是tDQS2DQ。
所以DRAM Interval Oscillator粒度误差计算如下:
DQS OSC误差

而DRAM Interval Oscillator的精度就是除去粒度误差和匹配误差(DQS 理想训练电路与实际 DQS 时钟树在电压和温度上的计算差异,由DRAM厂商提供此参数)的结果:
DQS OSC精度

tDQSS

与tDQSCK的计算类似,tDQSS就是等于WL结束的时间点到tWPRE的结束时间点,其中WL的计算就是在CS翻转结束的CK上升沿T3开始计算CK的数量,具体数量由MR2寄存器决定:
MR2

假设在默认配置下,WL为4tCK。
那么在Write Timing中,在CS发送完CAS2命令,结束翻转的T3时间点开始计算,过4个tCK之后,就是tDQSS开始计算的时间点(下图红色竖线 Ta3)。
而DQS第三个上升沿就是tDQSS结束计算的时间点(下图蓝色竖线),tDQSS就是蓝色竖线的时间减去红色竖线的时间即可
tDQSS t

而tDQSS SIPI相关信号如下:
tDQSS SIPI

标签:Training,DQS,DDR,Study,Write,信号,DRAM,DQ
From: https://blog.csdn.net/weixin_43948262/article/details/143243425

相关文章

  • Study Plan For Algorithms - Part49
    1.交错字符串给定三个字符串s1、s2、s3,请验证s3是否是由s1和s2交错组成的。两个字符串s和t交错的定义与过程如下,其中每个字符串都会被分割成若干非空子字符串:s=s1+s2+...+snt=t1+t2+...+tm|n-m|<=1交错是s1+t1+s2+t2+s3+t3......
  • 通过 PowerShell 更换以太网适配器的 IPv6 DNS 服务器,可以使用 Set-DnsClientServerAd
    通过PowerShell更换以太网适配器的IPv6DNS服务器,可以使用Set-DnsClientServerAddresscmdlet来设置DNS服务器地址。以下是如何操作的详细步骤:步骤1:打开PowerShell以管理员身份运行PowerShell:右键单击开始菜单,选择 WindowsPowerShell(管理员)。步骤2:......
  • StudyTonight-Java-中文教程-六-
    StudyTonightJava中文教程(六)原文:StudyTonight协议:CCBY-NC-SA4.0JavaCharacter.isLetter(char)方法原文:https://www.studytonight.com/java-wrapper-class/java-character-isletterchar-ch-methodJavaisLetter(charch)方法是Character类的一部分。此方法用于检查指......
  • StudyTonight-Java-中文教程-二-
    StudyTonightJava中文教程(二)原文:StudyTonight协议:CCBY-NC-SA4.0JavaFloat类原文:https://www.studytonight.com/java/float-class.phpFloat类将基元类型的浮点值包装在对象中。Float类型的对象包含一个类型为浮点的字段。此外,此类提供了几种将浮点转换为字符串和将......
  • StudyTonight-C-C---中文教程-一-
    StudyTonightC/C++中文教程(一)原文:StudyTonight协议:CCBY-NC-SA4.0C基础知识C语言概述原文:https://www.studytonight.com/c/overview-of-c.php欢迎来到C语言教程系列。这是网上最好的C语言教程集,会帮助你学习C语言。C语言是由丹尼斯·里奇于1972年在贝尔......
  • StudyTonight-Web-中文教程-一-
    StudyTonightWeb中文教程(一)原文:StudyTonight协议:CCBY-NC-SA4.0HTMLHTML标签AHTML<a>标签原文:https://www.studytonight.com/html5-references/html-a-tagHTML<a>标签是一个锚点,用来创建一个超链接。超链接用于将当前网页与其他网页或互联网上可用的任何其他网......
  • LPDDR4/LPDDR4X讲解(一)
    1  基本概念与历史背景1.1基本概念 LPDDR4,全称为LowPowerDoubleDataRate4thGenerationSynchronousDynamicRandomAccessMemory,即第四代低功耗双倍数据率同步动态随机存取存储器。它是DDRSDRAM(DoubleDataRateSynchronousDynamicRandomAccessMemory,双......
  • HCI_LE_Set_Random_Address(0x0005)命令全面解析
    目录一、命令概述二、命令格式2.1.HCI_LE_Set_Random_Address命令格式2.2.HCICommandComplete返回命令格式2.3.格式示例2.4.示例二进制表示三、命令参数详细说明3.1.命令代码(Opcode)3.2.参数长度(ParameterLength)3.3.随机地址(RandomAddress)四、命令返回参......
  • phpstudy php8.2.9 redis使用
    1、卸载8.22、安装8.23、先开启redis缓存4、设置缓存内存大小5、把所有扩展放在C:\php\ext(复制:D:\phpstudy_pro\Extensions\php\php8.2.9nts\ext到C:\php\ext)6、把redis.dll复制进C:\php\ext(下载路径:https://downloads.php.net/~windows/pecl/releases/redis/6.0.2/php_red......
  • ReactOS寻找病返回最小StartingAddress所在结点。
    ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNode()函数文章目录ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNodeMmIterateFirstNode/*INCLUDES*****************************************************************/#incl......