
搞硬件设计这几年我最怕听到的一句话就是“这板子上的SerDes接口点不亮。”如果是低速I2C、UART拿示波器慢慢量总能找到问题但SerDes这种高速串行链路一旦上去就是Gbps级别示波器探头一碰就是loading信号直接变形根本没法用常规手段去量。很多做单片机或者嵌入式硬件出身的朋友第一次接触SerDes都会有这种无力感——明明照着参考设计画的板子为什么就是不工作这篇文章我就从SerDes硬件设计原理出发把串行传输的核心机制、原理图到PCB的实操要点、信号完整性和均衡补偿这些关键环节一次讲清楚。内容不搞虚的全部以我实际调试过的项目经验为基础适合正在做DDR4、PCIe、SGMII、XAUI这类高速接口硬件设计的工程师也适合刚从51单片机、低速总线转型做高速硬件的朋友作为入门参考。1. 先从根上说清楚SerDes到底在忙什么1.1 串行与并行一次带宽的博弈要理解SerDesSerializer/Deserializer串行器/解串器先得理解一个最朴素的问题为什么要费劲把并行数据转成串行再传早年内部总线大多数是并行的地址总线、数据总线一大堆频率拉不高是因为并行总线存在两个绕不开的硬伤一是布线通道太多板级面积和走线资源撑不住二是并行信号之间有skew偏斜问题每根线的长度、过孔数量、参考平面稍有差异数据到达的时间就不一致。随着速率上升这个时间差相对于一个bit周期变得越来越大总线就没法用了。SerDes的思路是反过来的在发送端把N bit并行数据通过移位寄存器或者内嵌的编解码逻辑转成1 bit串行数据流在接收端再把1 bit串行流恢复成N bit并行数据。一句话概括就是用时间换空间——用更高的速率去换更少的引脚。因为速率快信号本身的上升沿、下降沿极陡整个链路就必须按传输线理论来处理。这里有个很多初学者容易懵的点说“串行速率低”那是误解。串行只是线路少不是速度慢。比如一条10Gbps的SerDes链路单通道速率就是10Gbps一颗芯片常有几十条这样的通道。所以SerDes硬件设计的核心矛盾从来不是在“算不算得过来”而是在“这么高的速率下信号还能不能保持完整到达对端”。1.2 SerDes内部发生了什么从并到串再到并打开一颗SerDes芯片的datasheet看到的框图通常是这样的发送端有PISO并行输入串行输出、编码器、驱动器接收端有均衡器、CDR时钟数据恢复、解码器、SIPO串行输入并行输出。看起来只是几个功能块实际每个模块都不简单。发送端的核心动作是把并行数据加上编码变成带有足够跳变沿的串行码流。之所以要编码是因为接收端需要从数据里恢复出时钟——如果发送一串全0或全1接收端根本没法判断bit边界在哪里。常见的8b/10b编码会把8 bit数据变成10 bit码流保证连0或连1不超过一定长度并且保持直流平衡。更高速度下还有64b/66b、64b/67b等带扰码的方案。接收端的工作就更苛刻了。它拿到的是一路经过信道衰减、噪声叠加、码间干扰的模拟波形要做的事情是先通过CTLE连续时间线性均衡和DFE判决反馈均衡把波形整形再由CDR锁定相位从恢复的时钟边沿采样数据最后解码成并行数据。可以说接收端是SerDes真正的技术核心。1.3 为何不能按DDR4的方法来设计SerDes热词里同时有DDR4硬件设计和SerDes这俩放到一起看很有意思。DDR4虽然频率也到2400MT/s甚至更高但它本质还是并行总线靠的是源同步时钟——也就是发送端额外带一根时钟信号接收端用这根时钟去采数据所以DDR4布线的重点在“同组等长”让数据和时钟的飞行时间匹配上。SerDes不一样绝大多数协议不传独立的时钟接收端需要靠CDR自己从数据里恢复时钟。这意味着SerDes链路压根不存在“等长”这个概念吗也不是差分对内还是要等长但不同lane之间要求就宽松很多因为每一条lane都是独立恢复时钟的。我经常和团队里的人说做DDR走的是“对齐哲学”做SerDes走的是“均衡哲学”。你把DDR那套思维硬套到SerDes上比如给所有lane做严格等长、铺一整片地铜皮往往不仅没帮助还会引入不必要的过孔和残桩适得其反。理解这个本质区别是SerDes硬件设计入门的第一步。2. 原理图设计SerDes链路最容易被忽视的三个细节2.1 参考时钟整个系统的脉搏SerDes的参考时钟是很容易被轻视、但一出问题就要排查好几天的点。SGMII、PCIe、10GE这些协议对参考时钟的频率精度和抖动都有明确要求常见的是100MHz、125MHz或156.25MHz。很多人画原理图时直接从主控芯片拉一个时钟出来用结果链路上误码率时好时坏查到最后才发现参考时钟的抖动超标。参考时钟的关键参数包括频率容差和相位噪声。比如PCIe要求参考时钟的长期频率稳定度在±300ppm以内同时相位抖动要满足协议规范。实际设计中我倾向于使用专用的低抖动振荡器或者时钟缓冲器而不是让FPGA或者主控随便分频输出来用。PCB上参考时钟走线要短、要远离其他高速信号同时建议包地处理——虽然高速差分对不主张包地但时钟这种单端信号走线包地确实能显著降低耦合噪声。抖动这一项特别要提醒SerDes的CDR是有一定抖动容忍能力的但不是无限容忍。参考时钟的抖动会直接叠加到发送端的输出抖动上进而影响接收端的眼图余量。这里面的逻辑关系可以用后面第4章的公式说明白但原理图阶段只要记住一个原则参考时钟的安静程度决定了你整个SerDes链路的天花板。2.2 AC耦合电容位置、容值都有讲究很多SerDes协议如PCIe、SATA、XAUI要求串行链路上串接AC耦合电容也就是常说的隔直电容。它的作用主要有两个一是隔离收发两端的直流工作点让两端可以独立选择共模电压二是配合接收端的端接电阻形成高通滤波防止低频噪声进入接收通道。电容容值的选取和协议有关。PCIe 3.0/4.0要求容值在176nF~265nF之间常见选220nFXAUI/SGMII这类千兆级链路通常用100nF或者220nF。选大了不行——低频截止点太低无法有效隔直选小了更不行——低频分量衰减太厉害导致码流的低频成分损失接收端均衡器压力剧增。电容位置也值得抠一下。尽量放在发送端靠近驱动器输出引脚这样能减少连接到发送端焊盘的stub长度。我看到不少layout工程师喜欢把电容摆在链路正中间理由是“对称好看”实际上对于高速链路来说对称并不带来电气性能优势反而是离发送端越近越能减小传输线不连续的影响。电容的封装也建议用0402或更小的0201因为越小的封装寄生电感越小插入损耗越可控。2.3 端接与共模电压100Ω差分不是一句空话SerDes差分对的差分阻抗通常要求100Ω有些协议比如USB 3.0要求90Ω。这个阻抗不是靠一两颗电阻“端接”出来的而是靠PCB叠层结构、线宽线距、参考平面共同决定的传输线特征阻抗。很多人画板时选了一组默认的差分线宽觉得“大家都是100Ω”实际上叠层一变线宽线距不变阻抗就跑了。原理图阶段的端接指的是在接收端的差分对之间加上交流端接。有些SerDes芯片内置了端接电阻芯片外就什么都不用加有些需要外部补齐。我的经验是先对照datasheet确认芯片是否内端接再决定外部要不要加。盲目加电阻会导致阻抗不匹配产生反射劣化信号质量。至于共模电压许多SerDes芯片的共模电压是内部产生或者需要外部电阻分压提供的。如果收发两端的共模电压不一致即使有AC耦合电容隔离也可能导致信号摆幅不足。调试时如果发现眼图上下不对称先查共模电压再看看AC耦合电容两端有没有偏置异常。3. 从原理图到PCBSerDes布线的实操方法3.1 叠层与参考平面先有好的“路”才有好的信号SerDes布线最重要的不是线怎么走而是叠层怎么定。差分信号的阻抗本质是由走线宽度、间距、介质厚度和介质常数共同决定的。在设计叠层时要确保每一层差分信号都有一个完整、连续的参考平面最好紧邻信号层形成紧密的电磁场耦合。举个实战例子一块四层板常规叠层是Signal-GND-Power-Signal两个信号层分别紧邻GND层和Power层。如果走线参考的是Power层Power层上的噪声和分割就会直接影响信号质量。所以对SerDes我建议要么把走线层放在GND层旁边要么确保Power层也是完整无分割的。高速设计中参考平面必须是连续的一条跨越分割槽的差分线简直就是给自己埋雷。差分线阻抗计算可以用Polar SI9000或Saturn PCB Toolkit输入叠层参数算出线宽线距。一般100Ω差分对在常规FR4上线宽约4~5mil线距约8~10mil边到边距离但这只供参考实际必须根据叠层参数重新计算。距离参考平面越远线就要越宽介质常数越高线就要越细参数是联动的。3.2 差分对内等长与对间长度两种不同尺度在第1.3节我提过SerDes不要求全局等长但差分对内等长是要做的。差分对内不等长意味着正负信号到达接收端的时间不一致差分信号会部分退化为共模信号导致电磁辐射增大、接收端差模分量减小。对内等长的匹配精度一般要求控制在5mil以内也就是0.127mm。这个数字听起来很小实际上在Allegro或KiCad中可以通过长度约束来管理。要注意的是做等长补偿时蛇形绕线的拐角处尽量使用45度角或圆弧不要用直角。拐角越锋利阻抗突变越严重蛇形线段本身的长度也会变成额外的容性负载。对间长度则完全不用太紧张。SGMII、PCIe这类基于Embedded Clock的协议每条lane独立恢复时钟lane之间的skew只要在协议允许范围内就没事。有些协议比如XAUI还会做lane-to-lane deskew就更不用担心。所以千万别把DDR4那种“整组走线误差不超过50mil”的思路用在SerDes上那纯粹是给自己增加布线难度。3.3 换层过孔与残桩布线的隐性杀手SerDes走线在复杂板卡上难免要换层每换一次层就要打两个过孔一个离开当前层一个进入目标层。过孔带来的寄生电容和电感会造成阻抗不连续在10Gbps以上的速率下一对过孔就能把眼图干掉一大截。换层时最要紧的是给过孔提供回流路径。差分信号从信号层穿到另一个信号层时电流回流也需要跟着换层如果两个参考平面之间没有足够的过孔连接回流电流就要绕远路造成回路面积变大辐射和串扰一起增加。实操中我会在换层过孔旁边至少加一对地过孔距离尽量靠近形成“信号过孔-地过孔-信号过孔”的三明治结构。残桩是另一个容易被忽略的点。如果你用的是通孔Through-hole via过孔有一截没有使用的过孔段会形成残桩就像一个短的传输线短线在高速率下会产生谐振造成信号反射。处理办法有两个一是使用背钻工艺把不用的过孔段钻掉二是干脆用激光盲孔或埋孔设计。对于10Gbps以上的设计背钻基本是标配。之前调试过一个10GE光口模块的板子信号速率10.3125Gbps刚开始眼图质量一直在协议标准的边缘徘徊。后来检查PCB发现有一处SerDes走线换层后过孔残桩长度达到32mil把残桩背钻之后眼图张开度直接提升了15%以上。这个案例我印象特别深从此之后凡是10Gbps以上的设计我都强制要求对SerDes换层过孔做背钻。热词里提到的rtl8261这类芯片通常也是通过SerDes接口连接主板上的PHY或者交换芯片虽然速率可能没那么夸张但布线的思路是一样的过孔残桩越小越好。3.4 连接器区域的布线处理这是最容易翻车的地方SerDes信号如果要从板内连到板外比如PCBA板对板连接器、SFP笼子或者标准PCIe插槽连接器区域就是整个链路中最不连续的部分。连接器引脚本身有寄生电容相邻引脚之间的串扰也很严重。处理连接器区域的原则是差分对进入连接器之前尽量保持完整的参考平面连接器下方的所有层都要铺地铜不要在连接器正下方走其他信号。还有一点连接器引脚处的stub要尽可能短也就是说差分线最好是直接接到连接器焊盘上而不是走过一段细线再连出来。另外连接器选型也直接影响SerDes性能。如果是10Gbps以上的链路建议选择经过验证的高速连接器脚距和屏蔽结构都会影响回流。不要图便宜选通用排针当高速连接器用那是把模拟信号往火坑里推。4. 信号调理与均衡FFE/CTLE/DFE怎么配合4.1 为什么要加均衡器信号在信道里经历了什么信号在PCB走线、连接器、电缆中传输时介质的损耗和导体的趋肤效应会共同作用对高频分量造成衰减。一个非常干净的方波信号走了几十厘米之后上升沿变缓、幅度变小甚至相邻bit之间产生严重重叠这就是码间干扰ISI。信道越长ISI越严重接收端完全没法直接判决出正确的0和1。均衡器的思路就是“缺什么补什么”既然高频衰减得多那就在链路中补偿高频增益既然前一个bit拖尾影响了当前bit那就把前一个bit的影响减去。SerDes的均衡分为发端EQFFE和收端EQCTLE、DFE两者配合起来才能把千疮百孔的波形恢复成可以判决的信号。4.2 发端调FFE收端调CTLE和DFEFFEFeed-Forward Equalizer前馈均衡器是发送端的“预失真”技术。它会在发送时对信号做一些额外的整形——把当前bit的边沿拉得更陡同时把前后bit的幅度做一些调整目的是一开始就对信道损耗做反向补偿。PCIe、10GBase-KR这些协议内部都有类似CTLE和DFE的均衡机制所以不同速率的口互相连接时经常会遇到两个设备自动协商均衡参数的场景。CTLE连续时间线性均衡是接收端的第一道工序。它是一个模拟高通滤波器对高频分量提供额外增益用来补偿信道的低通特性。CTLE的增益不能调太高否则高频噪声也会被一并放大眼图看起来是大了信噪比反而下降。DFE判决反馈均衡是接收端的关键杀招。它根据前面判决出的bit值对当前bit的接收阈值做校正专门对付码间干扰。DFE的tap数量越多消除ISI的能力越强通常SerDes接收端会有1~5个tap。DFE的优点是不会像CTLE那样放大高频噪声缺点是需要CDR先锁定工作状态比较复杂调试时需要和CTLE配合调整。很多芯片提供自动协商和自适应均衡功能硬件工程师在原理图阶段基本上只需要保证均衡器有正确的电源和配置接口不用自己去算每个tap的系数。但如果需要手动调优我的经验是先固定发端FFE扫CTLE找到眼图最大的点再打开DFE看能否进一步改善最后再微调FFE形成一个完整闭环。调优过程中记得记录每一组配置对应的眼图张开度这个记录是后续排查问题的宝贵一手资料。4.3 均衡参数的物理意义一个类比帮你彻底理解前面说了一堆全称和缩写可能有些朋友已经看晕了。我用一个打电话的类比来总结一下FFE、CTLE、DFE各自在做什么。假设你在嘈杂的房间里给远方的人打电话对方说话声音又小又模糊。CTLE相当于你调大了高音旋钮把模糊的辅音听得更清楚但背景的嘶嘶声也大了DFE相当于对方每说一句话你就结合上一句话的内容提前预判这句话有可能被“拖尾”影响的部分自动在脑子里修正FFE则相当于让对方说话的时候刻意咬字更清楚、语速更均匀从源头上减少模糊。这个类比虽然不精确但足以帮初学者建立直觉发端FFE是源头治理收端CTLE是初步整形收端DFE是精确纠错。三者配合得当一条10Gbps的链路才能在普通FR4板材上稳稳跑通。5. 上板调试眼图、误码率与常见问题排查5.1 眼图怎么看快速判断SerDes健康状况SerDes链路调试最有力的工具是眼图。把大量bit的接收波形按bit周期叠加在一起就形成了眼图。眼图的横轴是一个bit周期纵轴是电压幅度中间张开的“眼睛”越大说明信号的裕量越充足。看眼图主要看三个指标眼高垂直张开度、眼宽水平张开度和抖动。眼高反映了信号幅度裕量眼宽反映了采样时刻裕量抖动反映了时序的不确定性。协议通常规定了一个最低的眼图模板只要眼图没有被模板压到误码率一般就能达到要求。但工程上一定要留裕量我习惯要求眼图的张开度比协议模板至少大10%~20%否则批量生产时板与板之间的差异一出来就可能出现偶发误码。眼图测试要用示波器专用探头或者直接使用芯片内置的环回测试功能。单独拿无源探头去点差分信号那是测不准的很可能测出比实际还差的眼图。有条件就买专用差分探头没条件就尽量使用芯片内部的PRBS测试和误码率统计功能。5.2 起手排查五步法从时钟到链路再到端接遇到SerDes链路不工作我一般按下面这个顺序排查效率最高第一步检查参考时钟。用示波器确认参考时钟引脚上有正确的频率和电压摆幅再看频谱确认没有过多抖动和杂散。很多时候问题出在时钟缓冲器配置不对或者时钟信号被临近的开关电源干扰。第二步检查配置寄存器。SerDes IP通常都需要初始化配置确定速率、编码方式、均衡参数、环回模式等。上电后先确认芯片的link training状态尤其是PCIe这类需要协商的协议协商失败的原因可能在两端能力不匹配。第三步检查AC耦合电容。确保电容在位、值正确、焊接良好。可以用万用表量电容两端是否有异常短路但更可靠的方法是回环测试——把发送端和接收端短接看是否自环通过。第四步检查差分信号通断。用示波器确认发送端和接收端焊盘处有没有信号幅度是否正常。如果发送端有信号、接收端没有问题就在中间链路上如果两端都没有问题在源端。第五步才是检查信号质量。如果功能通了但误码率高就要测眼图看是均衡不足、反射严重还是噪声太大。这五步走完绝大多数SerDes问题都能定位到具体环节。5.3 常见问题速查表这些年踩过的坑我把多年调SerDes链路时遇到过的高频问题整理成一张表方便大家对照排查现象可能原因处理方向链路完全不通参考时钟缺失/频率不对检查时钟源和配置寄存器偶发误码时好时坏电源纹波偏高或耦合噪声检查SerDes电源的PDN加去耦电容眼图高度不足CTLE增益不够或摆幅太低提高CTLE增益检查驱动摆幅配置眼宽明显变窄抖动偏大可能与参考时钟有关检查时钟抖动优化PCB走线高速率能跑通低速率反而报错AC耦合电容容值选择不当核对协议要求的容值范围一块板子好一块板子坏阻抗一致性差PCB加工偏差要求板厂阻抗测试报告调整设计余量靠近连接器处误码高连接器区域回流不连续加地孔优化连接器区域铺地这里特别提醒一下电源部分。SerDes的模拟电源和数字电源如果混在一起或者去耦不充分电源噪声会直接调制到信号上表现为眼图的上沿、下沿出现“毛边”。我见过不少设计信号链路本身画得很漂亮结果电源没处理好整板误码率就是压不下去。SerDes电源设计的原则是模拟电源单独LDO供电或者至少在靠近引脚处加磁珠隔离去耦电容要从0.1uF、1uF、10uF多级组合布局尽量靠近电源引脚。5.4 低功耗无线芯片的SerDes接口一个贴近实际的话题热词里有rtl8723du这类无线模组芯片这类芯片现在很常用有些版本也会带有SerDes接口来连接主机或者PHY。很多工程师拿到这类芯片的硬件设计指南看到SerDes字样就紧张其实不必。低速率的SerDes比如几百Mbps到几Gbps在设计上有很大的裕量只要把参考时钟、AC耦合电容、阻抗匹配三件事做对基本不会出大问题。我个人的建议是第一次做SerDes相关的项目时严格按照芯片厂商的参考设计来画不要自创一套。参考设计中每一颗电阻、电容都有它的道理特别是那些“看起来没用”的串阻、端接、共模扼流圈一旦去掉后期调试可能要花十倍的时间找回来。等做熟了之后再根据实际需求裁剪。所谓“硬件设计入门”里的SerDes部分其实就是一个“先原样复刻再理解消化”的过程千万不要在第一次设计时发挥创造力。这个思路也适用于rtl8261的设备互联等场景——先照着demo板画把参考设计吃透再优化布局和成本。6. 一个完整的调试案例从眼图惨不忍睹到稳定传输前几章讲了不少原理和技巧这里分享一个比较完整的实战经历可以帮你把知识串起来。有一回做一款带10GE光口的主板主控是某款FPGAPHY芯片通过SerDes连接到SFP光模块。板子回来后试产三块板中有两块能正常起来第三块一直报误码眼图测试结果惨不忍睹——眼睛几乎是闭着的。排查第一步确认参考时钟没问题第二步确认寄存器配置和别人一样第三步量发送端波形发现摆幅正常到了接收端眼图就完全塌了。这个现象说明问题出在链路的中间段于是拿放大镜查PCB走线发现这个板子在加工时有一处差分走线的参考平面被一颗大尺寸电容的焊盘打断导致回流路径被迫绕行形成了一个长达2cm的环路。处理办法是在电容焊盘旁边补了几颗地过孔把回流路径缩短再重新打样后就稳定了。这个案例最大的教训是SerDes链路的设计不仅是“走线好看就行”参考平面的完整性比走线本身的长度更关键。一颗电容、一个过孔、一个螺丝孔的位置都可能改变整条链路的性能。所以说做SerDes硬件设计真正的功夫是抠细节。每一段走线、每一个过孔、每一颗去耦电容的摆放位置都在为信号完整性服务。等你把这些细节都刻进下意识里就会发现高速串行接口其实没有那么玄妙它的设计逻辑是完全可以被理解和掌握的。回看这几年做过的项目我最大的感受是SerDes硬件设计不是一门靠“公式套用”就能搞定的学问它需要你在原理上想清楚在实操中抠细节在调试中积累手感。刚开始可以照抄参考设计但一定要边抄边想为什么遇到问题不要慌按着时钟、链路、电源、均衡的顺序逐步排查绝大多数问题都能定位到具体环节。每次调试完记得把波形截图、寄存器配置、板卡状态记录下来这些都是以后快速定位问题的宝贵财富。希望这篇文章能帮你少走一些我曾经走过的弯路。