原创 8B/10B编码

2009-1-16 09:50 6044 9 11 分类: 通信
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。

 


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


例如一个8bit数据101 10101,x=10101(21) y="101"(5),现在我们就把这8bit数据写成D21.5,明白了吧!
Dx.y形式在进行5B/6B和3B/4B编码中表示更直观,下面我们来看看两张编码表:
对于8bit数据,它在表中的位序为HGFEDCBA,即H为最高位,A为最低位,EDCBA经过5B/6B编码为abcdei,HGF经过3B/4B编码为fghj。传送10bit编码的顺序为abcdeifghj。


4b7f8ad645a95ea010ead


? 3B/4B使用K.x.7


4b7f8ad645a95eb8acf05


? 对于D.x.7,当和5B/6B组合时D.x.P7和D.x.A7编码必须选择一个来避免连续的5个0或1。遇上连续5个0或1的情况下使用“逗号码”来进行校准。D.x.A7用在x=17 x="18" x="20当RD"=-1时,x=11 x="13" x="14" 当RD=+1时。当x=23 x="27" x="29" x="30时",使用K.x.7进行编码。其他情况下x.A7码不能被使用,他将会导致和其他“逗号序列”产生冲突。
? 候补编码K.x.y允许K.28.1 K.28.5 K.28.7作为“逗号码”来保证数据流中的唯一性。


 


    你们也许注意到了表中有个RD标志,它是Running Disparity的缩写,它的目的就是保持8B/10B编码中的直流平衡。它跟上面提到的Disparity其实是一样的意思,+1用来表示1比0多,-1用来表示0比1多,-1是它的初始化状态。下面我们来看一张表来加深理解:


4b7f8ad645a95eda351f5
    上面我们提到的“逗号码”和“逗号序列”,其实都是当初在规划8B/10B编码机制的时候,所谓的控制代码(Control Characters)的其中之一。8B/10B标准中使用了12个特殊的控制代码,他们能在数据中被发送,还可以组合成各种“原语”。


4b7f8ad645a95efaa51e3


? 在控制代码中,K.28.1 K.28.5 K.28.7 是逗号序列,逗号序列是用来校准用的,如果K.28.7没有被使用,序列0011111 或者 1100000 是不会出现在任何编码中的。
? 在实际编码中如果K.28.7可以被使用,一种更复杂的校准规范需要?被使用,它们能组合成各种“原语”,在任何情况下多个K.28.7序列不允许被同时使用,它将导致不可探测的逗号序列。


 


参考文档:http://en.wikipedia.org/wiki/8B10B

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1517676 2014-12-8 08:37

感覺人類越來越離不開手機了!

用户593939 2014-12-6 22:39

写的好,学习和参考了

用户377235 2014-11-22 20:34

坐等博主后续~

用户403664 2014-11-21 15:51

板凳

用户1696769 2014-11-21 10:45

期待博主从一些新功能的角度出发,比如NFC或智能音频等。。。

用户402158 2014-11-21 08:50

期待~

用户972891 2009-10-30 15:19

好久没上了,刚看到您的问题。 这个问题,我认为和高速状态时晶体管的特性有关,当高速时,考虑NRZ编码情况,用示波器观察0,1信号的波形,你将会发现两者的占空比会不一样,这样答案就比较明显了。个人愚见,供参考!

用户134257 2009-9-6 14:44

请教一下 “其根本目的是“直流平衡(DC Balance)”。当高速串行流的逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶的关系而造成信号错误,” 如何造成的信号错误? 不明白,帮忙解释一下好吗
相关推荐阅读
用户972891 2013-06-14 15:00
[zz]一年有几个季节?
给大家讲个典故,轻松下早晨,子贡在大院门口打扫院子。有人来到,问子贡:“你是孔子的学生吗?”子贡答道:“是的。有何见教?”“听说孔子是名师,那么你一定也是高徒吧?”“惭愧。”“那我想请教你一个问题...
用户972891 2013-06-13 18:20
[zz]苹果联合创始人:写给想用技术改变世界的年轻人
投递人 itwriter 发布于 2013-06-13 10:35 评论(2) 有1497人阅读  原文链接  [收藏]  « »   关于苹果公司的事迹里,众多人...
用户972891 2013-06-07 17:08
[zz]代码里的命名规则:错误的和正确的对比
英文原文:Express names in code: Bad vs Clean   编程初学者总是把大量的时间用在学习编程语言,语法,技巧和编程工具的使用上。他们认为,如果掌握了这些技术技巧...
用户972891 2013-05-15 11:36
[zz]一图胜千言——软件开发中的形象思维与图的运用
  一图胜千言——软件开发中的形象思维与图的运用 2009-03-30 作者:gurudk 来源:gurudk...
用户972891 2013-05-14 12:14
[zz]软件开发的人文关怀
软件开发的人文关怀 作者: Yurii 发布时间: 2013-05-12 20:36 阅读: 643 次 推荐: 8 原文链接 [收藏]   几年前,我从温伯格的《技术领导之...
用户972891 2013-05-14 11:53
[zz]提高软件质量实践——Facebook 篇
提高软件质量实践——Facebook 篇 作者: Bill Liu 发布时间: 2012-12-01 20:03 阅读: 2263 次 推荐: 4 原文链接 [收藏]   F...
我要评论
2
9
关闭 站长推荐上一条 /3 下一条