8B/10B编码

编码目的

减少码流中的直流分量,避免出现长连“0“或者长连”1“的情况,使得码流中含有丰富的定时信息,便于后级进行时钟恢复(CDR)。

编码过程

8B/10B编码就是将8bit数据分为高3bit和低5bit。其中高3bit进行3B/4B编码,低5bit进行5B/6B编码。编码后将4bit(由高3bit编码得到)数据放在6bit(由5bit编码得到)的数据后面。

假设8bit的数据为HGFEDCBA,则编码过程如下

(图片来源于:8B/10B编码基本原理_8b10b编码原理-CSDN博客

通常会将低5bit数据EDCBA记为x,将高3bit数据HGF记为y,而8B/10编码中又可以分为K码(comma码)和D码(数据码),所以数据通常可以表示为K_{x.y}或者D_{x.y}。例如8bit数据”10111100“可以写为K_{28.5}或者D_{28.5}

不均等性

不均等性的概念

8B10B产生输出的为10位,所以这10位之中“1”和“0”的数量差别只存在三种情况:“+2”,“0”,“-2”,它们代表三种不均等性或者说差异(Disparity).

计算公式:Disparity = “0的数量” - “1的数量”

另外,由于不断从发送端向接收端传输,前面所有发送的数据的不一致性所产生的积累称为“运行不一致(Runing Disparity,RD)”

  1. 当RD = -1时,表示之前编码后“1”的个数比“0”的个数多2个,表示“1”多。
  2. 当RD = +1时,表示之前编码后“0”的个数比“1”的个数多2个,表示“0”多.

这里为什么是2呢,这是由于4 bit和6bit的两个子分组都是偶数个位数,所以不平衡度不可能是“+1” 或“-1”,因此,在8B/10B编码方案中会使用不平衡度为“+2” 和“-2” 的值。

所以根据之前编码的RD,当前差异选择如下

(图片来源:FPGA基础:8b/10b编码原理详解

编码的过程就是使得"0"和"1"的数量均衡,防止"0"或"1"过长的现象,因此在"1"多的时候会翻转RD-变为RD+,在"0"多的时候会翻转RD+变为RD-,在编码过程中,RD的初值为-1当编码为完美平衡编码时,如上表所示不均等性(Disparity of 6 or 4 bit Code)为0,RD的极性(Next RD)不反转;当编码“1”和“0”的数量不等时,如上表所示不均等性为±2,则RD的极性(Next RD)反转。

上表有4种情况,Next RD值依赖于Previous RD以及当前6B或者4B编码的Disparity。根据Previous RD,决定4B/5B或者3B/4B的编码方式:

  • Previous RD = -1,编码“0”和“1”数量不相等即不均等性为0,则Next RD极性不变 等于 -1
  • Previous RD = -1,编码“0”和“1”数量不相等即不均等性为±2,根据RD = -1选择Disparity为+2的编码,则Next RD极性翻转 等于 +1
  • Previous RD = +1,编码“0”和“1”数量不相等即不均等性为0,则Next RD极性不变 等于 +1
  • Previous RD = +1,编码“0”和“1”数量不相等即不均等性为±2,根据RD = +1选择Disparity为-2的编码,则Next RD极性翻转 等于 -1。

下表分别为5b6b和3b4b的映射码表,对于每个具有不同数量的1和0的5b/6b和3b/4b编码,都有两种可以用于传输的比特模式:一种是含有两个更多“1”比特,另一种是所有比特取反从而含有两个更多“0”。根据信号的当前的RD,编码引擎会选择对给定数据发送哪两种可能的六位或四位序列之一。

D.x.7主要编码和备用编码

从上图可以看到,D.x.7有两套编码,分别是D.x.P7(主要,Primary)和D.x.A7(备用,Alternate),这是为了避免与前面的5b/6b代码组合时出现5个连续的0或1.

  • 当 RD = -1,5b/6b编码 x = 17,18或20时,如果选择D.x.P7则会出现5个连续的1,所以需要选择备用编码D.x.A7

  • 当 RD = -1,5b/6b编码 x = 11,13或24时,如果选择D.x.P7则会出现5个连续的0,使用需要选择备用编码D.x.A7

控制符号(Control Symbols)

在8B/10B编码中,控制符号是10位的符号,他们同样也是有效的位序列(包含不超过六个连续的1或0),但没有对应的数字字节,主要功能主要用于执行低级别的控制功能,例如:在光纤通信中K28.5主要执行循环仲裁、填充字,链路重置功能的序列。

通过引入K.28或备用D.x.A7输出,可以创建用于控制的12个特殊符号,这些符号不对应实际数据,而是用于在数据流中标识或控制特定的状态或操作。其中有一些逗号序列(不是所有的控制符号都是逗号序列)

逗号序列是一种在数据中独特且不会与实际数据混肴的位模式,通过检测逗号序列,接收方可以确定字节边界,帮助正确解释和处理数据流中的字节。

只有K.28.1、K.28.5和K.28.7生成包含五个0或1位序列的逗号序列。这些逗号序列的格式是11000001xx或00111110xx,其中xx表示任意两位。

逗号序列中有两个相同的前导位(“00”,“11”),是为了应对当逗号跨越两个符号时,可能出现的连续五个相同的位,这种设计确保了逗号序列的唯一性,从而在解析数据流时,可以准确识别并用于确定字节边界。

例如,D.x.A7(0111)后面可能跟着一个以两个相同位开始的符号,比如D.03(110001)、D.11、D.12、D.19、D.20、D.28或K.28,但是,D.x.A7始终以一个非相同的位作为前导位,因此形成的模式是ifghj_abc = 10000_011或01111_100,如果前导位为非相同位("10","01")则不认为他是逗号序列。(如果检测到5个连续的0或1,但是前导位不相同,则代表不是逗号序列)

在控制符号中,只有在x等于23、27、29、30时,K.x才能与A7组合使用。对于其他D.x.A7编码,不应该使用,因为这可能导致逗号序列的对齐错误。

 

带宽利用率

在8b/10b编码中,每8位数据被编码成10位,其中2位用于控制目的。考虑到每8位数据编码成10位,带宽利用率可以计算为8/10 = 80%。这表示在8b/10b编码中,80%的比特用于传输实际的数据,而其余的20%用于控制和维护直流平衡。

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值