眼图基础概念
眼图这东西,说白了就是高速信号的「心电图」。你拿示波器一看,那些上下翻飞的波形叠在一起,就成了一只只「眼睛」。我做了这么多年信号完整性,可以负责任地告诉你——读懂眼图,是调试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以内,或者直接用差分探头。
这张图把眼图的5个核心参数都标在一个画面里了。你盯着它看几分钟,就能在示波器上快速找到对应的位置。我个人习惯在调试时把这张图打印出来贴在工位上——看得多了,眼睛自然就毒了。
又一个坑:上升时间和下降时间不对称的时候,千万不要只调一个沿。我曾经花了三天去调CTLE的boost,想压下降沿的过冲,结果上升沿变得更慢。后来发现是driver的slew rate设置本身就不对称——改寄存器配置,两边一起调,半小时搞定。