第三章 常用SerDes标准介绍:PCIe、SATA、USB3.0、Ethernet(10G/25G/100G)的物理层对比

做SerDes调试这些年,我接触最多的就是这四大金刚:PCIe、SATA、USB3.0和Ethernet。说实话,刚入行那会儿我也被这些标准搞得头晕——明明都是高速串行接口,为什么有的跑得快有的跑得慢?为什么有的用8b/10b编码有的用64b/66b?

今天咱们就掰开揉碎了聊聊,这些标准在物理层到底有什么区别。你想想看,搞懂了这些,以后上板调试时心里就有底了。

3.1 先看个全景:四大标准的基本参数

我习惯先把关键参数列个表,这样对比起来一目了然。下面这张表是我自己整理的,项目上经常翻出来看。

标准 单通道速率 编码方式 通道数 典型应用
PCIe 3.0 8 GT/s 128b/130b x1, x4, x8, x16 芯片间互连、显卡、SSD
PCIe 4.0 16 GT/s 128b/130b x1, x4, x8, x16 高性能计算、数据中心
SATA 3.0 6 Gb/s 8b/10b 单通道 硬盘、光驱
USB 3.0 5 Gb/s 8b/10b 单通道(双单工) 外设连接、存储设备
USB 3.1 Gen2 10 Gb/s 128b/132b 单通道(双单工) 高速外设、视频传输
10G Ethernet 10.3125 Gb/s 64b/66b 单通道 数据中心、企业网络
25G Ethernet 25.78125 Gb/s 64b/66b 单通道 5G承载、云网络
100G Ethernet 25.78125 Gb/s × 4 64b/66b 4通道(CAUI-4) 核心路由、超算

嗯,这里要注意一点:表格里的速率是「线速率」,不是有效数据速率。因为编码开销会吃掉一部分带宽。比如SATA 3.0的6 Gb/s,去掉8b/10b的20%开销,实际有效数据才4.8 Gb/s。

3.2 编码方式:为什么有的用8b/10b,有的用更高效的编码?

编码这事儿,说白了就是为了保证DC平衡和时钟恢复。早期的SerDes标准普遍用8b/10b编码,比如SATA和USB 3.0。我刚开始做SATA调试时,觉得这编码挺浪费的——20%的开销啊!

但后来我明白了,8b/10b有个好处:它能保证足够的跳变密度,时钟恢复电路(CDR)工作得很稳定。而且它自带游长控制,不会出现连续5个以上的相同bit。

到了PCIe 3.0和10G Ethernet时代,大家开始用更高效的编码:

  • PCIe 3.0的128b/130b:开销只有1.56%,比8b/10b省了18%的带宽。但代价是CDR设计更复杂了。
  • 10G Ethernet的64b/66b:开销3.125%,也是个不错的折中方案。
  • USB 3.1 Gen2的128b/132b:开销3.03%,比USB 3.0的8b/10b省了不少。

为什么会这样?因为随着工艺进步,CDR的性能越来越好,能容忍更长的连续相同bit。所以新标准都倾向于用开销更低的编码。

关键点:编码效率越高,对物理层的要求也越高。PCIe 3.0的128b/130b需要更精确的时钟和更低的抖动,否则误码率会飙升。

3.3 物理层架构:单通道 vs 多通道

这个区别其实挺直观的。SATA和USB 3.0都是单通道设计,而PCIe和100G Ethernet支持多通道。

我记得有一次调试PCIe x16的板卡,发现链路只能协商到x8。排查了半天,原来是其中一对差分线的阻抗不连续导致的。这就是多通道的麻烦——任何一个通道出问题,整个链路都会降速。

咱们来看看各标准的物理层架构差异:

  • SATA 3.0:一对差分发送,一对差分接收。简单粗暴,成本低。
  • USB 3.0:也是两对差分线,但它是双单工模式——发送和接收可以同时进行。
  • PCIe:支持x1、x4、x8、x16等多种配置。每个通道包含一对发送和一对接收。
  • 100G Ethernet:通常用4个25G通道(CAUI-4接口),或者用10个10G通道(CAUI-10接口)。

实战技巧:调试多通道链路时,我习惯先看每个通道的误码率。如果某个通道的误码率明显偏高,那问题大概率出在那个通道的PCB走线或连接器上。

3.4 时钟方案:嵌入式时钟 vs 独立时钟

所有SerDes标准都采用嵌入式时钟——时钟信息隐藏在数据流中,接收端通过CDR恢复时钟。但具体实现上还是有区别的。

PCIe比较特殊,它除了嵌入式时钟外,还支持一个可选的参考时钟(Refclk)。这个参考时钟用来帮助PLL锁定,降低CDR的负担。我遇到过几次因为Refclk抖动太大导致链路不稳定的情况,后来换了个低抖动的晶振就解决了。

Ethernet则完全依赖嵌入式时钟,没有独立的参考时钟。这对CDR的要求更高,尤其是25G和100G这种高速率。

SATA和USB 3.0也是纯嵌入式时钟,但它们的速率相对较低,CDR实现起来没那么困难。

3.5 链路训练与协商

这个环节是上板调试时最容易出问题的地方。每个标准都有自己的链路训练机制:

  • PCIe:有完整的链路训练状态机(LTSSM),从检测、配置到L0正常工作状态。我经常用逻辑分析仪抓LTSSM的状态,看卡在哪一步。
  • SATA:有OOB(带外)信号进行握手,包括COMRESET、COMINIT、COMWAKE等序列。
  • USB 3.0:也有类似的训练序列,但比SATA复杂一些,多了LFPS(低频周期性信号)用于唤醒。
  • Ethernet:通过Auto-Negotiation协商速率和双工模式,然后进行链路训练。

避坑指南:我曾经遇到过PCIe链路训练失败的问题,原因是PCB上的一对差分线长度差了50mil。PCIe对skew(偏斜)非常敏感,尤其是高速率下。所以画板子时一定要做等长处理。

3.6 眼图与抖动要求

说到物理层对比,眼图是绕不开的话题。不同标准对眼图的要求差异很大:

标准 眼高要求 眼宽要求 总抖动(TJ)
PCIe 3.0 ≥ 100 mV ≥ 0.3 UI ≤ 0.3 UI
SATA 3.0 ≥ 240 mV ≥ 0.4 UI ≤ 0.35 UI
USB 3.0 ≥ 100 mV ≥ 0.3 UI ≤ 0.3 UI
10G Ethernet ≥ 80 mV ≥ 0.25 UI ≤ 0.28 UI
25G Ethernet ≥ 50 mV ≥ 0.2 UI ≤ 0.25 UI

你发现没有?速率越高,眼图裕量越小。25G Ethernet的眼高要求只有50 mV,比SATA的240 mV差了快5倍。这就是为什么高速SerDes调试这么有挑战性。

3.7 知识体系总览

下面这张图是我自己画的,把四大标准在物理层的核心差异梳理了一遍。调试时对照着看,思路会清晰很多。

SerDes标准物理层对比总览 PCIe SATA USB 3.0 Ethernet 128b/130b 8b/10b 8b/10b → 128b/132b 64b/66b x1/x4/x8/x16 单通道 单通道(双单工) 1/4/10通道 嵌入式+Refclk 纯嵌入式 纯嵌入式 纯嵌入式 LTSSM状态机 OOB握手 LFPS+训练 Auto-Neg 核心差异:编码效率、通道数、时钟方案、链路训练机制

3.8 调试时的注意事项

最后分享几个我在项目中的实际经验:

  1. 先确认标准版本:PCIe 3.0和PCIe 4.0的物理层差异很大,别拿3.0的规范去测4.0的信号。
  2. 注意AC耦合电容:PCIe和SATA都需要AC耦合电容,但位置要求不同。PCIe要求放在发送端,SATA要求放在接收端。搞反了会导致链路不稳定。
  3. 眼图测试要带码型:别用PRBS7去测25G Ethernet,要用PRBS31或者标准规定的测试码型。我见过有人用错码型,测出来的眼图完全不对。
  4. 留意参考时钟的精度:PCIe要求Refclk的精度在±300 ppm以内,Ethernet要求±100 ppm。时钟精度不够,CDR会失锁。

一句话总结:搞懂这些标准的物理层差异,上板调试时你就能快速定位问题——是编码问题、时钟问题,还是链路训练问题。心里有数,手上有活。

可可精品资料库