8b_10b编码
介绍
在高速串行通信中,常用到8b/10b编码。主要为了在数据中提供足够的跳变以恢复时钟,并达到直流平衡。此时物理总线的速率是有效数据速率的1.26倍。
目前使用8b/10b编码的接口有:
- USB3.0
- RapidIO技术.md
- MII接口 > SGMII接口
- SATA
- PCI-E
- 1000Base > 1000Base-X
工作原理
目标:编码后10bit中'0'和‘1’的个数基本保持一致。
编码方式:将原8bit数据从高位MSB到低位LSB分别记为 H、G、F、E、D、C、B、A,高三位称为y组(0~7),低5位称为x组(0~31)。因此原始数据可以表示为Dx.y。
MSB | LSB | |||||||
---|---|---|---|---|---|---|---|---|
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
标记 | H | G | F | E | D | C | B | A |
分组 | y | y | y | x | x | x | x | x |
分别对x、y进行编码,EDCBA经过5b/6b编码后为abcdei,HGF经过3b/4b编码后为fghj。
数据极性
完美的情况是编码后的10bit数据中0的个数等于1的个数。但是这种情况可用编码不够,因此退一步使得个数相差最小。
由于3b/4b或5b/6b编码后位数是偶数,因此0和1的个数最少相差2。
定义:
数据极性:Disparity 不均等性,不一致性
- +2: 1比0多两个
- 0: 0与1个数相等
- -2: 0比1多两个
运行不一致性
运行不一致:RD(Running Disparity),表示发送多个数据时积累的不一致性。
- RD+: 表示1比0多, RD=+1
- RD-: 表示0比1多,RD=-1
此处RD=+1不表示1比0多1个,只要多就是+1,没有其他值。
不一致性执行规则
上次RD | 数据极性 | 选用的数据极性 | 本次RD |
---|---|---|---|
-1 | 0 | 0 | -1 |
-1 | ±2 | +2 | +1 |
+1 | 0 | 0 | +1 |
+1 | ±2 | -2 | -1 |
编码表
控制符号
对于多余的编码组合,可以组成多个控制符号,可以使用这些控制符号进行同步、定界等操作。