8B/10B Encode/Decode詳解

一、編碼技術基礎理論api

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

    目前, 高速接口正在被普遍應用於包括 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"。 該方法雖然簡單, 卻存在三個問題:spa

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

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

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

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

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

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

二、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.一、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。接收端的數據解碼過程以下圖所示:

三、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)耦合的, 這樣就給任一端的設備廠商提供了更大的靈活性。

四、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接口(火線) 技術中。

相關文章
相關標籤/搜索