8b/10b編碼把8比特的子元转换成10比特的子元。目的是以便在串行传输中達到直流平衡(DC Balance),明晰边界,并提供足够的状态改变来利于时钟恢复。目标是至少在20比特“1”的个数与“0”的个数的差距不超过2个,并且没有连续的5个“1”或“0”。
8b/10b編碼是1983年由IBM的 Al Widmer 與 Peter Franaszek 所提出,应用于ESCON,後來申請成專利。目前廣受串列匯流排所採用。例如:IEEE 1394b、SATA、PCI Express、Infini-band、Fiber Channel、RapidIO等匯流排,都是採用8b/10b編碼。2008年推出的USB 3.0規格書亦明言采用了8b/10b編碼。
8b/10b編碼的提出即是因應光纖的傳輸技術,8b/10b技術是將8個位元經過某種映射的機制轉化為10個位元的字碼,分兩個部位分別進行映射的處理,分別是 5B/6B 與 3B/4B 的處理,另外「D.a.b」是資料碼(D即是Data),「K.a.b」指控制碼(K即是Key),a與b表示输入的原始資料。
工作原理
8b/10b編碼輸出位元數目總共是10個位元,但只有「+2」「+0」「-2」三種組合。其中「+2」是指4個位元0,與6個位元1;「+0」是指5個位元“0”,與5個位元“1”;「-2」是指6個位元“0”,與4個位元“1”,利用這種「不均等性— Disparity」的特性而具有強大的直流平衡(DC Balance)功能,可使得发送的“0”、“1”数量保持一致,连续的“1”或“0”基本上不超过5位。
(Disparity = number of "1" - number of "0")
編碼表
8b/10b编码将一组8位元資料分成两组,一组3位元,一组5位元,經過編碼後形成一组4位元和一组6位元,故送發時是一組10位元的資料,解码時再将10位元的資料变换得到8位元資料。編碼過程中低位5位元的資料会进行5B/6B编码,高位3位元的資料则进行3B/4B编码。
例如一組8位元的資料是 10110101:
首先,分成兩組 101 與 10101
a=10101(21) b=101(5),符號為 D21.5,在下表中的位序为HGFEDCBA,a(EDCBA)经过5B/6B编码为abcdei,b(HGF)经过3B/4B编码为fghj。
RD = Running Disparity.
不均等性的執行規則
Previous RD |
Disparity of 6 or 4 Bit Code |
Disparity chosen |
Next RD
|
−1 |
0 |
0 |
−1
|
−1 |
±2 |
+2 |
+1
|
+1 |
0 |
0 |
+1
|
+1 |
±2 |
−2 |
−1
|
5b/6b
5B/6B code
input |
RD = −1 |
RD = +1
|
|
input |
RD = −1 |
RD = +1
|
|
EDCBA |
abcdei |
|
EDCBA |
abcdei
|
D.00 |
00000 |
100111 |
011000 |
D.16 |
10000 |
011011 |
100100
|
D.01 |
00001 |
011101 |
100010 |
D.17 |
10001 |
100011
|
D.02 |
00010 |
101101 |
010010 |
D.18 |
10010 |
010011
|
D.03 |
00011 |
110001 |
D.19 |
10011 |
110010
|
D.04 |
00100 |
110101 |
001010 |
D.20 |
10100 |
001011
|
D.05 |
00101 |
101001 |
D.21 |
10101 |
101010
|
D.06 |
00110 |
011001 |
D.22 |
10110 |
011010
|
D.07 |
00111 |
111000 |
000111 |
D.23 † |
10111 |
111010 |
000101
|
D.08 |
01000 |
111001 |
000110 |
D.24 |
11000 |
110011 |
001100
|
D.09 |
01001 |
100101 |
D.25 |
11001 |
100110
|
D.10 |
01010 |
010101 |
D.26 |
11010 |
010110
|
D.11 |
01011 |
110100 |
D.27 † |
11011 |
110110 |
001001
|
D.12 |
01100 |
001101 |
D.28 |
11100 |
001110
|
D.13 |
01101 |
101100 |
D.29 † |
11101 |
101110 |
010001
|
D.14 |
01110 |
011100 |
D.30 † |
11110 |
011110 |
100001
|
D.15 |
01111 |
010111 |
101000 |
D.31 |
11111 |
101011 |
010100
|
|
K.28 |
11100 |
001111 |
110000
|
† Same code is used for K.x.7
3b/4b
3b/4b code
input |
RD = −1 |
RD = +1
|
|
input |
RD = −1 |
RD = +1
|
|
HGF |
fghj |
|
HGF |
fghj
|
D.x.0 |
000 |
1011 |
0100 |
K.x.0 |
000 |
1011 |
0100
|
D.x.1 |
001 |
1001 |
K.x.1 ‡ |
001 |
0110 |
1001
|
D.x.2 |
010 |
0101 |
K.x.2 ‡ |
010 |
1010 |
0101
|
D.x.3 |
011 |
1100 |
0011 |
K.x.3 |
011 |
1100 |
0011
|
D.x.4 |
100 |
1101 |
0010 |
K.x.4 |
100 |
1101 |
0010
|
D.x.5 |
101 |
1010 |
K.x.5 ‡ |
101 |
0101 |
1010
|
D.x.6 |
110 |
0110 |
K.x.6 ‡ |
110 |
1001 |
0110
|
D.x.P7 † |
111 |
1110 |
0001 |
|
|
|
D.x.A7 † |
111 |
0111 |
1000 |
K.x.7 † ‡ |
111 |
0111 |
1000
|
Control symbols
5b/6b 與 3b/4b 表可能導致下列 12 控制符號(control symbols)允許被發送,K.28.1, K.28.5, K.28.7 是逗号(,)序列:
控制符號(Control symbols)
input |
RD = −1 |
RD = +1
|
|
HGF EDCBA |
abcdei fghj |
abcdei fghj
|
K.28.0 |
000 11100 |
001111 0100 |
110000 1011
|
K.28.1 † |
001 11100 |
001111 1001 |
110000 0110
|
K.28.2 |
010 11100 |
001111 0101 |
110000 1010
|
K.28.3 |
011 11100 |
001111 0011 |
110000 1100
|
K.28.4 |
100 11100 |
001111 0010 |
110000 1101
|
K.28.5 † |
101 11100 |
001111 1010 |
110000 0101
|
K.28.6 |
110 11100 |
001111 0110 |
110000 1001
|
K.28.7 ‡ |
111 11100 |
001111 1000 |
110000 0111
|
K.23.7 |
111 10111 |
111010 1000 |
000101 0111
|
K.27.7 |
111 11011 |
110110 1000 |
001001 0111
|
K.29.7 |
111 11101 |
101110 1000 |
010001 0111
|
K.30.7 |
111 11110 |
011110 1000 |
100001 0111
|
與 8b/10b 相關技術
目前IBM的專利已過期,此方案已成為大眾化的技術。
8B/10B 編碼的應用如下
數位音效
重要的應用面:
用於 audio 與 data CDs:
與 128b/13xb 相關技術
128b/13xb編碼的應用如下:
外部連結
Template:位编码