8B10B编解码算法学习

【直流平衡】:

定义:直流平衡是数据流中的1与0的数量相等的状态,或者说是使数据流中的1与0的数量相等的的一种技术。

用途:直流平衡常用于数据通讯。如液晶电视传输信号的DisplayPort或V-by-One接口中就用到这种技术。

用意:在直流平衡的情况下,传输的平均功耗为一常数。在DisplayPort或V-by-One接口中,数据的传输是借助于交流耦合的差分线,如同时实现直流平衡,将使得接收器的阈值的设置变得简单。
 

【8B/10B编解码理解】

(转)有的字符在编码以后有两个码组与之对应,一个码组叫RD+,一个码组叫RD-,其中RD+码组的1的个数比0少,RD-码组中1的个数比0多。1的个数和0的个数相等的情况,即可以归入RD+,也可以归入RD-。

对于输入的待编码的8B码组,可以分为三类码组,一类是普通的数据码组,一类是用于控制的K控制码组,再有一类就是特殊数据码组,特殊数据码组只有六个,是10B编码在8B/10B码表的RD+列选取的D11.7、D13.7和D14.7,10B编码在8B/10B码表RD-列选取的D17.7、D18.7和D20.7。

8B/10B的编码码表有两列,一列为RD-,一列为RD+。RD-的列的10B码组中'1'的个数比'0'多,或者'1'的个数与'0'的个数相等;RD+列的10B码组中'1'的个数比'0'的个数少,或者'1'的个数与'0'的个数相等。也就是说一个8B码组的10B编码可以有两种。RD-和RD+的码组互为取反。

编码时也可以分两步走,先做5B/6B编码,再做3B/4B编码,注意一定要先做5B/6B编码。编码规则类似上面介绍的8B/10B规则,也是先有极性RD,根据RD选择6B码组,同时决定次态RD,再根据刚才6B决定的RD来指导3B/4B编码,编码后决定的RD去指导下一个10B编码码组中的6B编码部分。5B/6B和3B/4B的编码表也都和8B/10B的码表一样,分为RD-和RD+两列,但是3B/4B码表中3B码0111的4B编码可以有四种选择,通常情况下0111的4B编码选择为1110和0001,但是有六种情况下,4B码的选择为0111和1000,这6个8B码组就叫做特殊数据码组。选择4B码为0111和1000的规则如下:如果当前状态为RD-,且前面已编码的6B码组中e=i=1,则3B/4B编码的选择为3B/4B码表RD-列的0111;如果当前状态为RD+,且前面已编码的6B码组中e=i=0,则3B/4B编码的选择为3B/4B码表RD-列的1000。可见,3B/4B的选择是由5B/6B编码结果所决定的,这就是要先进行5B/6B编码的原因。

编码规则是这样的,根据当前的RD极性来从两个10B中选择一个最为当前8B的编码,即先有RD极性,后对8B进行编码,再根据此10B编码决定下一个RD的极性,决定下一极性的规则如下:如果编码后的10B码组中‘1’的个数与‘0’的个数相等,则次态极性保持不变;如果‘1’的个数与‘0’的个数不等,则次态的极性为当前极性的反转。无论是普通数据码组、特殊数据码组还是K控制码组都符合以上的编码规则。

举个例子,当前极性为RD-,待编码的8B码组为D10.7,即111 01010,这里对8B码组的书写均是按照HGF EDCBA的顺序,即左边为高位,右边为低位。对于该8B码组,由于当前为RD-,所以其10B编码要在编码表的RD-一列进行选取,即10B编码为010101 1110,这里对10B码组的书写,都是按照abcdei fghj的顺序,左边为低位,右边为高位。再看当前编好的10B码组,其‘1’的个数比‘0’的个数要多,所以此10B码组的极性为RD-,为达支流平衡,次态极性要反转,由此决定的次态极性就为RD+。其实8B/10B编码也可以分为5B/6B和3B/4B两部分进行,先编码6B,6B编码后的极性RD决定后面4B编码的选择,然后编码4B,编码4B后的极性RD又决定下个10B码组中6B码组的选择。仍用上面的D10.7做例子,在RD-下,5B码组01010对应的6B码组为010101,该6B码组中‘1’的个数与‘0’的个数相等,所以极性状态不会改变,仍为RD-,下面再对3B进行编码,此时就相当于是在RD-下对3B码组111进行编码,前面的6B码组中不满足e=i=1,所以该码组不是特殊数据码组,所以对3B的编码就在3B/4B码表的RD-列选取,编码后的4B码组为1110,再看此4B码组中‘1’比‘0’个数多,该码组极性为RD-,所以次态极性要进行反转,所以次态的极性为RD+,最终,得到10B码组为010101 1110,次态为RD+ ,可见,分步编码与前面直接的8B/10B编码得到的结果是相同的。

再举个例子,当前极性为RD-,待编码8B码组为D4.7,即111 00100所以其10B在RD-列选取,10B编码为110101 0001,其‘1’的个数与‘0’的个数相等,所以次态将保持极性不变,次态极性仍为RD-。用5B/6B和3B/4B两步走的方法也会得到同样结果。即,在RD-下,5B码组00100对应的6B编码为110101,此6B码组中‘1’比‘0’多,即极性为RD-,所以次态的极性就为RD+,再看3B码组111,前面6B码组不满足e=i=0,所以此8B不是特殊数据码组,所以直接从3B/4B码表的RD+列选取4B编码,为0001,此4B码组中‘1’的个数比‘0’少,即极性为RD+,所以次态极性要反转,下一个极性为RD-,至此可见,得到了同样的编码结果。

 
原文地址:https://www.cnblogs.com/liudeen/p/2413026.html