眼图关键参数:读懂了它们,PCIe调试事半功倍

做PCIe调试这些年,我最深的体会就是:眼图就像信号的生命体征。心跳、血压、体温——换成眼图就是眼高、眼宽、抖动、信噪比和交叉点占空比。你把这五个参数拿捏住了,链路有没有问题、问题出在哪儿,基本就能看个八九不离十。

嗯,咱们一个个说。别一上来就念数据手册,我习惯先讲清楚“这参数到底在说啥”,然后再看怎么用它抓到问题。

眼高:信号电压的“安全余量”

眼高,说白了就是接收端能区分0和1的最小电压差。你想想看,信号传了一路,有损耗有反射,到了接收端眼皮上,“1”的电压可能已经掉下来不少,“0”的电压也可能被抬上去。眼高就是这两者之间还剩多少“可辨识的空间”。

PCIe规范要求(以Gen3为例): 在TP1测试点处,眼高最小值通常为80mV。但我在调试中遇到过,有的板子眼高只有50mV,接收端的均衡器照样能锁住——不过余量很小,温度一高就丢包。所以我的建议是:至少留20%的余量。

眼高不够,最常见的原因是链路损耗太大。比如走线过长、过孔结构不好、连接器引脚电感大——这些都会吃掉眼高。我记得有一次调试一个12层板,眼高死活只有60mV。查了半天,发现是参考层被切割了,信号回流路径被切断。改了一版参考层,眼高直接跳到95mV。所以排查眼高问题时,先看物理层的完整性。

眼宽:定时容差的“宽度标尺”

眼宽描述的是“信号在最佳采样时刻两侧还能容忍多少时间偏移”。说白了,就是眼图在水平方向上“眼睛”张开的宽度。眼宽越宽,时钟抖动对你的威胁就越小。

PCIe Gen3要求眼宽不低于0.8UI(单位间隔)。举个例子,8GT/s速率下1UI = 125ps,眼宽就得至少100ps。我见过一些板子,眼宽只有0.65UI,接收端的CDR(时钟数据恢复)勉强能锁定,但误码率标的很难看。后来发现是PLL的环路带宽设置有问题,导致低频抖动大。换了一款PLL芯片,眼宽就干到0.85UI了。

小技巧: 看眼宽的时候,别忘了结合被测码型的“长连续相同码”来思考。长0长1之后首次跳变往往会产生最大的ISI(码间串扰),这些跳变对应的眼图拐角最容易塌陷。我习惯在测试时调用专门的“最坏眼图”模板。

抖动:信号边沿的“晃动幅度”

抖动可以分成两大类:随机抖动(RJ)和确定性抖动(DJ)。RJ是热噪声引起的,符合高斯分布,没法完全消除;DJ是由电源噪声、串扰、码间串扰等确定的周期性抖动。PCIe规范里通常看总抖动(TJ)和相位抖动。

为什么会特别关注抖动?因为抖动直接吃眼宽。抖动越大,眼图水平开口越小,接收端采样出错的概率直线上升。我记得刚入行时,有个项目在Gen2速率下眼图非常漂亮,一上Gen3就出误码。我测了一圈发现抖动从10ps窜到了45ps。最后定位到是SATA和PCIe共用了一路电源,SATA写盘时的大电流毛刺耦合到了PCIe时钟线上。加了LC滤波,抖动降回18ps。

常见抖动成分及其典型来源
抖动类型表示典型来源特点
随机抖动RJ (σ)热噪声、散粒噪声高斯分布,无界
确定性抖动DJ (峰峰值)串扰、电源噪声、ISI有界,可重复
周期性抖动PJ开关电源纹波、时钟谐波单一频率或基频
数据相关抖动DDJISI、码型效应与前一位码相关
踩坑提醒: 我曾经在Gen4工程中只测了随机抖动就以为够用了,结果某次量产测试发现部分板子在高低温下批量通不过。复查发现电源噪声带来的确定性抖动在低温时变大,原来那个PLL的温度系数太差。所以我的经验是:抖动分离(RJ/DJ分离)一定要做,不能只看TJ。

信噪比:信号能量与噪声的比值

PCIe眼图里的信噪比(SNR)通常指的是“信号幅度均值”与“噪声标准差”之比。要注意,这里噪声既包含幅度方向的噪声,也包含了抖动带来的等效噪声。实际测量中,我们一般用眼图垂直开度的中值作为信号强度,用垂直亮度的波动作为噪声。

信噪比低于某个阈值,接收端均衡器再牛也拉不回来。我习惯关注一个指标:眼图高度中心处的垂直噪声密度。如果这个噪声超过信号振幅的10%,基本就要考虑加CTLE(连续时间线性均衡)级数或调整均衡强度。

经验数值: PCIe Gen3在TP2处,良好的信号信噪比应 > 15dB(线性比约5.6)。一旦低于10dB,哪怕眼高在规范内,也会出现偶发的突发误码。我在一次显卡测试中遇到过,替换了一个不同品牌的参考时钟晶振,SNR从20dB掉到11dB,原因是晶振的相位噪声地板高了5dB。换回原厂,SNR回归17dB。

交叉点占空比:决定“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错误、上升/下降不匹配
眼图关键参数知识体系 眼图质量 信号完整性综合指标 眼高 (Eye Height) 电压安全余量 眼宽 (Eye Width) 定时容差范围 抖动 (Jitter) 边沿时间不稳定性 信噪比 (SNR) 信号与噪声幅度比 交叉点占空比 (Crossing Duty Cycle) 差分信号过零点对称性 幅度维度关键 影响接收判断余量 时间维度关键 影响最佳采样点 五个参数互相关联,调试时需综合判断

这五个参数不是孤立的。抖动吃眼宽,眼宽小了又加重抖动;信噪比差的信号眼高也容易塌。调试时要综合看,不能只盯着一个指标。我个人习惯是先扫一遍快速眼图,看哪个参数最先碰线,然后顺着这个方向往下挖。比如眼高碰线,就查损耗;眼宽碰线,就查抖动源;交叉点占空比偏,就查TX均衡。

好了,这一节的内容就是这些。你把这五个参数记牢了,PCIe眼图调试的基本功就算打扎实了。以后看到眼图,不再只是“好”或“不好”的感觉,而是能从参数层面给出准确判断——这才是调试该有的样子。