8B/10B Encode/Decode詳解

1、編碼技術基礎理論

    在高速的串行數據傳輸中,傳送的數據被編碼成自同步的數據流,就是將數據和時鐘組合成單一的信號進行傳送,使得接收方能容易準確地將數據和時鐘分離,而且要達到令人滿意的誤碼率,其關鍵技術在於串行傳輸中數據的編碼方法。

    目前, 高速接口正在被廣泛應用於包括 SATA、 SAS、 高速 PCI 等多種標準中。 這些接口的速率甚至可以達到並超過每線 10Gbits/s。 同時, 所有主流 ASIC 和 FPGA 平臺也都支持這些高速接口技術。 從結構上看, 這些高速接口主要包括三個組成部分:

    1) 電路部分(串行/解串行)
    2) 物理部分(實現編碼)
    3) 鏈路與協議部分(高層)

    支持多速率、 多協議的串行/解串行器已經實現。 以 OIF(光互聯論壇) 爲例, 他們已經爲兩組速率制定了電路規範, 分別爲 5Gbits/s- 6.375Gbits/s 和 10Gbits/s-11Gbits/s。 OIF 同樣爲兩種應用距離制定了規範, 分別爲短距離(採用一個連接器, 8 英寸) 和長距離(採用兩個連接器, 40 英寸)。 串行/解串行器還可以被設計用來滿足更多的規範, 包括不同的速率、距離、 電路規格等等。

    物理部分的主要任務是對數據進行編碼, 以保證串行/解串行器的正常運行。 這些編碼的目的包括: 確保必須的變換(“1” 到“0” 和“0” 到“1” 的變換), 保證穩定的直流均衡(“0” 碼與“1” 碼的個數相當), 以及滿足其它標準的要求(最大化信道帶寬利用率, 提高對誤差的容忍能力等等)。

    在光纖通信中, 線路編碼是必要的, 因爲電端機輸出的數字信號是適合電纜傳輸的雙極性碼, 而光源不能發射負脈衝, 只能用光脈衝的“有” 和“無” 來表示二進制碼中的“1”和“0"。 該方法雖然簡單, 卻存在三個問題:

    1)遇到數字序列中出現長連“0” 或長連“1” 時, 將給光纖線路上再生中繼器和終端光接收機的定時信息提取工作帶來困難;
    2)簡單的單極性碼中含有直流分量。 由於線路上光脈衝中“1” 和“0” 是隨機變化的,這將導致單極性碼的直流成分也作隨機性的變化。 這種隨機性變化的直流成分, 可以通過光接收機的交流耦合電路引起數字信號的基線漂移, 給數字信號的判決和再生帶來困難;
    3)不能實現不中斷通信業務下的誤碼檢測;

    爲解決以上問題, 通常對於由電端機輸出的信號碼流, 在未對 LED(或 LD)調製以前,一般要先進行碼型變換使調製後的光脈衝碼流由簡單的單極性碼,轉換爲適合於數字光纖傳輸系統傳輸的線路碼。 適合於光纖通信的線路碼型有多種, 但都要滿足以下要求:

    1)能保證比特序列獨特性。
    2)能提供足夠的定時信息。

    由於在光纖數字傳輸系統的傳輸中, 只傳送信碼, 而不傳送時鐘, 因此在接收端, 必須從收到的碼流中提取出定時信息, 以利於上述的定時提取。 必須限制線路碼流中同符號連續數不能過大, 也就是說, 應避免長連“0” 及長連“1” 的出現, 提高電平跳變的密度, 使定時提取較爲簡單。

    3)減少功率密度中的高低頻分量。
線路碼的功率譜密度中的低頻分量是由碼流中的“0”、“1” 分佈狀態來決定的, 低頻分量小, 說明“0”、 “1”分佈比較均勻, 直流電平比較恆定, 也就是信號基線浮動小, 有利於接收端判決電路的正常工作。 高頻分量是由線路碼的速率決定的, 這在帶寬(色散)限制系統中特別值得注意, 在這種系統中, 中繼距離主要由光纖線路的總帶寬(總色散)決定, 如果線路碼速率提高的太多, 會使中繼距離大大縮短。

    4)要有利於減少碼流的基線漂移, 即要求碼流中的“1"、 "0” 碼分佈均勻, 否則不利於接收端的的再生判決。
    5)碼率增加要少, 光功率代價要低。
    6)接收端將線路碼還原後, 誤碼增殖要小。
    線路傳輸中發生的一個誤碼, 往往使接收端的解碼(反變換)發生多個錯誤, 這就是誤碼倍增, 也叫做誤碼擴展或誤碼增值。 由於誤碼倍增, 使光接收機要達到原要求的誤碼性能指標, 必須付出光功率代價, 即光接收機靈敏度劣化。 因此誤碼倍增係數越小越好。
    7)能提供適當的冗餘度。
    8)低的對稱抖動。
    傳輸的比特序列必須保持低的碼型相關的抖動。
    9)易於實現。
    數字光纖通信系統中常用的線路碼型有:加擾二進碼、 插入比特碼和 mBnB 碼。

2、8B/10B 編解碼原理

    8B/10B編碼最初由IBM公司的Albert X.Widemer和Peter A.Franaszek發明,並應用於ESCON(200M互連繫統)中。 它是mBnB編碼中的一個特例。
    8B/10B編碼方法是把8bit代碼組合編碼成10bit代碼,代碼組合包含256個數據字符編碼和12個控制字符編碼,分別記爲Dx. y和Kx.y。 通過仔細選擇編碼方法可以獲得不同的優化特性。 這些特性包括滿足串行/解串行器功能必須的變換; 確保“0” 碼元與“1” 碼元個數的一致, 又稱爲直流均衡; 確保字節同步易於實現(在一個比特流中找到字節的起始位); 以及對誤碼率有足夠的容忍能力和降低設計複雜度。

    8B/10B編碼方案是把8bit數據分成2個子分組: 3個最高有效位(y)和5個最低有效位( x)。 代碼字按順序排列,從最高有效位到最低有效位分別記爲H、 G、 F和E、 D、 C、 B、 A。 3bit的子分組編碼成4 bit,記爲j、 h、 g、 f; 5 bit的子分組編碼成6bit,記爲i、 e、 d、 c、 b、a,其映射關係如圖1所示,4bit和6bit的子分組再組合成10bit的編碼值。

將8bit數據分成3bit和5bit兩組,分別對應10bit中的4bit和6bit,直流平衡代碼的不平衡度就是通過“0” 的個數減去“1” 的個數來計算得到的。 如果4bit和6bit的各分組中“0”和“1” 的個數相等,稱爲完美平衡代碼,或稱爲完美的直流平衡代碼,無需補償,但是這種情況是不可能的。 因爲在4bit的子分組中,16種編碼中只有6 種是完美平衡的,這對於3bit的8種編碼值是不夠的。 同時,在6bit的子分組中也只有20種編碼是完美平衡的,對於5bit的32種編碼值也是不夠的。 由於4 bit和6bit的兩個子分組都是偶數個位數,而不平衡度不可能是“+1” 或“-1”,因此,在8B/10B編碼方案中還要使用不平衡度爲“+2” 和“-2” 的值。 在編碼過程中,用一個極性偏差( running disparity,RD)參數表示不平衡度,在不平衡時用2個10 bit字符表示一個8位字符,其中一個稱爲RD- ,表示“1” 的個數比“0” 的個數多2個,另一個稱爲RD+ ,表示“0” 的個數比“1” 的個數多2個。如下圖所示:

8B/10B編碼中將K28.1、K28.5和K28.7作爲K碼的控制字符,稱爲“comma”。在任意數據組合中,comma只作爲控制字符出現,而在數據負荷部分不會出現,因此可以用comma字符指示幀的開始和結束標誌,或始終修正和數據流對齊的控制字符。

編碼時,低5bit原數據 EDCBA經過5B/6B編碼成爲6bit碼abcdei,高3bit原數據HGF經3B/4B成爲4bit碼fghj,最後再將兩部分組合起來形成一個10bit碼abcdeifghj。10B碼在發送時,按照先發送低位在發送高位的順序發送

  5B/6B編碼和3B/4B編碼的映射有標準化的表格,可以通過基於查找表的方式實現。使用 “不一致性(Disparity)”來描述編碼中"1"的位數和"0"的位數的差值,它僅允許有"+2"(  "0"比"1"多兩個)、"0"( "0"與"1"個數相等)以及"-2"("1"比"0"多兩個)這三種狀況。 由於數據流不停地從發送端向接收端傳輸,前面所有已發送數據的不一致性累積產生的狀態被稱爲“運行不一致性(Runing Disparity,RD)”。RD僅會出現+1與-1兩種狀態,分別代表位"1"比位"0"多或位"0"比位"1"多,其初始值是-1。Next RD值依賴於Current RD以及當前6B碼或者4B碼的Disparity。根據Current RD的值,決定5B/4B和 3B/4B編碼映射方式,如下圖所示。

 

 

    這樣,經過8B/10B編碼以後,連續的“1”和“0”基本上不會超過5bit,只有在使用comma時,纔會出現連續的5個0或1。接收端的數據解碼過程如下圖所示:

3、8B/10B 碼的優勢

8B/10B編碼技術編碼之所以能得到廣泛應用,主要在於它較好地解決了以下問題。
(1) 轉換密度:
保證數據流中有足夠的信號轉換。 採用8B/10B編碼方法,數據流中連續的“1” 或連續的“0”不超過5個,使接收端鎖相環( PLL)能正常工作,避免接收端時鐘漂移或同步丟失而引起數據丟失。 保證了1和0的相對平衡組合,而與數據值無關,簡化了時鐘恢復,降低了接收機成本。
(2)DC補償:
在高速的數據傳輸線路中,一般採用差分信號,需要直流分量儘量小,而8B/10B有DC補償功能,即鏈路中不會隨着時間推移而出現DC偏移。
(3)檢錯:
8B/10B編碼採用冗餘方式,將8位的數據和一些特殊字符按照特定的規則編碼成10位的數據,根據這些規則,能檢測出傳輸過程中單個和多個比特誤碼。
(4)特殊字符:
8B/10B編碼規定了一些特殊字符,可用作幀同步字符和其他的分隔符或控制字符, 有助於比特流的碼組定位和信息識別。 許多獨立標準都以這個公共字符集爲基礎,定義更高的協議層:

  (5)鏈路靈活性:
 由於採用 8B/10B 編碼, 鏈路可以是交流(AC)耦合的, 這樣就給任一端的設備廠商提供了更大的靈活性。

4、8B/10B 碼的實現與應用

進行編解碼設計時通大體下面幾種方法。
第一種是用查找表直接將8位信號映射成10位信號,該方法用存儲器存儲所有可能出現的碼組,再將輸入碼組轉換爲存儲地址,找出對應的編解碼。 方法邏輯簡單,開發時間很短,但是編解碼電路的工作速度受到FPGA內部存儲器讀取時間的限制,同時不可避免地增加了芯片的面積和功耗。
第二種是通過邏輯運算直接完成編解碼功能對,該方法的優點是可以明顯減小內部使用面積,難點在於邏輯關係複雜。如果採用卡諾圖直接化簡則會產生大扇入邏輯表達式,大大限制電路的最高工作速度,同時對邏輯電路的驅動也將加大電路功耗。
第三種是,8B/10B編碼模塊化實現,較好地反映了8B/10B編碼的特點,實現流程清楚。 實現步驟: 

①判斷是特殊字符還是數據;

②若是特殊字符,根據RD極性直接取值; 

③若是數據,把一節8位字節拆成3bit和5bit,然後在RD控制器的控制下以並列的方式編/譯碼。 RD控制器的原則是: 系統設定的RD默認初始值爲RD-, RD的初值作爲選擇信號用以決定5B/6B編碼模塊中6B碼的選取, 同時由所選取的6B碼計算出新的RD值作用於3B/4B編碼模塊。 4B編碼所得到的RD值又作爲下一組編碼的RD輸入值, 由此完成了全部的8B/10B編碼。
這種方法的組合邏輯實現可以簡化碼錶、 減小電路板的面積、 有效提高編碼工作速度。同時由於電路板的面積減小,功耗也顯著降低。

目前大多數高速串行標準都採用8B/10B編碼方案,例如串行連接SCSI、 串行ATA、 光纖鏈路、 吉比特以太網、 XAUI(1吉比特接口)、 PCI Express總線、 InfiniBand、 Serial RapidIO、HyperTransport總線、 DVB-ASI以及IEEE1394b接口(火線) 技術中。

 

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