1. 我不测PRBS7我测PRBS31为什么高速SerDes偏要用长码型做高速SerDes验证的工程师很多人都有个习惯性动作拿到误码仪打开默认码型看见PRBS7就直接开始测。PRBS7确实经典短、快、方便测个眼图、测个大致误码率几分钟出结果应付常规检查绰绰有余。但到了25Gbps以上的NRZ链路或者56Gbps以上的PAM4链路PRBS7给出的“合格”越来越像一张过期支票——链路实际跑真实业务数据时动不动就冒出一堆纠正前的原始误码这时候你回头再换PRBS31去复测才发现原来链路根本没你有想象的那么健康。这篇文章就围绕PRBS31做一次完整的实战复盘为什么说PRBS7在高速SerDes场景下不够用、PRBS31的配置步骤和参数逻辑、误码结果怎么算怎么读以及我在测试过程中踩过的一些坑。适合正在做SerDes接口验证、信号完整性测试或者被误码率搞得焦头烂额的硬件工程师参考。PRBS31对比PRBS7核心差异并不只是“码型变长了”这么简单。它本质上是把测试数据从“模拟常见数据图形”升级成“模拟最恶劣的真实数据流量”让链路在接近极限的情况下暴露问题。1.1 PRBS到底是怎么个随机法——一次把生成原理说清楚先说基础概念方便后面展开。PRBS全称Pseudo-Random Binary Sequence伪随机二进制序列。名字里带“伪”是因为它本质上不是随机的而是由线性反馈移位寄存器按固定规则生成出来的确定性序列。只要给定生成多项式和种子值序列就一定且可重复。生成结构如图大家应该见过一串D触发器串联按多项式取某些级联位置反馈异或再送回输入端。PRBS31用的生成多项式是x^31 x^28 1也就是说31位移位寄存器里取第28位和第31位做异或反馈。整个序列循环一次的长度是2^31 - 1约等于21.47亿个比特。PRBS7则是x^7 x^6 1循环长度只有2^7 - 1 127个比特。这两个多项式对应的序列特性完全不同特性PRBS7PRBS31生成多项式x^7 x^6 1x^31 x^28 1序列长度127 bit2,147,483,647 bit最长连续相同位游程7位31位25Gbps下单周期时长约5.08ns约85.9s频谱密度离散谱线明显接近真实随机数据的连续谱直流平衡能力较好会出现较长时间的不平衡窗口这个表里的游程和频谱密度是PRBS31在高速测试中被重视的两个关键物理因素。游程越长意味着链路上连续相同电平的时间越长对接收端的DC偏置、时钟恢复环路、交流耦合电容来说压力越大。而频谱上PRBS31在低频端更接近实际业务数据的统计特性不会像PRBS7那样出现明显的周期性能量集中。1.2 从PRBS7到PRBS31差的不是一串0是整整一个数据世界直观举个例子。10Gbps速率下PRBS7一个完整周期只有12.7微秒在示波器上看到的眼图是这127个bit反复叠加的结果。也就是说跑几百个周期看到的是同一个数据图案的重复。而PRBS31一个完整周期需要214.7秒——3分半多钟才能把序列全部走完一遍。同理在25Gbps下PRBS31也需要大约86秒才能跑完一个完整周期。这个时长的差异带来的是统计覆盖度的质变。误码测试的本质是用已知序列激励链路、在接收端比对而误码是否出现和链路上的码间干扰积累、电源噪声耦合、串扰模式、时钟抖动相位都有关系。短序列很快就循环回原点很多“慢变量”根本没有机会在测试窗口内产生影响。长序列则能把这些慢变效应拉进来。我之前遇到过一种典型的案例一款PCIe Gen4的Retimer芯片用PRBS7测误码率一直显示低于1e-12示波器眼图也干净到让人开心。但换用PRBS31之后BER直接跳到1e-8左右甚至有连续的错误簇。后来定位下来是长游程触发了接收端均衡器的漂移补偿极限加上链路里的一级AC耦合电容在低频段出现明显压摆两个问题叠加。这种问题用PRBS7根本不可能暴露。所以别再只盯着PRBS7了。如果你的SerDes链路速率超过10Gbps或者你做的是PCIe Gen4/5、100G/200G以太网、SAS、USB4这类需要高可靠性传输的接口PRBS31应该成为你误码测试的默认起点而不是PRBS7测不过之后才换上“试试看”的备选方案。2. PRBS31在高速SerDes误码测试中盯住的是什么问题选码型不是拍脑袋决定的每一类码字都有自己针对性“照顾”的链路缺陷。PRBS7擅长的是快速发现基本的信号完整性问题——阻抗不连续、反射过大、严重串扰这些在短码型下就能看出来。但PRBS31照顾的范围完全不同它专门挑那些“只有长时间连续数据流跑起来”才出现的顽疾。2.1 长游程正在制造你平时看不见的真实误码这里重点说游程。PRBS31允许出现长达31位的连续1或者连续0这在真实业务数据里并不罕见。比如大部分以太网数据包在空闲态会发送连续的IDLE码实际经过8b/10b或者64b/66b编码后虽然不会出现31个完全相同的比特但在PAM4调制下电平不变的情况经常出现。连续31个1对接收端意味着什么首先接收端CDR的鉴相器在这段时间内没有跳变沿可以用来校准相位时钟恢复环路等于是“开环”状态。虽然环路滤波器靠惯性维持但恢复时钟的频率偏移会随着游程长度线性累积。如果链路两端的参考时钟频偏在100ppm量级一个31 bit的游程会让CDR积累好几皮秒的相位误差再叠加数据信号本身的随机抖动就很危险。其次长游程还会影响接收机自动增益控制环路。大部分SerDes接收机使用AC耦合连续相同位时耦合电容两端电压会逐渐漂移直到数据跳变出现时接收端的差分偏置点已经偏移了不少。这种“低频拖尾效应”在PRBS7里被127bit的短周期掩盖了因为连0或连1最多7个bit电容还没来得及充放电到位就已经翻转。从眼图上看PRBS31测出来的眼图往往会比PRBS7“模糊”一些表现在顶部和底部的噪声更宽、过零点抖动更大。这不是错觉而是真实业务数据下链路的实际表现。所以当有人拿着PRBS7的眼图说链路质量好得不行时我通常会建议他切PRBS31再拍一张对比一下。2.2 时钟恢复和AC耦合短码型的“宽松假象”除游程问题外PRBS31的长周期对CDR环路参数验证也有不可替代的作用。SerDes接收端CDR通常有两种模式锁定在参考时钟上的锁定模式以及完全依靠数据跳变调整相位的跟踪模式。测试时如果用PRBS7短周期序列里跳变沿非常充足CDR很容易保持相位锁定造成“带宽够用、抖动不大”的假判。而PRBS31的序列在统计上会更接近真实数据中的“长无跳变区突发跳变”交替模式。这种模式对CDR环路带宽的设计提出了真实的考验带宽太窄跟不上低频抖动带宽太宽又会把高频噪声引入恢复时钟。这些表现只有在PRBS31甚至更长码型下才看得出来。同样被掩盖的还有AC耦合电容的数值选择。交流耦合电容与接收端输入阻抗构成一个高通滤波器其-3dB高频通带截止频率必须低到不会明显衰减数据的低频分量。在PRBS7下数据的最低频分量受限于127bit的序列周期大概是数据速率的1/127而PRBS31下的最低频分量则是速率的1/21.5亿。两者相差几个数量级。举个例子10Gbps速率下PRBS7的最低频分量约78.7MHz一个0.1uF耦合电容配50欧差分阻抗形成的截止频率约32kHz远低于78.7MHz毫无压力。但PRBS31的最低频分量约0.0047Hz意味着光靠电容耦合一定会衰减极低频分量接收端就会看到基线漂移。所以高速系统里经常看到0.1uF电容配合一个“一级DC恢复电路”的设计就是为了处理这种低频损伤。真要在测试里验证这条路径是否有效PRBS31几乎是强迫性选项。2.3 典型应用场景25G/56G NRZ、PAM4、PCIe Gen4/5、FEC余量评估在实际测试项目中PRBS31适合的场景远比很多人想象中宽泛。最典型的有几类25G NRZ链路如25G以太网KR/KP接口这种接口大量使用RS-FEC评估时需要同时关注FEC纠前误码率和纠后误码率。纠前误码率必须使用包含真实统计特性的码型测量业界基本默认PRBS31。56G/112G PAM4链路如400G以太网PAM4比NRZ对线性度、均衡器收敛更敏感短码型得出的结论很难作为设计依据。实际测试通常会用PRBS13Q、PRBS31Q这类带游程限制的长码型但PRBS31仍是链路基本误码摸底的首选。PCIe Gen4/Gen5链路PCIe协议层定义了专用的训练序列但在物理层验证阶段使用PRBS31做压力测试是通用做法特别是需要评估链路“最差情况”下的剩余抖动和误码裕量时。FEC增益评估FEC的开销和纠错能力建立在码流统计特性之上。用PRBS7测出来的输入误码率往往偏低导致FEC纠错能力的“安全余量”被高估。换成PRBS31后纠正前误码率会明显上升这时计算出的FEC增益才是真实可靠的。3. 误码测试前配置实操从码型参数到链路自检配置这块我以实验室里常见的误码仪BERT和实时示波器组合为例来讲平台品牌不限——Keysight、Anritsu、Tektronix各自的操作菜单名称不同但底层逻辑一致。开始在板卡上动配置之前先把测试平台的基本框图在脑子里过一遍误码仪发送端输出差分信号经过测试夹具/连接器/PCB走线进入被测芯片的RX端芯片恢复出的数据或者直通后的数据从TX端输出回到误码仪接收端。如果芯片本身不带环回功能就需要在芯片内部做loopback测试如果芯片可以配置为模式发生器直接对外输出也可以更简化。3.1 测试平台搭建与仪表准备硬件准备这一步有很多容易忽略的细节但偏偏它们对测试结果影响巨大线缆必须使用相位稳定型电缆尤其是10Gbps以上速率普通SMA线缆的弯曲半径、温度漂移都会导致测试结果不重复。尽量避免在链路上串接额外的DC Block。误码仪输出本身可能带DC偏置而高速链路本来就设计了AC耦合额外加DC Block会引入新的阻抗不连续点。被测板卡供电要稳定。测试时电源纹波对误码的影响往往比信号路径本身更大我看到过不少PAM4误码率超标最后查出来是DUT核心供电的开关频率恰好落在CDR环路带宽内。仪表端需要将误码仪发送端和接收端都正确设置。多数现代误码仪支持“发送PRBS31 接收端同步PRBS31”的组合但在高速率高阶调制模式下需要注意码型发生器输出的本征抖动是否超标。如果误码仪自身输出眼图的抖动大于被测系统预算的1/10那么这个测试平台本身就不合格测出来的误码率没有参考价值。3.2 误码仪发送端关键参数配置发送端配置的核心是把“激励信号”设置成符合被测芯片要求的真实物理条件而不是单纯让仪表能出波形。下面列出一组常用参数及其设置逻辑参数项推荐设置设置逻辑码型PRBS31按标题场景这是主角码型数据速率按被测接口规格如25.78125Gbps必须精确匹配参考时钟包含FEC开销的速率差分输出电压按芯片手册RX输入范围常见400~800mVppd过大容易让接收端饱和过小覆盖不了最差情况去加重按通道损耗设定常见-3dB~-6dB模拟芯片实际工作在带损耗信道内的均衡配置上升下降时间按接口规范要求如20%~80%约15ps过快的边沿会引入额外高频分量制造假误码抖动注入初始设为0后续按规范注入先测基线余量再逐项加压SSC扩展时钟按规范开关PCIe通常开启不开启SSC的话部分CDR失锁问题无法暴露输出极性按板上差分走线极性确认极性接反是低级但常见的误码来源重点关注输出差分电压和去加重。这两个参数直接决定接收端看到的信号幅度和频率响应。很多工程师习惯性把误码仪输出摆到最大觉得“信号越强越容易测过”实际上过大的摆幅会把发送端非线性效应带进来尤其PAM4测试时电平间隔不均是重大误差源。正确做法是按芯片手册的RX输入灵敏度典型值设置然后在此基础上做几个阶梯对比。去加重参数的选择要参考被测链路实际频响。如果链路是短走线、低损耗去加重可以设小如果链路穿过背板连接器和长走线就需要更大的去加重来补偿高频损耗。设置不合适时的表现很直接——误码率随数据速率变化剧烈眼图张开度在特定速率点上突然恶化。3.3 接收端与均衡设置别把误码仪当示波器接收端配置容易被新手轻视但这里其实藏着误码测试最常见的坑。误码仪的接收端通常包含一个可调门限比较器用户需要设置参考电压和采样相位。最理想的设置是让误码仪的采样点正好落在眼图张开度最大的中心位置幅度门限设置在差分过零电平附近。实际测试时可以先让误码仪自动扫描寻找最优采样点然后锁定该位置再进行长时间误码统计。扫描完采样点之后再做长时间统计这样得到的BER数值才反映链路真实性能。如果被测芯片内部也包含均衡器情况会复杂一些。芯片RX端的CTLE和DFE会根据链路特性自适应调节误码仪给出的码流是均衡后的结果测得的BER本质上包含了均衡器的效果。此时需要确认芯片均衡器的收敛状态如果收敛不良即使误码仪显示低BER也可能是均衡器偶然碰对了某些码型而不是链路真的健康。稳妥的做法是在软件的chip register里读取EQ系数看是否落在合理区间内。另外一个设置细节是接收端的输入灵敏度。误码仪接收端灵敏度通常很高能检测到非常小的信号但这不代表链路就能正常工作。如果被测芯片的RX端灵敏度比误码仪低那么误码仪测到的BER会比芯片实际BER乐观。比较理想的方案是用被测芯片自己的CDR恢复出数据后再送给误码仪做比对这样测出来的才是经过真实接收机的数据质量。3.4 链路自检和一键重同步操作细节配置完成后、正式长时间测试之前务必做两件事自检和同步检查。自检是把误码仪输出直接环回误码仪接收端确认仪表本身无误码。如果自检都出现误码先检查线缆和连接器问题不要急着怀疑DUT。这个动作很多人嫌麻烦跳过但它的价值在于建立“仪表基准”——后面被测链路出现的任何BER都有资格归因于链路而非仪表。同步检查是确认误码仪接收端的PRBS31发生器与发送端处于对齐状态。误码仪在接收端本地也维护一个PRBS31序列生成器只有接收数据与本地序列逐bit对齐时比对才有意义。同步过程通常由仪表的“SYNC/Align”功能自动完成但要注意发送端输出的PRBS31序列必须从序列头部开始发送否则接收端可能锁定到子序列误码率读数会虚高。同步完成后仪表会显示“Locked/Loss of Lock”状态。务必在锁定状态下清零误码计数器再开始测试。如果链路长时间无法锁定大概率不是仪表问题而是DUT的TX/RX极性接反或者参考时钟频率设置错误。实操上我习惯在同步完成后先跑一个30秒的试测确认误码率数量级合理再切到长时间统计。这样能提前发现配置错误避免白白跑一晚上得到一个无效数据。4. 测试结果怎么看BER、浴缸曲线与FEC余量解读误码测试的花费时间不短但出结果之后才是真正考验功力的地方。很多时候误码率数字出来了但数字背后的含义看不明白导致项目组对链路是否通过产生分歧。这一节把误码结果的解读拆开讲明白。4.1 误码率基础1e-12到底意味着什么先过一下基本定义。误码率BER是错误比特数与总发送比特数的比值。BER 1e-12代表平均每发送10^12个bit发生1个错误。对于10Gbps速率这意味着平均每100秒出现1个bit错误对于25Gbps则是平均40秒出现1个bit错误。但工程上更关键的判断点是被测链路的BER应低于系统FEC纠错阈值。如果不带FEC通常要求BER低于1e-15甚至更低如果带FEC只需要保证纠后BER足够低纠前BER低于FEC输入阈值即可。例如常见的RS(544,514) FEC纠前BER大约需要优于4.6e-4才能保证纠后BER低于1e-15。这就是为什么很多芯片内部包含FEC时物理层测试允许的BER可以放宽几个数量级——因为FEC会兜底。一个容易混淆的概念BER测到0不代表链路就是“无误码”。长期测试中的任何一个错误都被记录在案但误码率是统计量出现0错误只说明在有限样本里恰好没有错误。要证明BER 1e-12需要测试足够长的比特数才能保证置信度这与下一节的计算直接相关。4.2 测试时间估算跑多久才能说“合格”这是相当多工程师会问的问题误码率要测多久才有意义答案跟你要证明的BER数量级直接挂钩。如果要求BER优于1e-12且测试时不允许出现任何错误那么至少需要测试2 x 10^12个bit才能得出比较可信的结论置信度约86%。按不同速率换算测试时间链路速率测试2e12 bit所需时间常见误码率目标实际建议测量时间1Gbps2000s1e-12约1小时10Gbps200s1e-12约10分钟25Gbps80s1e-12约5分钟以上100GbpsPAM420s1e-6FEC前2分钟以上这里有个工程经验实际误码测试很少只测到理论最小时间就停因为误码是突发性的。我个人的做法是至少按理论时间的3~5倍来跑并观察误码分布是否均匀。如果误码集中出现在某几秒即使平均BER在指标内也说明链路存在周期性干扰这种情况下不能简单判合格。还有一种情况需要特别注意在PAM4系统里误码仪统计的是符号错误率和比特错误率。PAM4一个符号承载2个bit一个符号错误可能只影响1个bit使用Gray编码时也可能会影响相邻bit。读取结果前必须确认仪表显示的是BER还是SER符号错误率两者的合格判据完全不同。4.3 浴缸曲线示例与抖动分解误码率结果不只有一个数字更多时候需要看BER随采样相位变化的曲线也就是“浴缸曲线”。浴缸曲线的横轴是采样时刻在一个UI内的相对位置纵轴是BER曲线呈现两边高中间低的形态形似浴缸。中心区域是“眼睛睁开”的安全区域两边陡峭上升的部分反映了抖动分布左边缘和右边缘的斜率由确定性抖动决定斜率越陡峭说明DJ越小曲线中心平台区高度由随机抖动决定平台区的BER越低说明RJ越小。对结果解读时我最关注浴缸曲线的两个指标最大眼宽和中心BER平台宽度。如果眼宽小于0.5UI哪怕中心BER为0这个链路也没有足够的裕量去应对温度漂移和老化。实测时如果误码仪支持扫描模式可以设置扫描步长为0.01UI在中心区和边缘处加密采样点然后把数据导出来绘图。多数示波器自带BER轮廓功能也能完成类似分析。重要的一点浴缸曲线的结果高度依赖测试码型。同一条链路PRBS7和PRBS31画出来的浴缸曲线必然不同PRBS31的浴缸曲线每边可能会瘦掉10%到20%这是正常现象别被吓到。4.4 实例PCIe Gen4链路PRBS31测试记录分享一个近期实际做的项目案例方便大家对照自己的测试流程。被测对象是一块带PCIe Gen4接口的NVMe控制器链路包含主板走线、连接器和一块转接卡总插损在16dB左右5GHz时。仪表配置如下码型PRBS31速率16GT/s实际设为16.0Gbps因为PCIe Gen4的物理层速率为16.0GT/s含128b/130b编码开销差分输出电压800mVppd去加重-3.5dBSSC关闭以便做基线测试。首测结果累计5分钟误码0BER读数为0。进一步在浴缸曲线扫描模式下在UI中心0.5UI范围内BER均低于1e-12但两翼在偏离中心0.15UI时BER开始爬升0.2UI处BER到1e-6。结论链路有足够的误码裕量但眼图宽度余量偏紧——后续温度升高时抖动会恶化建议在量产阶段关注这个指标。然后我故意做了个对比实验同一块板卡、同一组参数只是把码型切回PRBS7。结果浴缸曲线的可张开眼宽比PRBS31多出约12%中心BER平台也宽不少。如果只看PRBS7结果这个链路的性能会被高估至少10%的眼图裕量。这个案例直观说明了长码型在评估真实链路裕量时不可替代的价值。5. 常见坑与排查技巧速查表实录这部分是长期测试经验里沉淀出来的避坑指南每条都来自实际踩坑的积累。按优先级从高到低排列先查影响最大、最容易被忽略的项目。5.1 常见误码原因的排查顺序表现象排查步骤处理方向误码率趋势随温度上升检查散热条件、确认芯片温度读数热关断或电源降额问题先解决热设计误码集中在特定数据块检查误码时间戳对应系统活动排查电源DC-DC开关噪声或EMI干扰源长时间测试后误码率缓慢恶化检查线缆/连接器是否松动发热更替电缆检查连接器镀层磨损高频速率正常、低速速率误码多检查CDR锁定状态确认参考时钟频率很可能是分频链路或PLL配置问题PAM4误码率高但NRZ正常检查PAM4电平映射、Gray编码错误大多是发送端非线性或接收端EQ未收敛突发误码簇与数据包大小吻合检查链路缓冲器是否溢出协议层的流控问题不是物理层责任BER稳定且低但偶发大量误码检查电源跌落事件记录增加供电去耦电容是常见修法这张表是排查的起点但实际项目中误码问题很少是单一因素导致的往往是多个因素叠加。排查时建议一次只改变一个变量记录对照结果否则很难归因。5.2 处理假误码当误码仅是测量误差时假误码是误码测试里最常见但最气人的问题。误码率读数惊人但链路在真实业务下跑得好好的。排除仪表自身问题外最常见的假误码来源有几个误码仪接收端的恢复时钟质量差。如果仪表内部CDR带宽设置过宽会把高频噪声引入采样时钟导致本来正确的bit被误判。解决方法是把仪表CDR带宽设窄或者改用外部高稳时钟源。差分信号极性接反。PRBS31的检测器如果检测到反向极性会报海量误码同时显示同步丢失。检查方法很简单把仪表接收端极性反转看误码是否消失。参考地电位差。误码仪和DUT如果接在不同插座、不同电源域地平面之间会有几十mV甚至几百mV的电位差。这个直流偏置会压缩差分信号的有效摆幅导致采样误判。通常把两者接到同一个电源排插、共地之后问题立刻消失。误码计数器的触发设置错误。部分仪表支持bit错误和symbol错误分开计数同时有前向纠错统计功能必须确认当前显示的项目是物理层BER而不是FEC纠错次数。5.3 几个真正值得注意的仪表设置细节被测信号幅度不要超出仪表输入范围。很多误码仪接收端的输入幅度上限只有1Vppd超出后内部限幅器会非线性饱和产生类似误码的读数。长序列测试时周期性地检查同步状态。PRBS31测试时间可能长达几小时中途如果链路抖动瞬时变大导致同步丢失仪表会停止统计。但有些仪表的默认行为是重新同步后继续计数如果不留意状态位的变化最终读数可能包含同步丢失期间的无效数据。使用外部参考时钟时务必检查频率精度。误码仪和DUT使用的参考时钟如果来源不同频率偏差会随着测试时间累积导致长序列尾部出现系统性误码。实测发现10ppm的频偏在几分钟测试后会导致误码率虚高一个数量级。在软件脚本里加入误码率趋势记录。不要让仪表只输出一个累计BER值最好把误码的时间戳、功率监测、温度传感器的数据同步记录下来。后期排查定位时这些时间序列数据远比单一BER数字有价值。6. 我个人实际用PRBS31的一点体会做高速SerDes验证这些年我越来越觉得测试码型的选择反映的是一个工程师对链路真实失效模式的理解深度。PRBS7像是一条平坦的公路路况好、视野开阔跑测试像是兜风PRBS31则是一条在山谷和隧道里穿行的真实公路有长坡、有盲区、有暗弯这才是量产设备要面对的真实环境。我现在的习惯是同一块测试板卡PRBS7和PRBS31的测试结果并排记录。PRBS7负责快速暴露粗大问题PRBS31负责验证链路的长时间稳定性。如果两者结论差异很大那几乎可以断定问题出在低频特性或长游程相关的设计缺陷上——这类问题往往是最难在仿真阶段发现的。另外一个体会是关于测试时间的。很多同事跑PRBS31测了30秒看到0误码就宣布链路通过我建议把测试时间拉长到至少一个完整PRBS31序列周期25Gbps下约86秒最好再加一个数量级。误码是概率事件跑的时间越短测到0误码的偶然性就越大。一个可以复现的判断方式是在收发两端都稳定、环境温度也平稳的情况下至少跑够10分钟再下结论。最后送大家一个实用的操作习惯每次误码测试结束后顺手把误码仪的码型参数、去加量设置、采样点位置、误码计数、测试时长、环境温度导成一个PDF或截图存档。这个习惯在项目评审和客户审厂时价值巨大——因为误码测试的可信度永远建立在可追溯的配置记录之上。