第4章:眼图分析——从原理到实战

眼图,说白了就是高速信号的「心电图」。

我刚入行那会儿,总觉得眼图就是个花里胡哨的示波器显示模式。直到有一次,一个12.5Gbps的链路怎么都调不通,我盯着眼图看了整整三天——嗯,从那以后我再也不敢小看它了。

4.1 眼图的形成原理

眼图怎么来的?其实很简单。

你把一串随机比特流(比如PRBS7、PRBS31)反复叠加到示波器屏幕上,每个bit的波形会重叠在一起。因为时钟是同步的,所有上升沿对齐,下降沿也对齐。结果呢?就形成了一个个「眼睛」的形状。

核心要点:眼图是大量bit的统计叠加结果,不是单个bit的波形。

我习惯用PRBS31做眼图测试,因为它能模拟最真实的业务场景。PRBS7虽然快,但有些低频抖动测不出来。

为什么会形成眼睛?你想想看:

  • 所有bit的上升沿对齐在同一个位置
  • 所有bit的下降沿对齐在另一个位置
  • 高电平区域叠加在一起,形成「眼顶」
  • 低电平区域叠加在一起,形成「眼底」
  • 中间交叉的区域,就是「眼宽」

说白了,眼图就是把时间域的信号,转换成了统计域的「质量指标」。

我的小技巧:调试时先用PRBS7快速看个大概,再用PRBS31做最终验证。PRBS7跑得快,PRBS31更真实。

4.2 眼图参数解读

眼图里藏着三个关键参数:眼高、眼宽、抖动。这三个参数,基本决定了你的链路能不能稳定工作。

4.2.1 眼高(Eye Height)

眼高,就是眼睛垂直方向上的开口大小。单位通常是mV。

眼高反映了信号的噪声裕量。眼高越大,接收端越容易正确判断0和1。

眼高范围 信号质量 我的经验
> 500mV 优秀 基本不用操心
300-500mV 良好 注意走线长度
100-300mV 临界 需要优化
< 100mV 危险 赶紧查问题

我在项目中遇到过眼高只有80mV的情况。查了半天,发现是电源纹波太大。加了个去耦电容,眼高直接跳到350mV。

4.2.2 眼宽(Eye Width)

眼宽,就是眼睛水平方向上的开口大小。单位是ps或UI(Unit Interval)。

眼宽反映了信号的时序裕量。眼宽越大,接收端的采样窗口越大,误码率越低。

注意:眼宽和抖动是「此消彼长」的关系。抖动越大,眼宽越小。

举个例子:10Gbps的信号,1UI = 100ps。如果眼宽只有60ps,那留给接收端采样的时间窗口就只剩60%了。剩下的40%被抖动吃掉了。

4.2.3 抖动(Jitter)

抖动,就是信号边沿在时间轴上的不确定性。说白了,就是边沿「晃来晃去」的程度。

抖动分两类:

  • 随机抖动(RJ): 服从高斯分布,没法消除,只能控制
  • 确定性抖动(DJ): 有固定来源,可以优化

确定性抖动又分几种:

  1. 数据相关抖动(DDJ): 跟bit pattern有关,比如长串0或长串1
  2. 占空比失真(DCD): 时钟占空比不是50%
  3. 周期性抖动(PJ): 来自电源噪声或串扰

我习惯用「浴盆曲线」来分析抖动。浴盆曲线的底部越宽,说明抖动裕量越大。

避坑指南:我曾经被周期性抖动坑过。一个10Gbps的链路,眼图看着还行,但误码率就是下不去。后来用频谱分析仪一看,有个200MHz的周期性抖动,来自隔壁的DDR走线。重新布线后,问题解决。

4.3 眼图模板测试

眼图模板,就是给眼图画个「框」。信号必须在这个框里面,才算合格。

模板通常由几个关键点定义:

  • 模板中心: 眼图最开阔的位置
  • 模板边界: 定义了最小眼高和最小眼宽
  • 模板区域: 信号不能进入的区域

不同的标准有不同的模板。比如:

标准 速率 模板要求
PCIe Gen3 8Gbps 眼高 > 100mV,眼宽 > 0.4UI
USB 3.0 5Gbps 眼高 > 200mV,眼宽 > 0.5UI
10G-KR 10.3125Gbps 眼高 > 150mV,眼宽 > 0.4UI

模板测试怎么做?示波器会自动统计:有多少个采样点落入了模板区域。如果超过一定比例(通常是10^-12),测试就失败了。

关键点:模板测试是「通过/不通过」的判定,不是「好/坏」的判定。有时候模板通过了,但实际链路可能还有隐患。

我个人的习惯是:模板测试通过后,再额外留20%的裕量。比如标准要求眼高100mV,我至少要看到120mV才放心。

4.4 眼图分析的知识体系

下面这张图,是我自己总结的眼图分析知识框架。每次调试前,我都会过一遍:

眼图分析知识体系 眼图分析 眼高 眼宽 抖动 噪声裕量 电源纹波 串扰影响 采样窗口 时序裕量 ISI影响 随机抖动RJ 确定性DJ 浴盆曲线 模板测试 通过/不通过 裕量评估 标准合规

这张图我每次调试都会在脑子里过一遍。从眼高、眼宽、抖动三个维度入手,最后用模板测试做最终判定。

4.5 实战中的几个坑

最后分享几个我踩过的坑:

  1. 别只看眼图,要看误码率。 眼图好看不代表误码率低。有一次眼图漂亮得很,但误码率就是10^-6。后来发现是接收端的CDR有问题。
  2. 模板测试不是万能的。 模板通过了,但实际系统可能因为温度变化、老化等原因出问题。我习惯在高温和低温下各测一次。
  3. 抖动分离很重要。 总抖动大,你得知道是RJ还是DJ。RJ是物理极限,DJ是可以优化的。我曾经花了两周优化一个RJ问题,后来发现其实是DJ。
  4. 探头的带宽要够。 测10Gbps的信号,探头带宽至少要12GHz。带宽不够,眼图会「变胖」,给你虚假的信心。

最后提醒一句:眼图是工具,不是目的。你的目标是让系统稳定工作,不是让眼图好看。有时候眼图稍微差一点,但系统能跑,那就够了。


公众号:蓝海资料掘金营,微信deep3321