JESD204B采用8b/10b编码,也就是通过某种编码方式,把原来8bit变为10bit来传输。
为什么要这么做?
本来传输8bit就够了,现在要传输10bit,这不是无端地增加了链路的开销么?
采用8b/10b的好处有以下几个:
(1) 可是获得DC平衡。
所谓DC平衡,就是传输的信号中,0和1的数量各占50%。个人理解,就是平均直流电压为0。
DC平衡信号,可以使用AC耦合设计。这样,即使接收端和发射端的接口的直流偏移不一样,也可以通过电容隔离,然后直接连接。
如果直流不平衡,会怎么样呢?
如果传输信号中,有一串很长的1,信号的直流电平就会向上偏移;相反,如果有一串很长的0,信号就会向下偏移,导致接收端接收数据错误。
可以极端的理解一下,如果你传输的信号都是1,或者你传输的信号都是0,然后都经过了AC电容,你还能分辨出哪个信号是1哪个信号是0么?
(2) 编码后提供了足够的比特转换(从1转换成0以及从0转换成1),方便进行时钟恢复。
怎么做呢?
8b/10B,最早是由IBM于1983年提出的,现在是高速串行总线的主要编码方式。
在对8bit数据进行编码时,是将8个bit分为两部分:低5位与高3位。对低5位数据采用5b/6b编码,高3位数据采用3b/4b编码,然后再把两者连起来,即变成10bit输出,为一个symbol。当用D.x.y或者K.x.y时,x即指8位数据中的后5位,y即指8位数据中的前3位。
在6位编码和4位编码中,要求1和0的个数差值即disparity(不均等性)为2,-2或者0。
具体的编码表如下图所示。
在表中,同一个数据,根据RD的不同,有不同的映射码,且两种映射码互为反码。RD,即running disparity(极性偏差)。当码中1比0多时,则RD为正;反之,RD为负。
在4b编码或者6b编码的边界处,RD为+1或者-1,永远不会为0。
编码时,就是根据RD来选择映射码,选择的原则,每次码的选择都需要使RD极性翻转,或者数值保持不变。如下图所示。
8b/10b编码还定义了12个控制码,用来表示同步,帧的开始或者结束,或者链路的一些其他状态。
References:
[1]8b/10b编码(个人总结)
https://wenku.baidu.com/view/c3280ec0b9f3f90f76c61b38.html
[2] 理清8b10b编码三大观念
https://wenku.baidu.com/view/4283bc3343323968011c9272.html?sxts=1553813781089
[3]8b/10b encoding https://en.wi kipe dia.org/wiki/8b/10b_encoding
[4]A DC-balanced,Partitioned-Block,8b/10b transmission code
https://wenku.baidu.com/view/e247dcbbfd0a79563c1e7281.html?from=search