讲个反直觉的事儿:同样跑10Gbps,32位并行总线需要的引脚和功耗往往比一对差分串行线高出几十倍,带宽却还上不去。第一次接触SerDes这个词的人,多半会被Serializer/Deserializer的名头唬住,以为是什么了不得的高深模块。说到底它做的事就是“并行转串行、串行转并行”,但就是这一转,让PCIe、Ethernet、SATA、USB、HDMI、DisplayPort这些高速接口全都站在了同一条技术路线上。
这篇文章适合刚接触芯片设计、FPGA高速接口,或者要做板级高速链路方案的工程师阅读。我会把SerDes IP涉及的底层概念一次讲透:为什么非串行不可、链路内部有哪些模块、CDR是怎么从数据里“抽出”时钟的、信道损耗要靠什么手段抗住、NRZ和PAM4到底怎么取舍,以及最后选IP核和排障时常见的几个坑。内容偏基础,但会把很多文档里含糊过去的关键逻辑掰开揉碎。
1. 为什么高速传输偏偏要“串行”:带宽悖论背后的逻辑
1.1 并行总线是怎么被逼到墙角的
早年间,CPU和北桥之间、设备和控制卡之间的通信几乎清一色并行。一根32位总线,数据线30多根,加上地址线、控制线、时钟线,一个接口几十上百个引脚。低速时代这个方案毫无问题,因为时钟低,信号边沿缓,线跟线之间的长度差异、噪声干扰都还没资格成为瓶颈。
但频率一旦往上提,并行总线的麻烦就集体爆发。首先是skew,也就是线间偏斜。PCB上走线不可能做到完全等长,信号从驱动器到接收器,每根线到达的时间天然有差异。总线频率越高,一个时钟周期越短,这个时间差占的周期比例就越大,留给数据有效窗口的余量被压得越薄。等频率涨到几百兆赫兹级别,线间偏斜本身就可能吃掉大半时序预算,板厂连等长约束都做到头了也无济于事。
更麻烦的是串扰。并行的几十根线挨得那么近,一边翻转一边静默,容性耦合和感性耦合会把噪声灌进邻居线。低频时这点串扰影响不大,高频时它直接劣化信号质量,布线越密越严重。还有个被低估的问题是功耗,同时翻转几十个引脚本来就不省油,频率翻倍,动态功耗跟着翻倍,接口电路跑成的热量和电源噪声又把信号质量反向拖下水。
1.2 串行赢在哪里:一对差分线的优势
改成串行之后,逻辑上很简单:把本来并行送出去的N根线,变成用一根(更严谨地说是一对差分线)以N倍速率逐比特送出去。这等于用“时间换空间”,付出的代价是单根线上的速率变成了原来的很多倍,换来的却是几个至关重要的红利。
第一,没有线间偏斜问题了。所有比特都在同一对物理线路上顺序传递,接收端只要盯着这一个信号恢复时钟,按节奏取数,不会出现A线上的bit和B线上的bit谁先到谁后到的困扰。第二,差分传输天然抗共模干扰。一对线里一个走正一个走负,接收端看的是两者差值,外部耦合进来同时叠加在两条线上的共模噪声会被自然抵消,这让串行接口容忍地弹、电源噪声和辐射干扰的能力好了不止一个量级。第三,串行速率扩展更加线性。并行总线要提带宽,要么涨频率撞上偏斜墙,要么加线宽撞上引脚数和布线的天花板;串行链路则只要把单线速率提升,或者简单地把通道数从1条翻到2条、4条、8条,扩展路径直接得多。
1.3 从PCI并行到PCIe串行:历史给出的答案
看协议演变最直观。1990年代的PCI并行总线,33MHz、32位数据,理论带宽约133MB/s,接口上数据地址控制线加起来超过60根。到了PCIe时代,最早的Gen1单通道2.5GT/s,一条通道一对收发差分线就是250MB/s的净带宽(数据总线上约200MB/s),而一个x16接口的带宽已经远非老PCI可比,引脚还更少。
这背后的本质是:并行总线在物理层的收益早就被偏斜、串扰和功耗吃光了,继续在“同时多根线”这个维度上加码,边际成本爆炸式增长。而串行总线把复杂度集中到收发端电路上,用更少的引脚、更少的走线,把同样的(甚至高得多的)吞吐量交给一对线去跑。再往后看,几乎所有高速协议都殊途同归,这就是SerDes成为SoC和FPGA里标配模块的原因。
2. 一条SerDes链路内部到底长什么样:从发送端到接收端逐块拆解
2.1 宏观旅程:并行数据进、并行数据出
从使用者视角看,SerDes就是个黑盒子:这边进去并行数据,那边出来并行数据,中间肉眼什么也看不到。但打开盖子,一条完整的链路可以拆成五段旅程:并行数据先被送入发送端的协议前层(PCS),做编码和加扰,然后交给物理介质接入层(PMA),进入真正的串行化电路,变成高速差分信号,经过PCB走线、连接器、线缆这些信道,到达接收端,再从PMA解串,回到PCS解码,最后还原成并行数据。
PCS和PMA的分工容易被初学者忽略。简单说,PCS负责“逻辑层面的活”,比如8b/10b编码、64b/66b编码、加扰、对齐标记插入、CRC,这些是为了保证DC平衡和时钟恢复的跳变密度;PMA负责“模拟层面的活”,包括串化、驱动、均衡、时钟恢复、解串。选SerDes IP时,你拿到的东西通常把PMA做成了硬核(hard macro),PCS有时候跟着PHY一起给,有时候需要自己在逻辑里实现或者用IP里的软逻辑。
2.2 发送端三件套:PLL、Serializer和驱动器
发送端的核心模块是三个。PLL把低频率的参考时钟(常见100MHz或156.25MHz)倍频到与线速率对应的比特时钟。比如跑25Gbps的NRZ,如果采用全速率时钟架构,PLL输出就是25GHz的时钟,这是很高频的模拟电路设计,所以很多实现会改用半速率甚至四分之一速率架构,用时钟的上下沿甚至多相位来采样,降低PLL本身的难度。
Serializer负责把宽的并行数据变成串行比特流。内部通常是一棵并行移位树,或者一组多选一逻辑,用高速时钟逐级并转串。这里的工程难点不在结构,而在数据在移位过程中不能有毛刺,任何一段亚稳态传下去,就是一连串误码。
驱动器把串行比特流变成能推着PCB走线走的差分信号,常见的是电流型(current mode logic,CML)驱动器或电压型驱动器,输出端要做阻抗匹配,差分阻抗一般按100欧姆设计,输出幅度也有协议规定。驱动器上还挂着发送端均衡(FFE),用多抽头的有限冲激响应滤波器对要发送的码型做预整形,这部分后面专门讲。
2.3 接收端:前端放大、时钟恢复和解串
接收端的旅程比发送端险恶得多。高速信号经过信道衰减,到达接收引脚时幅度可能只剩发送端的几分之一甚至几十分之一。第一步是接收前端,通常包含一个宽带放大器,配合CTLE(连续时间线性均衡)做高频提升,还有一级可变增益放大器(VGA)把信号幅度修整到ADC或判决器的最佳输入范围。
然后是重头戏CDR(时钟数据恢复)。它从带有跳变的数据流里提取出比特时钟,并且找到最佳的采样相位,把每个bit从噪声和符号间干扰里“捞”出来。CDR之后是Deserializer,把恢复出的串行数据按照时钟排成并行字。如果接收端还用DFE(判决反馈均衡),那么还要把判决器的历史结果反馈回来,做非线性均衡处理。
一个容易混淆的点是:很多现代接收端会在CDR前加一个ADC,把模拟信号变成数字域,后续的均衡和判决全部在数字域完成;传统做法则是纯模拟接收前端一路做到判决器。两者分别对应DSP型和模拟型接收机架构,在高速率、长距离链路上DSP型越来越常见,但代价是功耗和延迟。
2.4 时钟架构:全速率、半速率还是1/4速率
SerDes的时钟架构是选型和功耗估算里绕不开的话题。全速率架构下,时钟频率等于比特率,比如112Gbps的PAM4链路,意味着PLL要输出56GHz的符号时钟(PAM4每符号2比特),这是极高频的模拟电路,几乎没法用常规工艺实现。于是业界普遍采用半速率或四分之一速率架构:半速率下时钟是符号速率的一半,用差分时钟的双沿去捕捉数据;四分之一速率则使用4个相位,每个相位负责四分之一的符号,把单路的高频问题转化成多相低速并行问题。
这带来的后果是,“这个SerDes芯片主频多高”这类问题对SerDes内部其实没有统一答案。你看到IP规格书里的线速率,指的是链路上的符号速率;内部DSP和数字逻辑跑的时钟往往只有它的几分之一甚至几十分之一。这个区分在估算功耗、分析时钟树、做FPGA集成时特别重要,因为数字侧接口时钟通常远低于线速率,衔接处需要可靠的异步FIFO或握手逻辑。
3. 时钟恢复(CDR)与训练:没有时钟线也能对齐数据
3.1 为什么SerDes不走一根独立时钟线
有人会问:既然怕偏斜,那把时钟和数据一起并行送不就好了?并行总线里时钟和数据各走各的,高速下即使板级等长做得好,时钟的到达时刻也会因为温度、电压的变化与数据偏移,更糟糕的是参考时钟的抖动会直接变成时序抖动。SerDes干脆做一个极端选择:不传输独立时钟,把时钟信息嵌进数据码流里,由接收端自己恢复。这就是CDR存在的根本理由。
代价是数据码流必须保证足够的跳变密度,否则接收端没有边沿可“咬住”时钟。所以SerDes链路普遍做编码,8b/10b保证最长连0/连1不超过5个bit,64b/66b用同步头保证每66个bit至少有两次跳变,以太网的RS-FEC还会进一步做扰码。做编码另一个好处是提供DC平衡,避免长串同极性导致接收端的电平判决点漂移。
3.2 CDR的三条技术路线
CDR实现方式大致三条路线。PLL型CDR是传统主力:相位检测器比较数据边沿和本地恢复时钟的边沿,产生超前/滞后信号,环路滤波器把它滤波后去控制压控振荡器(VCO)或数控振荡器(DCO),构成一个锁相环路。这是一种闭合的模拟反馈系统,锁定后时钟连续可调,抖动性能好。
相位插值型CDR则是用一个固定PLL产生多个等间隔相位(比如128个),再由数字逻辑根据相位检测结果选择插值点,把时钟“拨”到最佳采样相位。它没有VCO直接工作在数据频率上,比较容易被数字逻辑控制和集成,常出现在需要数字接口的IP里。
过采样型CDR更直接,用N倍于数据率的时钟对数据多打几个点,然后根据这些点的分布判断最佳判决位置。它结构简单,早期低速SerDes常用,但速率较高时功耗和时序压力都偏大。现在很多高性能SerDes更多用PLL型或相位插值型,或者两者混合。
3.3 抖动预算与CDR带宽的博弈
CDR的环路带宽是个需要拿捏的参数。带宽高,锁得快,对低频抖动跟踪能力强,但对高频抖动抑制差;带宽低,能把高频随机抖动滤得更干净,但锁定慢,而且会对信道的低频变化反应迟钝。工程上常用“毫UI”来标定抖动预算,一个UI等于一个符号的时间宽度,比如10Gbps NRZ下UI就是100ps。
发射端的参考时钟抖动、电源噪声引起的周期抖动、信道的码间干扰产生的数据相关抖动,都会吃掉采样裕量。协议通常会规定CDR抖动容忍曲线,曲线的低频段要求CDR能跟踪大频偏,高频段要求不引入额外误码。这也是为什么PCIe这些协议对参考时钟有严格的抖动和频谱要求,板级设计如果图省事在参考时钟上摆了太差的晶振,SerDes链路跑不起来几乎是必然的。
3.4 协议训练序列:链路是怎么握手起来的
CDR不是上电就能锁定的。快速串行链路都有一套训练(Training)或握手机制。PCIe在Link Training里会依次传送不同的均衡训练序列,接收端根据收到的信号质量计算并请求发送端调整预加重和发送幅度,等电气参数收敛、CDR锁定、误码验证通过,链路才进入正常工作。
以太网的历史方案是Auto-Negotiation,而更高阶的链路在启动时同样会用训练帧(Training Frame)交互。这部分对做FPGA或SoC集成的人来说尤其重要:所谓“链路训练失败”,很多时候并不是芯片坏了,而是训练过程中的某个必要条件没满足,比如参考时钟不稳定、差分极性接反、通道到这里损耗太大导致第一阶段信号就无法识别。理解训练的顺序,能帮你快速定位排障方向。
4. 高频信道不相信眼泪:损耗、ISI与均衡三件套
4.1 信道为什么会让信号“糊掉”
PCB走线、过孔、连接器、线缆组合在一起,就是一个低通滤波器。频率越高,衰减越凶。衰减来源主要是两项:趋肤效应让高频电流只在导体表层流动,等效电阻随频率上升而增大,损耗与频率的平方根成正比;介质损耗则是板材分子在高频电场下反复极化产热,损耗与频率成正比。一块普通FR4板材上,10英寸走线在约8GHz时插入损耗常常超过20dB,意味着信号幅度在接收端只剩原来的十分之一左右。
损耗不光压幅度,更致命的是它带来的符号间干扰(ISI):信号被拉长拖尾,当前bit会被前几个bit的尾巴污染。一个典型的矩形脉冲通过低通信道后,会变成带长拖尾的缓变波形,前一位的“尾”叠在当前位上,判决门槛附近的电压就会被上下拉扯。跑长串连0或连1时,信号幅度还会逐渐漂移到稳态电平,紧跟其后的跳变幅度更小,这些都让接收端判决的难度剧增。
4.2 均衡的三种手段和它们的分工
要抵消信道低通效应,手段就是“哪里缺补哪里”和“把尾巴剪掉”。均衡三件套是这么分工的:
发送端FFE(前馈均衡/预加重去加重)。发送端在发射前先对码型做整形:低频成分压低一些,高频成分抬高一些,让信号经过信道衰减后,接收端看到的频谱更接近原来的样子。实现上用多抽头FIR滤波器,抽头覆盖当前bit前后的几个UI,可以产生预置加重力度。因为发送端能处理的信号幅度是有限的,压低低频频段等于削弱整个信号功率,所以去加重的力度是权衡的结果。
CTLE(连续时间线性均衡)。接收端模拟电路做高频增益提升,把信道压掉的高频补回来。优点是线性、结构简单、功耗低,缺点是不能区分信号和噪声,高频提升的同时会把高频噪声一起放大。适合应对较短的通道和中等损耗的频段。
DFE(判决反馈均衡)。原理是:既然当前bit受到的ISI来自前面几个已经判决出来的bit,那就把它们的判决结果乘以对应系数反馈回来,从整个信号里减掉这几项。关键是DFE不放大噪声——它减的是确定性的码间干扰,噪声没有相同的反馈路径,所以不会像线性均衡那样“噪声增强”。主流高速SerDes接收端几乎都标配DFE,抽头数量(比如1抽头、2抽头直到更多)直接影响能消除多少拖尾。
4.3 接收端摊开的眼图是常态不是故障
很多人第一次看高速链路“眼图全关”会吓一跳。在发送端,眼图明明又大又方;到了接收端引脚处,由于信道损耗,眼图可能完全闭合,看起来跟噪声没什么区别。这不代表系统坏掉了——闭环后的判决节点眼图才是有效信号。均衡链路把信号修整、ISI抵消干净之后,判决器前端的眼图会被重新“撑开”。
所以判断链路裕量,一定要看均衡后的眼图或者等效的误码浴盆曲线,而不是接收引脚处的原始波形。这也是为什么很多芯片提供内部环回和PRBS误码测试功能:它们可以在不依赖外部示波器的情况下,直接告诉你判决节点上还能剩多少裕量。
4.4 一张表看懂谁负责哪段均衡
| 模块 | 位置 | 本质 | 主要作用 | 局限 |
|---|---|---|---|---|
| TX FFE/去加重 | 发送端 | 线性FIR整形 | 预补偿信道,削弱低频抬高频 | 会降低整体幅度,力度受限 |
| CTLE | 接收端模拟前端 | 线性高通/峰化 | 补偿高频损耗 | 放大噪声,增益不能过高 |
| DFE | 接收端判决前后 | 非线性反馈 | 抵消确定性ISI拖尾 | 抽头有限,不能消除预游标干扰 |
| CDR | 接收端 | 反馈时钟恢复 | 对齐采样相位 | 带宽与抖动容忍需要折中 |
这四者形成一条链:FFE在源头“预弯”信号,CTLE做粗补偿,DFE做精细化消除,CDR负责在正确的时刻采样。做板级方案时,你会看到的IP配置项通常就是这几类的力度/抽头数/带宽参数,但从系统角度理解它们的关系,比盲目调参数重要得多。
5. NRZ、PAM4与协议线速率的算术
5.1 NRZ:一个UI一比特的简单世界
传统SerDes用NRZ调制,即非归零码,高电平代表1,低电平代表0,每个符号单位间隔(UI)携带1比特信息。NRZ结构简单,信噪比要求直观,均衡和CDR的设计成熟。它的比特率就是符号率,比如32GT/s的PCIe Gen5 NRZ,实际链路波特率就是32Gbaud。
NRZ的软肋在于:想继续提速,就必须提高波特率,但信道损耗随频率剧增。从10GT/s干到32GT/s,可以靠先进工艺和更强均衡硬撑;要做到五六七八十吉比特每秒级别的每通道速率,NRZ的路径基本到头了。
5.2 PAM4:牺牲电压换速度
PAM4在每个符号时间里用4个电平(如-1、-1/3、+1/3、+1)表示2比特。对同样的比特率,PAM4的符号率只要NRZ的一半,波特率减半,信道损耗在等效奈奎斯特频率处大幅下降,这让原本NRZ完全推不动的速率有了工程可行性。
代价是判决裕量急剧收缩。NRZ在理想情况下,一个符号有一个大眼,眼高就是满摆幅;PAM4则有三个垂直叠放的眼,每个眼的垂直高度只有总摆幅的三分之一左右,同等幅度的噪声、串扰、反射对三个小眼的干扰比例就大得多。工程经验上,要达到相同的误码率,PAM4相对NRZ需要多出约9到10dB的接收灵敏度,也就是信噪比要提升约3倍。
5.3 这里最容易算错:波特率和比特率
很多人在SerDes规格前面栽过跟头,就是把“Gbps”和“Gbaud”混为一谈。以“50Gbps PAM4”链路为例,它的线速率是50Gbps,但电通道上跑的是25Gbaud——每个符号2比特。PCB板级工程师关心的损耗曲线、示波器看到的眼图宽度,都对应25Gbaud这个数字,而不是50Gbps。反过来,对NRZ链路,Gbps和Gbaud数值相等,这给习惯了NRZ的人埋了个思维定式。
这个区别在做通道预算时直接决定成败。某条走线在10GHz能扛住,不代表20GHz能扛住;一个标称56Gbps PAM4的SerDes,其电接口的奈奎斯特频率约14GHz(56/2/2),而同样名义速率的56Gbps NRZ(如果存在的话)奈奎斯特频率就是28GHz,两者对板材、连接器和过孔的要求天差地别。
5.4 主流协议的SerDes选型对照
| 协议 | 线速率 | 调制方式 | 典型通道结构 | 备注 |
|---|---|---|---|---|
| PCIe Gen3 | 8GT/s | NRZ | x1/x4/x8/x16 | 早期典型,均衡训练机制 |
| PCIe Gen4 | 16GT/s | NRZ | x1/x4/x8/x16 | 每通道净吞吐翻倍 |
| PCIe Gen5 | 32GT/s | NRZ | x1/x4/x8/x16 | NRZ在PCIe路径上的高水位 |
| PCIe Gen6 | 64GT/s | PAM4 | x1/x4/x8/x16 | 引入PAM4和轻量FEC |
| 10G/25G以太网 | 10.3125/25.78125Gbps | NRZ | 单通道 | 常见于数据中心网卡/交换 |
| 100G/400G以太网 | 每通道25.78125/53.125Gbaud | NRZ / PAM4 | 多通道并行 | 100G每通道方向各有各的实现 |
这个对照表想说明的是:同一块SerDes硬核,如果IP只做了通用物理层,往往要靠配置来适配不同协议;而协议专用的PHY把PCS、FEC、训练状态机都做成硬逻辑,功耗和面积更优,但灵活性差。选型时先搞清楚你要跑什么协议、哪些模式必须兼容,再去对比IP规划,顺序别反了。
6. 选SerDes IP核时的落地考量:从速率需求到集成风险
6.1 先分清你要的是协议PHY还是通用SerDes
SerDes IP在市场上分两大类,选错方向会非常痛苦。一类是协议专用PHY,比如PCIe PHY、以太网PHY、SATA/USB PHY,它们把PCS、训练、FEC、链路状态机全部固化,对外暴露的是协议接口而不是裸SerDes。好处是兼容性好、验证充分、设计工作量小;坏处是灵活性差,你不能拿一个PCIe PHY去跑自定义协议。
另一类是通用SerDes,只提供物理层,PCS往往留给用户自己实现,或者配套一个可配置的PCS核。它支持自定义速率、自定义协议,适合背板互连、chiplet互连、私有高速总线这类场景。代价是几乎所有协议层面的工作都要自己扛,训练、初始化、FEC、对齐方式都要自己写,这是很多FPGA项目里被严重低估的工作量。
6.2 硬核MACRO、测试接口和参考时钟
必须提前接受一个事实:高速SerDes几乎必然是hard macro,也就是模拟电路版图已经固定的硬核,由工艺厂或第三方IP厂商在特定工艺节点上实现。它跟数字逻辑的综合流程完全无关,你拿到的是一套经过验证的GDSII或配套的物理实现文件,把电源地、模拟IO、高速引脚、配置总线接好就能用。这也是为什么SerDes IP的工艺绑定极其严格,在某节点合格的硬核换个工艺就得重做。
这带来一个集成层面的要求:模拟电源域必须单独照顾。SerDes对电源噪声极度敏感,官方设计手册通常会要求独立的LDO或专用供电引脚、指定去耦电容的布局密度、限制数字逻辑翻转对模拟域的串扰。很多“IP集成没问题但链路跑不上去”的根因,不是IP坏了,而是电源平面布局和去耦没达标。
6.3 选型清单和容易忽略的问题
我习惯按这样一个清单过一遍候选IP:
- 线速率范围:最低速率和最高速率是否覆盖需求,有没有中间速率盲区。
- 协议兼容模式:是否需要支持PCIe/Ethernet等具体协议的电气和训练要求,还是纯自定义。
- 信道长度与损耗预算:IP标称的channel reach是短距(chip-to-chip)还是长距(backplane),这决定了均衡能力的上限。
- 参考时钟:需要的频率、是否支持展频时钟(SSC)和独立时钟域。
- 功耗与面积:每通道功耗、待机功耗,以及硬核占用的die面积和引脚布局约束。
- 测试能力:内置PRBS发生器/校验器、环回模式(远端/近端)、JTAG/边界扫描是否齐全,有没有专门的误码监测寄存器。
- 物理实现约束:高速引脚在封装里的位置、扰流焊盘、ESD结构,和你的封装/板的出线方式是否顺。
容易被忽略的是最低速率约束。很多SerDes硬核不支持任意低的速率,例如有的PLL锁频范围下限就是1Gbps,你想用一个低速旁路模式做测试却发现硬件上做不到。这类约束通常藏在数据手册的小字里,一定要在选型早期对清楚。
6.4 IP验证材料怎么审
IP厂商给你的验证套件通常包括:功能模型(behavioral model)、验证寄存器说明、集成清单、以及芯片回片后的可用性报告。不要只看功能模型仿真,因为行为模型再好也不代表硬核在硅片上能达到标称性能。真正有参考价值的是一份“硅验证(silicon proven)”记录,至少包含批量回片、工艺角覆盖、误码率或眼图测试数据。没有这个证据的IP,风险全部转嫁到你自己的回片验证阶段,那个成本可比选型阶段大得多。
还有文档完整度。手册里除了寄存器表,至少要有电源时序要求、复位时序、时钟质量规格、差分走线阻抗和匹配建议、以及已知限制(known issues)列表。如果一个候选IP的文档连“已知问题”都不写,要么它没有足够的流片经验,要么它在藏问题。对落FPGA/ASIC项目而言,这两条都是危险信号。
7. 实测与排障:链路联不通时到底先查哪里
7.1 训练不上最常见的三个原因
我自己调试高速链路时经历过的大多数“死锁”,归纳起来就三类原因。第一是参考时钟不给力。参考时钟抖动过大、频率偏差超出允许范围(比如PCIe要求100ppm以内)、或者SSC开启时展频幅度和调制率超标,都会让CDR在训练阶段无法锁定或反复失锁。调试时先把参考时钟的波形、频率精确度和抖动用频谱仪或者带时钟恢复的示波器量清楚,再谈别的。
第二是通道极性或通道顺序接反。差分对的正负极性接反,或者多通道链路的lane顺序不对称,链路会在物理层训练阶段一直折腾却始终无法进入工作状态。这类问题往往不是设计失误,而是PCB出线时管脚映射表贴错,检查时需要把原理图、封装引脚定义和IP的通道映射逐一对一遍。
第三是均衡训练收敛不了。发送端能够提供的去加重范围和接收端要求的均衡力度不一致,训练会不停地调整但始终达不到误码率要求。这时候可以先做外部环回,确认单个芯片收发正常,再用短通道验证链路本身,逐步排除到底是通道损耗过大,还是均衡参数配置范围不对。
7.2 眼图、浴盆曲线和误码率的关系
示波器测眼图是SerDes验证的基础动作。用带时钟恢复功能的实时示波器或者采样示波器,选择数字通道作为触发恢复源,观察采样点的眼高、眼宽和抖动直方图。眼图是“看”链路质量的第一层,但要量化误码特性,还得看浴盆曲线:在采样相位扫描的每个位置上测误码率,把误码率画成浴盆形状,中央平坦区对应无误码的“安全区”,两侧上翘的曲线越陡,说明信号在这个链路上越脆。
这里有个常见误区:只测眼图“看着还行”就放行。眼图的余量其实跟误码率目标强相关,很多链路目标误码率在1e-12到1e-15级别,意味着上百Gbps速率的通道上一两天都得零误码,简单的眼图测试不足以证明那么低的误码率。严谨的做法是在芯片自带BIST或者外部误码仪跑PRBS,设好目标误码率阈值,跑足够长的时间,再结合浴盆曲线的外推来看余量。
7.3 电源噪声:模拟前端的第一杀手
SerDes对电源噪声的敏感度远超普通数字逻辑。电源上的纹波会直接调制到VCO或采样电路的相位上,变成周期性抖动,表现为眼图的横向上出现规律的摆动。有一种经典场景:某开关电源把它的开关频率纹波串进了SerDes模拟供电,链路信噪比骤然恶化,个别频率点上误码率明显抬升,而把电源换成线性电源之后问题立刻消失。
这也是为什么IP手册对模拟电源的去耦电容数量和位置往往给出硬性要求,比如靠近硬核引脚放若干组不同容值的电容,并且要求数字逻辑的供电平面不要与SerDes的模拟域共享同一个电源树区域。做板级或封装级设计时,别为了省面积牺牲这部分布局,它决定了你的链路在真实噪声环境下还有多少裕量。
7.4 我的几条排障心得
调试SerDes链路,我的顺序始终是:先内环,再外环,最后上板级通道。内环就是开启IP自带的远端/近端环回,确认收发器的时钟恢复、编解码和数字侧接口都正常;外环是把两根高速差分线外部短接或走一小段短通道回环,确认物理层能锁定;最后才进入到真实的长走线、连接器场景。每多一个环节,就多隔离一类故障源。
另有一个容易被忽略的点:余量是设计出来的,不是测出来的。如果链路在实验室室温下勉强跑通,那么温度变化、电压波动、老化之后大概率会出问题。硬件调试时可以把供电电压压到规格下限、把温度拉高,看链路还能不能扛住,这比单点测试更能暴露真实裕量。
做SerDes项目这么多年,我最大的体会是别跟物理规律较劲。高速信号链路所有问题的根源,几乎都能追溯到“信道损耗、噪声与时间裕量”这三者的平衡上。IP选型时多花一天把时钟架构、均衡能力和测试机制搞清楚,比回片后熬夜看眼图划算得多。如果你正在规划一个带高速接口的项目,建议先把通道预算和IP规格对齐,再谈其他细节。