高速串行总线系列(1)8B/10B编码技术

目录

8B/10B编码

5B/6B 编码表

3B/4B 编码表

控制字符编码表

8B/10B编码的利用率

参考文献


 


8B/10B编码

为什么要使用8B/10B编码?
8b/10b编码的特性之一是保证DC 平衡,采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,它就是说,在链路超时时不致发生DC失调。通过8b/10b编码,可以保证传输的数据串在接收端能够被正确复原,除此之外,利用一些特殊的代码( 在PCI-Express总线中为K码) ,可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。

8b/10b编码是目前许多高速串行总线采用的编码机制,如 USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fiber Channel、RapidIO等总线或网络等。

8B/10B编码是目前高速串行通信中经常用到的一种编码方式。直观的理解就是把8bit数据编码成10bit来传输,为什么要引入这种机制呢?其根本目的是“直流平衡(DC Balance)”。当高速串行流的逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶的关系而造成信号错误,直流平衡的最大好处便是可以克服以上问题。
将8bit编码成10bit后,10B中0和1的位数只可能出现3种情况:
1.有5个0和5个1
2.有6个0和4个1
3.有4个0和6个1
这样引出了一个新术语“不均等性(Disparity)”,就是1的位数和0的位数的差值,根据上面3种情况就有对应的3个Disparity 0、-2、+2。

8B/10B编码的原理:

8bit原始数据会分成两部分,其低5位进行5B/6B编码,高3位则进行3B/4B编码,这两种映射关系在当时已经成为了一个标准化的表格。人们喜欢把8bit数据表示成Dxx.y的形式,其中x=5LSB,y=3MSB。

其中D表示待编码的字符为正常数据,还存在Kxx.y的形式,这里的K表示控制字符。

例如一个8bit数据101 10101,x=10101(十进制为21) y=101(十进制为5),现在我们就把这8bit数据写成D21.5,明白了吧!

对于8bit数据,它在表中的位序为HGFEDCBA,即H为最高位,A为最低位,EDCBA经过5B/6B编码为abcdei,HGF经过3B/4B编码为fghj。传送10bit编码的顺序为abcdeifghi。

8B/10B编码由低5位进行5B/6B编码,高3位则进行3B/4B编码实现,二者都是通过LUT的方式实现。在LUT中,除了原始的8位输入数据,编码后10位输出数据,还有一个编码极性RD(Running Disparity),下面会给出二者的编码表:

5B/6B 编码表

inputRD = −1RD = +1 inputRD = −1RD = +1
 EDCBAabcdei EDCBAabcdei
D000000100111011000D1610000011011100100
D100001011101100010D1710001100011
D200010101101010010D1810010010011
D300011110001D1910011110010
D400100110101001010D2010100001011
D500101101001D2110101101010
D600110011001D2210110011010
D700111111000000111D2310111111010000101
D801000111001000110D2411000110011001100
D901001100101D2511001100110
D1001010010101D2611010010110
D1101011110100D2711011110110001001
D1201100001101D2811100001110
D1301101101100D2911101101110010001
D1401110011100D3011110011110100001
D1501111010111101000D3111111101011010100

3B/4B 编码表

inputRD = −1RD = +1
 HGFfghj
D.x.000010110100
D.x.10011001
D.x.20100101
D.x.301111000011
D.x.410011010010
D.x.51011010
D.x.61100110
D.x.P711111100001
D.x.A711101111000

控制字符编码表

在8B/10B编码中,还会用到12个特殊的K字符,K字符及其组合方式通常用于表示数据帧的SOF(起始位)/EOF(结束位)/IDLE(空闲位)等特殊信息。

inputRD = −1RD = +1
 HGF EDCBAabcdei fghjabcdei fghj
K.28.0000 11100001111 0100110000 1011
K.28.1001 11100001111 1001110000 0110
K.28.2 010 11100001111 0101110000 1010
K.28.3 011 11100001111 0011110000 1100
K.28.4 100 11100001111 0010110000 1101
K.28.5101 11100001111 1010110000 0101
K.28.6 110 11100001111 0110110000 1001
K.28.7111 11100001111 1000110000 0111
K.23.7 111 10111111010 1000000101 0111
K.27.7 111 11011110110 1000001001 0111
K.29.7 111 11101101110 1000010001 0111
K.30.7 111 11110011110 1000100001 0111

8B/10B编码的利用率

由于采用8B/10B编码带来了2个位宽的开销,所以导致带宽利用率只有原来的80%,如SRIO协议3.125Gbps带宽,其有效的带宽利用率只有3.125*0.8 = 2.5Gbps,所以串行总线在提高带宽的同时,带宽利用率也必须提高,因此诞生了64B/66B、128B/130B等编码方式,原理和8B/10B编码相同,但是带宽利用率提高了。

参考文献

嵌入式高速串行总线技术

参考链接1

参考链接2

参考链接3

参考链接4

 

 

 

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值