8B/10B编码技术深度解析

8B/10B编码技术深度解析

一、引言:为什么需要8B/10B编码?

在高速串行通信中,信号完整性面临两大挑战:

1.1 直流平衡问题

  • 基线漂移:长串的0或1会导致信号基线漂移

  • 电容耦合效应:变压器和AC耦合电容对直流分量敏感

  • 解决方案需求:需要确保传输的0和1数量长期均衡

1.2 时钟恢复问题

  • 时钟嵌入:在串行通信中,时钟信息需要从数据流中提取

  • 跳变需求:接收端PLL需要足够的信号跳变来维持锁相

  • 最小跳变密度:通常要求每5-7个位至少有一次跳变

二、8B/10B编码基础原理

2.1 基本概念

8B/10B编码由Albert X. Widmer在1983年提出,核心思想是将8位数据转换为10位编码,通过增加20%的开销换取信号完整性的显著提升。

2.2 编码结构

 

输入: 8位数据 = [H G F E D C B A]
                高3位↑   低5位↑

输出: 10位编码 = [a b c d e i f g h j]
               5B/6B部分↑  3B/4B部分↑

2.3 运行不一致性

定义:已发送数据中1的数量与0的数量之差

  • RD-:1比0多,需要发送更多0

  • RD+:0比1多,需要发送更多1

  • 初始状态:RD-

三、详细编码机制

3.1 5B/6B编码详解

3.1.1 位命名和权重

 

输入位: E D C B A
权重:  16 8 4 2 1

3.1.2 编码表示例(关键部分)

十进制二进制输入RD-输出RD+输出差异注释
000000100111011000±2基础编码
100001011101100010±2 
200010101101010010±2 
............... 
2811100011110100001±2数据字符
2811100001111110000±2控制字符

3.1.3 编码选择逻辑

 

def 5B6B_编码(输入5位, 当前RD):
    if 当前RD == RD-:
        return 差异为+2的编码  # 增加1的数量,RD变为+
    else:  # RD+
        return 差异为-2的编码  # 增加0的数量,RD变为-

3.2 3B/4B编码详解

3.2.1 编码表示例

十进制二进制输入RD-输出RD+输出差异
000010110100±2
1001100110010
2010010101010
301111000011±2
410011010010±2
510110100101±2
6110011001100
711111100001±2

3.3 控制字符特殊编码

3.3.1 K字符命名规则

  • 格式:Kx.y

  • x:低5位EDCBA的十进制值

  • y:高3位HGF的十进制值

3.3.2 重要控制字符

控制字符原始值用途
K28.50xBC时钟对齐,逗号字符
K28.10x3C数据包开始
K28.70xFC数据包结束
K27.70xFB有序集开始

四、完整编码过程实例分析

4.1 数据字符编码:D10.2

输入数据:01010 010 (十进制:10.2)

步骤1:5B/6B编码

  • 输入:EDCBA = 01010 (十进制10)

  • 查表得:

    • RD-时:010110 (差异0,RD保持-)

    • RD+时:010110 (差异0,RD保持+)

步骤2:3B/4B编码

  • 输入:HGF = 010 (十进制2)

  • 查表得:

    • RD-时:0101 (差异-2,RD变为+)

    • RD+时:0101 (差异-2,RD变为+)

完整过程(假设初始RD=-)

 

5B/6B: 01010 → 010110 (差异0,RD保持-)
3B/4B: 010 → 0101 (差异-2,RD变为+)
最终输出: 010110 0101

4.2 控制字符编码:K28.5深度解析

K28.5的组成

  • 低5位:28 (二进制11100)

  • 高3位:5 (二进制101)

  • 完整字节:10111100 (0xBC)

编码过程(初始RD=-)

5B/6B编码(控制字符特殊表)

  • 输入:11100

  • RD-输出:001111 (差异+2,RD变为+)

  • 注意:这与数据字符D28.0的编码不同

3B/4B编码

  • 输入:101

  • RD-输出:1010 (差异+2,RD变为+)

  • RD+输出:0101 (差异-2,RD变为-)

完整编码

 

5B/6B: 11100 → 001111 (RD: - → +)
3B/4B: 101 → 0101 (RD: + → -)
最终输出: 001111 0101

K28.5的独特价值

  • 10位编码:0011110101

  • 包含1111100000模式,便于接收端检测

  • 用于链路训练、时钟恢复和字节对齐

五、编码特性分析

5.1 直流平衡分析

数学保证

  • 每个编码的差异为0或±2

  • RD在+和-之间交替变化

  • 长期1和0数量趋于相等

实际效果

 

# 模拟长期传输统计
总位数 = 10000
1的数量 ≈ 5000 ± 2%
0的数量 ≈ 5000 ± 2%

5.2 跳变密度分析

设计目标

  • 确保每4-5位至少有一次跳变

  • 避免超过5个连续相同位

实际编码检查

  • 最坏情况:最多5个连续相同位

  • 典型情况:每2-3位就有跳变

5.3 错误检测能力

非法码字

  • 接收端可检测无效的10位组合

  • 提供一级错误检测机制

运行不一致性检查

  • 接收端维护本地RD

  • 可检测编码选择错误

六、实际应用场景

6.1 PCI Express应用

链路训练序列

 

TS1: K28.5 D10.2 D10.2 ... (训练序列1)
TS2: K28.5 D5.2 D5.2 ...   (训练序列2)

有序集

  • SKP:时钟容差补偿

  • EIEOS:电气空闲退出有序集

6.2 SATA应用

原语定义

  • ALIGN:K28.5 D10.2 D10.2 D10.2

  • SYNC:时钟同步原语

  • R_RDY:接收就绪

6.3 千兆以太网应用

编码特点

  • 使用相同的8B/10B原理

  • 特定的控制字符集

  • 数据包定界机制

七、性能与限制

7.1 优势总结

  1. 卓越的信号完整性

  2. 可靠的时钟恢复

  3. 内置错误检测

  4. 控制字符丰富

  5. 硬件实现简单

7.2 局限性

  1. 20%带宽开销

  2. 编码延迟

  3. 在现代更高速率下效率不足

  4. 逐渐被64B/66B等更高效编码取代

7.3 与现代编码比较

特性8B/10B64B/66B128B/130B
开销20%3.125%1.56%
直流平衡优秀良好需要加扰
复杂度
应用PCIe 1.0/2.0PCIe 3.0+USB4

八、总结

8B/10B编码作为串行通信发展史上的里程碑技术,通过精巧的编码表设计和运行不一致性控制,完美解决了高速串行通信中的直流平衡和时钟恢复问题。虽然在新一代标准中逐渐被更高效的编码方案取代,但其设计思想仍然影响着现代通信技术的发展。

理解8B/10B编码不仅有助于调试传统接口问题,更能为学习更先进的编码技术奠定坚实基础。从K28.5的特殊编码到完整的编码流程,每一个细节都体现了通信工程中的智慧结晶。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比姚明高一截

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值