8b10b编码基础-云帆兴烨

发表日期:2024/08/09 浏览次数:

8b/10b编码的应用非常广泛,例如:PCIE GEN1 GEN2,USB3.2 GEN1。再到现在的128b/130b (PCIE GEN3/4/5) 128b/132b (USB3.2 GEN2), 与8b/10b相比他们提升了编码效率,这两种编码方式在底层逻辑上和处理的问题其实是相同的,本文从什么是8b/10b编码、为什么要使用8b/10b编码和如何实现8b/10b编码三个方面来给大家介绍这项技术。

1

什么是 8b/10b 编码



8b/10b就是把8个bit的数据加工映射成10个bit。如图1所示,我们可以看到会把8个连续的bit分成低5位 (LSB) 和高3位 (MSB) 分别进行映射,5位通过5b/6b编码,3位通过3b/4b编码。

1.png
                                               图1 8b/10b编码映射图

2

为什么要进行 8b/10b 编码



那么为什么要把8个bit编码成10个bit?为什么要浪费两个bit,不去传输有用数据?原因有以下两点:

  • 可以用多出来的bit位来传输一些控制信息

  • 可以通过这种方式来达到直流均衡

在这里我们就要引出第二个概念:直流平衡。直流平衡(DC-balanced)是指在编码过程中保证信道中直流偏移为零,使信道中传输数据包含的1与0的个数相同。高速串行总线中,通常采用交流耦合方式,即在发送端(TX)串接电容(见图2)。电容在电路中是呈现高通属性的,信号频率越高,电容阻抗越低(见公式1)。
2.png
                                公式1
3.png
                                   图2 不同频率的NRZ码型通过电容
当数据位流中出现多个连续的1或0时,可以认为该时间段信号是直流的,电容的损耗变大,导致信号的幅度降低,直流信号被滤除,到最后无法识别是1还是0。且接收端收到连续的1或0时,没有充分的定时信息,给接收端的解码带来了困难(见图3)。
4.png
                                                                      图3  连1连0信号通过电容信号失真

因此,8b/10b编码就是把信号中的连1连0通过多加两位的冗余,来实现映射后的信号尽量是01交替的情况,换一种说法,就是映射后的信号中尽量有相同数量的0和1。下面我们就来看一下8b/10b编码具体是怎么把8bit映射成10bit的。


3

如何实现 8b/10b 编码


通常会将低5位 EDCBA 按其十进制数值记为x,将高3位按其十进制数值记为y,将原始8bit数据记为D.x.y。例如8bit数“101 10101”,即十进制数181,按照上述划分原则x=10101 (21),y=101 (5),这个数被表示为D.21.5。此外在8b/10b编码中,还需用到12种控制字符,用来标识传输数据的开始、结束,传输空闲等状态,按照上述规则,将控制字符记为K.x.y。8bit的数据一共有256种组合,再加上12种控制字符 一共会有268种组合,但是10bit却可以表示成1024种组合,那我们要追求直流平衡,就要在1024种组合中挑选出0和1个数相近且0和1尽量交替出现的组合,来分配给我们提到的268种组合。


表1和表2就分别是3b/4b和5b/6b的映射关系表,通过映射后的数据是不会出现全1或者全0的。可以看到一个码型能被编码映射成多个码型而且又分为RD+和RD-,这又为什么?


5.jpg

 表1 3b/4b编码映射表

6.jpg
表2 5b/6b编码映射表

为方便理解8b/10b的编码原理,首先要明白两个重要的概念:“不一致性”(disparity)和“运行不一致性”,也称为“极性偏差”(running disparity,RD)。Disparity表示编码后的码型数据中“1”的个数与“0”的个数的差值。由表1,表2及表3中的编码规则可知:Dirparity的取值只有“+2”(“0”比“1”多两个)、“0”(“0”和“1”数量相等)和“-2”(“0”比“1”少两个)。总结来说就是0多就是RD+,1多就是RD-,编码中“1”和“0”数量相等的码字称为“完美平衡码”。



在编码时,RD的初始值为负,即RD-,根据当前的RD值,决定相应的编码输出。比如:在表1中,对于D.x.3(011),其对应的4B码字有两种:1100和0011,若此时RD为负,则取1100作为其对应的4B码字作为输出,同时检验此时的编码是否为完美编码,如果是完美编码,则保持RD的极性不变;否则改变RD的极性。通过控制RD的极性,同时在编码时根据RD的极性选择相对应的编码值,使得编码后的数据流有更好的直流平衡特性。8b/10b编码由3b/4b编码和5b/6b编码两部分组合而成,通过传递RD参数来使整个编码结果具有很好的直流平衡性。


7.png                                                                                       
                                                                                 图4 8b/10b编码状态转移图

以上就是8b/10b编码的相关介绍,文中没有提及的12个控制编码会在后续结合PCIE层结构来介绍。同时特励达力科还有专门针对8b/10b的协议解码软件解决方案,主要功能包括:
  • 解码8b/10b串行数据波形并且会在波形上进行细致的注释,协助工程师排查问题

  • 关联协议事件到物理波形更深入的洞察;将数据保存到磁盘方便后续进一步分析

  • 支持多通道操作,可同时查看多达四个通道

  • 协议解码能力高达 16 Gb/s


特励达力科的8b/10b解码功能强大,可以协助工程师以最简便的操作、最详尽的细节来排查问题调试串行数据中存在的问题。

8.png
                                                                                           图5 8b/10b解码选件实测图