参考来源: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信息如下:
图中的相关参数信息解析如下:
- 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真值表内容来看这部分信息:
这里的缩写定义如下:
- 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也有明确的限制:
Symbol | Min | Max | Unit |
---|---|---|---|
tDQSS | 0.75 | 1.25 | tCK |
tDQS2DQ | 200 | 800 | ps |
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信号之间是否对齐(无相位差)来判断:
tWPRE
至于tWPRE不像tRPRE有static/toggle两种mode,只有一种情况,第三个上升沿开始算作是有效DQS信号:
tDQS2DQ
在确定tWPRE之后,关于tDQS2DQ的计算较为简单,就是在tWPRE之后的第一个DQS上升沿到DQ有效高电平之间的skew,如下图所示:
关于为什么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粒度误差计算如下:
而DRAM Interval Oscillator的精度就是除去粒度误差和匹配误差(DQS 理想训练电路与实际 DQS 时钟树在电压和温度上的计算差异,由DRAM厂商提供此参数)的结果:
tDQSS
与tDQSCK的计算类似,tDQSS就是等于WL结束的时间点到tWPRE的结束时间点,其中WL的计算就是在CS翻转结束的CK上升沿T3开始计算CK的数量,具体数量由MR2寄存器决定:
假设在默认配置下,WL为4tCK。
那么在Write Timing中,在CS发送完CAS2命令,结束翻转的T3时间点开始计算,过4个tCK之后,就是tDQSS开始计算的时间点(下图红色竖线 Ta3)。
而DQS第三个上升沿就是tDQSS结束计算的时间点(下图蓝色竖线),tDQSS就是蓝色竖线的时间减去红色竖线的时间即可
而tDQSS SIPI相关信号如下: