前阵子帮客户调一块PCIe 5.0的NVMe开发板,现象很经典:插上去系统能认到设备,但链路速率始终停在Gen1,速度上不去,log里还时不时冒几个CRC error。折腾了一下午没头绪,最后直接把Keysight Infinium示波器和M8040A误码仪拉上去,从链路训练看到接收端压力测试,大半天就把问题定位到参考时钟的抖动超标上。换掉时钟源之后,Gen5链路稳定跑到L0状态,读写速率直接翻了十几倍。这件事让我特别想写一篇真正带实操的PCIe 5.0信号完整性测试文章,把自己在这套仪表上踩过的坑、总结出来的步骤都整理出来。
这篇内容主要面向硬件工程师、测试工程师和信号完整性工程师,尤其是刚接触32GT/s高速链路测试,手上正好有Infinium系列示波器和M8040A BERT但不知道怎么搭环境、不知道怎么设置参数的人。我会按照一次完整的测试流程来写:从仪表连接、链路训练确认,到发射机TX眼图和抖动的测量,再到接收机RX压力眼图校准和误码率测试,最后是我实际调试中遇到的常见问题排障经验。整套流程跑完,你能独立完成一份可交付的PCIe 5.0信号完整性测试报告。
1. 搭建一套能测PCIe 5.0的测试台
1.1 仪表选型与连接拓扑
先说硬件层面。PCIe 5.0单通道速率32GT/s,基频16GHz,意味着示波器带宽至少要有30GHz以上,最好用35GHz甚至更高带宽的实时示波器,并且采样率要能覆盖80GS/s或更高。Keysight的Infinium UXR系列是常选项,配合专门的PCIe测试选件和探头前端,可以直接分析码流。另一台核心仪表是M8040A误码率测试仪,它包含码型发生器和误码分析仪两部分,主要用于接收机RX端的压力注入和误码判定。很多团队一开始只买了示波器,觉得测下发端就够了,结果接收端出问题完全没法定位,所以做PCIe 5.0项目时,BERT基本是刚需。
连接拓扑上,我习惯把被测设备DUT插在一张PCIe转接卡或测试主板的插槽上,然后用SMA线缆引到示波器和BERT。TX测试时,示波器探头或SMA线直接接到DUT输出端的测试点,同时要引一条参考时钟作为示波器时钟恢复的参考。RX测试时,M8040A的输出端接DUT的接收引脚,DUT收到数据后通过自身环回或外部环回路径返回,再从DUT TX端引回BERT的分析仪进行误码判定。整个过程里,所有SMA线缆的相位稳定性都很关键,我通常会在测试前把每根线缆的S21插损记录下来,方便后续做去嵌或校准。
1.2 仪表初始化与去嵌入准备
仪表开机后别急着测,先让设备预热至少半小时。示波器和BERT内部的时钟参考源、采样模块都受温度影响,冷机状态下测出来的抖动分布会偏大,我就遇到过一次,开机十分钟直接测眼图,结果眼宽比热机后差了将近0.05个UI,纯属仪表没稳定。预热完成后,做一遍自检和幅度校准,确保所有通道的增益一致。
去嵌入这一步很多新手会跳过去,但PCIe 5.0速率下,测试夹具、SMA线缆、探头本身的损耗和反射对测量结果影响非常大。正确的做法是先用矢量网络分析仪VNA测出从DUT芯片引脚到示波器输入端整个链路的S参数,然后在Infinium配套的测试软件里导入这组S参数做去嵌入。这样测出来的眼图才是DUT真实输出引脚上的信号,而不是被线缆和夹具整形之后的信号。
1.3 先确认链路训练到了L0状态
无论测TX还是RX,第一步永远都是确认链路已经完成训练并进入L0状态。PCIe链路训练状态机LTSSM有好多状态,只有到L0才算正常工作。如果设备没有枚举成功或者链路速率没上去,后面测出来的信号质量大概率也是有问题的。怎么看?最简单的方法是在操作系统里看设备链接速率,Windows设备管理器和Linux下lspci都能看到当前速率。更细致的方法是抓LTSSM状态变化,示波器逻辑通道或专用的分析软件都能看到链路训练过程。
我在实际测试中遇到最多的问题,是测试时被测设备处于Gen1或Gen2速率,根本跑不到Gen5。这种时候先别动仪表,优先检查转接卡上的PCIe参考时钟信号,用示波器看100MHz参考时钟的频偏和抖动,很多链路训练失败都是因为参考时钟源不合格。确认链路稳定在Gen5速率的L0状态之后,再进行TX或RX的测量,结果才有意义。
2. 发射机TX测试:Infinium示波器配置与眼图测量
2.1 测试码型与测试点选择
TX测试用来验证DUT在输出端的信号质量,包括眼图、抖动、幅度、转换速率等参数。PCIe规范定义了不同的测试码型,常见的有PRBS9、PRBS31以及PCIe专用的合规码型。做Gen5测试时,我习惯优先选用规范指定的压力码型或者带有人为抖动的码型,这样测出来的眼图更贴近实际工作场景。如果只是快速看看信号状态,用PRBS31也够了,但报告里要注明码型类型。
测试点的选择也很有讲究。PCIe规范定义了TP1、TP2、TP3等不同测试参考点,TP1通常指芯片引脚处,TP2指连接器处。夹具上一般会留出对应的SMA接口,你要清楚自己测的到底是哪个点。很多刚接触的人容易犯的错误是不加区分,直接在转接卡上找一个方便接线的位置就测,结果测出来的眼图既不是芯片引脚的信号,也不是连接器处的信号,无法和规范指标做对比。我建议至少记录TP1和TP2两个点的测试结果,这样既能评估芯片本身的发射能力,也能反映整个通道对信号的衰减影响。
2.2 Infinium示波器的关键配置项
Infinium示波器在PCIe测试中有几个核心设置直接决定测试结果是否可靠。第一是采样率,对于32GT/s的信号,采样率建议设置在80GS/s以上,确保每个UI内能采到足够多的点来精确重建波形。第二是显示带宽,必须保证示波器带宽能够覆盖信号的主要谐波分量,16GHz基频至少要看5次谐波,80GHz带宽当然没问题,但如果你手上只有33GHz带宽的型号,也勉强能用,只是测试报告中要注明带宽对测量结果的影响。
第三是时钟恢复设置。眼图测量必须基于恢复出来的时钟进行采样,不能让示波器直接按固定间隔触发采样。Infinium软件里可以选择不同的时钟恢复算法,PCIe规范要求使用标准的PLL带宽模型来模拟接收端CDR对时钟的恢复行为。这里有一个容易踩的坑:如果时钟恢复环路带宽设置错误,测出来的眼图抖动分布会严重失真,看起来眼宽很大,实际上可能是恢复时钟跟着数据一起抖导致的假象。
第四是均衡设置。PCIe 5.0接收端普遍采用CTLE和DFE均衡技术,TX测试时要不要在示波器端开启接收均衡,取决于你要验证什么指标。如果是为了对照规范中的模板要求,通常只做简单的归一化处理;如果要模拟真实的接收机行为,则要在软件中加载一个代表接收端均衡的模型。我在报告中会同时保留未均衡和带均衡两种眼图数据,方便后续信号完整性问题分析。
2.3 眼图与抖动的测量、解读
一切配置好后,点击自动测量,示波器会把捕获的数据转成眼图。首先看眼图的张开程度,具体就是眼高和眼宽。PCIe 5.0规范对这些参数有明确的最低要求,如果眼高低于规范值,说明信号幅度不够或者噪声偏大;如果眼宽不足,说明抖动过大或者码间干扰严重。Mask测试也是必做的,软件里会加载规范对应的模板,只要眼图波形不碰到模板的禁区,就算通过。
抖动测量比眼图更能定位问题根源。Infinium配套的抖动分析工具会把总抖动TJ分解成随机抖动RJ和确定性抖动DJ,确定性抖动里又分成数据相关抖动DDJ、周期性抖动PJ等子类。RJ主要来自热噪声和衬底噪声,DJ则和电源噪声、串扰、码间干扰有关。如果发现RJ偏大,优先查电源和参考时钟的噪声;如果DDJ占主导,那问题多半在发射端均衡参数或者通道插损上。这里有个经验:PCIe 5.0测试中,单纯看TJ合格与否是不够的,一定要看分解后的各抖动分量比例,否则你只知道信号不行,不知道哪里不行。
3. 接收机RX测试:M8040A压力注入与误码分析
3.1 M8040A在RX测试中的角色
发射机测的是信号“发出来什么样”,接收机测的是“能不能收进去、收得对不对”。这就必须用误码率测试仪BERT来验证,M8040A的高速率码型输出和误码检测能力正好满足32GT/s的要求。M8040A有几个关键端口:码型发生器输出口用来产生数据信号,可以注入正弦抖动SJ、随机抖动RJ、展频时钟SSC等不同类型的压力;误码分析仪输入口用来接收DUT返回的数据,实时统计误码率。
RX测试需要DUT具备接收数据后重新发送的能力,通常有两种环回模式:一种是接收端直接把收到的数据经过内部转发从TX端发出去,称为内部环回;另一种是外部线缆把RX和TX短接起来,称为外部环回。M8040A发出的压力信号从DUT的RX进入,DUT再把它从TX送回M8040A分析。如果误码率超标,说明DUT的接收机均衡能力、时钟恢复能力和灵敏度过不了关。
3.2 压力眼图校准流程,最磨人但最关键
RX测试和TX测试有一个本质区别:BERT注入的信号必须在到达DUT接收引脚之前,被校准成一个“压力眼图”,也就是特定的眼高、眼宽和抖动值。只有确保压力信号本身严格符合规范要求,测试结果才有可比性,这就是压力眼图校准。
校准流程大致是:先让M8040A输出一个基本码型,不注入额外压力,然后在DUT引脚处用示波器测初始眼图。接着逐步增加正弦抖动SJ的幅度和随机抖动RJ的强度,每次增加后重新测眼图,观察眼高和眼宽的变化。目标是把眼图压缩到规范里指定的数值范围,比如眼高压缩到某个毫伏值、眼宽压缩到某个UI值,同时让抖动分布符合规范给出的浴盆曲线特征。这个过程需要反复迭代,M8040A也有自动化校准功能,但手动理解每一步在干什么更重要。
我踩过的一个坑是校准示波器和压力测试的测量点不一致。示波器一开始接到的是DUT引脚前的某个测试点,但校准完之后把示波器移走,发现DUT引脚处的压力信号又变形了,原因是信号路径上增加了额外的线缆长度或接头,导致反射变化。后来我老老实实在同一位置固定示波器探头,校准完成后不再移动任何线缆,直接切换BERT进行误码测试,问题就解决了。
3.3 抖动容限测试与误码判定
压力眼图校准完成后,进入正式的抖动容限测试。这个测试是为了确认接收机在给定压力下仍然能保持极低的误码率。PCIe 5.0规范要求的误码率指标是BER小于1e-12,也就是说测1000亿个bit最多只能错1个bit,这在工程上是极其苛刻的要求。
抖动容限测试通常以扫描方式进行:固定抖动频率,逐步增大抖动幅度,观察误码率是否仍然能保持在1e-12以下;然后换一个频率,继续扫描。整个频段跑完后,可以画出一条“抖动容限曲线”,用来和规范中的要求线做对比。实际测试中,测试时间需要根据速率和数据量来计算,32GT/s速率下测到1e-12误码率需要跑足够长的时间,按理论上可能需要几十秒到几分钟,但考虑到误码分布的随机性,一般在规范时间基础上再多留一些余量。另外测试时需要注意DUT供电的稳定性,电压跌落会造成突发性误码,影响误码率统计的准确性。
4. 实战中的高频问题与排查经验
4.1 眼图漂移、抖动偏大,先检查物理连接
遇到测量结果不理想,别急着怀疑DUT设计有问题。我至少有三次“误判”都是因为SMA接头没拧紧,或者线缆老化导致损耗异常。SMA接头有个标准拧紧力矩,通常是8磅寸左右,徒手当然拧不到这个值,但接触不紧密就会产生额外反射和微振动,直接体现为眼图上的噪声增加和抖动偏大。建议在仪表端用扭矩扳手规范操作,同时对所有测试线缆定期用VNA测一下S参数,看看插损和回波损耗有没有明显劣化。
地回路问题也不容忽视。示波器和DUT如果使用不同地网,示波器地线和设备地之间会有电位差,这种共模干扰会在测量带宽内叠加到信号上,表现为低频噪声异常。我在实验室里专门为高速测试配了隔离电源和等电位连接,情况改善很明显。如果你发现眼图有明显的50Hz低频调制,大概率就是地回路问题。
4.2 链路训练失败或误码率居高不下
链路训练不到L0状态,或者即使训到L0但误码率超标,这类问题往往指向参考时钟、电源噪声或发送端均衡配置。参考时钟频偏超过300ppm就可能导致链路反复重启,这是常见原因。用示波器看100MHz参考时钟的边沿抖动,如果峰峰值超过几十皮秒,基本可以断定时钟源不合格。
电源噪声对高速链路的影响体现在多个方面,接收端采样窗口处的电源纹波会直接改变比较器阈值,进而产生误码。用示波器测DUT电源网络时,要看高频纹波,不要只关注直流电平。我还遇到过一次很有意思的案例:误码率始终在1e-9和1e-10之间波动,怎么排查都找不到原因,最后发现是测试主板上某个与PCIe插槽相邻的高速信号在空载时产生串扰,把外接的负载加上之后就消失了。所以做RX测试时,尽量模拟真实使用环境中的负载状态。
4.3 夹具和线缆的使用禁忌与维护
高速测试夹具和SMA线缆是容易损耗的耗材。每插拔一次接头,接触片的磨损都会让性能下降一点。PCIe 5.0测试夹具供应商通常会标注推荐的插拔次数,超过之后建议更换。我在团队里要求所有人登记使用台账,每次测试后记录插拔次数,超过上限就换新夹具。
另一个容易忽略的问题是线缆弯曲半径。高速SMA线缆如果弯折太急,内部屏蔽层和介质层会出现微裂缝,导致特征阻抗不连续,信号反射增大。收纳线缆时要自然盘绕,不要打死结或硬塞进收纳箱。如果某个通道测出来的回波损耗比上次记录差了很多,先怀疑线缆损伤,再怀疑DUT问题。
5. 测试数据怎么看、报告怎么写
5.1 PCIe 5.0核心指标速查与对照
测完的数据需要和规范指标逐项对照,才能判定合格与否。这里整理一张我常用的速查表,表中数值对应PCIe 5.0基规范和CEM规范中的常见要求选项,上面声明了不同版本会有差异,引用时要核对具体版本。
| 测试项 | 参考指标 | 说明 |
|---|---|---|
| 眼高 | 依据规范版本,通常在数十mV量级 | 眼图中垂直方向最小开度 |
| 眼宽 | 依据规范版本,通常在0.3UI以上 | 水平方向有效采样区间 |
| 总抖动TJ@BER=1e-12 | 依据规范版本,一般在0.34UI量级 | 工程测试常用浴盆曲线外推 |
| 误码率BER | ≤1e-12 | 接收机压力测试判据 |
| 参考时钟频偏 | ≤300ppm | 超出会导致链路无法锁定 |
| 差分回波损耗SDD22 | 按规范模板 | 连接器处测量,反映反射情况 |
需要注意的是,规范数值会随着版本更新变化,PCIe SIG发布的Base Spec和CEM Spec里都有详细说明。写测试报告时一定要标注你依据的规范版本和参考点,同一个板子在不同规范版本下可能会有不同的判定结果。
5.2 一个SSD开发板的实测数据复盘
拿我之前帮客户测的NVMe SSD开发板来复盘。TX测试第一次跑的时候,眼高只有规范要求的70%左右,明显不合格。看了抖动分解,发现DDJ占了很大比例,于是我怀疑是发送端3-tap均衡参数没有正确配置。让软件把预加重和去加重参数重新设置后,再测眼高马上恢复到规范值以上。这说明TX测试时如果眼图不合格,均衡配置是首先要检查的环节,很多时候芯片默认参数并不是最优状态。
RX压力校准阶段,我按流程把SJ和RJ注入到目标值之后,误码率在1e-8附近波动,怎么都到不了1e-12。排查了半天,最后是用示波器看了DUT的电源轨,发现高频纹波达到了40mV以上,明显超标,在电源输入端补了去耦电容之后,误码率迅速降到了1e-12以下。所以说,接收机测不过,问题不一定只在接收机本身,电源噪声的影响经常会通过误码率暴露出来。
5.3 测试报告与自动化流程的实践建议
一份合格的测试报告,不只是把几个Eye参数填进表格这么简单。我建议至少包含这些信息:测试环境描述(仪表型号、固件版本、线缆长度、夹具型号)、测试参考点说明、码型类型、时钟恢复PLL带宽设置、均衡模型、温度条件、供电条件。这些看起来琐碎,但在问题回溯时每一条都可能成为关键线索。我一般会把示波器保存的原始波形文件和BERT的原始统计数据一并归档,而不是只保留截图。
自动化是提高效率的方向。Infinium和M8040A都支持远程控制和脚本操作,通过Python或者仪表自带的自动化接口可以把重复性测试流程固化下来。我自己的做法是写了一套脚本,一键触发TX眼图测量和RX压力校准,输出标准化的CSV报告。这样不同工程师测同一块板子,结果可以直接横向对比,避免人为误操作引入差异。
写在最后
测PCIe 5.0和测PCIe 3.0是两种完全不同的体验。Gen3时代可能一根普通的SMA线、一台带宽稍微够用的示波器就能对付,但到了32GT/s,整个测试链路里任何一个小环节的疏忽都会被放大成明显的指标劣化。我在使用Keysight这套方案的过程中最大的体会是:仪表本身性能是可靠的,能不能测出可信的结果,更大程度取决于测试环境和流程细节。线缆校准、时钟恢复设置、压力眼图迭代、地回路处理,每一个步骤都值得花时间认真对待。
最后再分享一个小技巧:测试时不要怕多存数据。每次测量都把示波器的波形数据、眼图模板裕量、抖动分解结果、BER log保存下来,日期命名,长期积累之后,这些数据就是团队最强的调试资产。很多看似随机的问题,翻一翻历史记录就能找到规律。PCIe 5.0只是开始,后续还有PCIe 6.0的PAM4调制和更复杂的链路均衡,把现在的流程跑通、跑规范,后面遇到更高难度的项目才不至于抓瞎。