眼图基础概念

眼图这东西,说白了就是高速信号的「心电图」。你拿示波器一看,那些上下翻飞的波形叠在一起,就成了一只只「眼睛」。我做了这么多年信号完整性,可以负责任地告诉你——读懂眼图,是调试PHY寄存器的基础功,没有捷径。

1. 眼图的形成原理

眼图怎么来的?其实不复杂。你把示波器设成余晖模式,让它在同一个时间窗口内反复采样。每次采到一个bit的波形,就叠在屏幕上。成千上万个bit叠下来,就会形成一种统计图案。

我记得刚入行时,师傅让我调一个10Gbps的链路。我盯着示波器看半天,只看到一堆乱糟糟的线。他说:「你把时间base设成一个UI,再开余晖,试试看。」——眼睛一下就出来了。

为什么会形成「眼睛」的形状?因为信号在高低电平之间来回跳变。上升沿叠在一起,下降沿叠在一起,高电平段和低电平段也叠在一起。中间那块空出来的区域,就是信号最稳定的地方。你想想看,如果信号质量好,这只眼睛就睁得又大又圆;要是质量差,眼睛就眯成一条缝。

眼图的核心价值:用一个波形图案,直观地告诉你信号的时间裕量和电压裕量还剩多少。眼睛睁得越大,链路越稳。

2. 眼宽 (Eye Width)

眼宽,就是眼睛在水平方向上的开口大小。单位用 ps 或者 UI 来标。它代表了接收端能够正确采样的时间窗口。

我在一个25Gbps的项目中遇到过这样的情况:眼图看着还行,但眼宽只剩0.3个UI了。结果一跑PRBS31,误码率直接飙到1e-9。这就是眼宽不够,数据有效窗口太小,采样点稍微偏一点就撞上码间串扰。

眼宽受什么影响?主要有三个杀手:

  • 码间串扰 (ISI):信道损耗把bit拖长了,前面的bit把后面的bit「挤」变形。
  • 随机抖动 (RJ):热噪声引起的过零点飘移,没有上限。
  • 确定性抖动 (DJ):串扰、电源噪声、阻抗不连续导致的固定偏移。

测量小技巧:眼宽一般在眼图中心交叉点处测量。我个人习惯取两个交叉点之间的水平距离,再减去一个固定的裕量(比如0.1 UI),这样得到的是「可用眼宽」,更贴近实际。

3. 眼高 (Eye Height)

眼高,是眼睛在垂直方向上的张开幅度,单位是 mV。它直接决定了接收端能抗多大的噪声。

我曾经调试一块retimer芯片,眼高只有80mV。接收端的灵敏度假定是50mV,看着好像够用,但实际上PCB上的噪声有40mV。80 - 40 = 40mV,已经低于灵敏度了。结果跑高温测试,误码像下雨一样往下掉。

影响眼高的因素:

  • 信道损耗:高频分量衰减越大,眼高越小。
  • 反射与阻抗不连续:产生振铃,把眼睛的「眼皮」拉下来。
  • 串扰:临近信号耦合过来的噪声,直接压缩眼高。
  • 电源纹波:调制在信号上的低频噪声,让眼皮变厚。

注意:眼高不是越大越好。有些预加重电路会把眼高撑得很大,但代价是功耗和辐射超标。我见过一个案例,为了把眼高从200mV撑到300mV,CTLE的增益调太高,结果低频噪声也一起放大,误码反而更差。

4. 抖动 (Jitter)

抖动,就是信号跳变沿在时间轴上的「晃动」。你想想看,理想的时钟边沿应该像刀切一样整齐,但实际信号总会有些飘移。这个飘移就是抖动。

抖动有个经典公式:总抖动 (TJ) = 随机抖动 (RJ) + 确定性抖动 (DJ)。我每次给团队培训都会强调这个公式——你只有把抖动拆开来看,才能找到根因。

抖动类型 来源 特点 怎么压
随机抖动 (RJ) 热噪声、散粒噪声 高斯分布,无界,RMS表示 降低温度、优化前端放大器
确定性抖动 (DJ) 串扰、电源噪声、ISI 有界,峰峰值表示 改善屏蔽、去耦、均衡
周期抖动 (PJ) 开关电源、时钟耦合 固定频率,谱线明显 去耦、屏蔽、调整频率
码间串扰抖动 (DDJ) 信道带宽不足、反射 与数据pattern相关 CTLE/DFE均衡

嗯,这里要注意一点:随机抖动是无界的。你采样的时间越长,测到的RJ峰峰值就越大。所以很多标准会用「1e-12误码率对应的TJ」来标定抖动容限。我习惯用BERT扫浴盆曲线,直接读TJ@BER=1e-12,这样最准。

5. 上升/下降时间

上升时间,通常指信号从20%翻到80%所需的时间。下降时间反过来。这两个参数直接反映了信号的高频能量。

我在一个112Gbps PAM4的项目里踩过坑:眼图看着不错,但上升时间比标准慢了5ps。结果一跑协议一致性测试,掩码测试直接挂掉。原因是什么?上升时间太慢,符号间干扰加重,眼图的「眼角」位置被拉变形了。

上升/下降时间对眼图的具体影响:

  • 过慢:眼睛变「胖」,眼宽缩小,ISI增加。
  • 过快:过冲变大,电磁辐射超标,还可能引发反射。
  • 不对称:上升快下降慢,眼图中心偏移,导致占空比失真。

我的经验值:对于NRZ信号,上升时间建议控制在0.3~0.5个UI之间。小于0.2 UI,SI问题会冒出来;大于0.7 UI,眼宽基本就没了。PAM4的话更严,上升时间要控制在0.25 UI以内。

说到上升时间,还有一个容易忽略的点——测量位置。你探头的地线如果夹得太长,测出来的上升时间会比实际慢。我一般会把地线控制在2mm以内,或者直接用差分探头。

眼图结构及关键参数示意 眼宽 (Eye Width) 眼高 (Eye Height) 抖动 (Jitter) Tr Tf Tr: 上升时间 (20%~80%) | Tf: 下降时间 (80%~20%) | 抖动在过零点测量峰峰值

这张图把眼图的5个核心参数都标在一个画面里了。你盯着它看几分钟,就能在示波器上快速找到对应的位置。我个人习惯在调试时把这张图打印出来贴在工位上——看得多了,眼睛自然就毒了。

又一个坑:上升时间和下降时间不对称的时候,千万不要只调一个沿。我曾经花了三天去调CTLE的boost,想压下降沿的过冲,结果上升沿变得更慢。后来发现是driver的slew rate设置本身就不对称——改寄存器配置,两边一起调,半小时搞定。