8b/10b 编码的工作原理
8b/10b 编码的工作原理
8b/10b 编码是一种广泛应用于高速数据传输领域的线路编码技术,其核心是将 8 位二进制数据(1 字节)映射为 10 位二进制符号后再传输,通过“增加冗余”解决高速传输中的直流分量偏移、时钟同步丢失等关键问题,常见于 PCI Express、SATA、以太网(部分速率)等接口标准。
一、核心设计目标:为何需要 8b/10b 编码?
在高速串行传输中,原始二进制数据(如连续 0 或连续 1)会导致两个核心问题:
- 直流分量偏移(DC Balance):若传输信号中“0”和“1”的数量长期不均,接收端的信号判决阈值会漂移,导致误码;
- 时钟同步丢失(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):
- 拆分:高 5 位
00000,低 3 位000; - 5b/6b 映射:若当前 RD=0,选择正码
001111(D.c.=+2),累计 RD 变为 +2; - 3b/4b 映射:当前 RD=+2,选择负码
1010(D.c.=0),累计 RD 仍为 +2(但整体符号无连续相同位); - 最终 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 以太网)提供了基础。
浙公网安备 33010602011771号