2. 眼图基本参数:眼高、眼宽、抖动、上升时间
拿到一张眼图,第一件事不是看它好不好看,而是看那几项硬参数。说白了,眼图就是信号质量的“体检报告”,眼高、眼宽、抖动、上升时间,每一项都对应着你系统里某个环节的健康状况。我带新人时经常说:把这几项参数吃透了,bring-up 就成功了一半。
为什么这么讲?因为眼图不是玄学,理论上每个参数都能换算成误码率。下面我一个个拆开讲,顺便聊聊我当年踩过的坑。
眼高:电压裕量的命脉
眼高,通俗讲就是眼睛睁开时上下两片“眼皮”之间的距离,单位通常是 mV。它代表接收端能分辨高低电平的电压裕度。如果眼高太小,哪怕是一丁点噪声,就会导致误判。
我记得在上一款 12.5Gbps 的 SerDes 项目里,眼高只有 80mV。协议要求 100mV,所有人都在追时钟抖动,唯独没人看电源噪声。后来我用示波器测了一下,发现 LDO 输出的高频纹波刚好落在信号跃迁频段,替换了一颗去耦电容后眼高直接拉到 140mV。所以别小看眼高,它经常暴露电源完整性的问题。
| 参数 | 典型高速链路要求 | 常见不合格原因 |
|---|---|---|
| 眼高(Eye Height) | ≥ 100 mV(PCIe Gen3) | 电源噪声、阻抗失配、码间干扰 |
| 眼宽(Eye Width) | ≥ 0.5 UI | 抖动过大、时钟恢复环性能差 |
| 上升时间(Rise Time) | 20% ~ 80% 占 UI 的 ≤ 0.3 | 驱动能力不足、传输线损耗过大 |
眼宽:时间窗口能有多大
眼宽是眼睛在时间轴上张开的宽度,单位是 ps 或 UI。它决定了接收时钟能在多大范围内安全采样。眼宽太小,意味着你的数据采样的时间预算快被抖动用尽了。
实际测试中,我建议用直方图模式看眼宽的两个边界——左边界和右边界通常是交叉点附近的抖动累积。我曾经遇到过一块板卡,眼宽只有 0.35 UI,远低于 0.5 UI 的及格线。排查发现是 REFCLK 用了廉价的晶振,相位噪声导致 PLL 输出抖得太厉害。换了一颗高稳晶振,眼宽直接升到 0.55 UI。
抖动:看不见的时间凶手
抖动是信号边沿在时间上的随机偏移。它分两大类:随机抖动(RJ)和确定性抖动(DJ)。RJ 是高斯分布,来自热噪声;DJ 有周期性抖动、数据相关抖动、占空比失真等。你想想看,抖动就像钟表秒针有时快有时慢,累计到一定程度,数据采样就会出错。
测抖动不能只看峰峰值,还要看 RMS 值和分离出的 RJ/DJ 分量。我习惯用示波器的“抖动分解”功能,先看总抖动(Tj @ BER = 1e-12),再拆开看 DJ 里有没有明显的周期性成分。有一次碰到一个 8MHz 的周期性抖动,找了好久才发现是隔壁开关电源的开关频率耦合过来的。
- 随机抖动 (RJ): 无界,服从高斯分布,用 RMS 表示。
- 确定性抖动 (DJ): 有界,可进一步分为周期性、数据相关、占空比失真。
- 总抖动 (Tj): 通常按 BER = 1e-12 外推,Tj = 14 × RJ_rms + DJ。
上升时间与下降时间:边缘的陡峭程度
上升时间是指信号从 20% 电平跃升到 80% 电平所需的时间,下降时间同理。太慢了,眼图闭合就快;太快了,电磁干扰又出来找你麻烦。实际上,你需要权衡——满足时序要求的前提下,尽量让上升/下降时间匹配。
我通常用 20%-80% 的阈值,有的标准用 10%-90%,但不要混用比较。在板级调试中,上升时间变慢常意味着驱动过弱或传输线有损耗。记得有一次,DDR 总线的上升时间比标称值大了 30%,查了阻抗控制才发现走线层有一段用错了材质。把那一小段 PCB 改回来,上升时间就正常了。
四个参数怎么协同看?
单独看每个参数都能发现问题,但更关键的是它们之间的关联。比如眼高小 + 抖动大 = 误码率一定高。再比如上升时间慢 + 眼宽窄 = 你的信号在垂直方向爬升时占用了太多水平时间。
我个人习惯把参数记在一个表格里,每次调试前后对比。
| 调试前 | 眼高 | 眼宽 | 抖动 (Tj) | 上升时间 |
|---|---|---|---|---|
| 原始状态 | 95 mV | 0.48 UI | 35 ps | 65 ps |
| 调试后 | — | — | — | — |
| 改善去耦 | 138 mV | 0.51 UI | 30 ps | 60 ps |
| 更换晶振 | 140 mV | 0.56 UI | 22 ps | 62 ps |
嗯,这里要注意:不同测试条件下眼图参数会有漂移。比如温度升高,眼高可能会降低 5~10%;频率越高,眼宽越窄。所以我建议在多个 corner 下采样,取最差情况作为验收标准。
- 眼高 = 电压裕度 → 检查电源/噪声/通道损耗
- 眼宽 = 时间裕度 → 检查时钟质量/抖动
- 抖动 = 精度杀手 → 分离 RJ/DJ 找根源
- 上升/下降时间 = 信号形状 → 匹配驱动与阻抗