第1章:高速串行收发器(SerDes)原理

各位同学,今天咱们来聊聊SerDes。说实话,这玩意儿是FPGA高速设计的核心,也是很多工程师的「拦路虎」。我记得刚入行那会儿,第一次调10G SerDes,眼图死活睁不开,折腾了整整两周。后来才发现,原来是PCB走线的一个过孔阻抗不连续。嗯,这种坑,我希望你们能少踩一些。

1.1 SerDes架构概览

SerDes,说白了就是Serializer/Deserializer的缩写。它的任务很简单:把并行数据转成串行数据发出去,再把收到的串行数据转回并行。但简单背后,藏着不少门道。

一个典型的SerDes架构包含以下几个关键模块:

  • PLL(锁相环):负责产生高速时钟,我习惯叫它「心脏」
  • CDR(时钟数据恢复):从数据流中提取时钟,相当于「耳朵」
  • Serializer(串化器):并转串,把宽位宽数据压缩成高速串流
  • Deserializer(解串器):串转并,把高速串流还原成宽位宽数据
  • TX/RX均衡电路:补偿信道损耗,让信号能跑得更远

核心要点:SerDes的本质是「用频率换宽度」。并行总线虽然宽,但频率上不去;串行总线虽然窄,但能跑到几十GHz。你想想看,一根线跑25Gbps,比32位并行总线跑800MHz效率高多了。

下面这张图是我自己画的SerDes架构框图,帮你理清各模块的关系:

SerDes 典型架构框图 并行数据输入 Serializer TX均衡 串行数据输出 传输信道(PCB走线/电缆) 串行数据输入 RX均衡 Deserializer 并行数据输出 PLL CDR 参考时钟 恢复时钟 并行数据 串化/解串 均衡 串行数据 时钟模块

1.2 PLL与CDR:时钟的「发」与「收」

先说说PLL。PLL的作用是生成一个低抖动、高精度的高速时钟。我个人习惯把PLL分成三部分:鉴频鉴相器(PFD)、环路滤波器(LF)和压控振荡器(VCO)。

这里有个关键点:PLL的抖动性能直接影响SerDes的眼图质量。我在一个10G项目中,就因为PLL的环路带宽设置不当,导致输出时钟的相位噪声超标,眼图闭合了将近20%。后来把环路带宽从1MHz调到500kHz,问题才解决。

实战技巧:选择PLL带宽时,我一般遵循「输入参考时钟的1/10到1/20」这个经验值。比如参考时钟100MHz,PLL带宽设在5-10MHz比较合适。带宽太宽,噪声抑制差;太窄,锁定时间太长。

再说CDR。CDR要从数据流中恢复出时钟,这比PLL生成时钟难多了。为什么?因为数据流里没有专门的时钟信号,全靠数据跳变沿来提取。

CDR的两种主流架构:

  • 基于PLL的CDR:用PLL跟踪数据边沿,适合连续数据流
  • 基于相位插值的CDR:用数字方式调整采样相位,灵活性更高

我记得有一次调试25G SerDes,发现CDR老是失锁。查了半天,原来是数据流中连续相同的bit太多(比如64个0),CDR没有跳变沿可参考,相位跑飞了。后来加了8B/10B编码,保证最大连续相同bit不超过5个,问题迎刃而解。

注意:CDR对数据模式有要求。如果数据流长时间没有跳变,CDR会「漂移」。所以高速SerDes通常需要加扰码或编码(如8B/10B、64B/66B),保证数据有足够的跳变密度。

1.3 预加重与均衡:给信号「补补身子」

信号在PCB上跑,就像人跑马拉松——距离越长,衰减越厉害。高频分量的衰减尤其严重,这就是所谓的「趋肤效应」和「介质损耗」。

预加重和均衡,就是给信号「补补身子」:

技术 位置 作用 我常用的参数
预加重(Pre-emphasis) 发送端 增强高频分量,补偿信道衰减 3-6dB,视信道长度而定
去加重(De-emphasis) 发送端 降低低频分量,相对增强高频 -3到-6dB
CTLE(连续时间线性均衡) 接收端 线性放大高频,抑制低频噪声 增益峰值在信号频率的1/2处
DFE(判决反馈均衡) 接收端 消除码间干扰(ISI) 5-15个抽头

我曾经在一个项目中,PCB走线长度达到30英寸,信号衰减超过15dB。光靠TX端的预加重根本不够,必须配合RX端的CTLE和DFE。调试时我先把CTLE的增益调到最大,然后逐步降低,同时观察DFE抽头系数的收敛情况。嗯,这个过程有点像调收音机——找到那个「甜点」位置。

1.4 眼图分析:信号质量的「体检报告」

眼图,说白了就是把多次采样的波形叠加在一起。为什么叫眼图?因为看起来像一只睁开的眼睛。

眼图能告诉我们什么?

  • 眼高:信号幅度的裕量,越高越好
  • 眼宽:采样时序的裕量,越宽越好
  • 抖动:信号边沿的不确定性,越小越好
  • 眼图闭合度:眼睛睁得越大,信号质量越好

我判断眼图是否合格,一般看三个指标:

  1. 眼高 ≥ 信号摆幅的70%
  2. 眼宽 ≥ 1个UI(单位间隔)的60%
  3. 总抖动 ≤ 0.3 UI

经验之谈:眼图闭合不一定是SerDes本身的问题。我遇到过好几次,眼图不好看,结果发现是电源纹波太大,或者参考时钟的抖动超标。所以调试时,先检查「外围环境」,再调SerDes参数。

1.5 常用速率标准

不同速率对应不同的应用场景。我整理了一张表,方便你对照:

速率 典型标准 编码方式 有效数据率 我常用的场景
1Gbps 千兆以太网(1000BASE-X) 8B/10B 1.0 Gbps 控制面通信、低速背板
10Gbps 10G以太网(10GBASE-R) 64B/66B 10.3125 Gbps 数据中心、基站回传
25Gbps 25G以太网(25GBASE-R) 64B/66B 25.78125 Gbps 5G前传、高性能计算
100Gbps 100G以太网(4×25G) 64B/66B 103.125 Gbps 核心路由、云互联

你可能会问:为什么10G以太网的线速率是10.3125Gbps,而不是正好10G?因为64B/66B编码引入了2bit的开销,66/64 = 1.03125,所以10G × 1.03125 = 10.3125G。这个细节,很多新手会忽略。

说到25G,我个人觉得这是目前性价比最高的速率。为什么?因为25G SerDes可以直接用现有的PCB材料和连接器,不需要换昂贵的超低损耗板材。我在好几个项目里都用25G,调试难度比100G低不少,但带宽又够用。

选型建议:如果你的项目对成本敏感,优先考虑25G SerDes。如果追求极致带宽,100G PAM4是方向,但调试复杂度会高一个数量级。嗯,这个咱们后面章节再细聊。

好了,这一章的内容就到这里。SerDes的原理说复杂也复杂,说简单也简单——无非就是「发出去、收回来」这六个字。但每个环节都有坑,希望我踩过的那些坑,能帮你少走些弯路。

本章核心要点回顾:

  • SerDes架构:PLL生成时钟,CDR恢复时钟,Serializer/Deserializer完成并串转换
  • 预加重和均衡是补偿信道损耗的关键手段,TX和RX要配合使用
  • 眼图是信号质量的直观反映,眼高、眼宽、抖动是三个核心指标
  • 不同速率标准有不同编码方式和应用场景,25G是目前性价比最优的选择

公众号:蓝海资料掘金营,微信deep3321