4. 眼图模板与合规性测试:认识眼图模板(Mask),如何判断信号是否通过一致性测试?

眼图模板,英文叫 Eye Mask,也有人叫它眼图掩模。说白了,它就是一张画在眼图上的“合格证”边界。信号的眼图必须躲开这些区域,才算通过测试。

我刚开始接触高速信号测试时,觉得眼图看着漂亮就行了。后来被客户退回一批板子,理由就是“眼图模板违规”。那次教训让我明白——漂亮没用,合规才行。

4.1 什么是眼图模板?

眼图模板是一组定义在电压和时间轴上的禁区。这些区域通常位于眼图的中心、上下眼皮和交叉点附近。信号波形一旦侵入这些区域,就被判定为不合格。

模板的形状和尺寸,由对应的接口标准定义。比如 USB 3.2、PCIe 4.0、HDMI 2.1,每个标准都有自己的模板参数。

标准 模板区域 关键参数
USB 3.2 Gen2 中心菱形 + 上下矩形 眼高 ≥ 100 mV,眼宽 ≥ 0.3 UI
PCIe 4.0 六边形模板 眼高 ≥ 175 mV,眼宽 ≥ 0.4 UI
HDMI 2.1 梯形 + 矩形组合 眼高 ≥ 200 mV,眼宽 ≥ 0.5 UI
1000BASE-T 菱形模板 眼高 ≥ 400 mV,眼宽 ≥ 0.6 UI

你想想看,这些模板其实就是在告诉你的信号:“这里你不能进,那里你也不能进。” 信号一旦越界,就说明噪声、抖动或码间干扰超标了。

4.2 模板测试的核心逻辑

模板测试不是拿一个眼图去比划一下就行。它有一套完整的流程。我个人习惯把流程分成三步:

  1. 采集眼图:用示波器捕获足够多的比特,通常要求 ≥ 1 MUI(百万单位间隔)。
  2. 叠加模板:示波器根据所选标准,自动在眼图上叠加对应的模板区域。
  3. 判定结果:统计侵入模板的采样点数量。如果超过标准允许的阈值,就判定失败。

这里有个关键点——不是所有侵入都算失败。标准允许一定比例的“误码容忍度”。比如某些标准允许模板内采样点占比 ≤ 5×10⁻⁵。也就是说,100 万个点里可以有 50 个点在模板内。

核心概念:模板测试的判定依据是“侵入概率”,而不是“有没有侵入”。只要侵入概率低于标准阈值,就算通过。

4.3 模板测试的常见陷阱

我在项目中遇到过好几次“假失败”的情况。眼图看着没问题,但测试就是报错。后来发现是以下几个原因:

  • 触发设置不对:示波器触发点没对准数据眼图的中心,导致模板位置偏移。
  • 采样点数不足:采集的比特数太少,统计结果不具代表性。
  • 模板版本错误:同一个标准有多个修订版,模板参数可能不同。比如 PCIe 3.0 和 PCIe 4.0 的模板就不一样。
  • 示波器带宽不够:带宽不足会滤除高频分量,让眼图看起来更“胖”,反而容易侵入模板。

注意:我曾经用一台 8 GHz 示波器去测 10 Gbps 的信号,结果眼图模板测试一直失败。换成 16 GHz 示波器后,一次通过。带宽不够时,眼图边缘会变钝,模板侵入率会虚高。

4.4 如何手动计算眼高和眼宽?

除了示波器自动测试,有时候你也需要手动估算。尤其是在调试阶段,我想快速知道眼图裕量够不够。

眼高和眼宽的定义很简单:

  • 眼高:在眼图中心位置(时间轴 0.5 UI 处),上下两条轨迹之间的电压差。
  • 眼宽:在眼图中心位置(电压轴 0 V 处),左右两条轨迹之间的时间差。

手动估算时,我一般会看眼图中心的“开口”大小。开口越大,裕量越大。如果开口接近模板边界,那就得小心了。

小技巧:在示波器上打开“直方图”功能,把眼图中心的电压分布和时间分布拉出来。直方图的 3σ 范围,基本就是眼高和眼宽的实用边界。

4.5 模板测试的完整流程

下面这张图是我自己总结的模板测试流程。每次做合规测试前,我都会按这个步骤走一遍。

眼图模板测试流程 选择测试标准 配置示波器参数 采集 ≥ 1 MUI 数据 叠加模板并统计 侵入率 达标? 通过 (PASS) 失败 (FAIL) 关键检查项 • 触发点是否对准眼图中心 • 示波器带宽是否足够 • 模板版本是否匹配标准

4.6 模板测试的判定标准

不同标准的判定阈值差异很大。我整理了几个常见接口的判定参数,方便你对照:

接口标准 数据速率 模板类型 侵入率阈值 眼高要求
USB 3.2 Gen1 5 Gbps 菱形 ≤ 1×10⁻⁴ ≥ 100 mV
USB 3.2 Gen2 10 Gbps 菱形 + 矩形 ≤ 5×10⁻⁵ ≥ 100 mV
PCIe 3.0 8 GT/s 六边形 ≤ 1×10⁻⁴ ≥ 175 mV
PCIe 4.0 16 GT/s 六边形 ≤ 5×10⁻⁵ ≥ 175 mV
HDMI 2.0 6 Gbps 梯形 ≤ 1×10⁻⁴ ≥ 200 mV

4.7 模板测试失败后的调试思路

如果测试失败,别急着改板子。先看看失败的原因是什么。我一般按这个顺序排查:

  • 看侵入位置:侵入发生在眼图中心?还是上下眼皮?中心侵入说明噪声或抖动大;眼皮侵入说明上升/下降时间有问题。
  • 看抖动成分:用抖动分解功能,看看是随机抖动大,还是确定性抖动大。随机抖动大,可能是电源噪声或参考时钟问题。确定性抖动大,可能是串扰或阻抗不连续。
  • 看通道损耗:如果信号经过长走线或连接器,损耗可能把眼图压扁了。这时候需要加均衡器(CTLE/DFE)。

调试建议:我曾经遇到一个 PCIe 4.0 的失败案例,侵入位置全在眼图中心。后来发现是参考时钟的相位噪声超标。换了一个低相噪的振荡器后,眼图开口直接大了 30%。

4.8 模板测试的自动化

在产品量产阶段,手动测眼图太慢了。这时候需要用自动化脚本。示波器厂商通常提供对应的 API,比如 Keysight 的 89600 VSA 或 Tektronix 的 DPOJET。

下面是一个简单的 Python 脚本思路,用于控制示波器做模板测试:

# 伪代码示例:示波器模板测试自动化
import pyvisa

# 连接示波器
rm = pyvisa.ResourceManager()
scope = rm.open_resource('TCPIP0::192.168.1.100::inst0::INSTR')

# 设置模板标准
scope.write(':MASK:STANDARD "USB3.2_GEN2"')

# 启动采集
scope.write(':ACQuire:STATE ON')
time.sleep(2)

# 读取模板测试结果
result = scope.query(':MASK:STATistics?')
print("模板测试结果:", result)

# 判断是否通过
if 'PASS' in result:
    print("信号通过合规性测试")
else:
    print("信号未通过合规性测试,请检查眼图")

嗯,这里要注意——自动化测试时,一定要先确认示波器的触发和采样设置正确。否则脚本跑得再快,结果也是错的。

4.9 总结一下

眼图模板测试,说白了就是给信号画个框,看它能不能老老实实待在框里。框的大小和形状,由接口标准决定。测试的关键在于:

  • 选对标准模板
  • 配好示波器参数
  • 采集足够的数据量
  • 正确解读侵入率

我做了这么多年 SI,发现很多工程师把模板测试想得太简单——以为只要示波器报 PASS 就完事了。其实不然。你得理解模板背后的物理意义,知道为什么失败,才能从根本上解决问题。