信号完整性测试:眼图分析、ISI、串扰评估
信号完整性(SI)测试,说白了就是确保数据在传输过程中不“走样”。
在SATA合规测试中,SI这块我特别看重。你想想看,6Gbps甚至更高速率的信号,在板子上跑几十厘米,稍微有点反射或串扰,眼图就闭合了。
本章我们就聊聊三个核心:眼图分析、ISI(码间干扰)评估,还有串扰评估。嗯,都是实战中必须啃下的硬骨头。
眼图分析:信号质量的“X光机”
眼图是用示波器把多次采样的波形叠加起来,形成的“眼睛”形状。眼睛睁得越大,信号质量越好。
我个人习惯,在做SATA眼图测试时,先看这几个关键参数:
- 眼高(Eye Height):信号摆幅的剩余净空。合规性通常要求不低于某个毫伏值。
- 眼宽(Eye Width):时间方向上的有效区间。反映了抖动的影响。
- 抖动(Jitter):信号边沿的随机或确定性偏移。RJ和DJ要分开看。
- 占空比失真(DCD):高低电平持续时间不对称。
我记得在测试一个客户样品时,眼图明显闭合,眼高只有规范值的60%。最后查出来是PCB走线阻抗不匹配,焊了一个0.1uF的耦合电容才搞定。
ISI评估:码间干扰的“隐形杀手”
ISI是啥?说白了就是前面传输的bit,影响了当前bit的判决。
为什么会有ISI?因为通道的频响不是完美的低通滤波器。高频成分被衰减,低频成分延时不一样,导致信号边沿变缓、过冲或振铃。
评估ISI,我一般用两种方法:
- 输出眼图(Output Eye Diagram):直接看眼图的闭合程度。如果眼图在特定码型(如PRBS7)下明显变差,那ISI嫌疑很大。
- 抖动分离(Jitter Decomposition):用仪器把总抖动(Tj)拆成随机抖动(Rj)和确定性抖动(Dj)。ISI主要贡献在Dj里。
这里我给出一个简单的ISI评估代码片段(伪代码),用于分析通道冲击响应:
// 伪代码:通道冲击响应与ISI分析
float channel_response[100]; // 从TDR或VNA测量得到
float ISI_amplitude = 0;
for (int i = 0; i < 100; i++) {
if (i != 0 && i != 1) { // 忽略主脉冲和后光标
ISI_amplitude += abs(channel_response[i]);
}
}
if (ISI_amplitude > 0.15) {
printf("通道ISI风险:%f(可能影响合规性)\n", ISI_amplitude);
}
串扰评估:邻近信号的“争吵”
串扰来自哪里?相邻走线或相邻差分对之间的电磁耦合。
在SATA测试中,串扰会引入确定性抖动,影响眼图。我遇到过一个案例:M.2接口测试板,SATA线和USB3.0线靠得太近,USB3.0的5Gbps信号串扰到SATA线上,导致眼图上有明显的“鬼影”。
评估串扰,有几个要点:
- 近端串扰(NEXT)和远端串扰(FEXT):NEXT看发射端干扰,FEXT看接收端干扰。
- 串扰容忍度:SATA规范对近端串扰有具体限值,通常用BERT和示波器配合测量。
- SI仿真:在PCB设计阶段,用Spice或IBIS模型跑一下串扰,能提前发现风险。
信号完整性测试综合流程图
下面这张图梳理了SATA信号完整性测试的核心流程。从发送端到接收端,环环相扣。
SATA合规测试中的SI指标对比
下面是SATA 3.0规范中几个关键SI参数的典型限值。记住,这只是参考,具体项目以合规测试文档为准。
| 参数 | 规格要求(典型值) | 测试方法 |
|---|---|---|
| 眼高 | ≥ 200 mV(差分) | BERT + 实时示波器 |
| 眼宽 | ≥ 0.35 UI | 误码率测试(BER=1E-12) |
| 总抖动(Tj) | ≤ 0.25 UI | 抖动分解算法 |
| 近端串扰(NEXT) | ≤ -26 dB | VNA或TDR/TDT |
| ISI幅度 | ≤ 0.1 UI | 通道冲击响应分析 |
总结
信号完整性测试是SATA合规的“守门员”。眼图、ISI、串扰,三项缺一不可。
我个人经验是:先搞定通道设计(走线、阻抗、耦合电容),再用眼图确认整体质量,最后用ISI和串扰定位具体问题。不要上来就怼参数,那是在浪费测试资源。