8B/10B

以下文章爲從“ 菲兒”轉載而來.

Original Post:

http://blog.sina.com.cn/s/blog_4b2657890100hdcl.html

 ===========================================================================

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。

 

 

 

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

 

對於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是它的初始化狀態。下面我們來看一張表來加深理解:

 

 


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

 

 

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章