眼图关键参数:读懂了它们,PCIe调试事半功倍
做PCIe调试这些年,我最深的体会就是:眼图就像信号的生命体征。心跳、血压、体温——换成眼图就是眼高、眼宽、抖动、信噪比和交叉点占空比。你把这五个参数拿捏住了,链路有没有问题、问题出在哪儿,基本就能看个八九不离十。
嗯,咱们一个个说。别一上来就念数据手册,我习惯先讲清楚“这参数到底在说啥”,然后再看怎么用它抓到问题。
眼高:信号电压的“安全余量”
眼高,说白了就是接收端能区分0和1的最小电压差。你想想看,信号传了一路,有损耗有反射,到了接收端眼皮上,“1”的电压可能已经掉下来不少,“0”的电压也可能被抬上去。眼高就是这两者之间还剩多少“可辨识的空间”。
眼高不够,最常见的原因是链路损耗太大。比如走线过长、过孔结构不好、连接器引脚电感大——这些都会吃掉眼高。我记得有一次调试一个12层板,眼高死活只有60mV。查了半天,发现是参考层被切割了,信号回流路径被切断。改了一版参考层,眼高直接跳到95mV。所以排查眼高问题时,先看物理层的完整性。
眼宽:定时容差的“宽度标尺”
眼宽描述的是“信号在最佳采样时刻两侧还能容忍多少时间偏移”。说白了,就是眼图在水平方向上“眼睛”张开的宽度。眼宽越宽,时钟抖动对你的威胁就越小。
PCIe Gen3要求眼宽不低于0.8UI(单位间隔)。举个例子,8GT/s速率下1UI = 125ps,眼宽就得至少100ps。我见过一些板子,眼宽只有0.65UI,接收端的CDR(时钟数据恢复)勉强能锁定,但误码率标的很难看。后来发现是PLL的环路带宽设置有问题,导致低频抖动大。换了一款PLL芯片,眼宽就干到0.85UI了。
抖动:信号边沿的“晃动幅度”
抖动可以分成两大类:随机抖动(RJ)和确定性抖动(DJ)。RJ是热噪声引起的,符合高斯分布,没法完全消除;DJ是由电源噪声、串扰、码间串扰等确定的周期性抖动。PCIe规范里通常看总抖动(TJ)和相位抖动。
为什么会特别关注抖动?因为抖动直接吃眼宽。抖动越大,眼图水平开口越小,接收端采样出错的概率直线上升。我记得刚入行时,有个项目在Gen2速率下眼图非常漂亮,一上Gen3就出误码。我测了一圈发现抖动从10ps窜到了45ps。最后定位到是SATA和PCIe共用了一路电源,SATA写盘时的大电流毛刺耦合到了PCIe时钟线上。加了LC滤波,抖动降回18ps。
| 抖动类型 | 表示 | 典型来源 | 特点 |
|---|---|---|---|
| 随机抖动 | RJ (σ) | 热噪声、散粒噪声 | 高斯分布,无界 |
| 确定性抖动 | DJ (峰峰值) | 串扰、电源噪声、ISI | 有界,可重复 |
| 周期性抖动 | PJ | 开关电源纹波、时钟谐波 | 单一频率或基频 |
| 数据相关抖动 | DDJ | ISI、码型效应 | 与前一位码相关 |
信噪比:信号能量与噪声的比值
PCIe眼图里的信噪比(SNR)通常指的是“信号幅度均值”与“噪声标准差”之比。要注意,这里噪声既包含幅度方向的噪声,也包含了抖动带来的等效噪声。实际测量中,我们一般用眼图垂直开度的中值作为信号强度,用垂直亮度的波动作为噪声。
信噪比低于某个阈值,接收端均衡器再牛也拉不回来。我习惯关注一个指标:眼图高度中心处的垂直噪声密度。如果这个噪声超过信号振幅的10%,基本就要考虑加CTLE(连续时间线性均衡)级数或调整均衡强度。
交叉点占空比:决定“0/1平衡”的关键
眼图上下两个交叉点(过零点)在垂直方向上的位置比例,就是交叉点占空比。理想差分信号中,正负两个信号交叉点应该正好在50%的幅度处。但实际因为芯片输出级的不对称、上升/下降时间不匹配、以及预emphasis设置不当,交叉点会偏移。
交叉点占空比太偏,意味着发送端输出的0/1不对称。你想想看,如果上升沿比下降沿慢很多,那么交叉点就会往上移(正端交叉点>50%),接收端差分检测的共模电平会偏移,严重时会给CDR带来额外的定时戳错误。PCIe规范里通常要求交叉点占空比在45%~55%之间。
我遇到过最坑的一次是FPGA输出给下游PCIe交换器,交叉点只有37%。查了一圈发现是发射端TX对的预emphasis系数配反了,本该加重高频反而削减了高频。调整后恢复正常。
| 参数 | 含义 | PCIe Gen3典型门限 | 常见问题 |
|---|---|---|---|
| 眼高 | 逻辑1与0的电压差 | ≥80mV | 损耗过大、参考层断裂 |
| 眼宽 | 可容忍的采样定时偏移 | ≥0.8UI (100ps@8GT/s) | 抖动大、PLL带宽不合适 |
| 抖动(RJ+DJ) | 边沿时间位置不确定性 | 典型TJ<30%UI | 电源噪声、串扰、时钟质量 |
| 信噪比 | 信号与噪声幅度比(dB) | >15dB | 晶振相位噪声、走线阻抗不连续 |
| 交叉点占空比 | 差分交叉点垂直位置占比 | 45%~55% | TX预emphasis错误、上升/下降不匹配 |
这五个参数不是孤立的。抖动吃眼宽,眼宽小了又加重抖动;信噪比差的信号眼高也容易塌。调试时要综合看,不能只盯着一个指标。我个人习惯是先扫一遍快速眼图,看哪个参数最先碰线,然后顺着这个方向往下挖。比如眼高碰线,就查损耗;眼宽碰线,就查抖动源;交叉点占空比偏,就查TX均衡。
好了,这一节的内容就是这些。你把这五个参数记牢了,PCIe眼图调试的基本功就算打扎实了。以后看到眼图,不再只是“好”或“不好”的感觉,而是能从参数层面给出准确判断——这才是调试该有的样子。