第三章 常用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 知识体系总览
下面这张图是我自己画的,把四大标准在物理层的核心差异梳理了一遍。调试时对照着看,思路会清晰很多。
3.8 调试时的注意事项
最后分享几个我在项目中的实际经验:
- 先确认标准版本:PCIe 3.0和PCIe 4.0的物理层差异很大,别拿3.0的规范去测4.0的信号。
- 注意AC耦合电容:PCIe和SATA都需要AC耦合电容,但位置要求不同。PCIe要求放在发送端,SATA要求放在接收端。搞反了会导致链路不稳定。
- 眼图测试要带码型:别用PRBS7去测25G Ethernet,要用PRBS31或者标准规定的测试码型。我见过有人用错码型,测出来的眼图完全不对。
- 留意参考时钟的精度:PCIe要求Refclk的精度在±300 ppm以内,Ethernet要求±100 ppm。时钟精度不够,CDR会失锁。
一句话总结:搞懂这些标准的物理层差异,上板调试时你就能快速定位问题——是编码问题、时钟问题,还是链路训练问题。心里有数,手上有活。