4. 信号完整性测试

信号完整性,圈里人常叫 SI。说白了,就是保证信号从芯片管脚飞出去,经过 PCB 走线,到达另一颗芯片时,还能被正确识别成 0 或 1。

我刚开始做硬件那几年,总觉得只要原理图连对了,板子就能跑。直到有一次调试一块高速背板,DDR 数据线眼图完全闭合,系统跑几分钟就死机。嗯,从那以后,我再也不敢轻视 SI 了。

这一章,我们聚焦四个核心问题:反射、串扰、时序抖动、眼图。每个问题我都会讲清楚原理、测试方法,以及怎么设计测试用例。

核心观点: 信号完整性测试不是“测完就完”,而是要为设计改进提供方向。测试用例必须覆盖最恶劣工况。

4.1 反射:阻抗不连续带来的“回音”

反射的本质,就是信号在传输路径上遇到了阻抗突变。好比声音在峡谷里遇到山壁,会反弹回来。反射回来的信号叠加在原信号上,就会造成过冲、下冲、振铃。

我在项目中遇到过最典型的反射案例,是一块 1Gbps LVDS 时钟板。时钟沿上有个明显的台阶,导致接收端误触发。查了半天,发现是走线从表层换到内层时,过孔的阻抗只有 70Ω,而走线是 100Ω 差分。这就是阻抗不连续。

4.1.1 反射的测试方法

  • TDR(时域反射计): 最直接的工具。向走线发射一个快沿脉冲,观察反射波形的位置和幅度,就能定位阻抗突变点。
  • VNA(矢量网络分析仪): 测 S11 参数,看回波损耗。S11 越小,反射越少。
  • 示波器直接测量: 在接收端测波形,观察过冲百分比和振铃幅度。
反射指标 合格标准 严重告警
过冲幅度 < 10% 信号摆幅 > 25%
振铃幅度 < 5% 信号摆幅 > 15%
阻抗偏差 ±10% 目标阻抗 ±20%
我的习惯: 在 PCB 设计阶段,我会要求仿真工程师给出关键走线的阻抗分布图。测试时直接拿 TDR 结果跟仿真对比,偏差大的地方就是风险点。

4.1.2 反射测试用例设计

  1. 最差拓扑测试: 选择走线最长、过孔最多、分支最多的那条信号。比如 DDR 地址线中的最长一根。
  2. 端接测试: 分别测试串联端接、并联端接、AC 端接三种方案下的反射波形。对比过冲和振铃。
  3. 负载变化测试: 在接收端焊上不同容值的负载电容(2pF、5pF、10pF),观察反射变化。我曾经发现某颗 FPGA 的输入电容比手册大了 3pF,导致整批板子眼图不合格。

4.2 串扰:隔壁走线的“悄悄话”

串扰,就是一条走线上的信号,通过电磁耦合,干扰了旁边的走线。你想想看,高速信号在 PCB 上跑,走线间距就那么几 mil,电磁场肯定会互相串门。

串扰分两种:近端串扰(NEXT)和远端串扰(FEXT)。近端串扰在驱动端测,远端串扰在接收端测。一般来说,远端串扰对时序的影响更大。

4.2.1 串扰的测试方法

  • 主动线-受害线法: 在主动线上加一个快沿信号(比如 1V/ns 的上升沿),在受害线的两端用示波器测噪声幅度。
  • BERT(误码仪)+ 示波器: 让主动线跑 PRBS 码型,受害线跑时钟或数据,观察受害线的抖动增加量。
注意: 串扰测试时,主动线和受害线必须同时工作。我曾经见过有人只测单根线,结果串扰噪声完全没测出来。因为串扰是动态的,静态信号不会产生耦合。

4.2.2 串扰测试用例设计

  1. 最差间距测试: 选择 PCB 上间距最小的平行走线对。比如 BGA 扇出区的走线,间距可能只有 3mil。
  2. 最差码型测试: 主动线跑 1010 交替码(最高频率成分),受害线跑全 0 或全 1。这样串扰噪声最明显。
  3. 长度扫描测试: 改变平行走线的耦合长度(从 1 英寸到 6 英寸),记录串扰幅度。画出“串扰 vs 长度”曲线,找到饱和点。

4.3 时序抖动:信号边沿的“颤抖”

抖动,就是信号边沿在时间轴上的随机偏移。你想想看,理想时钟的上升沿应该精确地每隔 10ns 出现一次。但实际中,每个沿都会有点偏差,这就是抖动。

抖动分三类:随机抖动(RJ)、确定性抖动(DJ)、总抖动(TJ)。RJ 是热噪声等随机因素引起的,服从高斯分布。DJ 是串扰、电源噪声等确定性因素引起的,有固定的幅度和频率。

4.3.1 抖动的测试方法

  • 示波器直测: 用高精度示波器(带宽至少是信号频率的 3 倍)采集大量边沿,用直方图统计 TIE(时间间隔误差)。
  • 时钟恢复法: 对于数据信号,需要先做时钟恢复(CDR),再测数据边沿相对于恢复时钟的抖动。
  • 频谱分析法: 用频谱仪看时钟信号的相位噪声,再换算成抖动。这个方法对低频抖动特别敏感。
抖动类型 来源 分布特征 测试关注点
随机抖动 (RJ) 热噪声、散粒噪声 高斯分布 RMS 值
确定性抖动 (DJ) 串扰、电源噪声、ISI 有界分布 峰峰值
总抖动 (TJ) RJ + DJ 混合分布 BER=1e-12 时的值
避坑指南: 我曾经在测一个 10Gbps SerDes 时,总抖动一直超标。后来发现是示波器的采样时钟本身抖动太大。记住:测试设备的抖动必须比被测信号小一个数量级。

4.3.2 时序抖动测试用例设计

  1. 码型依赖性测试: 分别用 PRBS7、PRBS15、PRBS31 码型驱动信号,测 TJ 和 DJ。码型越长,低频成分越多,抖动越大。
  2. 电源噪声注入测试: 在电源轨上叠加一个正弦波(频率从 1kHz 到 100MHz,幅度 50mVpp),观察抖动随电源噪声的变化。这个用例能帮你找到电源去耦的薄弱点。
  3. 温度扫描测试: 在 -40°C、25°C、85°C 三个温度点测抖动。RJ 随温度升高而增大,DJ 可能随温度变化而改变(比如串扰耦合系数会变)。

4.4 眼图分析:信号质量的“体检报告”

眼图,就是把很多个数据 bit 的波形叠加在一起。如果信号质量好,眼图就会睁得很大,像一只明亮的眼睛。如果信号有问题,眼睛就会眯起来,甚至闭上。

眼图能直观反映:幅度噪声、时序抖动、过冲、振铃。我习惯把眼图叫做“信号质量的一键体检”。

4.4.1 眼图的关键指标

  • 眼高: 眼睛垂直方向的开度。眼高太小,接收端就分不清 0 和 1。
  • 眼宽: 眼睛水平方向的开度。眼宽太小,采样时钟稍微偏一点就会误码。
  • 抖动: 眼图交叉点的厚度。交叉点越厚,抖动越大。
  • 占空比失真: 眼图上下不对称,说明信号的高电平和低电平持续时间不一样。
经验值: 对于大多数高速接口(如 DDR4、PCIe Gen3),眼高要求 > 200mV,眼宽要求 > 0.5UI(单位间隔)。如果眼高低于 100mV,基本可以判定信号不合格。

4.4.2 眼图测试用例设计

  1. 最差码型测试: 用 PRBS 码型或 K28.5 码型(8b/10b 编码中最差情况)驱动信号。这些码型能激发最大的 ISI(码间干扰)和串扰。
  2. 接收端均衡测试: 如果接收端有 CTLE(连续时间线性均衡器)或 DFE(判决反馈均衡器),分别测试均衡开启和关闭时的眼图。对比均衡效果。
  3. 通道损耗扫描测试: 在信号路径中插入不同长度的线缆或不同衰减的 PCB 走线,记录眼高和眼宽随损耗的变化。画出“眼图裕量 vs 通道损耗”曲线,找到设计余量。

4.5 知识体系:信号完整性测试全景图

下面这张图,把反射、串扰、抖动、眼图四个维度的测试方法和关键指标串起来了。你可以把它当作 SI 测试的“作战地图”。

信号完整性测试知识体系 信号完整性测试 反射 串扰 时序抖动 眼图分析 测试方法 TDR / VNA / 示波器 过冲 / 振铃 / 阻抗 测试方法 主动-受害线法 NEXT / FEXT 幅度 测试方法 示波器 TIE 直方图 RJ / DJ / TJ 分离 测试方法 眼高 / 眼宽 / 抖动 占空比失真 关键指标 过冲<10% / 阻抗±10% 关键指标 串扰幅度 < 50mV 关键指标 TJ @BER=1e-12 关键指标 眼高>200mV / 眼宽>0.5UI 测试用例设计:最差拓扑 / 最差码型 / 电源噪声注入 / 温度扫描 / 通道损耗扫描

4.6 测试用例设计总结

信号完整性测试,不是把示波器往板子上一搭就完事。你得想清楚:测哪根线?用什么码型?在什么条件下测?

我个人的经验是,测试用例设计要遵循三个原则:

  • 最差原则: 永远找最恶劣的拓扑、最恶劣的码型、最恶劣的温度和电压条件。
  • 可复现原则: 每个测试用例都要有明确的触发条件和判断标准。不能“这次测过了,下次又不一样”。
  • 可追溯原则: 测试结果要能对应到具体的物理原因。比如“眼图闭合是因为过孔阻抗不连续”,而不是笼统地说“信号质量差”。
最后提醒一句: 信号完整性测试的最终目的是保证系统能稳定工作,而不是追求完美的波形。我曾经见过有人花了两周时间把过冲从 8% 优化到 5%,但系统误码率根本没变化。嗯,这种优化就是过度设计了。把精力花在真正影响系统可靠性的瓶颈上,才是高效的做法。