高速串行总线基础:差分信号、编码与时钟恢复

做高速串行设计这些年,我越来越觉得,差分信号、编码技术和时钟恢复这三样东西,就像串行总线的三根柱子。你缺一根,整个系统就摇摇晃晃。今天咱们就把这三根柱子拆开看看,到底是怎么撑起上百Gbps传输的。

差分信号:两条线的舞蹈

先聊差分信号。说白了,就是一对儿信号线,一根传正相,一根传反相。接收端拿两个信号的差值做判决。为什么要这么折腾?

核心优势:
共模噪声抑制——噪声同时耦合到两根线上,做差后噪声自己抵消了
电磁辐射更低——两根线走线紧贴,磁场互相抵消
电压摆幅可以很小——LVDS能低到350mV,省电还快

我记得十年前调一块28Gbps背板,单端信号怎么都过不了眼图测试。换成差分对之后,同样一块板子,眼图一下打开了。那会儿才真正理解为什么所有高速串行总线都选差分——PCIe、SATA、USB、以太网,无一例外。

编码技术:把数据变成适合传输的符号

原始数据不能直接往线上送。为什么?连续一串0或1,接收端会失去时钟同步。所以需要编码,保证足够的电平跳变。

常见编码方案有这几种:

编码类型开销典型应用我个人看法
8b/10b25%PCIe Gen1/2, SATA Gen1/2, USB 3.0经典,但效率低,现在慢慢退役了
64b/66b3.125%PCIe Gen3, 10G Ethernet效率高,同步头只有2bit
128b/130b1.56%PCIe Gen4/5, USB 3.2开销极低,但需要更强的CDR
NRZ与PAM4—NRZ用于大多数总线,PAM4用在400GE/PCIe Gen6PAM4眼图更复杂,但带宽翻倍

我曾经踩过一个坑:项目从PCIe Gen2升级到Gen3,直接换了物理层IP,但没有检查编码方案。结果Gen2用的8b/10b,Gen3换成64b/66b,AC耦合电容值没调,跑起来丢包一大堆。所以各位换协议代际,编码和CDR参数一定要一起审。

时钟恢复:从数据流里“挤”出时钟

发送端不单独传时钟信号。接收端必须从数据流里自己恢复时钟。这就是时钟数据恢复(CDR)干的事。

CDR的基本流程:

  1. 相位检测器比较数据边沿和本地时钟的相位差
  2. 环路滤波器(通常是PI控制器或数字滤波器)产生控制电压/数字码
  3. 压控振荡器或数控振荡器调整时钟相位,锁定到数据眼图中心

这里有个关键概念:抖动容忍度。接收端CDR带宽决定了它能跟踪多快的抖动。带宽太窄,跟不上抖动,误码;带宽太宽,把噪声当成了抖动,也误码。

我的调优经验: 对于PCIe Gen3的CDR,我一般把环路带宽设在数据速率的1/1000到1/2000之间。比如8GT/s,带宽4~8MHz。太低会看到10^-12的误码率都过不了,太高又容易被电源噪声干扰。

预加重与均衡:补偿传输损耗

信号在PCB上走过一段路,高频成分衰减远大于低频。结果就是眼图闭合,码间干扰严重。发送端预加重提升高频分量,接收端均衡器再反过来补偿。

常见的均衡结构:

  • CTLE(连续时间线性均衡):模拟滤波器,放大高频,压低低频
  • DFE(决策反馈均衡):根据之前判决的符号调整当前门限,消除后标
  • FFE(前馈均衡):发送端或接收端用抽头延迟线做预补偿

我有一块12.5Gbps的板子,走线长30英寸,厂家Sim结果说眼图还有30%开度。实际打样回来,不加CTLE根本跑不了。加了一级CTLE再加三阶DFE,误码率才降到1e-15以下。板厂仿真很多时候乐观了,留够裕量没错的。

本章知识体系

我画了一张图,把这几块的关系串起来——从发送端数据开始,经过编码、差分驱动、预加重,到接收端均衡、CDR恢复时钟、解码还原数据。顺便也标出了每个环节容易踩的坑。

高速串行总线链路:从发送到接收 发送端 (TX) 信道/PCB走线 接收端 (RX) 原始并行数据 编码(8b/10b / 64b/66b …) 差分驱动 + 预加重 高频衰减 + ISI 噪声耦合 + 串扰 CTLE + DFE均衡 CDR时钟数据恢复 解码 → 并行数据输出 ⚠ 常见误区和避坑 • 预加重不是越强越好——过冲会加剧振铃,引入额外ISI • CDR带宽与数据速率的关系:太窄跟不上抖动,太宽把噪声当抖动 • 编码方案变了,AC耦合电容的容值需要重新匹配——我吃过这个亏 数据流方向 → 并行→串行 串行传输 串行→并行

把链路串起来看

你看这张图,链路不是孤立的。发送端编码保证了足够跳变,CDR才有东西可锁;差分信号抗了共模干扰,均衡才能把闭合的眼图再打开。任何一个环节出问题,最终就是误码率高或者链路训练失败。

还记得TS1/TS2序列吗?它们就是在链路上层协议跑起来之前,先让接收端CDR锁定、均衡器收敛。所以理解本章的基础,后面看序列解析才不会觉得是空中楼阁。

关键提醒: 实验室里很多毛刺问题,其实根源就在本章这三点。我曾遇到一例,CDR锁定后眼图上总有异常毛刺,查了两周发现是编码器的一个else分支在特定数据模式下连续输出5个0——导致CDR失锁。所以编码器的状态机覆盖,必须经过所有码型检查。

本章小结

  • 差分信号抗噪、低辐射,是所有高速串行总线的物理层基础
  • 编码保证直流平衡和足够跳变,8b/10b逐步向64b/66b、128b/130b演进
  • CDR从数据流提取时钟,环路带宽是关键调优参数
  • 预加重+均衡补偿信道损耗,CTLE、DFE、FFE各有适用场景
  • 链路调试时,按“编码→差分对质量→CDR锁定→均衡效果”的顺序排查,最省时间

嗯,基础就这些。下次你看到TS1/TS2序列里的某个码型,或者链路训练失败日志,脑子里第一时间反应出来的应该是——编码对了没有?差分对走线等长了没有?CDR锁上了没有?