2. 眼图的基本概念与参数

2.1 眼图是怎么“画”出来的?

很多人第一次看到眼图,会觉得它像一只睁开的眼睛。其实说白了,眼图就是把一串数字信号的每一位波形,按比特周期叠在一起,然后用余晖或亮度显示出来的结果。你想想看,如果信号质量好,这些波形会完美地重合,形成一只清晰的“眼睛”;如果信号有噪声、抖动、反射,这只眼睛就会眯起来,甚至闭眼。

我在项目中调试过一个DDR3的板子,第一次上示波器看到眼图几乎完全闭合,当时心里一凉。后来发现是PCB走线阻抗不连续造成的反射,调整了端接电阻后,眼睛才慢慢睁开。嗯,眼图真的是检验信号质量的“照妖镜”。

小提示: 眼图不是在时域上单独看某一个比特,而是把成千上万个比特周期叠加起来。叠加得越多,眼图越能反映信号的统计特性。

2.2 眼图形成原理——以RGMII为例

RGMII使用DDR(双数据速率)采样,时钟沿在数据中央翻转。我们抓取TX_CLK和TXD[3:0]信号,用时钟的上升沿和下降沿分别采样数据。在示波器上设置“余晖”模式,触发在时钟边沿,然后让数据波形持续累积。

具体来说:

  1. 示波器把每个UI(Unit Interval,单位间隔)的波形切出来。
  2. 把这些波形水平对齐、垂直重叠。
  3. 不同比特的跳变沿会形成“眼图边界”,稳定电平区域形成“眼高”。

我习惯用示波器采集至少10000个UI,这样抖动和噪声的统计分布才会稳定。曾经遇到一个案例,只采了1000个UI,眼图看起来很好,但量产时偶尔出现误码——其实就是采样点数不够,把低概率事件漏掉了。

核心公式: 眼图 = 波形叠加 × 余晖时间。余晖时间越长,眼图越“实”,但也需要示波器有足够的内存深度。

2.3 眼图关键参数详解

下面这几个参数,是我在调试RGMII延时校准时每天都在看的。你可以对照着示波器屏幕上的眼图,一个一个去理解。

参数 定义 我的实战经验
眼高(Eye Height) 眼图垂直开口的幅度,单位mV。高低电平分界线之间的最小距离。 RGMII要求眼高≥200mV(3.3V电平)。低于这个值,接收器很难正确判0/1。
眼宽(Eye Width) 眼图水平开口的宽度,单位ps。数据采样有效窗口的时间长度。 我曾经把RGMII的时钟相位调偏了0.5ns,眼宽直接缩了30%,幸亏用眼图定位到了。
抖动(Jitter) 信号跳变沿在时间轴上的偏移,分随机抖动(RJ)和确定性抖动(DJ)。 RJ来自热噪声,DJ来自串扰或电源噪声。我习惯用直方图看抖动分布。
过冲(Overshoot) 信号电平超过稳态高/低电平的幅度,单位mV或%。 过冲超过20%就可能击穿芯片IO。我在RGMII线上加过串联电阻来抑制过冲。
占空比失真(DCD) 高电平宽度与低电平宽度不一致,导致眼图中心偏移。 DCD会让眼图左右不对称,RGMII对时钟占空比要求±5%以内。

2.3.1 眼高——决定噪声容限

眼高直接决定了接收器能不能正确分辨0和1。举个例子:如果发送端输出摆幅是3.3V,但经过传输损耗和反射后,眼高掉到了150mV,那接收器内部的比较器就可能把噪声当成有效信号。我一般留20%的裕量,也就是目标眼高≥240mV。

2.3.2 眼宽——决定采样裕量

眼宽就是接收器可以安全采样的时间窗口。RGMII的UI是2ns(500Mbps DDR),理论上眼宽应该接近2ns。但实际总有抖动——时钟抖动、数据抖动、T skew(时钟与数据间的传输时延差)。我在做延时校准时,会用示波器测眼宽,然后反推需要的TAP值(延时步进)。

2.3.3 抖动——眼图的“时间杀手”

抖动分成两类:

  • 随机抖动(RJ):服从高斯分布,标准偏差σ,峰值-峰值≈14σ(误码率10^-12时)。
  • 确定性抖动(DJ):有界,来自串扰、电源噪声、码间干扰(ISI)。

总抖动 TJ = DJ + 14×RJ(常用双狄拉克模型估算)。我在项目里遇到过RJ很大,查了三天发现是DC-DC噪声耦合到PLL的VCO,后来换了一个低纹波的LDO解决了。

2.3.4 过冲与下冲

过冲是信号跳变时瞬间超过VOH的电平。过冲太大会加速芯片老化,甚至当场挂掉。我记得有一次测试RGMII接口,波形图上看过冲已经达到4.0V(3.3V系统),直接把FPGA的IO烧了。后来我们在驱动端串联了22Ω电阻,过冲降到了10%以内。

警告: 千万不要只看眼图开口大就以为信号完美。过冲和振铃可能隐藏在眼图“眼皮”上方,需要调出示波器的余晖模式,并放大到满垂直刻度才能看到。我曾经因为这个疏忽,导致一块板子在高温箱里反复复位……所以一定要检查眼图边缘的毛刺。

2.4 眼图参数之间的关联

眼高、眼宽、抖动、过冲不是孤立存在的。它们互相影响:

  • 抖动越大 → 眼宽越小 → 采样裕量降低 → 可能误码。
  • 过冲大 → 振铃可能反射回来 → 造成后沿抖动 → 进一步缩小眼宽。
  • 电源噪声 → 同时影响眼高和抖动 → 眼图整体“变胖”或“变矮”。

所以我在做RGMII延时校准时,会先看眼宽够不够,再看眼高,最后检查过冲和抖动。如果眼宽不够,先调整时钟相位;如果眼高不足,排查驱动能力和阻抗匹配;如果抖动大,查电源和参考时钟。

眼图参数关系结构图 眼图 (Eye Diagram) 眼高 (Eye Height) 眼宽 (Eye Width) 抖动 (Jitter) 过冲/下冲 噪声/串扰→ 眼高降低 时钟抖动/Tskew→ 眼宽缩小 电源噪声/反射→ 抖动增大 综合调试:先调眼宽,再调眼高,最后治理抖动和过冲

2.5 总结一下这几个参数的实际用法

做RGMII延时校准时,我一般遵循这个步骤:

  1. 测眼宽:确保眼宽 > 1.5ns(UI的75%),否则采样窗口太小。
  2. 测眼高:确保眼高 > 200mV,否则容易被噪声淹没。
  3. 测抖动峰值(TJ):目标 TJ < 0.3UI(即600ps),同时RJ < 50ps。
  4. 看过冲:过冲 < 15% Vpk,下冲 < 10% Vpk。
避坑指南: 我曾经在调试一块RGMII板时,眼图看起来眼宽够,眼高也正常,但就是随机误码。后来用示波器的抖动分析功能发现,数据信号和时钟信号的抖动不相关,导致采样沿总是撞在数据跳变沿上。解决办法是在PHY芯片内调了时钟延时,直到眼图中心对齐采样沿。所以你看,光看静态眼图还不够,得结合抖动分离去看。

好了,这节的重点就是这些。眼图参数是RGMII延时校准的“体检报告”,每个参数都对应一个具体的物理问题。下一部分我们就要聊怎么用这些参数来指导实际的延时TAP值调整了。