SerDes interface參考設計_8b/10b編/解碼設計(4)

4    8b/10b編/解碼設計

8b/10b編碼的原理是將一組連續的8位數據分解成兩組數據,一組3位,一組5位,經過編碼後分別成爲一組4位的代碼和一組6位的代碼,從而組成一組10位的數據發送出去。相反,解碼是將一組10位的輸入數據經過變換得到8位數據位。數據值可以統一的表示爲DX.Y或KX.Y,其中D表示爲數據代碼,K表示爲特殊的命令代碼。X表示輸入的原始數據的低5位EDCBA,Y表示輸入的原始數據的高3位HGF。因此8b/10b編碼邏輯可分解爲兩個子邏輯塊,一個5b/6b編碼器(EDCBA<—>iedcba)和一個3b/4b編碼器(HGF<—>jhgf)。編碼原理圖如下圖所示。

                                  

在8b/10b編碼過程中,會出現字符不一致的情況,即一組字符中“1”和“0”的個數不一致的情況,這種情況稱作差異度。當字符中的“0”比“1”多時,稱作負極性;“1”比“0”多時,稱作正極性;“0”和“1”相等時,爲零極性。編碼規則規定,非零極性的編碼結果(包括4位結果,6位結果和組合的10位結果)的極性必須依次翻轉[1]。比如,如果6位編碼結果具有正的極性,則接下來的4位結果應該具有負的極性,如果接下來的4位結果具有零極性,則繼續要求4位結果後面6位結果具有負的極性,以此類推。

4.1   K_encode模塊設計

控制字在 8b/10b 編碼中只有 12 組,可以整體查表的方法實現:


4.2   D_encode 模塊設計

數據字編碼共有 256 組,通常將其劃分爲3b/4b 編碼和 5b/6b 編碼分別進行

編碼,5b/6b 和 3b/4b 編碼表如表 4-2 和 4-3 所示。編碼結果欄目下,編碼結果爲

中性的只有 1 列,編碼結果極性不平衡的,分成了兩列,左邊一列的編碼結果具

有正極性,右邊一列的編碼結果具有負極性。


編碼表中有兩點需要注意:

1、表 4-2 中的 D.7 和表 4-3 中 D.x.3 的編碼結果,其編碼結果中“1”與“0”的個數相等,它本身是零極性的,但是其編碼結果卻有兩種可能;

2、表 4-3 中輸入爲 D.x.7 的編碼結果可能四種:1110、0001、0111 和 1000,

做出這樣規定的目的是爲了消除編碼結果 eifgh 出現 5 個連續“1”或者“0”的

情況。


4.3   編碼仿真

4.4   Comma 檢測原理

SerDes 接口在發送端將字節信息經過編碼和串並轉換後,經過信道傳輸到接收機上,接收機對收到的串行碼流進行重定時,並把它們重新恢復成並行的字節數據。Comma 信號就是用來指示字節邊界,獲取和驗證字節同步(ByteSynchronization)的。爲了有效達到這個目的,Comma 信號必須具有以下兩個特性:它必須是獨一無二的,2、相對於字節邊界,它能產生一個統一的對齊。在不考慮錯誤的情況下,Comma 信息不能出現在其他 bit 位上,既不能出現在其他字符中,也不能出現在兩個字符之間。符合這兩個條件的0011111 和 0011111 被選作是 Comma 信號,包含有 Comma 信號的 K.28.1(001111 1001 或 110000 0110),K.28.5(001111 1010 或 110000 0101),K.28.7(001111 1000 或 110000 0111)被稱爲 Comma 字符。如果碼流中出現兩個或者 3 個交疊的 Comma 信號,只有第一個和第三個 Comma 信息會被檢測出來。比如出現兩個 K.28.7,碼流00111110000011111000 中會出現三個 Comma 信號:0011111,1100000 和 0011111,這樣只有第一個和第三個 Comma 會被認爲是合法的,這符合碼流中實際上只有兩個 K.28.7 的情況。雖然 K.28.7 不容易出現錯碼(其他碼要錯兩位纔可能變爲K.28.7),但是它的跳變密度比較低,不利於時鐘數據恢復。所以在實際應用中,一般只使用 K.28.1、K.28.5 作爲 Comma 字符,而不使用 K.28.7。

Comma 檢測就是檢測串行碼流中的 Comma 信息,然後把字節邊界調整到Comma 信號之前,實現字節邊界的對準,爲 8b/10b 解碼器提供正確的並行輸入信號,其功能如圖所示。



發佈了42 篇原創文章 · 獲贊 47 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章