ARTICLE DETAIL

资讯详情

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

SerDes硬件设计实战:从原理到眼图调试的完整指南

SerDes硬件设计实战:从原理到眼图调试的完整指南 1. SerDes到底是什么以及为什么非它不可前阵子调试一块板子FPGA要和远端交换芯片通信接口是SerDes。同事问我“这玩意儿不就是把并行数据转成串行吗有什么好讲的”我当时笑笑没急着反驳。等他把眼图调得一塌糊涂、误码率压不下去的时候才意识到SerDes这潭水比想象中深得多。先说清楚SerDes是什么。SerDes是Serializer/Deserializer的缩写一个SerDes接口就干两件事发送端把并行数据转成高速串行比特流推出去接收端把串行比特流收下来再还原成并行数据。一收一发看起来对称但真正难的是“怎么把这一串比特在高速信道上完整地送过去”。为什么要用SerDes最直接的原因是并行总线跑不动了。传统的并行接口比如早期的PCI、DDR、LVDS总线数据线和时钟线同步走频率一旦往上提skew偏斜问题就出来了——有的线长一点有的线短一点到接收端时数据位和时钟位对不齐系统直接崩。SerDes把时钟嵌入到数据流里用CDRClock Data Recovery时钟数据恢复在接收端自己“挖”出时钟来从根本上绕开了skew的噩梦。还有一个优势是引脚数。同样传10Gbps的数据并行方案可能需要几十根线SerDes只要一对差分线就够了。PCB布线轻松一大截连接器也更小这对背板、线缆、板间互连的场景简直是救命级别的优势。这篇文章不是教科书是给真正在做硬件设计的人看的。核心受众有三类刚接触高速接口的硬件工程师被SerDes眼图调试折磨的新人以及想搞清楚“为什么原理图这么画、PCB要这么走”的进阶选手。我会把这几年调试SerDes接口踩过的坑、总结出来的套路全部摊开讲。2. SerDes的整体架构与设计思路拆解2.1 发送端和接收端的核心构成要理解SerDes设计得先把收发链路拆开看。一个典型的SerDes通道发送端TX包括并串转换器、编码器、均衡器TX EQ和驱动器接收端RX包括输入缓冲器、均衡器CTLE、DFE、CDR、解码器和串并转换器。两边合在一起才是一条完整的SerDes链路。发送端的核心任务是“把信号推出去并保证接收端能看懂”。这里的“看懂”包括两层意思一是电平要够接收端要能识别出0和1二是时序要准接收端的CDR要能从数据流里恢复出和发送端一致的时钟。为了做到这两点发送端的预加重Pre-emphasis和去加重De-emphasis起到了关键作用。信号在PCB走线里跑的时候高频分量衰减比低频严重得多如果不做处理接收端看到的方波早就变成圆角波了。预加重就是先把高频分量额外加强再发出去等信号经历了信道衰减到接收端时反而刚好恢复成方波。接收端的任务更繁重。信号经过长走线、过孔、连接器之后已经累积了大量损耗、反射和串扰接收端需要用CTLEContinuous Time Linear Equalization连续时间线性均衡先做一轮高频补偿再用DFEDecision Feedback Equalization判决反馈均衡把码间干扰ISI压下去。这两级均衡的选择和配合直接决定了链路能跑多远、多快。2.2 为什么方案选型时不能只看速率很多工程师选SerDes方案第一眼看速率——10G还是25G速率够了就用。但实际落地时你会发现速率只是最基础的约束真正决定方案好坏的是以下几个维度第一是通道预算。同样是10Gbps跑chip-to-chip的短距离和跑背板的长距离是两种完全不同的设计。短距离可能一个CTLE就搞定了长距离就得TX均衡、CTLE、DFE全部拉满甚至还要考虑前向纠错FEC。第二是协议兼容性。SerDes是物理层的概念但上面的协议层五花八门——PCIe、以太网、CPRI、JESD204B不同的协议对误码率、延迟、编码方式的要求都不一样。选型时不看协议后面调试时会吃大亏。第三是功耗和封装。同样速率下不同厂商的SerDes功耗差异能达到30%以上对散热敏感的产品尤其要谨慎。这些就是为什么我一直强调SerDes设计不是一个点的问题而是一条链的问题。从芯片选型开始到原理图设计、PCB布局布线、连接器选型、信号完整性仿真、实验室调试每一步都在影响最终的性能。3. 核心设计细节串行化、编码与时钟恢复3.1 并行数据是怎么“塞”进高速串行流的串行化的过程本质上就是一个并转串的排序过程。发送端的并行数据总线通常是8位、16位或者32位宽并转串电路按照预先设定的bit顺序把并行数据逐位地在串行时钟边沿送出去。但这里有个容易被忽视的问题并转串的时钟频率和系统参考时钟的关系。假设你要发10Gbps的串行数据而参考时钟是156.25MHz那么串行器就需要用一个PLL把参考时钟倍频到10GHz。这个PLL的相位噪声和抖动性能直接决定了发送端输出信号的抖动水平。所以看一个SerDes的发送端好不好不要只看输出摆幅要看它的PLL抖动指标。在串行数据流中维持比特顺序的周期性极其重要。接收端恢复出时钟之后必须知道“每一组的边界在哪里”才能把串行流重新切分成正确的并行字。这就引出了编码机制的必要性。3.2 8B/10B编码和64B/66B编码的作用SerDes最常用的编码有8B/10B和64B/66B两种。8B/10B编码把每8位数据映射成10位码字额外增加的两位用于保证比特流中有足够的跳变沿让接收端的CDR电路有信号可“锁”。同时它还能保证直流平衡——即0和1的个数在长期统计上均衡避免信号电平漂移。64B/66B编码则是以太网40G/100G中常见的选择开销更小只有约3%的额外比特但它需要更复杂的同步机制来保证收发双方的帧对齐。在实际硬件设计时编码方式通常在协议层就已经固定了硬件工程师不需要自己去实现编码器。但理解编码的意义对调试很有帮助。比如你看到接收端BER误码率测试时出现“失步”或者“码组同步丢失”的报错本质上就是因为接收端无法从比特流中识别出正确的码字边界。这时候检查的东西就多了参考时钟准不准、CDR有没有锁住、均衡参数合不合理、信道有没有产生过多的确定性抖动。3.3 CDR是如何从数据流里“抠”出时钟的CDR的工作原理可以类比成两个人跳舞——发送端按照自己的节奏在跳接收端必须先找到这个节奏然后每一步都跟得上。具体实现上CDR通常由一个锁相环或延迟锁定环构成它从输入的串行数据流中提取边沿信息不断校正本地时钟的相位和频率最终让采样时钟稳定在数据眼的中心位置。CDR的环路带宽设定是个关键参数。带宽设得宽锁定速度快但对噪声更敏感抖动会变大带宽设得窄抗噪能力强但锁定速度慢对输入频率偏移的容忍度也低。实际调试时很多工程师喜欢用芯片默认的CDR带宽除非遇到特定问题比如输入数据有低频抖动才会去调。我个人建议在硬件设计阶段就把CDR带宽的可配置能力预留出来调试时多一个自由度比重新打板强多了。4. 硬件设计实操从原理图到PCB布局4.1 原理图设计中的关键信号与器件选型SerDes的原理图设计核心就是要抓住高速差分信号链路。每个SerDes通道至少包括TX_P/TX_N和RX_P/RX_N两对差分信号。对芯片厂商提供的参考设计要仔细研读但不要无脑照抄——参考设计用的是官方评估板的连接方式你的板子走线长度、参考层、连接器类型都可能不一样。先看交流耦合电容。SerDes接口的标准配置是在发送端和接收端之间串联一个0.1uF的电容作用主要是隔直流。这个电容看起来不起眼实际上对信号完整性影响很大。电容的封装、容值、安装位置都有讲究。一般建议用0402或0603封装靠近发送端放置。有时候在大批量生产时为了降低成本会用普通X5R电容但要注意这种电容的压电效应在高频振动下会产生噪声严重时会影响系统稳定性所以高速链路里最好还是用C0G材质的电容。再看端接电阻。SerDes差分输出通常需要100欧姆差分阻抗匹配。这里要特别注意芯片的数据手册上会给出推荐的端接方式——有的是片内端接有的是片外端接。片内端接省PCB空间但精度有限片外端接精度更高但会增加布线和器件数量。两者没有绝对的好坏关键是整条链路的阻抗要连续、匹配。4.2 电源和时钟SerDes设计的左右两条腿我把SerDes设计比作一个人走路信号链路是身体电源和时钟是两条腿任何一条腿出了问题都走不动。SerDes核心供电通常是0.9V或1.0V的数字电源但高速IO供电可能是1.2V或1.5V。这些电源对纹波非常敏感——电源上的纹波会直接调制到输出信号上变成寄生抖动。所以在SerDes电源设计上我用两个措施一是用低噪声LDO给SerDes的模拟电源供电不用DCDC直接供二是在靠近电源引脚处放置足够的高频去耦电容通常是0.1uF并联0.01uF有时候还会加一个1uF的体电容。时钟是另一条腿。SerDes需要一个参考时钟通常是100MHz、125MHz或156.25MHz。这个参考时钟的精度和抖动直接影响SerDes的误码性能。在实际项目中我见过太多次“怀疑SerDes设计有问题”的情况最后定位到是参考时钟的晶振没选好抖动超标导致整条链路的误码率偏高。建议在原理图阶段就选择相位噪声性能好的差分晶振或时钟芯片别省这个钱。4.3 PCB布局布线的核心规则与阻抗控制PCB布局布线是SerDes设计中最容易出问题、也最考验功力的环节。一句话总结高速信号必须以传输线的思维来对待而不是普通信号线。差分对布线时等长和间距是两大核心控制点。等长保证差分对内部两线的信号同时到达间距保证差分阻抗稳定。对于10Gbps级别的SerDes一般要求差分对内等长控制在5mil以内差分对之间的间距对间距离至少保持在3倍线宽以上避免对间串扰。这些数据不是拍脑袋定的是从仿真和实测中总结出来的经验值。阻抗控制方面当前主流PCB工艺下单端50欧姆、差分100欧姆是标配。注意“当前”这两个字——随着材料、层叠工艺的变化这个值可能会变。所以在设计阶段一定要和PCB板厂确认目标阻抗并且在投产前做阻抗测试条验证。我这几年遇到的最无语的情况是原理图、封装、布局都没问题打出来的板子误码率差到爆炸最后发现是PCB厂家换了材料批次没有重新做阻抗匹配。关于参考层高速SerDes信号必须有连续完整的参考平面。差分信号的正下方或相邻层要保证有完整的参考地或电源平面不能有大的分割和跨沟。如果SerDes走线必须跨层最好在信号切换层的过孔旁边预留地过孔为回流电流提供低阻抗路径。4.4 避坑经验连接器和背板互连的隐性坑如果你的SerDes信号要经过连接器比如QSFP、SFP、板对板连接器那就得多留一个心眼。连接器的引脚设计和PCB的footprint之间经常存在阻抗不连续点高速信号过连接器时容易产生反射。解决办法是在连接器选型时直接选择制造商明确标注“支持10Gbps/25Gbps”的型号并且在布局时让连接器附近的走线尽量短、尽量直。背板互连的坑更深。背板设计时要考虑的地方是叠层、长线和跨板连接器。我记得有个项目信号从业务板到背板再到交换板中间经过两个连接器、一大截背板走线总长度超过30英寸10Gbps的信号跑过去已经衰减得不成样子。最后靠着在两端SerDes的TX/RX均衡参数上反复调试才把眼图调开。那次的经验告诉我长链路设计一定要在预设计算阶段做通道仿真提前评估均衡能力是否足够不要等到样板回来再碰运气。5. 调试工具的实战体会与误码定位思路5.1 用IBERT和误码仪做高速链路测试SerDes设计完成后第一件事不是跑业务数据而是先做物理层验证。FPGA平台最常用的工具是Xilinx的IBERTIntegrated Bit Error Ratio Tester集成误码率测试工具其他平台也有类似工具。IBERT可以在FPGA内部产生伪随机数据比如PRBS7、PRBS15、PRBS31直接通过SerDes收发然后统计接收端的误码数。这个工具能给你提供的核心信息是当前通道的误码率是多少、眼图扫描结果如何、均衡参数的调节空间有多大。使用IBERT时有一个点要特别提醒测试PRBS数据虽然方便但它毕竟是理想化场景真实业务数据的编码方式和频谱特性和PRBS并不完全相同。所以IBERT通过只能说明物理层基本可用真正上线跑起来还会遇到协议层问题。我的习惯是IBERT测完之后再用真实业务数据跑起来同时监控误码计数器和链路状态寄存器。如果IBERT全绿但业务数据报错多半是协议对齐、时钟同步或者参考时钟配置的问题而不是物理层的事。如果是独立SerDes芯片比如用于PCIe或以太网PHY的芯片可以用误码仪来做分析。误码仪的功能比IBERT更强大可以独立发送和接收还可以做眼图模板测试。但误码仪价格很高很多小公司不一定有所以灵活运用芯片自带的环回测试loopback模式也是个替代方案。5.2 眼图测试和指标判读眼图是SerDes调试中最直观的分析手段。用示波器在接收端测量差分信号波形把所有比特周期的波形叠加在一起就形成了眼图。理想的眼图应该是一个“清晰大眼睛”的模样眼睛张开得大、眼皮薄、交叉点稳定、上下沿对称。判读眼图时重点关注四个指标眼高Eye Height、眼宽Eye Width、抖动Jitter和Q因子。眼高代表信号的噪声裕量眼宽代表定时裕量抖动过大则意味着信号边沿的不确定性在增加。如果眼图闭合严重一般就是从发射均衡、信道衰减、串扰和电源噪声这几个方向去排查。一个很实用的技巧调试时把TX均衡从零开始逐步增加观察眼图打开程度的变化。如果你的信道损耗不大TX均衡加多了反而会让眼图变差——过冲太大接收端反而识别困难。所以均衡参数不是越大越好而是刚好补偿信道衰减为最佳。这个“刚好”点只有在实际调试中才能准确地找到。5.3 常见问题排查从误码率异常到链路失锁我把这几年SerDes调试遇到的常见问题和排查套路整理成一张速查表希望能帮大家少走弯路。问题现象可能原因排查建议误码率高但链路能建立信号衰减过大均衡不足逐步增加CTLE/DFE强度观察误码率变化链路建立失败或频繁失锁参考时钟品质差或频率不对用示波器测参考时钟频率和相位噪声只在高温下误码率升高电源纹波变大或信号裕量不足检查电源散热设计用热风枪局部加热定位只有特定通道出问题PCB走线长度差异或过孔问题对比好通道和坏通道的信号质量差异突发大批量误码电源瞬态跌落或串扰检查电源的瞬态响应和大电流路径眼图有双重轮廓参考时钟有周期性抖动检查时钟源的电源去耦和布局这六个问题覆盖了高频高速链路调试中很大比例的场景。特别是“只有特定通道出问题”这个情况我见过不少新人一上来就怀疑芯片坏了结果把板子拆下来一量走线差了100多mil这就是设计阶段布局不均衡留下的隐患。同样温度敏感的问题往往不是芯片本身的锅而是电源和PCB材料在高温下的性能漂移——找到根因需要耐心。6. 案例复盘一块10G SerDes接口板的调试全过程6.1 从原理图到样板我踩过的三个坑拿一个实际项目来演练一下整体流程。需求是设计一块接口板FPGA通过QSFP连接器接光模块跑10Gbps的以太网链路主芯片选用某家的28G SerDes。第一个坑在原理图阶段。芯片手册写的参考时钟要求是“100MHz、HCSL电平”我当时手头库存只有LVDS的振荡器就想着电平标准差不多先凑合用。结果样板回来SerDes链路怎么都锁不住。查了半天发现HCSL和LVDS的共模电压和摆幅要求不同——HCSL是0.7V共模、摆幅约800mVLVDS是1.2V共模、摆幅约350mV。这个差距在高速链路上直接导致CDR无法正确恢复时钟。后来换回HCSL时钟问题立刻消失。从那以后我对“电平标准差不多”这句话极度敏感。第二个坑在PCB布局。QSFP连接器底下放着电源模块而且电源的开关频率刚好落在SerDes信号的关注频段内。布局时我忽略了这一点结果测眼图时发现眼图上有周期性噪声频率正好是电源开关频率的谐波。后来把电源模块挪走并在连接器附近加了屏蔽地过孔阵列噪声才压下去。第三个坑在连接器选型。QSFP连接器虽然外观一样但不同制造商的引脚设计和内部结构差别很大有些低成本的型号高速性能一言难尽。我这次用的连接器最大只支持到11Gbps勉强够用。如果项目后续要升级到25Gbps这个连接器就得换。6.2 通过眼图和BER定位链路瓶颈样板回来后初期调试还算顺利10Gbps链路能建立但误码率一直在10的-10次方附近徘徊。这个数值对于目标系统要求10的-15次方来说还差得远。我先把FPGA内的IBERT调到最大TX摆幅测试发现误码率有一点改善但依然不够。接着示波器测了接收端的眼图看到眼高只有约150mV而芯片数据手册建议的最小值为200mV。这就说明接收端信号裕量不足——问题在哪一层呢我拿示波器在光模块的输出端也测了一下发现眼图是干净的说明光模块没问题问题出在FPGA到光模块之间的PCB走线部分。然后用频域分析排除法来分析链路FPGA到光模块的连接器大约3英寸按FR4基材的损耗系数估算10Gbps时走线衰减约为1.5dB/inch那么总损耗接近4.5dB加上连接器的损耗整体接近6dB。CTLE的增益能力是否够用、TX均衡该加多少计算之后得到了一个大致的补偿范围。实测中把TX预加重从0逐步调到3dB时接收端眼高从150mV一路升到了280mV误码率终于进入10的-13次方量级。不过在这个档位再往上调时由于过冲增大误码率反而略有回升相当于找到了这个链路的甜点区。6.3 量产阶段再踩雷阻抗匹配才是真大爷设计定型之后进入了小批量试产结果有一批板子误码率突然异常。我比对了两批板子唯一的变量是PCB厂换了覆铜板材料的批次。查板厂提供的阻抗报告声称仍是100欧姆差分但实际测试线上量出来的值是约93欧姆。问题就出在这里。阻抗偏离设计值带来的直接后果是反射增大和信号完整性恶化。虽然只差了7欧姆但在10Gbps速率下反射系数已经足够把眼图质量拉低一个级别。后来让板厂换回原批次材料问题消失。这次经历让我养成了三个习惯一、每次打板前一定要让板厂提供阻抗测试报告并且要抽查实物二、在试产阶段不要轻易切换材料型号哪怕是“等效替换”也要做验证三、对阻抗要求高的高速信号建议在PCB板上留专门的阻抗测试条方便后期用TDR时域反射计抽测。TDR是分析链路阻抗不连续的利器用它对整条SerDes链路做一次完整的阻抗扫描能非常直观地定位到是哪段走线、哪个过孔、哪个连接器在制造偏差中引入了阻抗尖峰。7. 后续扩展与个人经验收尾现在回头看SerDes硬件设计的核心无非三件事懂原理、会设计、能调试。原理层面要把串行化、编码、均衡、CDR这些基础概念理清楚不能被花哨的协议名称吓住设计层面要从原理图阶段就为信号完整性和电源完整性做规划调试层面要善用IBERT、示波器、TDR这些工具用数据而不是感觉来做判断。每次完成一个SerDes项目我都会把所有调试记录整理成一份文档把问题现象、根因分析、解决措施和验证结果都写清楚。这个习惯让我在遇到类似问题时能十分钟定位而不是重新走一遍弯路。如果非要给新手一句建议我会说SerDes设计最大的敌人不是“不会”而是“想当然”。时钟电平不能想当然板材阻抗不能想当然连接器性能不能想当然。多一次测试验证就少一次深夜调板。这些经验都是踩过坑才换来的——也希望各位读者不用像我当年那样把每个坑都亲自踩一遍才算数。
返回列表