第四章 眼图测量原理:采样、累积与时钟恢复
眼图这东西,说白了就是示波器把一串数字信号的比特挨个叠在一起。你想想,如果示波器的余晖时间够长,每来一个周期就往上叠一笔——叠出来那个图案,就是眼图。我刚开始做信号测试那会儿,总觉得眼图就是看着好看,直到有一次SATA Gen3的链路老是掉速,眼图打开一看,嗯,问题全写在里面了。
4.1 示波器采样与累积——眼图怎么“画”出来的
示波器捕获数字信号,不是一张一张截图,而是持续采样。每次触发后,示波器把当前波形“画”在屏幕上,然后等下一个触发再叠上去。累积的次数越多,眼图越“实”。我个人习惯至少累积64K个UI(Unit Interval)才敢下定论。
关键概念: 眼图是 千百万个比特周期 的叠加结果。不是一次采样,是多次累积。
为什么需要累积?因为信号有随机抖动、码间干扰。单看一个周期,你只能看到那个时刻的电压;累积起来,你才能看到“最差情况”——眼图闭合的边界在哪。
| 参数 | 含义 | 我常用的值 |
|---|---|---|
| 采样率 | 示波器每秒钟采多少个点 | SATA Gen3 建议 > 40 GS/s |
| 存储深度 | 一次捕获能存多少样点 | 至少 10M 点 |
| 累积数量 | 叠加多少次形成眼图 | 64K~256K UI |
| 余晖模式 | 示波器显示亮度的持久性 | 无限余晖或指定时间 |
4.2 时钟恢复机制——眼睛睁开的关键
示波器叠眼图,得先知道比特的“边界”在哪。如果时钟没对准,眼图就糊成一团。这就是时钟恢复(CDR)要做的事。
我记得在调试一个SATA Gen1的老项目时,眼图一直很差。折腾了半天,发现是示波器的CDR带宽设成了标准推荐的2 MHz,但我的测试码流里有个低频抖动成分刚好被滤掉了。换了个宽带宽的CDR模式,眼图瞬间就拉开了。从那以后,我每次测眼图都会先问自己:CDR设置的环路带宽是多少?
常用的时钟恢复算法有两种:
- PLL型CDR:模拟锁相环,带宽固定,适合连续信号。
- FIR型CDR:数字滤波器,可调阶数和带宽,更灵活。
避坑指南: 我曾经在一个SATA Gen3项目中,示波器默认CDR带宽是10 MHz,但实际链路的物理CDR带宽只有2 MHz。结果眼图测出来很好,上系统却不停丢包。后来加了负载板实测才意识到——示波器的CDR必须和接收端的CDR一致,否则眼图就是“假象”。
CDR的工作流程大致如下:
- 从输入的比特流中提取边缘跳变信息。
- 通过环路滤波器产生恢复的时钟。
- 用恢复时钟对数据重新采样。
- 以恢复时钟的参考零点对齐眼图。
你想想,如果恢复时钟的相位不对,相当于眼睛眨错了时间,看到的图案肯定是歪的。
4.3 眼图测量参数——怎么读“眼睛”
眼图叠好之后,示波器会自动算出一堆参数。初学者容易晕,我列几个最关键的:
核心三参数: 眼高、眼宽、抖动。其他参数都是这三个的变形。
| 参数 | 定义 | SATA 要求参考值 |
|---|---|---|
| 眼高 | 眼图垂直开口的电压差 | Gen3 ≥ 120 mV |
| 眼宽 | 眼图水平开口的时间宽度 | Gen3 ≥ 0.35 UI |
| 总抖动 (TJ) | 包含随机抖动和确定性抖动 | Gen3 典型 ≤ 0.25 UI |
| 随机抖动 (RJ) | 高斯分布,随机的 | 一般 < 2 ps rms |
| 确定性抖动 (DJ) | 由码间干扰、串扰等引起 | 一般 < 10 ps |
| 占空比失真 | 高电平与低电平宽度不对称 | < 5% |
4.4 核心流程一图读懂
下面这张图把从采样到得到眼图参数的全流程串起来。注意,CDR恢复时钟的位置是整条链的校准点。
4.5 测量参数的实际判读
拿到示波器报出的眼高、眼宽和抖动,怎么判断链路好坏?我一般按这个顺序:
- 先看总抖动 TJ:如果 TJ 超过 0.3 UI,大概率链路有问题。
- 再看眼宽:眼宽不足时,时序裕量肯定不够,数据容易采样错。
- 然后看眼高:眼高掉到 100 mV 以下,噪声裕量就危险了。
- 最后看 DJ 分量:如果 DJ 占总抖动的比例 > 60%,说明串扰或码间干扰突出,需要查 PCB 走线或连接器。
我的习惯: 不要只看余晖模式下的眼图,记得打开 直方图 看眼图交叉点的抖动分布。我曾经凭余晖判断眼图“不错”,结果直方图显示抖动是双峰的——实际上是两个时钟源在打架。
4.6 几个容易踩的坑
- 模板设置不对: SATA Gen1/Gen2/Gen3 的模板形状和裕量不同。我曾经用 Gen2 模板去卡 Gen3 信号,眼图怎么都过不了,浪费了两天。
- 触发信号抖动太大: 如果示波器的触发源本身就有抖动,叠出来的眼图会“虚胖”。建议用恢复时钟做触发,或者用示波器的 CDR 内部触发。
- 宽带噪声累积: 示波器的底噪也会叠进眼图。高带宽示波器 (20+ GHz) 的噪声通常在 1 mV rms 以上,会影响眼高测量。我通常会在测量前先做 噪声校准,或者用差分探头自带的去嵌功能。
曾经踩过的一个坑: 我在某个项目里用低端示波器 (2.5 GHz 带宽) 测 SATA Gen3 (3 GHz 基频) 的眼图。示波器带宽不够,导致上升沿被平滑,眼高被低估了 30 mV。后来换了 8 GHz 的示波器才看到真实情况。所以,示波器带宽至少是信号速率的 1.5 倍,推荐 2.5 倍以上。
4.7 小结一下
眼图测量,核心就是三点:采样累积得到统计分布,CDR 把时钟位置找对,然后读眼高、眼宽、抖动这三个参数。这三个参数决定了信号能否被正确接收。做硬件测试这几年,我最大的体会就是——别只看数字,要结合眼图形状一起看。一个对称、清晰、裕量足够的眼图,比任何参数都可靠。