眼图参数详解:眼高、眼宽、抖动、交叉点、占空比失真
各位工程师朋友,欢迎来到第二章。咱们上一章聊了眼图的基本概念,说白了就是高速信号在示波器上叠加出来的那个“眼睛”。但光会看图片还不行,得懂里面的具体参数怎么测、怎么算、怎么判合规。这一章我就把眼图里最重要的几个参数掰开揉碎讲清楚。
眼高(Eye Height)——信号质量的“天花板和地板”
眼高,就是你那个“眼睛”在垂直方向上的开度。它反映的是信号“1”电平和“0”电平之间的净空余量。
我一般管它叫信号的垂直净空。你想想看,接收器要判断一个比特是1还是0,总得有个阈值吧。眼高越大,逻辑判决的余量就越充裕,抗噪声能力就越强。
计算公式其实不复杂:眼高 = 眼图中心区域最小1电平 - 最大0电平。实际测量时,示波器会在眼图中央取一个特定的时间窗口(通常是0.2UI宽度),然后统计该窗口内电压幅度的统计最小值。
关键点:
- PCIe Gen3 / Gen4 的眼高要求通常在 ≥ 100 mV(具体随协议版本和链路宽度有差异)
- 眼高太小 → 比特误码率(BER)飙升
- 影响眼高的因素:发射端去加重、通道损耗、串扰、反射
我记得有一次调试 Gen4 的 Retimer 芯片,眼图测出来眼高只有 65 mV。信号看起来也能通,但链路经常掉训。后来一查,是通道上有一段过孔的阻抗不连续,反射把水平眼高削掉了近三分之一。嗯,那次之后我对 PCB 走线每段阻抗都卡得很严。
眼宽(Eye Width)——时间窗口的“安全区”
眼宽就更好理解了:眼睛在水平方向上能睁多大。它代表接收器采样时刻的可用时间余量。
为什么有眼宽这个概念?因为实际数据信号不是理想方波,它有上升时间、下降时间,还有各种抖动。接收器只能在眼图中央的某个时间窗口内采样。眼宽越宽,接收器的采样容差就越大。
测量时也是取眼图中央一个垂直窗口(比如 0V 附近 ±50mV),统计交叉点之间的水平宽度。单位通常是 UI 或者皮秒。
| 参数 | PCIe Gen3 典型要求 | PCIe Gen4 典型要求 |
|---|---|---|
| 眼宽 | ≥ 0.4 UI | ≥ 0.3 UI |
| 眼高 | ≥ 100 mV | ≥ 100 mV(差分) |
| 抖动(TJ) | ≤ 0.3 UI p-p | ≤ 0.25 UI p-p |
你想想看,Gen4 的数据速率是 16 GT/s,一个 UI 只有 62.5 ps。眼宽要能到 0.3 UI,那就是差不多 18.75 ps。这点时间窗口,比一个普通晶振的周期抖动都小。所以我们做 PCB 设计时,时钟路径上的总抖动预算特别紧张。
抖动(Jitter)——信号时序的“抖动病”
抖动这个话题,我可以单独写三章。但这一章咱们先定个性:抖动就是信号边沿相对于理想位置的时间偏移。
抖动分两大类:
- 随机抖动(RJ):正态分布,无界,来自热噪声、1/f 噪声等。理论上无法彻底消除。
- 确定性抖动(DJ):有界,可以分离出具体来源。比如:
- 数据相关抖动(DDJ)——码型依赖的 ISI
- 周期抖动(PJ)——来自电源噪声或串扰的周期性干扰
- 占空比失真(DCD)——下一小节专门讲
总抖动(TJ)通常按 10⁻¹² BER 外推计算。说白了,你测到的抖动 RMS 乘以一个 K 因子(一般是 14),加上 DJ 的峰峰值,就得到总抖动的估算值。
避坑指南:我曾见过一个团队测 Gen3 眼图,抖动一直在 0.4 UI 附近徘徊。他们换了高精度示波器,重配了时钟恢复 PLL 带宽,才发现问题出在测试夹具的 SMA 连接器松动。所以做抖动分析时,先把测试通路本身的抖动底噪搞清楚。
交叉点(Crossing Point)——眼图的“腰线”
交叉点,也叫眼图的交叉电平,通常定义为上升沿和下降沿交汇处的电压值。在差分信号中,交叉点决定了信号的共模电平对称性。
理想的差分信号,交叉点应该在 0V 附近(对于 LVDS 或 CML 电平)。如果交叉点偏上或偏下,说明上升沿和下降沿的传输延迟不匹配,或者驱动器的输出阻抗不对称。
PCIe 规范对交叉点的要求非常明确:差分电压交叉点必须在 −0.05V 到 +0.05V 之间(参考地),且占空比需要控制在 50% ± 5%。
交叉点偏移太多,会导致接收器的采样点偏移,恶化眼宽。我还记得一个 Bug:某款 SerDes 芯片在高温下交叉点从 0V 漂到 +0.12V,结果链路长包 CRC 错误率骤增。后来发现是输出级 PMOS 和 NMOS 的温漂系数不同,硬件上补偿了下拉电阻才搞定。
占空比失真(Duty Cycle Distortion, DCD)
DCD 本质上就是时钟或数据信号高电平持续时间和低电平持续时间不相等。在眼图上,它会表现为眼图中央的“横线”上下不对称,同时交叉点偏移。
DCD 的来源主要有两个:
- 发射器本身的占空比误差(比如时钟 PLL 输出不对称)
- 接收器端的阈值偏移(比如比较器参考电压不精确)
如何测量 DCD?很简单:取多个周期的上升沿到下降沿时间,统计平均值,然后看 1 比特宽度和 0 比特宽度之差。如果差值的值超过 5% UI,基本就算 DCD 超标了。
我个人的经验:调试 DCD 问题时,先用一个简单的 0101 交替码型测一下。如果 DCD 明显,再用 PRBS31 测看是否更差。因为高频模式下,通道损耗会加重 ISI,DCD 可能被掩盖。
眼图参数知识体系结构
说了这么多,我把这几个参数的关系画成一张图,方便你理解它们之间的逻辑关联:
这张图里我把几个参数串起来了。核心就是眼图本身,往下分垂直方向(眼高、交叉点)和水平方向(眼宽、抖动)。抖动里 RJ 和 DJ 是两大主干,而 DCD 是 DJ 的一个子类。
实际测试时的测量步骤
给你一个我常用的测试顺序,省得你每次对着示波器发愣:
- 连接设备:DUT 输出端接 SMA 电缆到示波器,差分用 50Ω 端接
- 设置时钟恢复:PCIe 使用 PLL 型 CDR,带宽设为数据率的 1/1667(Gen3 约 10 MHz)
- 捕获波形:至少 1 百万个 UI,才能统计到 10⁻¹² BER 级别的抖动
- 打开眼图模板:示波器自动叠加生成眼图,叠加个数建议 ≥ 5000
- 测量参数:按眼高→眼宽→交叉点→抖动的顺序读值
- 对比合规限值:见上表
// 以 Keysight DSO 的自动化眼图测量脚本为例
EYE:MEASure:EYEHeight? // 返回眼高值,单位 V
EYE:MEASure:EYEWidth? // 返回眼宽值,单位 s
EYE:MEASure:CROSSing? // 返回交叉点电平,单位 V
JITTer:MEASure:TJ? // 返回总抖动 @ 1e-12 BER,单位 s
JITTer:MEASure:DCD? // 返回占空比失真,单位 s
注意,以上命令是 GPIB 控制方式。实际操作时,你也可以用示波器前面板的“眼图分析”菜单直接导出读数。
避坑指南:测量眼宽时一定要确认示波器的带宽足够。测量 Gen4 信号需要至少 16 GHz 带宽的实时示波器,最好是 20 GHz 以上。带宽不够,眼宽会测量偏大,给你虚假的安全感。我曾经就吃过这亏,用 13 GHz 示波器测 Gen4,眼宽显示 0.35 UI,换到 25 GHz 仪器一测只有 0.28 UI,差点超限。
五个参数的内在关联
说了这么多,你可能会问:这五个参数是不是独立的?并不是。我给你捋一下:
- 抖动增加 → 眼宽收缩:这是最直接的因果关系
- DCD 增大 → 交叉点偏移 → 眼图不对称 → 单侧眼高降低
- 眼高和眼宽共同决定眼图面积:面积越小,误码率越高
- 交叉点偏移也会被 DCD 放大:两者常常一起出现
所以说,调信号质量时,你得盯着眼高、眼宽、抖动三个核心指标。交叉点和 DCD 更像是“诊断症状”,帮你定位问题根因。
一个小技巧:PCB 设计阶段可以用 Siwave 或 HyperLynx 对通道做眼图仿真,提前预估眼高和眼宽。仿真模型里要给出发射端和接收端封装模型,否则结果偏差会很大。我常用的做法是:先仿出裸通道的 S 参数,再导入 ADS 加 IBIS-AMI 模型跑眼图。
好了,这一章的内容就是这些。五个参数你记牢了,后续的合规测试模板和调试方法才会用得顺手。下次上课,我们就要开始用这些参数去套 PCIe 的眼图模板了——别漏了知识点。