【数字通信】高速信号编码之XXB/XXB

  对于NRZ数据编码方式,有4B/5B,8B/10B,64B/66B,64/67B,128B/130B,128B/132B编码等等,不同的编码方式针对不同的信号协议,导致的效率也是不同的。

  什么是效率?在数据包传送的术语叫开销,意思就是除了实际需要的数据之外的一些数据bit,例如冗余校验等。如8B/10B,要把8bit的实际数据拓展为10bit,那么开销就是20%,效率就只有80%,换句话说,就是增加了20%的非实际数据的传输。

  编码方式评判标准:除本身的算法优化外,还应注重其效率。

  编码的原因:由于串行链路中会有交流耦合电容,理想电容的阻抗公式:

  线路编码机制将输入原始数据转变为接收器可接收的数据格式,同时保证数据流中有足够的时钟信息提供给接收端的时钟恢复电路。线路编码技术提供了一种将数据对齐到字节/字的方法,可以保持良好的直流平衡,增加了数据的传输距离,提供了更为有效的错误检测机制。除此之外,线路编码技术也可以用来实现时钟修正、块同步、通道绑定和将带宽划分到子信道等。线路编码技术主要有两种:数值查找表机制和自修改数据流(扰码)。目前常用的有8B/10B编码和64B/66B编码。

   接下来主要介绍8B/10B编码方式,其他均由它们拓展而来。8b/10b编码是由IBM于1983年发明的,旨在解决系统互联以及GB以太网传输的问题。 是指将8b的数据通过某种编码规则扩展成10b,保证数据流中的“0”和“1”数量基本一致,通过降低效率来增加传输的数据恢复的可靠性

一、8b/10b 主要具有以下优点:

1、保证直流(DC)平衡(重点

  直流平衡是什么意思呢?如上图所示,由于我们的串行链路中会有交流耦合电容,信号频率越高,阻抗越低,反之频率越低,阻抗越高。因此上面的情况,当码型是高频的时候(0/1切换的很快),基本上可以不损耗的传输过去,但是当码型为连续“0”或者“1”的情况时,电容的损耗就很大,导致幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。

  8b/10b编码方式总输出位数是10个位,其中“0”与“1”出现的次数总共也仅在三种场合存在,分别为“5个位0与5个位1”、“4个位0与6个位1”、“6个位0与4个位1”。有一个8b/10b编码的技术专用语“不均等性(Disparity)”,其涵义就是指10个位中位0与位1出现次数的差。换句话说,8b/10b编码的“Disparity”就仅有“+2”(4个位0与6个位1)、“+0”(5个位0与5个位1)以及“-2”(6个位0与4个位1)三种状况。

2、有利于提取时钟

  时钟恢复是依赖于“电平跳变沿“,所以平衡”0“和”1“,可以简化了时钟恢复,降低了接收机成本。

 3、方便错误检查

  8B/10B编码采用冗余方式,将8位的数据和一些特殊字符按照特定的规则编码成10位的数据,根据这些规则,能检测出传输过程中单个和多个比特误码。有关8b/10b编码的编码算法可以进一步查阅相关文献。在SerDes中长常用编码方式除了8b/10b编码外,还有64b/66b编码等;

 

二、编码方式

  • 8bit原始数据可以分成两部分:低位的5bit EDCBA(设其十进制数值为X)和高位的3bit HGF(设其十进制数值为Y),则该8bit数据可以记为D.X.Y;
  • 低5位(ABCDE)中间加一位,进行5B/6B编码,高三位(FGH)中间加一位,进行3B/4B编码;
  • 8B/10B编码中还用到12个控制字符,他们可以作为传输中帧起始、帧结束、传输空闲等状态标识,与数据字符的记法类似,控制字符一般记为K.X.Y。

  8bit数据有256种,加上12种控制字符,总共有268种。10bit数据有1024种,可以从中选择出一部分表示8bit数据,所选的码型中0和1的个数应尽量相等。8B/10B编码中将K28.1、K28.5和K28.7作为K码的控制字符,称为“comma”。在任意数据组合中,comma只作为控制字符出现,而在数据负荷部分不会出现,因此可以用comma字符指示帧的开始和结束标志,或始终修正和数据流对齐的控制字符。

  编码时,低5bit原数据 EDCBA经过5B/6B编码成为6bit码abcdei,高3bit原数据HGF经3B/4B成为4bit码fghj,最后再将两部分组合起来形成一个10bit码abcdeifghj。10B码在发送时,按照先发送低位在发送高位的顺序发送。【注:不均等性(Disparity)和极性偏差(Running Disparity,RD)。不均等性(Disparity):编码后的码型数据是“1”多还是“0”多;如果“1”多,则极性偏差RD为-RD,如果“0”多则是+RD】

  5B/6B编码和3B/4B编码的映射有标准化的表格,可以通过基于查找表的方式实现。使用 “不一致性(Disparity)”来描述编码中"1"的位数和"0"的位数的差值,它仅允许有"+2"( "0"比"1"多两个)、"0"( "0"与"1"个数相等)以及"-2"("1"比"0"多两个)这三种状况。 由于数据流不停地从发送端向接收端传输,前面所有已发送数据的不一致性累积产生的状态被称为“运行不一致性(Runing Disparity,RD)”。RD仅会出现+1与-1两种状态,分别代表位"1"比位"0"多或位"0"比位"1"多,其初始值是-1。

  编码的目的是为了缓解长“0”或长“1”的影响,因此在编码后如果“1”多的话,下次编码就要把这种码型做修正,从-RD码型变成+RD码型。如果“1”和“1”一样多,极性则不变,变化规则如下图所示:

 

  决定5B/4B和 3B/4B编码映射方式,如下表所示

5B/4B编码
3B/4B编码

注:当与5B/6B组合时,必须从D.x.P7和D.x.A7中选择一个来避免连续的5个0或1。

 

posted @ 2022-09-23 16:40  AnchorX  阅读(926)  评论(0编辑  收藏  举报