眼图基本原理
眼图这东西,说白了就是把一串数字信号反复叠在一起看。你想想看,每个比特的波形都差不多,但因为有抖动、噪声、损耗,每次跳变的位置和幅度会有点不一样。示波器把这些波形全部累积显示,中间就会睁开一个像眼睛一样的区域——嗯,眼图的名字就是这么来的。
我第一次调眼图是十年前做DDR3的时候。当时板子跑800MT/s,总觉得时序裕量够大,结果眼图一测,眼睛几乎闭上的。那之后我就养成了习惯:任何高速接口,先把眼图拉出来看看,心里才有底。
眼图是怎么形成的?
眼图的形成过程其实不复杂。示波器用时钟恢复单元(CDR)锁定信号的时钟,然后把每个UI(Unit Interval,单位间隔)的波形触发叠加到同一个屏幕上。因为信号的比特流是随机的,0和1出现的位置也不固定,但跳变沿的位置相对稳定,经过成千上万次叠加后,中间区域自然就没波形经过——那就是眼睛睁开的区域。
我习惯用下面的结构图来理解眼图的形成逻辑:
你看,上面这张图把整个过程串起来了。发射端送出比特流,经过信道后,示波器把每个UI的波形不断叠加,最终形成眼图。然后在眼图上,我们能读出四个最关键的参数:眼高、眼宽、抖动、占空比失真。
眼高 —— 电压裕量
眼高就是眼睛张开的高度,单位通常是mV。它代表接收端能分辨0和1的电压差。眼高越低,接收器越容易误判。
我记得有次调一个SATA接口,眼高只有120mV,手册要求最低200mV。一开始以为是驱动电流不够,后来发现是PCB上有一段过孔阻抗突变导致回损。换了层叠结构后眼高恢复到280mV。
眼宽 —— 时间裕量
眼宽是眼睛在水平方向上张开的宽度,单位是ps。它代表接收端采样点的有效时间窗口。眼宽越窄,接收器的建立/保持时间裕量越小。
眼宽和抖动有直接关系。抖动越大,眼宽越小。我曾经帮一个客户定位USB 3.0眼图闭合的问题,最后发现是电源纹波耦合进了时钟,产生了周期抖动。换了一颗LDO后眼宽从0.25UI恢复到了0.45UI。
| 参数 | 定义 | 典型失效阈值 | 常见原因 |
|---|---|---|---|
| 眼高 | 眼睛在垂直方向的开度 | < 200 mV | 衰减、反射、串扰 |
| 眼宽 | 眼睛在水平方向的开度 | < 0.3 UI | 抖动、占空比失真 |
| 抖动 | 边沿位置的不确定性 | > 0.2 UI | 时钟噪声、电源噪声、EMI |
| 占空比失真 | 高电平和低电平脉冲宽度不等 | > 5% | 驱动不对称、上升/下降时间不匹配 |
抖动 —— 边沿的随机偏移
抖动是眼图分析里最让人头疼的。说白了,就是信号跳变的时刻不固定。抖动分为随机抖动(RJ)和确定性抖动(DJ)。
- 随机抖动:源于热噪声、散粒噪声等,符合高斯分布,没办法完全消除。
- 确定性抖动:有固定来源,比如时钟谐波、串扰、占空比失真,可以分析并优化。
测量抖动时,我习惯用TIE(时间间隔误差)的直方图。如果出现双峰或多峰,多半是确定性抖动在捣乱。
占空比失真 —— 高宽不对称
占空比失真(Duty Cycle Distortion, DCD)指的是1的脉冲宽度和0的脉冲宽度不一样。在眼图上,你会看到交叉点( crossover point )往上或往下偏移。标准眼图的交叉点应该在50%幅度处。如果交叉点明显偏移,那就是DCD在作怪。
常见的成因:驱动器的上升时间和下降时间不一致,或者输出级的共模电平不对。我曾经遇到过一款时钟缓冲器,datasheet上写着占空比误差±2%,结果实测超过8%。后来发现是电源去耦电容放得太远了,高速开关时电压瞬间跌落,导致P/N管驱动能力不平衡。
怎么改善?
- 在驱动端加预加重或均衡。
- 调整输出级的偏置电阻。
- 如果DCD来自外部时钟,考虑用PLL重新整形。
好了,这一节我把眼图的形成过程和四个核心参数梳理了一遍。在实际测试中,你拿到眼图先别急着读数——先确认示波器触发和CDR设置是否正确,再调整垂直和水平尺度让眼睛尽可能放大。记住,好的眼图是调试出来的,不是测出来的。