第4章 DQS信号作用与特性

DQS这玩意儿,说白了就是LPDDR4里那根“时钟对数据的锚”。没有它,读写的时序就全乱套了。我刚开始调DDR时,总以为只要CA路径干净就完事了,结果发现DQS才是真正让系统稳定的核心——没有对齐的DQS,再好的CA线序也白搭。

4.1 读DQS与写DQS的相位关系

读DQS和写DQS,本质上是一对“兄弟”,但方向完全相反。写DQS是颗粒根据我们发出去的CA和命令,在内部生成的随路时钟;读DQS则是颗粒回传数据时,自己拉起来的一个边带信号。

核心要点:

  • 写DQS:由控制器产生,通常与CA信号对齐,颗粒在DQS的上升沿和下降沿采样数据。
  • 读DQS:由颗粒产生,返回到控制器,控制器用它来接收数据。
  • 相位差:写DQS对CA是0度(或90度,取决于协议版本),读DQS则会因颗粒内部延时和PCB走线引入相移。

我遇到过最头疼的情况:读取数据眼图明明很开阔,但DQS的相位却偏离了半个周期。结果就是,控制器在错误的边沿采样到了上一拍的数据。那次排查花了整整两天,最后发现是PCB上读DQS差分对的等长没做够——其实就差了20 mil。

个人习惯:在仿真阶段,我会先单独检查写DQS与CA的相位差,控制在±50 ps以内。然后通过读训练,让控制器自动调整读DQS的延迟,直到眼图中心对齐。

4.2 差分DQS与单端DQS的区别

差分DQS(DQS_t / DQS_c)是LPDDR4的标准用法,单端DQS一般只在低端或老协议里出现。到底用哪个?我直接说结论:差分信号抗共模噪声能力更强,而且能提供更精确的边沿判定。

特性差分DQS(DQS_t / DQS_c)单端DQS
噪声抑制共模噪声被抵消,抗干扰能力好容易受电源噪声影响
信号摆幅低摆幅,省功耗需要较大摆幅保证Slope
布线要求必须等长、紧耦合只需要单线,但对地阻抗要稳
系统应用LPDDR4/4X/5 标配通常用于DDR3或低成本方案

为什么LPDDR4强制差分?因为频率上去了,单端那点噪声余量根本不够用。我记得有次项目为了节省BOM,想用单端DQS替代,结果在高温下大量读错误。后来只能改PCB,把DQS_c那条线补回来。

避坑指南:我曾经在一个四层板项目里,把差分DQS的间距拉到5倍线宽以上,结果差分阻抗严重不对称,眼图闭合。后来改成3倍线宽,并做了包地处理,才通过测试。差分对的间距,控制在2~3倍线宽最稳妥。

4.3 Strobe信号特性

Strobe,其实就是DQS的另一个叫法。它不仅仅是时钟,更是数据采样的“哨兵”。它的核心特性——边沿对齐数据,双沿采样,以及门控(Gating)控制——决定了整个训练流程的设计。

  • 双沿采样:DQS的上升沿和下降沿都用来采样一个DQ位,因此DQS的频率是数据速率的一半。
  • 数据眼中心对齐:读数据时,DQS的边沿与数据跳变沿对齐;写数据时,DQS的边沿与数据有效窗口中心对齐。这个关系在训练中会来回调整。
  • 门控窗口:读DQS并不是一直有效的,它只在读突发期间输出。控制器需要用一个门控信号(DQS Gating)来截取有效窗口,否则会把总线浮空状态当作数据。

门控那块坑特别多。我在做LPDDR4调测时,曾经因为门控延迟设置太短,把后面几个字节的数据直接吃掉了。后来加了一段DQS_Gate_Calibration流程,才稳定下来。

// 伪代码:读DQS门控校准
void DQS_Gate_Calibration(void) {
    // 先测出DQS门控的起始位置
    uint32_t gate_start = find_gate_start();
    uint32_t gate_len = find_gate_len();
    // 确保门控窗口完全覆盖整个读突发
    if (gate_len < 64) { // 8字节 * 8bit
        gate_start -= 4; // 提前半个UI
    }
    set_gate_window(gate_start, 64);
    // 验证
    while (gate_cal_done == FALSE) {
        adjust_gate_by_1_16_UI();
    }
}

4.4 知识结构总览

下面这张SVG图,把本章的核心逻辑串起来了。你看一眼就能明白:DQS的作用、读写方向、差分与单端的分支,以及Strobe的特性——画在一起,挺清楚的。

DQS信号特性与关系图 DQS信号 读DQS(颗粒→控制器) 写DQS(控制器→颗粒) 门控窗口 双沿采样 相位对齐CA 写入数据采样 差分DQS 单端DQS 抗共模噪声 | 等长紧耦合 LPDDR4标配 适用于DDR3 | 低成本 噪声敏感 Strobe = DQS 边沿对齐、双沿采样、门控

4.5 总结几个实操要点

  1. 先调写DQS相位:让DQS边沿对齐到CA数据眼中心。我常用Write Levelling命令来做初调。
  2. 再调读DQS相位:通过Read DQS Training找到最优延迟。如果读训练失败,优先查PCB等长和阻抗。
  3. 差分对设计别偷懒:走线间距3倍线宽,等长控制在±5 ps以内。单端?除非你特别清楚自己在干什么。
  4. 门控窗口留余量:至少覆盖读突发全长再加半个UI。我习惯在门控校准循环里多做一次“前后移动1/16 UI”的验证。

好了,这一章的内容就到这儿。DQS的特性,说到底就是两根线、两种方向、一套规则。你能把读写相位、差分单端区别、Strobe的门控和双沿采样搞明白,后面的训练参数调优就有了地基。