8b/10b 编码的工作原理

8b/10b 编码的工作原理

8b/10b 编码是一种广泛应用于高速数据传输领域的线路编码技术,其核心是将 8 位二进制数据(1 字节)映射为 10 位二进制符号后再传输,通过“增加冗余”解决高速传输中的直流分量偏移、时钟同步丢失等关键问题,常见于 PCI Express、SATA、以太网(部分速率)等接口标准。

一、核心设计目标:为何需要 8b/10b 编码?

在高速串行传输中,原始二进制数据(如连续 0 或连续 1)会导致两个核心问题:

  1. 直流分量偏移(DC Balance):若传输信号中“0”和“1”的数量长期不均,接收端的信号判决阈值会漂移,导致误码;
  2. 时钟同步丢失(Clock Recovery):连续相同符号(如“000000”)会使接收端无法从信号中提取时钟信号,无法判断每个符号的边界。

8b/10b 编码通过“8 位数据→10 位符号”的映射,强制保证长期传输中“0”和“1”的数量近似相等,同时避免连续多个相同符号,从根本上解决上述问题。

二、核心概念:平衡码与非平衡码

10 位符号按“0”和“1”的数量可分为两类,这是 8b/10b 编码的基础:

  • 平衡码(Balanced Code):10 位中“0”和“1”的数量均为 5(即“5个0+5个1”),记为 D.c. = 0(D.c. 为“直流平衡度”,计算方式:1 的数量 - 0 的数量);
  • 非平衡码(Unbalanced Code):10 位中“0”和“1”的数量相差 2(即“4个0+6个1”或“6个0+4个1”),记为 D.c. = +2(1 更多)或 D.c. = -2(0 更多)。

8b/10b 编码的关键逻辑是:通过选择不同的 10 位符号,动态抵消累计的直流偏移,确保整体传输的直流平衡

三、工作原理:三步实现 8b→10b 映射

8b/10b 编码的映射过程分为“拆分 8 位数据→选择 5b/6b 映射→选择 3b/4b 映射”三步,核心是通过“5b/6b”和“3b/4b”的组合,灵活调整直流平衡度。

1. 第一步:拆分 8 位数据(abcdefgh)

将 8 位二进制数据(记为 abcdefgh)拆分为两部分:

  • 高 5 位abcde(决定后续的“5b/6b 映射”);
  • 低 3 位fgh(决定后续的“3b/4b 映射”)。

例如:8 位数据 10110011(二进制)→ 拆分为高 5 位 10110、低 3 位 011

2. 第二步:5b/6b 映射(核心:平衡直流)

5 位数据(abcde)有 32 种可能(2⁵=32),每种 5 位数据对应 2 种 6 位符号(称为“正码”和“负码”),两种符号的直流平衡度相反(如正码 D.c.=+2,负码 D.c.=-2)。

映射的关键规则:根据当前的“累计直流平衡度(Running Disparity, RD)”选择符号——

  • 若当前 RD 为 (表示之前传输的“1”偏多),则选择 D.c. 为负的符号,抵消正偏移;
  • 若当前 RD 为 (表示之前传输的“0”偏多),则选择 D.c. 为正的符号,抵消负偏移;
  • 若当前 RD 为 0(平衡),默认选择其中一种(如“正码”)。

示例:5b 数据 00000 的映射

  • 正码:001111(4个1+2个0,D.c.=+2);
  • 负码:110000(2个1+4个0,D.c.=-2);
  • 若当前 RD=+2(1 偏多),则选择负码 110000,使累计 RD 降至 0(+2 + (-2) = 0)。

3. 第三步:3b/4b 映射(辅助:补充平衡)

3 位数据(fgh)有 8 种可能(2³=8),每种 3 位数据对应 1~2 种 4 位符号,符号的直流平衡度同样为“平衡(2个0+2个1,D.c.=0)”或“非平衡(1个0+3个1,D.c.=+2;3个0+1个1,D.c.=-2)”。

3b/4b 映射的逻辑与 5b/6b 一致:根据当前的累计 RD,选择能使 RD 趋向平衡的 4 位符号,最终确保“5b/6b 符号 + 3b/4b 符号”组成的 10 位符号,整体直流平衡度最优。

示例:3b 数据 000 的映射

  • 正码:0101(2个0+2个1,D.c.=0,平衡码);
  • 负码:1010(2个0+2个1,D.c.=0,平衡码);
  • 无论当前 RD 如何,选择任一符号均可保持平衡,无偏移。

4. 最终:组合 6b + 4b 符号

将“5b/6b 映射得到的 6 位符号”与“3b/4b 映射得到的 4 位符号”拼接,形成最终的 10 位传输符号。

完整示例

假设 8 位数据为 00000000(abcdefgh = 00000 000):

  1. 拆分:高 5 位 00000,低 3 位 000
  2. 5b/6b 映射:若当前 RD=0,选择正码 001111(D.c.=+2),累计 RD 变为 +2;
  3. 3b/4b 映射:当前 RD=+2,选择负码 1010(D.c.=0),累计 RD 仍为 +2(但整体符号无连续相同位);
  4. 最终 10 位符号:001111 1010(即 0011111010)。

四、特殊符号:控制码(K 码)

除了“8 位数据→10 位数据码(D 码)”的映射,8b/10b 编码还定义了控制码(K 码),用于传输同步信号、帧起始/结束等控制信息(而非用户数据)。

K 码的生成逻辑与 D 码类似,但映射关系是“特定 8 位控制信息→10 位 K 码”,且部分 K 码是唯一的(不会与 D 码冲突),例如:

  • K28.5 码:1100001011(常用于 PCI Express 的帧同步);
  • K23.7 码:0010111101(常用于 SATA 的控制信号)。

五、核心优势与应用场景

1. 核心优势

  • 直流平衡:长期传输中“0”和“1”数量近似相等,避免接收端阈值漂移;
  • 时钟友好:10 位符号中最多只有 5 个连续相同位(如 0000011111),接收端可稳定提取时钟;
  • 误码检测:若接收的 10 位符号不在“D 码+K 码”的映射表中,可直接判定为误码;
  • 效率较高:编码效率 = 8/10 = 80%(高于曼彻斯特编码的 50%),适合高速传输。

2. 典型应用场景

  • 高速接口:PCI Express(1.04.0)、SATA(1.03.0)、USB 3.0;
  • 网络传输:10Gbps 以太网(部分物理层)、光纤通道(Fibre Channel);
  • 存储系统:SAS(串行连接 SCSI)、SSD 内部高速总线。

六、总结

8b/10b 编码的本质是“用 2 位冗余(8→10)换取传输可靠性”,通过“拆分数据→双阶段映射→动态调整直流平衡度”的逻辑,解决了高速传输中的直流偏移和时钟同步问题,是现代高速数字接口的核心技术之一。其设计思想也为后续的 64b/66b 编码(更高效率,用于 100Gbps 以太网)提供了基础。

posted on 2025-09-08 17:12  zxddesk  阅读(380)  评论(0)    收藏  举报

导航