8B/10B編碼(轉)


8B/10B編碼是目前高速串行通信中經常用到的一種編碼方式,直觀的理解就是把8bit數據編碼成10bit來傳輸,為什么要引入這種機制呢?其根 本目的是“直流平衡”。當高速串行流動邏輯1或邏輯0有多個位沒有產生變化時,信號的轉換就會因為電壓位階段關系而造成信號錯誤,直流平衡的最大好處便是 可以克服以上問題。

將8bit編碼成10bit后,10B中0和1的位數只可能出現3中情況:

1.有5個0和5個1

2.有6個0和4個1

3.有4個0和6個1

這樣引出了一個新術語“不均等性”,就是1的位數和0的位數的差值,根據上面3種情況就有對應的3個Disparity0、-2、+2.

工作原理

8bit原始數據會分成兩部分,其低5位進行5B/6B編碼,高3位則進行3B/4B編碼,這兩種映射關系在當時已經成為了一個標准化的表格。人們喜歡把8bit數據表示成Dxx.y的形式,其中x=5LSB,y=3MSB。

例如一個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編碼的順序為abcdeifghi。

8B/10B編碼(轉) - huihui - 接着飄

8B/10B編碼(轉) - huihui - 接着飄

對 於D.x.7,當和5B/6B組合時D.x.P7和D.x.A7編碼時必須選擇一個來避免連續的5個0或1.遇上連續5個0或1的情況下使用“逗號碼” (comma)來進行校准。D.x.A7用在x=17 x=18 x=20且RD=-1時或者x=11 x=13 x=14且RD=+1時。當x=23 x=27 x=30時,使用K.x.7進行編碼。其他情況下D.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是它的初始化狀態。下面我們來看一張表來加深理解:

8B/10B編碼(轉) - huihui - 接着飄

 

 上面我們提到的“逗號碼”和“逗號序列”,其實都是當初在規划8B/10B編碼機制的時候,所謂的控制代碼(Control Characters)的其中之一。8B/10B標准中使用了12個特殊的控制代碼,他們能在數據中被發送,還可以組合成各種“原語”。

8B/10B編碼(轉) - huihui - 接着飄

 

在控制代碼中,K.28.1 K.28.5 K.28.7 是逗號序列,逗號序列是用來校准用的,如果K.28.7沒有被使用,序列0011111 或者 1100000 是不會出現在任何編碼中的。

在實際編碼中如果K.28.7可以被使用,一種更復雜的校准規范需要?被使用,它們能組合成各種“原語”,在任何情況下多個K.28.7序列不允許被同時使用,它將導致不可探測的逗號序列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM