4. 编码概述:8B/10B编码原理、64B/66B编码原理、InfiniBand编码选择
4.1 为什么物理层需要编码
在InfiniBand物理层中,编码不是“可选项”,而是保证链路可靠性的基石。串行链路上传输的原始比特流如果直接发送,会面临三个致命问题:直流不平衡(长时间发送0或1导致接收端无法确定判决阈值)、时钟恢复困难(没有足够跳变沿供CDR提取时钟)、无法区分数据与控制字符(接收端不知道字节边界在哪里)。编码的作用就是通过一定的映射规则,让发送出去的比特流具备足够的跳变密度、直流平衡特性,并预留控制字符用于链路管理。
4.2 8B/10B编码原理
8B/10B编码由IBM于1983年提出,其核心思想是将每个8 bit数据字节映射为10 bit码字。映射过程分为两步:首先将8 bit拆分为高3位(H)和低5位(L),分别通过5B/6B和3B/4B子编码表完成映射,再拼接成10 bit码字。编码表设计保证了每个码字中0和1的数量差不超过2,从而维持直流平衡。
编码器内部维护一个运行不一致性(Running Disparity, RD)状态。每发送一个码字后,根据码字中1和0的数量差更新RD值(正或负)。当待发送字节存在正负两种码字变体时,选择与当前RD相反方向的码字,确保长期直流平衡。接收端通过检查RD是否持续在合法范围内跳变,可以快速发现单比特错误。
8B/10B编码示例(D.5.2控制字符):
原始字节: 0xBC (10111100)
拆分: 高3位=101 (5), 低5位=11100 (28)
5B/6B映射: 11100 → 011100 (RD=-) 或 100011 (RD=+)
3B/4B映射: 101 → 1011 (RD=-) 或 0100 (RD=+)
最终码字: 根据当前RD选择组合,例如 011100 1011
8B/10B编码额外提供了K码(控制字符),用于表示包边界、空闲序列、训练序列等特殊信息。InfiniBand中定义了12个K码,例如K28.5(逗号字符)用于对齐和训练帧同步。8B/10B编码的开销为25%(10/8=1.25),但换来了优秀的运行长度限制(最大5个连续相同位)和可检测的非法码字。
4.3 64B/66B编码原理
64B/66B编码是更高效的替代方案,用于10Gbps以上高速链路。它将64 bit数据块编码为66 bit码块,开销仅为3.125%。编码规则简单而巧妙:每个66 bit码块以2 bit同步头(Sync Header)开头,“01”表示数据块,“10”表示控制块(“00”和“11”为非法同步头,用于快速错误检测)。
数据块格式为:2 bit同步头 + 64 bit原始数据,不做额外变换。控制块格式为:2 bit同步头 + 8 bit块类型字段(Block Type Field)+ 56 bit控制信息。块类型字段定义了不同的控制块格式,例如:
- 0x1E:全空闲块(IDLE),用于链路空闲填充
- 0x2D:包含8个有序集(如训练帧、状态帧)
- 0x33:混合数据/控制块,包含1个数据字节和7个控制字符
64B/66B编码不保证直流平衡,也不限制运行长度。它依赖加扰器(Scrambler)对数据进行随机化处理,使比特流近似白噪声特性。加扰器采用自同步多项式(如x58 + x39 + 1),发送端和接收端无需预先同步即可工作。接收端通过同步头锁定码块边界,再通过块类型字段解析控制信息。
4.4 InfiniBand编码选择
InfiniBand在不同速率代际采用了不同的编码方案,选择依据是速率、功耗、复杂度和误码率的综合权衡:
| 速率代际 | 单通道速率 | 编码方案 | 有效数据速率 | 编码开销 |
|---|---|---|---|---|
| SDR (1X) | 2.5 Gb/s | 8B/10B | 2.0 Gb/s | 25% |
| DDR (1X) | 5.0 Gb/s | 8B/10B | 4.0 Gb/s | 25% |
| QDR (1X) | 10.0 Gb/s | 8B/10B | 8.0 Gb/s | 25% |
| FDR (1X) | 14.0625 Gb/s | 64B/66B | 13.64 Gb/s | 3.125% |
| EDR (1X) | 25.78125 Gb/s | 64B/66B | 25.0 Gb/s | 3.125% |
| HDR (1X) | 53.125 Gb/s | 64B/66B + PAM4 | 51.56 Gb/s | 3.125% |
从表中可以看出,InfiniBand在QDR及之前采用8B/10B编码,从FDR开始切换到64B/66B编码。切换的原因主要有三点:
- 功耗与散热:8B/10B编码在10 Gb/s以上速率时,25%的额外比特导致发射器和接收器功耗显著增加,64B/66B的3.125%开销大幅降低了功耗。
- 信号完整性:更高频率下,8B/10B的频谱特性不如加扰后的64B/66B平坦,后者更利于均衡器处理。
- 实现复杂度:8B/10B需要维护RD状态和查表逻辑,在并行度极高的SerDes中实现面积大;64B/66B的加扰和同步头检测更适合高速流水线。
值得注意的是,HDR速率开始引入PAM4调制(4电平脉冲幅度调制),每个符号携带2 bit信息,但64B/66B编码层保持不变。PAM4改变了物理层的调制方式,但编码层的帧格式和同步机制仍然沿用64B/66B架构。