DQS(Data Strobe)是DDR内存系统中的关键时钟信号,其准确性对数据传输至关重要。在DDR内存系统中,DQS信号的漂移会导致数据读取的错误,因此需要监测并补偿漂移。
1. DQS漂移检测和补偿的概述
除了标准的DQS门控LCDL VT补偿外,DDR IP提供了一种可选的功能,用于检测和补偿来自DDR IP内部以及外部(包括SDRAM)的漂移。其基本原理是通过采样进入的读取DQS#信号与门控信号,并持续追踪这些采样值是否发生变化。
2. 门控信号和DQS#信号采样
- 设计中使用两个门控信号,之间有一个小的可编程延迟(通过
DTCR1.RDLVLGDIFF
设置)。这两个信号会在DQS#信号的上升沿两侧采样。 - 如果没有漂移,两个门控信号的采样值应该分别是0和1(即在DQS信号的上升沿一侧为0,另一侧为1)。
- 如果两个门控信号都采样到0或1,表明DQS信号相对于门控信号发生了漂移。采样值的变化指示了漂移的方向,PUB(PHY控制单元)可以根据此信息调整门控信号的位置。
3. 漂移检测和补偿启用
- DQS漂移检测和补偿功能通过设置
DQSDR0.DFTDTEN
来启用。 - 需要注意的是,只有两种补偿机制中的一种可以启用:
DQSDR0.DFTDTEN
和DXnGCR3.RGLVT
是互斥的,即不能同时启用。
4. 漂移补偿过程
- 当PUB检测到漂移时,它会通过标准的DFI PHY更新协议通知控制器,要求DFI总线空闲以便启动漂移补偿机制。
- 控制器确认PHY更新后,PUB会执行
DQSDR0.DFTUPDRD
虚拟读取,以获取最新的漂移状态。 - 由于漂移检测机制无法检测漂移的幅度(尤其是在任务模式下进行DFI事务时),PUB需要通过增量补偿例程来确定漂移的幅度。具体做法是,PUB会发出一系列的虚拟读取操作(dummy reads),每次检测到漂移时,PUB会通过
DQSDR1.DFTDLY
调整延迟来进行补偿。直到不再检测到漂移为止。 - 如果
DQSDR0.DFTUPDRD
设置为0,则PUB只会执行单步漂移补偿,调整数字延迟线的DQSDR0.DTDLY
延迟,这时不会在漂移补偿阶段实际确定漂移幅度。
5. 漂移检测的特殊情形
漂移检测可能无法在某些情况下进行,尤其是在没有读取事务或门控信号没有变化时。为此,PUB提供了以下机制:
- 无读取场景:如果控制器长时间没有对某个rank执行读取操作,PUB会在
DQSDR1.DFTRDIDLC × DQSDR1.DFTRDIDLF
时钟周期后请求PHY更新,执行DQSDR0.DFTIDLRD
虚拟读取。 - 连续读取场景:如果控制器发送了连续的读取操作,PUB会在
DQSDR1.DFTRDB2BC * DQSDR1.DFTRDB2BF
时钟周期后请求PHY更新,执行DQSDR1.DFTB2BRD
虚拟读取。
6. DQS漂移逻辑
DQS漂移逻辑只使用bank 0进行虚拟读取操作,并根据银行0的状态来决定是否需要发出激活命令。
7. 防止不必要的漂移检测和补偿
为了防止DQS漂移检测和/或补偿的过度触发,PUB提供了两个可编程功能来调节漂移检测的频率和补偿:
- 漂移监测周期(
DQSDR2.DFTMNTPRD
):指定两次漂移监测事件之间的最小时钟周期数。它控制PUB采样PHY宏的漂移状态的频率。此功能可以用于避免频繁的漂移检测,特别是当系统的漂移更像是抖动(jitter)而非单向漂移时。 - 漂移阈值(
DQSDR2.DFTTHRSH
):指定在同一方向上连续检测到的最小漂移次数,只有当检测到该阈值的漂移时,PUB才会认为漂移是有效的。如果漂移方向发生反转,计数器会重置。此功能用于避免频繁检测和/或补偿周期性的漂移。
总结
这段话描述了DQS漂移的检测与补偿机制,该机制用于确保DQS信号在面临电压温度变化和系统状态变化时仍然稳定可靠。关键的步骤包括通过门控信号采样DQS信号来检测漂移,以及根据漂移的方向来调整DQS门控位置。PUB通过增量补偿和虚拟读取操作来调整系统,以消除漂移的影响。为了避免频繁的补偿,系统提供了可编程功能来控制漂移监测的周期和阈值,从而确保系统的效率和稳定性。
本文链接: https://talent-tudou.github.io/2024/11/09/DDR/DQS漂移检测与补偿/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!