ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SerDes硬件设计全解析:从原理到PCB布线的工程实践

SerDes硬件设计全解析:从原理到PCB布线的工程实践 第一次拿到一块带SerDes接口的板卡原理图时满眼都是TXN/TXP、RXN/RXP、refclk这些引脚说实话是有点懵的。那会儿我还在做传统并行总线的硬件设计总觉得SerDes这名字自带一股神秘感——几十对差分线、眼花缭乱的均衡器、莫名其妙的编码方式一度让我怀疑这东西是不是只有芯片原厂的AE才能玩明白。后来真正把一块8口千兆交换板卡调通反复看过眼图、排过几轮误码问题之后才慢慢摸清楚这东西的脾气。SerDes说白了就是Serializer/Deserializer串行器/解串器的缩写干的事情非常朴素发送端把并行数据变成一串高速比特流用一对差分线发出去接收端再把比特流恢复成并行数据。但就是这套串并转换逻辑撑起了几乎你能想到的所有高速接口——PCIe、USB、SATA、以太网、HDMI、DisplayPort全是SerDes的变体。对硬件工程师来说凡是涉及高速信号的项目基本上绕不开这堂课。这篇文章我不会照着芯片手册念也不会给你堆一大堆规范要求。我想从一个做板级硬件设计的人视角把SerDes的原理、选型、原理图设计、PCB布线、调试测试这条路完整讲一遍把那些手册上不会写、但实际项目里一定会踩的坑一并说出来。无论你是刚入门硬件设计的新人还是被某个高速链路问题折磨的工程师这篇都值得看完。1. SerDes到底是什么先把串行和高速这两件事掰开1.1 为什么并行总线会撞上速度天花板在SerDes大规模普及之前芯片间通信的主流是并行总线地址总线、数据总线、控制总线一堆信号线齐刷刷地并排走。DDR系列就是典型代表DDR4的数据线DQS/DQ几十根一起翻转频率提到1600MT/s以上之后板级设计难度直线上升。问题出在哪第一是时序收敛。并行总线在接收端要靠时钟沿去采样数据信号到达接收端的时刻如果参差不齐就会吃掉采样窗口。频率越高一个UIUnit Interval单位间隔的时间越短对走线等长的要求就越苛刻最后你会发现所有精力都耗在让这几十根线长得一模一样上。第二是串扰和功耗并行总线同时翻转时相邻走线之间的耦合噪声、地弹、开关噪声都非常难压。第三是引脚数量64位并行总线加时钟加控制轻松上百个引脚封装和PCB面积根本扛不住。可以这么理解并行总线像一条多车道城市道路车多、路口多彼此干扰严重想把车速提上去得先修路、拓宽、装红绿灯。这背后的代价是系统级的天价成本。1.2 SerDes的解题思路用一对差分线扛下所有SerDes的思路是反着来的与其让一堆线并行跑不如把数据掰成串用一对差分线拼命跑。一根发、一根收数据速率可以做到几Gbps甚至上百Gbps。为什么能这么快关键有三点差分信号天然抗共模噪声地弹和电源噪声的影响被大幅削弱。时钟不再单独走一根线而是通过CDR时钟数据恢复从数据流里把时钟抠出来彻底消灭了并行总线里最头疼的时钟偏斜问题。接收端有均衡器能主动补偿传输信道的高频损耗把信号修回原来的样子。这三件事加在一起等于把多车道铺开变成了单车道但车能跑300公里/小时而且完全不需要额外的时钟线。你可以把SerDes理解成一条全封闭高速公路没有红绿灯没有路口所有车排队高速飞驰到终点再重新排成多车道进城。1.3 你身边那些隐藏的SerDes协议速率分级SerDes本身是一种物理层技术但实际使用中几乎都是跟随协议出现的。不同协议对SerDes的设计要求差别非常大协议典型速率编码方式典型应用SGMII/1000BASE-X1.25Gbps8B/10B千兆以太网PHY与MAC连接PCIe 3.08GT/s128B/130BCPU与GPU、NVMe、网卡10G以太网10.3125Gbps64B/66B交换机、光模块、服务器网卡USB 3.210Gbps起128B/132B外设接口25G/100G以太网25.78125Gbps64B/66B RS-FEC数据中心互联注意一个规律速率上了10G之后电路板损耗、连接器、走线长度的影响会更加显著均衡器、FEC都成了标配。而1.25G的SGMII这类轻量级SerDes则相对好处理很多这也是很多新手学习SerDes时从千兆以太网入手的原因。2. 一条SerDes链路的完整架构从TX差分对到RX的均衡器2.1 发送端除了把并行转串行TX还在悄悄补偿信道发送端TX的核心任务是把来自协议层的并行数据转为高速串行比特流然后通过差分对打出去。这中间有几个重要模块并行转串行移位寄存器在发送时钟的控制下把N位并行数据依次移出形成1bit串行流。PMA和PCS之间的并行总线宽度通常是8、10、16、20、32、40位取决于SerDes速率和架构。TX均衡包括预加重Pre-emphasis和去加重De-emphasis。原理是在比特跳变沿处增强驱动电流或者对连续不变的比特做衰减相当于给信号提前打了一针强心剂用来对抗传输信道的低通特性。因为信道对高频分量损耗大2000mil走线过去早就变成了圆头圆脑的波形TX不补偿一下RX根本认不出来。输出摆幅控制典型CML差分输出摆幅在400mV到800mV之间需要根据对端芯片的接收灵敏度调整。摆幅太大容易带来EMI太小则接收端信噪比不够这个参数通常可以通过寄存器配置。工程上有意思的是很多工程师以为去加重是固定设置一次就完事但实际链路里不同速率、不同走线长度最优的去加重系数完全不一样。我在项目里就遇到过PCIe链路因为去加重设置过强导致信号在接收端出现过冲甚至振铃的情况最后把寄存器值降了一档眼图立刻变干净。这种匹配只能靠实测不能靠想象。2.2 接收端CTLE、DFE和CDR三位一体的信号修复系统接收端RX比发送端复杂得多因为信号一路从对端芯片、连接器、PCB走线走到这里已经伤痕累累需要一套完整的修复流程输入端接通常片内已经集成100Ω差分端接把信号能量尽量吸收进芯片减少反射。很多手册会强调外部不需要再加电阻这是好事省了板上器件但也意味着没机会通过外部端接去调链路。CTLE连续时间线性均衡器本质是一个有源高通滤波器放大信号中的高频分量压低低频增益把被信道衰减的高频部分抬回来。CTLE的增益、零点频率一般都可以通过寄存器调节调试时配合眼图看效果。DFE判决反馈均衡器CTLE补偿的是信道的主损耗但信道还有一种问题叫后尾干扰post-cursor ISI当前比特受到前面比特的拖尾影响。DFE的思路是根据已经判决出的前几个比特值构建一个干扰信号从当前输入中减掉。CTLE是从头修信号DFE是修完再判决判决完再回头擦尾巴两者配合起来信号才能被彻底修好。CDR时钟数据恢复这是SerDes的大脑。它从数据边沿中提取时钟再决定在哪个时刻采样信号。常见架构有PLL型的也有相位插值型的。CDR收敛速度、抖动容忍度、环路带宽都会影响实际链路的稳定性。这三者必须配合。CTLE和DFE的设置如果太激进虽然可以把高频分量抬得很高但也会把串扰噪声一起放大CDR如果带宽太窄跟踪不上频率漂移如果太宽抖动又会变大。实际调试时我习惯的顺序是先把CDR锁定让它自己恢复时钟然后从CTLE低增益开始扫再根据眼图情况逐步加DFE。切忌一上来就全开均衡那样眼图往往反而盖上了厚厚的噪声底。2.3 协议层的隐形功臣8B/10B、加扰和CRC在干什么物理层之上SerDes链路几乎都伴随一种编码机制。最常见的8B/10B编码把8bit数据映射成10bit码字作用非常巧妙保证直流平衡电信号在传输线上如果长时间保持同一个电平接收端的AC耦合电容会被充饱导致信号塌陷。8B/10B保证码字中1和0的数量尽量均衡避免长时间没有跳变。提供足够的跳变密度CDR需要从数据边沿恢复时钟如果数据流全是000000CDR就没法工作。8B/10B通过游程长度限制确保任何时刻信号都有足够的跳变沿。错误检测无效码字可以直接报错虽然不能纠错但能及时发现链路异常。到了10G以上8B/10B的开销太大多了25%的带宽于是出现64B/66B、128B/130B这类更高效率的编码。它们不再靠编码保证直流平衡而是靠加扰Scrambling——用一个伪随机序列把数据打散让数据流在统计上始终保持随机性从而避免频谱尖峰降低EMI。此外25G/100G以太网还会引入RS-FEC前向纠错在协议层面容忍一定量的物理层误码。这件事给硬件工程师的启示是如果你发现链路误码很高先别急着怀疑PCB先确认协议层的FEC有没有开启——它可能是最后一根救命稻草。3. 硬件设计绕不开的三个核心原理图、电源、参考时钟3.1 原理图设计SerDes引脚、AC耦合电容和端接细节SerDes原理图设计表面上看很简单不就是一对TX、一对RX吗真做起来细节非常多。AC耦合电容是绕不开的第一个环节。绝大多数SerDes标准都要求收发端之间串接直流隔直电容目的有两个允许收发两端各自的工作点电压不同同时也能滤掉直流偏置误差。电容一般放在接收端附近容值典型值有0.1uF、0.01uF具体看协议手册。封装建议用0402或0201尺寸越大寄生电感越大对高频信号越不友好。这里有个容易被忽视的点AC耦合电容如果放置位置离接收端太远会在电容和接收端之间留下一段阻抗不连续的传输线产生反射。所以手册让你靠近接收端不是因为美观是因为电气要求。差分端接方面新一代SerDes接收端基本都在芯片内部集成了100Ω端接原理图上不用额外画。但如果你用的芯片支持外部端接配置或者你需要在板上做信号探测点可以考虑预留0402封装的位置。另外SerDes引脚通常还伴随一些管理引脚MDIO/I2C/SPI用来配置SerDes寄存器和读取链路状态原理图上一定要把这些管理通道接出来否则后续调试时你连看寄存器都看不了。还有ESD保护的问题。很多新手习惯性地在高速信号上放TVS管结果信号完整性直接被TVS的寄生电容毁了。如果板子确实要过ESD测试优先选择寄生电容小于1pF的TVS并且只放在连接器端不放中间链路。3.2 电源设计SerDes对纹波的敏感可能超出你的预期SerDes内部有PLL、CDR、高速驱动器和接收前端这些电路对电源噪声的敏感度是传统数字电路无法比的。数字芯片的core电源纹波容忍个几十mV没问题SerDes的模拟电源AVDD通常要求纹波在10mV以内很多芯片手册甚至标到5mV以下。这不是玄学。举个例子参考时钟的抖动一部分来自时钟源本身另一部分会通过电源耦合进来。如果给PLL供电的电源纹波超标PLL输出的时钟抖动就会恶化直接反映在眼图的水平方向上表现为抖动加大、误码上升。我在调试一块板卡时遇到过SerDes链路误码率在百万分之一左右下不去查来查去最后发现某颗DCDC的开关频率2.25MHz和它的谐波正好落在SerDes电源的敏感频段上把一个磁珠电容的π型滤波加上去之后误码立刻归零。这种问题在原理图阶段就要预防。电源设计方面建议直接按下面这个思路来尽量用LDO给SerDes的PLL模拟电源供电或者至少用DCDC π型滤波磁珠多颗并联去耦电容。磁珠选型注意看阻抗曲线别只看100MHz阻抗要看在DCDC开关频率处有没有足够的插入损耗。去耦电容容量要拉开档次1uF、0.1uF、0.01uF、1nF交替放置贴近电源引脚。SerDes的模拟电源走线要独立尽量不要和数字电源共享同一段平面避免数字电源的开关噪声灌进来。3.3 参考时钟链路抖动预算里最容易失控的环SerDes的参考时钟refclk决定了CDR初始频率和PLL的基准一旦参考时钟抖动超标后续的所有均衡补偿都救不回来。参考时钟的精度要求一般分成两个层面频率精度比如±100ppm和相位噪声/抖动比如PCIe Gen3要求refclk的总抖动小于某个值。实际设计时晶振还是有源振荡器、TCXO还是普通XO取决于系统需要。普通以太网应用用25MHz或125MHz晶体配芯片内部的振荡电路就够了但要求高性能、低抖动的场合直接选一个低相位噪声的有源振荡器更稳妥。另外SSC扩频时钟也是一个值得关注的特性——它是一种让时钟频率在小范围内周期性变化的机制目的是把信号能量在频域上摊开降低EMI。如果你的系统里存在EMI超标问题优先看SerDes的refclk支不支持SSC支持的话可以开启代价是链路本身的抖动预算要被吃掉一小部分。参考时钟的走线要短、要直、要包地或者做阻抗匹配尽量避免过孔换层。如果多颗SerDes芯片共用同一个refclk要用带缓冲的时钟buffer扇出不要去串电阻分线否则时钟边沿变劣抖动量会成倍增加。4. PCB布线才是SerDes设计的硬仗从阻抗到叠层4.1 差分阻抗100Ω不是刻在石头上的但偏离了就出问题绝大多数SerDes差分对的特性阻抗目标是100Ω少数协议如某些SATA场景可能是85Ω。这里的阻抗不是用万用表量得出来的它取决于线宽、线距、参考平面距离和介质材料。做PCB叠层设计时SI工程师会用场求解器去计算线宽线距但到了硬件工程师手里要做的是确保走线按照规定的线宽线距来布线不要为了让线好走就随便加宽或压缩。这里有个工程经验阻抗值算出来是100Ω和实际测出来是100Ω之间还有一段路。PCB厂商的板材介电常数可能和计算模型有偏差加工出来的线宽也有公差所以一定要在制板说明里注明高速差分对阻抗按100±10%控制并且要求厂商用TDR抽检。我在真实项目里遇到过阻抗做成了120Ω的情况差分回波损耗直接崩掉整个链路的眼图都会变差。这个问题如果在原理图阶段没法发现就只能改板成本和时间都够喝一壶的。差分对不仅要在PCB走线上保持阻抗一致过孔位置也一样。过孔的孔径、焊盘、反焊盘尺寸、参考平面距离都会影响过孔阻抗。建议高速差分对换层处将过孔周围的反焊盘按建议值开大减少过孔寄生电容让阻抗尽量平滑。4.2 等长设计对内等长、对间等长与过孔的处理SerDes的等长设计和并行总线还有区别。并行总线要求每根线差不多长是因为要同时采样差分对要求对内严格等长是因为差分信号靠的是两根线上的电压差如果P和N两路到达时间不同就会把差分信号扭成共模信号导致接收端差分接收质量下降。一般协议要求对内等长控制在±5mil有些更严格的芯片手册甚至要求±2mil。对间等长比如一个多通道SerDes的lane0和lane1之间的要求就没那么严了通常控制在几百mil甚至几个毫米都行因为每个通道有独立CDR不需要跨lane对齐。但如果你做的是需要多通道同步的协议比如PCIe的x16那还是要看协议层对skew的要求该等长就等长。做等长时有一个细节经常被新手忽略过孔本身也会贡献额外时延。一个过孔的时延大概相当于几十mil到上百mil的走线如果你在P线上打了孔而在N线上没打孔之前算的等长可能就白算了。建议是P/N差分对要么都不过孔要么同时过孔同时把过孔长度计入等长约束。另外蛇形线补偿等长时注意蛇形的相邻线段间距至少保持3倍线距以上否则会引入额外耦合反而制造串扰。4.3 叠层、参考平面与过孔stub高速链路的地基SerDes布线前最该确认的是叠层结构。高速信号层必须紧邻一个完整参考平面通常是地平面这样信号的回流路径才是紧贴走线的、低电感的。如果高速层下方被电源平面劈开回流信号就得绕路环路面积变大EMI和信号完整性问题都会跟着来。另一个大坑是过孔stub。信号从表层走到内层过孔的贯穿部分如果还剩下很长一段不通的镀铜就会形成一条开放式传输线在某个频率点上产生谐振把信号的损耗和反射打上去。高速SerDes设计中背钻技术就是把这截没用的stub钻掉。在25G/100G这种超高密度应用的板上背钻几乎是必选项在10G以下如果过孔长度不长比如6层板、过孔总长1mm左右有时候可以不背钻但需要在仿真或测试里确认。我做了一个简单的对照表方便你判断自己的项目有没有必要上背钻信号速率过孔stub长度是否需要背钻1G~5G15mil一般不用1G~5G20mil视链路余量决定8G~16G任意强烈建议25G以上任意必须另外连接器区域是SerDes链路里最难处理的部分。连接器的引脚会产生阻抗不连续相邻pin间会有串扰建议连接器下方禁止走线连接器四周多打地孔缝合给信号提供完整的参考。5. 测试与调试用眼图、误码率和回环定位问题5.1 回环测试上电后第一个该做的事情SerDes调试的第一步永远不是拿示波器去点而是做回环Loopback。回环就是把TX的数据从内部或外部绕回RX主要分两种远端回环Remote Loopback数据从对端芯片的RX收到后马上从TX发回本端。这种回环可以验证整条链路含物理层、PCB走线、连接器、对端芯片。近端回环Local Loopback数据不经过物理链路直接在芯片内部从TX绕回RX。这种回环验证的是芯片自身的收发通路和寄存器配置。实际调试时我会先用近端回环确认芯片本身工作正常再用远端回环验证整条链路。如果近端回环就报错问题基本锁定在芯片配置或时钟/电源上如果近端通过而远端失败那就老老实实去查PCB链路和信号质量。回环测试通常配合PRBS伪随机二进制序列发生器和误码检测器一起用直接在芯片内部生成PRBS7/PRBS15/PRBS31并计数误码这比intel平台、linux下用软件打流更底层也更容易定位问题。5.2 眼图测试读懂那只看眼睛眼图是SerDes调试最重要的可视化工具。示波器把无数个UI的波形叠加在一起就形成了眼睛的形状。眼图能直观看出信号质量眼睛睁得越大信号裕量越好眼睛浑浊、轮廓模糊说明噪声或抖动严重。测量眼图时注意几个点示波器带宽至少是信号速率的三倍以上。测10.3125Gbps的信号用25GHz端口的示波器才靠谱带宽不够会把眼睛测小。探头要选差分有源探头探头尖尽量贴近接收端芯片的引脚因为测到的波形必须包含完整的链路效应。眼图测试的位置很关键。协议规范通常会规定测试点是芯片引脚还是连接器处测试点不同眼图的结果可能天差地别。你可以把它理解成在赛道终点测成绩和在半路测成绩难度完全不同。用眼图模板Mask测试时如果信号碰到了模板说明链路裕量不足。这时回到可调参数上先看CTLE能不能再往上叠再看DFE还不行就检查TX去加重、检查电源纹波、检查参考时钟抖动。眼图只是结果真正的病根往往在眼图之外线性排查别跳步。5.3 误码率排查从电源噪声到板级串扰的检查链路误码率BER是SerDes链路的最终体检指标。绝大多数高速协议要求BER低于1e-12你不可能真跑那么久去验证所以工程上常用的是用PRBS测试跑一段时间比如在10Gbps速率下跑100秒接收1e12比特如果没有误码就可以认为BER达标。如果真遇到误码率超标我建议按下面的顺序排查先排除配置问题确认TX/RX均衡参数、时钟频率、协议模式是不是对得上。再看电源示波器AC耦合测SerDes附近电源引脚纹波看是否有明显的周期性毛刺尤其要关注DCDC开关频率分量。时钟抖动用频谱仪或示波器看参考时钟的相位噪声异常时直接换一颗低抖动晶振做AB对比。链路无源特性用TDR测差分对阻抗曲线找阻抗突变点或者用网络分析仪测差分S参数。板级串扰看看差分对附近有没有平行走线穿过去特别是密集BGA区域的空洞和反焊盘区。散热温度某些误码问题在高温下才会暴露做环境温度测试时要特别注意。一次真实的排查经历某块板卡的25G链路在正常工作温度下误码率极低但温度升到70℃以后误码率飙升。一开始怀疑是芯片温度特性后来发现是DCDC的环路补偿随温度变化后输出纹波变大电源噪声耦合进SerDes的RX前端导致接收灵敏度恶化。换了更大裕量的设计方案后问题才彻底解决。这种问题和具体电路强相关只能靠一步步排查不能指望靠均衡器参数硬扛均衡器是修信号的不是修电源的。6. 最后分享几条真正值钱的工程经验第一条SerDes的不工作大多数情况下不是SerDes本身的问题而是它的外围环境有问题。我见过太多人一上来就拧均衡器、改寄存器折腾半天没用最后发现是参考时钟频率配置错了。调试时先确认最基本的供电对不对、时钟有没有、复位有没有释放、配置通道通不通。这四件事只要有一个不对后续所有工作都是白费。第二条参考设计是值钱的但不要无脑照抄。芯片原厂的参考设计确实经过了验证但它的目标场景和你的实际项目不一定完全一致。比如参考设计可能用了昂贵的板材和特殊叠层到你这里为了降成本换了普通板材那走线长度、过孔数量、连接器选型都要跟着重新评估。抄参考设计要抄的是它为什么这么设计——为什么电容放这里、为什么走线这样走——而不是把图纸抄一遍就以为万事大吉。第三条仿真和实测要配合。SerDes链路仿真比如用HyperLynx/SIwave可以在原理图阶段发现很多阻抗和串扰问题但仿真模型再精细也模拟不了真实板厂加工误差、连接器批次差异、电源动态响应这些变量。我的一次项目里仿真结果显示链路余量充足实际打板后眼图闭合了一半查下来是板厂把玻纤布选错了导致差分对阻抗偏了不少。所以正确的做法是仿真用来做方案决策实测用来做最终验收两者缺一不可。第四条和软件团队保持沟通。SerDes链路的很多问题在硬件看来是调节均衡器参数但在软件看来是改寄存器配置。这两者其实是一回事。如果硬件和软件配合不好经常会出现硬件说寄存器没配、软件说上电时序不对的死循环。项目一开始就定好寄存器配置清单模板、上电时序文档以及故障时的日志抓取方式后面调试会省非常多的时间。SerDes硬件设计这件事入门门槛确实有点高但一旦你把串并转换、编码、均衡、时钟恢复这条链路从原理到实践完整走一遍再去碰任何高速接口都会觉得其实都是同一套底层逻辑。希望这篇分享能帮你少走一些弯路。如果后面有机会我还会再单独写一写具体芯片手册怎么看、眼图模板怎么设这些实操细节到时候见。
返回列表