
1. 串行链路里的DSP模块与它们为什么总是“打架”做过几轮高速SerDes链路调试的工程师应该都有这种感觉单看某个模块原理图、指标、仿真报告都说得通一旦把发送端均衡、接收端均衡、时钟恢复这些模块串到同一条链路上跑起来就会出现各种“莫名其妙”的现象——眼图明明在单模块仿真里是开的整条链路却收敛不了DFE抽头权重读出来一片乱码CDR锁定频率漂移几十个ppm找不到原因。这些问题的根源往往不在某个模块本身而在于模块和模块之间的DSP交互逻辑没有理清楚。1.1 SerDes DSP不只是均衡器先看清整个信号链在干什么SerDes的完整信号链可以分成几个环节每个环节对信号做一件“修复”工作。发送端先把并行数据转成串行比特流经过TX驱动器输出到信道。信道就是一段PCB走线、连接器、背板过孔它对高速信号做的事情非常“暴力”衰减高频分量、引入反射、带来串扰。信号在信道里走的距离越长、速率越高损伤就越严重。到了接收端信号已经不是一个干净的方波了而是一团被“压扁”的模拟波形体现在眼图上就是眼睛变小、抖动变大、码间干扰ISI严重。接收端接下来的工作是把这个损坏的信号尽量恢复成可以判别的数字信号。这里涉及几个关键模块CTLE连续时间线性均衡器模拟域里做的线性滤波器主要用来补偿信道的频率相关损耗把高频分量抬起来。AGC自动增益控制调节信号幅度到后端ADC或者比较器能处理的范围。DFE判决反馈均衡器利用之前判决出来的码元消除当前码元上的残余ISI属于非线性均衡对后标post-cursor干扰的抑制特别有效。CDR时钟数据恢复从接收数据里提取出时钟找出最佳的采样点。这四个模块在SerDes接收端按顺序协同工作而且每一个模块的参数都会影响后面模块的输入信号形态。这就是DSP interactions的核心它们不是四个孤立的黑盒而是一条链路上的四个相互耦合的调节环。1.2 为什么“独立调优”的思路在SerDes里走不通很多第一次接触高速链路调试的工程师会习惯性地采用“各个击破”的思路先把CTLE调好再看DFE最后调CDR。这个思路在低速或者短距离链路上勉强能跑但在56Gbps PAM4或者112Gbps这类高速链路上几乎一定会碰壁。原因在于链路的“均衡预算”是有限的。整个接收链路的均衡能力有个总量CTLE抬了多少高频增益DFE需要消除的后标幅度就会变化DFE抽头收敛得深不深会改变采样点附近的信号张度而采样点的位置又是由CDR决定的CDR的环路带宽和采样点的选择反过来又会决定DFE误差信号的统计特性。用一个生活化的类比来理解这三者就像三个人配合抬一张桌子进窄门。CTLE负责把桌子的前半部分抬高DFE负责修正桌面的扭曲CDR负责找准哪一刻能把整张桌子塞进门。如果一个人动作幅度过大另外两个人就不得不大幅度修正自己的动作甚至互相抵消。整套系统只有“配合着调”才能收敛到一个共同的最优点而不是各自调到各自的最优。2. 发射端均衡FFE抽头、增益与摆幅的协同发送端均衡在链路DSP交互里往往是被低估的角色。很多调试笔记的注意力都集中在接收端的CTLE和DFE上把发射端的FFE当成了一个“预设好就不用管”的参数。实际上发射端的设置会深刻地影响接收端DSP的收敛状态。2.1 FFE的预加重与去加重逻辑发送端FFE前馈均衡用一串抽头系数来塑造发送波形的频谱。最常见的形式是“去加重”主抽头决定发送幅度后抽头一般一两个决定相对主抽头的衰减量衰减相当于对高频分量做额外的强调。举个例子一条信道在5GHz处的衰减比在1GHz处多8dB那么FFE可以预先在发送端把高频分量多抬一点让信号经过信道之后各频率分量恢复到大体均衡的状态。这个“预先抬高频”在时域上表现为当发送码元从高电平跳到低电平时后面的码元被稍微压低当连续发送相同码元时输出幅度恢复到满幅。FFE抽头数量和权重的设计核心约束有两个一个是抽头数量不能无限增加因为每一级抽头都需要对应的模拟延迟线和驱动级面积和功耗吃不消另一个是抽头的权重分辨率决定了均衡精度。对于56Gbps以上的设计发送端FFE往往只有3到5个抽头能削的ISI范围有限所以接收端的CTLE/DFE还得继续兜底。2.2 TX幅度、压摆率与接收端AGC的隐性联动发送端FFE的权重设置会直接改变接收端看到的信号摆幅。主抽头权重大平均发送幅度就高后抽头权重拉低信号边缘会变得更陡峭但整体的平均幅度也可能被压低。接收端的AGC会基于接收信号幅度做自动调整。如果发射端主抽头权重过大接收端AGC会主动降低增益这时候如果信道损耗又很大信号经过CTLE之后的高频分量幅度可能不够如果发射端主抽头权重过小AGC会把增益拉得很高这时候CTLE和DFE输入端的噪声和串扰也会被放大。这里的一个实操心得是调试时不要只盯着接收端的CTLE/DFE寄存器也要把TX FFE的抽头权重读数打出来看。如果TX的主抽头权重在链路建立之后被训练算法调到接近上限甚至挂着上限说明接收端AGC大概率已经在“拼命喊救命”了此时应该优先调整信道设计或者TX预加重策略而不是继续在接收端均衡上死磕。我在某次背板链路的调试里就遇到过接收端DFE的第一个抽头权重读出来异常大怎么调CTLE都不对劲。后来把眼光放到发送端发现当时测试用的参考信号源FFE默认配置其实引入了过大的后标干扰。把TX侧前一个抽头的权重稍微拉高之后DFE第一条抽头权重立刻回落整个链路的抖动也降下来了。这个案例给我的教训很直接所谓DSP交互是真的会跨越发送端和接收端整条物理链路的。3. 接收端DSP核心链CTLE→AGC→DFE→CDR的编排接收端是整个SerDes DSP交互最密集的区域也是问题集中爆发的区域。这里每一个模块的系数调整都会“波及”其他模块。理解它们之间的耦合关系才是做好高速链路调优的关键。3.1 CTLE与AGC不能让“第一颗”均衡器吃太多增益CTLE在信号链里处于非常靠前的位置它直接处理从信道进来的模拟信号。CTLE可以补偿信道损耗但它有个致命软肋它没法区分“被信道衰减掉的高频信号”和“本来就在高频段的高频噪声”。CTLE把高频分量抬起来的同时也把高频噪声抬起来了。所以AGC和CTLE之间有个经典的“博弈”。AGC会根据输出信号的幅度调整增益CTLE根据信号的高频损伤情况调整高频增益。如果CTLE把高频增益拉得太高AGC为了让信号幅度不超出ADC的范围会整体压低增益。这样做的结果是信号的中低频部分反而被压得太低高频噪声却已经被“放大”了一轮最终信噪比反而恶化。实际操作上需要记住一个原则CTLE高频增益应当以一个较低的幅度姿态去补偿信道而不是把信道损耗完全“补平”。补平是一个陷阱因为你会同时补出一堆噪声。业界一般的做法是CTLE补偿信道损耗的60%到80%剩余的交给DFE来处理。DFE是判决反馈型的它在消除探头时的噪声放大效应上比CTLE优秀得多。3.2 DFE抽头权重与CDR鉴相信息之间的关系DFE是接收端均衡里“力气最大”的一环。它的核心思路是当前码元恢复之后把它对下一个码元的干扰减掉。因此DFE需要知道前面几个码元的值并且为每一个“前码元位置”分配一个权重。DFE的收敛过程依赖判决反馈环路而判决反馈环路需要准确的时钟来采样波形。CDR就是那个提供时钟的模块。于是出现了一个鸡生蛋蛋生鸡的问题DFE的收敛需要CDR给出好的采样点CDR的鉴相需要均衡后的信号呈现清晰的跳变沿。这个耦合在自适应算法里的体现是DFE抽头权重和CDR相位会互相“拉扯”。当DFE收敛不够充分时信号波形上还有残留的ISI这些ISI会被CDR的鉴相器误判为相位偏移导致CDR把采样点推到一个次优位置采样点次优又会让DFE的误差信号变大DFE进一步调整权重形成恶性循环。一个有效的排查手段是观察CDR积分路径上的相位控制字。如果这个控制字在DFE收敛前后出现大幅摆动就要怀疑均衡是不是还没收住。此时可以先强制把CDR固定在一个试验性的采样点比如最佳采样的左侧一点点让DFE先收敛再放开CDR让CDR自行找到最终采样位置。这种“分步收敛”的方法在实际调试中屡试不爽。3.3 动态运行时的DSP握手自适应的耦合与收敛顺序现代SerDes接收端的自适应算法大体上是分阶段收敛的。链路建立初期先跑CTLE和AGC的粗调让信号幅度落在合理范围内然后打开DFE自适应让抽头权重逐步收敛最后再由CDR沿着均衡后的眼图寻找最优采样相位。这个顺序是有讲究的。CTLE/AGC是模拟域的粗调响应快、稳定DFE是数字域的精确补偿收敛需要几个微秒级别的时间CDR则涉及整个采样环路的反馈带宽收敛最慢也最容易受前面两者的影响。如果上来就让CDR和DFE同时疯狂自适应经常会出现“二者都认为自己没错但整体性能就是差”的情形。实操里的一个技巧是观察所有自适应环路的收敛曲线而不是只看最终读数。以某个速率和信道条件为基准记录下CTLE、DFE抽头权重、CDR相位控制字随时间的变化轨迹。如果某一条曲线振荡幅度一直很大说明有另一个环路在跟它“纠缠”。把纠缠双方找出来优先固定其中一方问题往往会迎刃而解。4. 链路训练与DSP参数交接从握手状态机看交互高速SerDes链路从加电到正常收发数据并不是“信号一接上就能跑”的。它要经历一个链路训练阶段类似于两个人先用暗号试探对方再约定一套统一的“说话规则”。这套规则在以太网环境里叫链路训练Link Training在PCIe环境里叫LTSSM训练状态机。不管协议怎么叫背后的核心都是DSP参数的握手和交接。4.1 训练序列与Preset系数为什么第一步是握手链路训练的第一步是收发双方交换训练序列这些序列是预先约定好的、带有一定频率成分的长pattern。接收端用训练序列来评估信道质量并依此调整自己的均衡参数。训练序列的选择有讲究它要包含足够多的跳变沿才能让CDR锁定频率也要包含足够长的连续相同码元段才能让DFE观察到完整的后标拖尾。经典常用的PRBS7、PRBS9、PRBS31各有各的特性分别适合不同的测试目的。在握手阶段发送端通常会先按一组“预设”的FFE系数来发送信号。这些预设系数是从典型信道场景里统计出来的“平均最优值”不是针对当前信道的精确值。接收端拿到信号之后评估出信道特性再通过反馈通道把建议的系数调整信息送回发送端。这种“发送端-接收端”之间的系数交换本身就是一种DSP交互而且是跨芯片的交互。这里有一个容易忽略的点训练阶段传输的速率往往比正常工作速率低。这是因为在DSP参数还没收敛之前链路的承载能力有限强行跑满速率会导致训练序列上的误码率太高自适应算法根本无从评估。所以链路训练的握手是先慢速达成基本通信再逐步提速到目标速率最后在目标速率上完成精细均衡。4.2 收敛后DSP参数冻结的依据与风险当训练完成后收发双方的DSP参数通常会被“冻结”进入数据阶段。冻结不是随便冻的有一个判定标准在训练序列上达到目标误码率BER并且连续保持多个评估周期。但“冻结”本身也带来了风险。高速链路的信道条件不是永恒不变的。温度变化会让PCB的介电常数漂移电源电压波动会改变驱动器的输出摆幅连接器插拔会改变反射特性。参数被冻结之后这些缓慢漂移就没人去补偿了链路的眼图裕量会被慢慢“啃掉”。为此现代链路设计引入了后台自适应和周期性重训练机制。后台自适应允许DFE抽头权重在数据阶段继续微调但调整步长被限制得很小防止数据阶段的噪声把参数带偏。周期性重训练则是在链路质量下降到一定程度时主动切回训练阶段重新握手。实际的判断依据可以看误码率监控模块的实时数据。如果BER长期为零或者极低说明DSP参数和当前信道匹配良好如果BER在某个时间点突然跳变大概率是信道发生了实质性变化需要主动触发重训练。DSP交互不只是参数之间的耦合也包括时间维度上“训练-冻结-监测-重训”的循环。5. 实测经验一个眼图问题的排查过程实录讲了这么多原理最后分享一个真实场景下的排查案例。虽然具体项目做了脱敏处理以下统称为“某高速背板项目”但整个过程非常典型能帮大家把前面几章的交互逻辑串起来。5.1 案例描述与初步现象某公司的背板交换机项目单板上有若干条高速差分通道工作速率为56Gbps PAM4链路长度在20英寸左右。某天测试时发现某条通道的误码率明显偏高眼图在接收端示波器上看起来“眼睛睁不开”——上下眼皮之间有大量围绕采样点的“毛刺”。初步测试结果发射端信号本身的眼图在测试点上看起来正常眼高达到规范要求。接收端CTLE输出端的眼图高频分量没有明显缺损。DFE输出端的眼图上下两层的眼睛都偏小且中心区域有明显散射点。5.2 排查步骤从寄存器读数到隔离CDR/DFE第一步读取接收端DSP的寄存器状态。把CTLE的增益档位、AGC控制字、DFE抽头权重、CDR相位控制字都打出来。结果发现DFE第一个抽头权重偏大第二条抽头权重也明显非零而CDR的控制字持续在某个范围内摆动没有完全稳定下来。这个组合很可疑。DFE第二条抽头权重非零说明信道存在较长的反射拖尾CDR控制字摆动说明采样点一直在漂移。表面看起来像是信道反射问题但换一条参考链路测试时同样的信道条件却没有这个现象。于是怀疑问题出在模块间的耦合上。第二步按照前面说的“分步收敛”方法把CDR先固定在一个试探位置让DFE先收敛。结果DFE抽头权重明显回落说明DFE的收敛条件是满足的。然后放开CDR观察它找到的采样位置。发现CDR最终锁定的位置对比DFE收敛后的最优采样点存在大概0.2个UI的偏移。到这里问题已经比较清晰了CDR被什么因素“带偏了”。第三步回头查发送端的FFE设置。读取训练阶段协商出来的TX FFE系数发现主抽头和后抽头的比例与信号源默认值有差异。仔细检查原来这条通道的TX均衡参数是测试系统自动配置的配置过程中参考了一条特征相近但实际有差异的参考链路导致高频补偿量偏大。TX高频补偿偏大等效于在接收端输入了一个被“过度均衡”的信号波形的过冲加大。DFE为了消除过冲造成的后标会把第一个抽头权重推高。而DFE的变化改变了采样点附近的波形形态最终误导了CDR的鉴相。整条链就是因为TX侧的一个配置偏差引发了接收端三个DSP模块的连锁反应。第四步修正TX FFE参数把高频补偿降低到参考链路的较优配置重新跑链路训练。结果DFE抽头权重恢复正常水平CDR锁定稳定误码率降到仪器底噪级别整个问题解决。5.3 三种高频故障模式速查表把这些年遇到的SerDes DSP交互类问题整理成一个速查表供大家在调试时快速定位方向故障现象可能原因排查方向常见误区DFE抽头权重异常偏大TX均衡过度补偿或CTLE高频增益偏高检查TX FFE系数、CTLE增益档位只顾着调DFE增益CDR相位控制字持续摆动DFE未完全收敛CDR相位受ISI干扰分步收敛先固定CDR、收敛DFE直接加大CDR环路带宽眼图两侧不对称一侧塌陷CTLE引入相位失真或信道有反射点查看CTLE相位响应、TDR扫描信道认为是单纯信道反射链路训练完成后BER仍然偏高训练阶段与数据阶段信号条件不一致检查训练时是否使用完整速率的pattern忘记对比训练/数据两个阶段的参数这个表只能做为初步方向判断不能替代实际调试。真正的DSP交互问题往往涉及多参数联动需要拿着寄存器读数一点点对照分析。6. 最后再分享一个调试时非常实用的小习惯我做高速链路调试的习惯是拿到一块板子之后不管眼图开路还是闭路先把所有DSP模块的寄存器读数完整存一版存档。之后每调整一个参数就重新存一版。调试到深夜发现链路坏了找不到原因的时候把之前几版寄存器读数的差异拿出来比对经常比在示波器上抓波形有效得多。另一个小技巧是把DFE第一条抽头权重的“颗粒度”打出来看。对于现代SerDesDFE抽头权重通常是一组高精度的数字控制字这个控制字的变化粒度可以反映链路的稳定程度。如果这个值在小数点后第三位还在持续跳动说明链路的噪声基底很高如果这个值稳得纹丝不动说明链路被“冻”得过于死板信道一旦漂移就会出问题。“均衡不是越强越好收敛不是越快越好参数不是越稳越好”——这三句话基本概括了我这几年做SerDes DSP交互调试的核心体会。每个模块都有它的作用范围也有它的副作用边界。好的链路设计是在充分理解这些交互关系的前提下让每个模块各自收敛到恰到好处的位置。