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+输出 | 差异 | 注释 |
|---|---|---|---|---|---|
| 0 | 00000 | 100111 | 011000 | ±2 | 基础编码 |
| 1 | 00001 | 011101 | 100010 | ±2 | |
| 2 | 0 |
