4. 时钟信号测量:差分时钟(CK_t/CK_c)测量方法、时钟抖动测量、时钟占空比测量

各位工程师朋友,咱们今天聊聊DDR内存调试里最绕不开的一个环节——时钟信号测量。说实话,我见过太多案子,跑不起来或者跑不稳,最后查来查去,根因都在时钟上。时钟是内存系统的心跳,心跳乱了,整个系统就别想正常工作。

DDR从DDR2开始就用差分时钟了,也就是CK_t和CK_c这一对。为什么用差分?说白了就是为了抗干扰。你想想看,单端信号在高速下很容易被噪声带偏,但差分信号是两根线一起走,噪声在两根线上是共模的,一相减就没了。这个思路很巧妙,但测量起来也有讲究。

4.1 差分时钟(CK_t/CK_c)的测量方法

测量差分时钟,我个人的习惯是直接用差分探头。为什么?因为差分探头内部已经把CK_t和CK_c做减法了,你看到的就是实实在在的差分波形。如果你手头没有差分探头,也可以用两个单端探头分别测CK_t和CK_c,然后在示波器里做数学运算——A减B。但我要提醒你,这种方法在高频下误差会比较大,因为两个探头的延迟很难完全匹配。

我在项目中遇到过一件事:有个同事用两个单端探头测DDR4的差分时钟,怎么测怎么觉得幅度不对,波形也怪怪的。后来换了个差分探头,波形立马干净了。所以我的建议是——别省这个钱,差分探头是必需品。

测量步骤:
  1. 先把示波器带宽设到足够高。DDR4的时钟频率一般在1.6GHz左右,示波器带宽至少要有4GHz,最好是8GHz以上。
  2. 差分探头接好,地线要短。地线长了就是个天线,会引入噪声。
  3. 找到CK_t和CK_c的测试点。一般在颗粒的BGA焊盘附近,或者PCB上的过孔处。
  4. 探头点上去,注意不要刮伤焊盘。我习惯用探头尖轻轻接触,不要用力压。
  5. 设置示波器的触发为上升沿,触发电平设在差分信号的交叉点附近。

测出来的差分波形长什么样?理想情况下,应该是一个干净的正弦波或者梯形波,峰峰值在VDDQ的2倍左右。比如DDR4的VDDQ是1.2V,那差分时钟的峰峰值应该在2.4V左右。如果幅度偏低,说明信号衰减严重,可能是走线太长或者阻抗不匹配。

4.2 时钟抖动测量

时钟抖动,说白了就是时钟边沿的位置在时间上不稳定。抖动大了,数据采样就会出错。DDR对时钟抖动的要求非常严格,JEDEC标准里都有明确的规定。

抖动分两种:随机抖动(RJ)和确定性抖动(DJ)。随机抖动是热噪声引起的,服从高斯分布,没法完全消除。确定性抖动是串扰、电源噪声、阻抗不匹配等引起的,这个是可以优化的。

测量抖动,我一般用示波器自带的抖动分析软件。具体操作是这样的:

抖动测量小技巧:
  • 采集足够多的波形。我一般至少采集10000个以上的时钟周期,这样统计才有意义。
  • 用示波器的直方图功能看周期抖动(Period Jitter)的分布。正态分布最好,如果出现双峰,说明有确定性抖动。
  • 看峰峰值(Pk-Pk)和均方根值(RMS)。DDR4的周期抖动峰峰值一般要求小于100ps,RMS小于10ps。
  • 别忘了看长周期抖动(Long Term Jitter),这个对DDR的刷新操作影响很大。

我曾经调试过一个案子,DDR3跑800MHz死活不稳定。测时钟抖动,RMS只有8ps,看起来没问题。但后来我用长周期抖动一测,发现抖动在几百个周期后会突然变大。查了半天,原来是电源的纹波耦合到了时钟PLL上。所以你看,只看短周期抖动是不够的,长周期抖动往往能暴露更深层的问题。

4.3 时钟占空比测量

占空比,就是高电平时间占整个周期的比例。理想情况下是50%,但实际中很难做到完美。DDR对占空比的要求是45%到55%之间,超出这个范围,数据眼图就会不对称,读写操作都可能出错。

测量占空比其实很简单,示波器上直接就有测量功能。但我建议你不要只看一个周期,要多看一些周期取平均值。为什么?因为单个周期的占空比可能受随机抖动影响,取平均才能反映真实情况。

具体操作:

  1. 在示波器上打开测量项,选择"Duty Cycle"。
  2. 设置统计模式为"Mean"(平均值)。
  3. 采集至少1000个周期,看平均值和标准差。
  4. 如果平均值偏离50%超过5%,就要注意了。
注意:

占空比偏离的原因有很多,常见的有:

  • 时钟源本身的占空比就不准——换芯片试试。
  • PCB走线不对称——CK_t和CK_c的走线长度要严格等长。
  • 端接电阻不匹配——检查ODT设置和实际电阻值。
  • 电源噪声——给时钟供电的电源要干净,最好用LDO。

我记得有一次,一个客户说他们的DDR4板子跑2133MHz时偶尔会死机。我过去一看,时钟占空比只有43%。查了半天,发现是CK_t和CK_c的走线长度差了50mil。别看50mil在低频下无所谓,在2GHz以上,这点长度差就能让占空比偏掉好几个百分点。后来把走线调等长了,占空比回到49%,问题就解决了。

4.4 实战中的几个坑

嗯,这里我要多说几句。时钟测量看着简单,但实际操作中容易踩坑。

第一个坑:探头负载效应。 示波器探头本身有电容,高频下这个电容会改变被测信号。我建议用有源探头,它的输入电容只有零点几皮法,对信号影响小。无源探头电容大,测高频时钟会不准。

第二个坑:地线环路。 探头的地线夹子如果太长,会形成一个环路天线,把周围的噪声耦合进来。我习惯用地线弹簧,直接焊在探头尖端附近的地上,这样环路最小。

第三个坑:触发设置。 测抖动时,触发要设在时钟的交叉点。交叉点是差分信号过零的地方,抖动最小。如果触发设在波形的顶部或底部,测出来的抖动会偏大,因为那个位置噪声大。

我曾经犯过一个低级错误:测DDR3时钟抖动,怎么测都是20ps RMS,远超规格。折腾了一下午,最后发现是示波器的触发源选错了,选成了单端信号。换成差分触发后,抖动立马降到8ps。所以啊,细节决定成败。

4.5 总结一下

时钟测量是DDR调试的基础。差分时钟要用差分探头测,抖动要看周期抖动和长周期抖动,占空比要取平均值。这三个指标都达标了,时钟这一关就算过了。

最后说一句:别嫌麻烦。我见过太多人,时钟没测清楚就开始调别的参数,结果绕了一大圈又回到原点。先把时钟搞定,后面的路就好走了。