眼图模板——信号质量的“标尺”
眼图模板这东西,说白了就是一把“标尺”。
我们用示波器抓出眼图以后,到底怎么判断信号“行”还是“不行”?不能光靠眼睛看个大概吧。工程师说了不算,仪器说了也不算,只有模板说了算。
我做个比喻:它就像是考试的标准答案。你的眼图波形,必须在规定的区域内“合格”。超出一点点,就是不及格。
模板到底是什么?
模板,其实就是一个“禁止区域”。
它定义了在眼图的中心区域,不应该有任何波形轨迹。轨迹侵入这个区域,就说明信号质量有问题。
PCIe 规范对这个模板有非常严格的规定。包括它的形状、大小、位置。
关键点:模板的中心区域,对应的是“眼图张开”的部分。侵入的轨迹越多,眼图越“闭”,误码率越高。
我个人习惯把这东西理解成一个“安全岛”。你在示波器上看到的眼图,就是一堆重叠的波形。这些波形应该绕着安全岛走,而不是从安全岛上穿过去。
模板的几何定义
模板的几何形状,通常是一个六边形或菱形。
它有“电压轴”和“时间轴”两个维度。电压轴定义了信号的“眼睛”睁开多高,时间轴定义了多宽。
| 参数 | 含义 | PCIe Gen3 典型值 |
|---|---|---|
| 眼高 | 信号幅度的垂直开度 | ≥ 100 mV (差分) |
| 眼宽 | 信号的时间水平开度 | ≥ 0.4 UI |
| 抖动 | 总抖动 (TJ) 限制 | ≤ 0.3 UI |
你想想看,眼高不够,说明信号幅度衰减太严重。眼宽不够,说明时钟抖动或数据抖动把有效采样窗口挤没了。
注意:不同 PCIe 代际的模板尺寸不同。Gen1 和 Gen2 的模板相对宽松,Gen3 以后就严格很多。我曾经遇到过用 Gen2 的眼图模板去测 Gen3,结果全是假通过,后来在公司内部 review 时被老大骂了一顿......
通过/失败判据——硬性指标
PCIe 合规测试的眼图判据,主要有三个硬性指标:
- 无波形侵入模板区域:任意轨迹落入模板内部,即判定为失败。
- 眼高满足最小值:测量差值 Vtop - Vbot,必须大于规范阈值。
- 眼宽满足最小值:在眼图中心交叉点测量的水平宽度,必须大于规范阈值。
实用技巧:在示波器上设置一次累积足够多的波形,比如至少 100K 个单位间隔。累积太少,可能漏掉偶尔侵入模板的坏信号。我给个建议:累积 1M UI,虽然慢一些,但结果更可信。
这三个条件必须同时满足。有一个不满足,测试结论就是 FAIL。
实际测试中的常见坑
- 模板位置偏移:示波器没校准好,或者信号直流电平不对,模板和眼图没对上。我曾经看到过让人哭笑不得的结果——眼图很好但模板没对上,导致误判为失败。
- 误码率关联:眼图模板通过不代表误码率一定低。但反过来,眼图模板不通过,误码率基本肯定高。这是一个必要条件,不是充分条件。
- 差分 vs 单端:PCIe 测的一定是差分信号。有些新手会把单端信号套进差分模板里,结果当然很惨。
举个例子:一次失败的分析
我记得有一次项目,我们做 Gen3 的合规测试。眼图看起来挺漂亮,眼高有 120 mV,眼宽有 0.43 UI。但就是有几个零星轨迹,刚好擦入模板的边缘。
结果判定为 FAIL。
当时团队里有人不服气:“就几个点而已”。但规范就是规范。这种情况,说明信号在特定条件下有异常抖动或幅度跳变。我们最后发现是某个电源引脚上的去耦电容没焊好,导致高频噪声偶发性地耦合到了信号上。
嗯,这里要注意:眼图模板判据不放过任何“偶然问题”。你想想看,这种偶然问题在量产中很可能变成必然问题。
测试脚本实例
下面是一段简化思路,展示在自动化测试中如何判断眼图模板:
// 伪代码示例:眼图模板判据
if (waveform_enters_mask) {
test_result = FAIL;
} else if (eye_height < EYE_HEIGHT_MIN) {
test_result = FAIL;
} else if (eye_width < EYE_WIDTH_MIN) {
test_result = FAIL;
} else {
test_result = PASS;
}
这段代码很直白。但实际工程中,测量参数的提取精度、示波器采样率、触发设置等都会影响最终结果。