線路/信道編碼技術(1)——8B/10B編碼


1. 線路編碼技術

        線路編碼機制將輸入原始數據轉變為接收器可接收的數據格式,同時保證數據流中有足夠的時鍾信息提供給接收端的時鍾恢復電路。線路編碼技術提供了一種將數據對齊到字節/字的方法,可以保持良好的直流平衡,增加了數據的傳輸距離,提供了更為有效的錯誤檢測機制。除此之外,線路編碼技術也可以用來實現時鍾修正塊同步通道綁定和將帶寬划分到子信道等。線路編碼技術主要有兩種:數值查找表機制自修改數據流(擾碼)。目前常用的有8B/10B編碼和64B/66B編碼。

2.8B/10B編碼原理

        8B/10B編碼是1983年由IBM公司的Al Widmer和PeterFranaszek所提出的數據傳輸編碼標准,目前已經被廣泛應用到高速串行總線,如IEEE1394b、SATA、PCI-Express、Infini-band、FiberChannel、XAUI、RapidIO、USB 3.0的美好。8B/10B編碼將待發送的8位數據轉換成10位代碼組,其目的是保證直流平衡,以及足夠密集的電平轉換。

        8bit原始數據可以分成兩部分:低位的5bit EDCBA(設其十進制數值為X)和高位的3bit HGF(設其十進制數值為Y),則該8bit數據可以記為D.X.Y。另外,8B/10B編碼中還用到12個控制字符,他們可以作為傳輸中幀起始、幀結束、傳輸空閑等狀態標識,與數據字符的記法類似,控制字符一般記為K.X.Y。8bit數據有256種,加上12種控制字符,總共有268種。10bit數據有1024種,可以從中選擇出一部分表示8bit數據,所選的碼型中0和1的個數應盡量相等。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編碼映射方式,如下圖所示。

注意:當與5B/6B組合時,必須從D.x.P7和D.x.A7中選擇一個來避免連續的5個0或1。

        當Current RD=-1時,表示之前傳輸的數據中"0"的個數多於"1"的個數,若6B或4B編碼的Disparity=0,則NextRD=-1;若6B或4B編碼的Disparity=+2,則Next RD=+1。同樣,當Current RD=+1時,表示之前傳輸的數據中"0"的個數多於"1"的個數,若6B或4B編碼的Disparity=0,則NextRD=+1;若6B或4B編碼的Disparity=-2,則Next RD=-1。

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

 


免責聲明!

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



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