高速串行通信
介绍
历史上,芯片间的传输接口经历了串行到并行再到串行的过程。从串行到并行,是因为并行接口同时传输多路数据,可以得到更高的带宽。从并行再回到串行,是因为随着并行信号数增大,PCB 走线愈发困难,串扰问题愈发严重,难以继续扩展并行接口的宽度。另一方面,随着技术的发展,串行通信发展出了新的技术,实现了更高的速度,因此又从并行回到了串行。
其中发挥重要作用的是 SerDes,它实现了串并转换:在发送端,把芯片内部的并行数据转换为串行数据输出;在接收端,把串行数据输入转换为芯片内部的并行数据。
参考资料:From Parallel to Serial and Back Again: Understanding SerDes
串行通信
为了实现高速的串行通信,需要很多技术来保证高频率下数据的正常传输:
- 差分信号传输
- 内嵌时钟以及时钟恢复
- 数据编码
- 预加重和均衡:
常见的 SerDes 速率有:3.125 Gb/s,6 Gb/s,10 Gb/s,28 GB/s,56 GB/s 和 112 Gb/s。这是经过数据编码后的速率,因此实际传输的数据速率还要减去一部分。
很多高速协议采用了串行通信:
- PCIe
- USB 3
- Ethernet
- SGMII
- Infiniband
- SATA/SAS
常见的数据编码方式有 4b/5b,8b/10b,64/66b 和 128/130b。4b/5b 的意思就是每 4 bit 的数据会被编码成 5 bit,其他也是类似。编码后,保证 1 和 0 的个数基本相同,并且保证了有足够的边沿用于时钟恢复,此时就不需要额外传输时钟信号了,接收侧从数据中恢复时钟并且采样。
预先加重和均衡解决的是传输过程中高频信号的衰减:既然传输过程中对高频信号衰减的比较厉害,那就在发送的时候预先增加高频信号分量;均衡则是在接收端进行滤波,把想要的频率过滤出来。
当接口需要更高带宽的时候,通常就是组合多个 SerDes,例如 PCIe x1 就是 Serdes 一收一发;PCIe x16 就是 SerDes 十六收十六发。
下面列举一些高速串行通信协议采用的技术:
- PCIe 1.0-2.0: NRZ, 8b/10b
- PCIe 3.0-5.0: NRZ, 128b/130b
- PCIe 6.0: PAM-4, FEC, 242B/256B FLIT
- HDMI 1.0-2.0:8b/10b
- HDMI 2.1:16b/18b, FEC
- DisplayPort 1.0-1.4:8b/10b
- DisplayPort 2.0-2.1:128b/132b, FEC
- SGMII:8b/10b
- SATA:8b/10b
- SAS 1-3:8b/10b
- SAS 4:128b/150b, FEC