What is 8b/10b encoding?
8b/10b는 8bit word를 10bit symbol에 mapping하여 만든 line code입니다. 즉, 8bit를 전송하기 위해서 10bit가 필요합니다. 이 mapping을 통하여 DC-balance와 bounded dispartiy를 달성하면서, 합리적인 clock recovery를 허용하는 충분한 상태 변화를 제공합니다.
8b/10b code는 다양한 방법으로 구현될 수 있습니다. 예를 들면 설계할 때, 하드웨어 요구사항이나 DC-balance와 같은 특별한 파라미터들에 초점을 맞춰서 설계할 수도 있습니다.
How it works for the IBM code
위에서 언급한 것처럼, 8b/10b는 8bit word를 10bit symbol에 mapping하여 만든 line code입니다. low data 5개는 6-bit group으로 encode되며(5b/6b), top 3 bit는 4-bit group으로 encode됩니다(3b/4b). 이러한 code group은 10-bit symbol로 결합됩니다.
data symbol은 x가 0-31, y가 0-7이고, D.x.y로 언급됩니다. 8b/10b encoding의 Standard에서는 data symbol 대신 전송할 수 있는 12개의 special symbol(혹은 control characters)를 정의하고 있습니다. 이러한 special symbol들은 start-of-frame, end-of-frame, link idle, skip and similar link-level conditions들에 사용됩니다. 10-bit symbol을 정의하는데 사용하기 위하여 special symbol(i.e. “comma symbol”)이 필요하고, K.x.y의 형태를 가집니다.
8b/10b encoding는 8-bit word를 위하여 10-bit를 사용하기 때문에, 존재할 수 있는 1024개의($ 2 ^ {10} $) code에서 아래와 같은 경우의 케이스의 code를 제외 할 수 있습니다.
- 5개 이상의 연속된 bit가 존재함
- 모든 0과 1의 총 합의 차가 2보다 큼
또, 8-bit로 구현할 수 있는 256개의 word 중 일부는 두 가지 다른 방식으로 인코딩 될 수 있습니다. 이런 alternative encoding 방식을 사용하면, serial data stream에서 long-term DC-balance를 달성할 수 있습니다. 이는 Data stream이 high-pass 특성을 가진 채널에서 사용할 수 있게 합니다.
Encoding tables
아래에 나오는 표들을 보면 A는 최하위 비트이고, H는 최상위 비트입니다. extra bit는 i,j입니다. (a, b, c, d, e, i, f, g, h, j) 5b/6b 다음에 3b/4b 이 오는 형태입니다. 이러한 구조는 “comma codes”의 special bit sequence의 유일성을 보장합니다.
0과 1이 전송되는 stream에서의 residual effect는 running disparity(RD)로 유지되고, slew effect는 encoding 선택에 의하여 균형을 이룹니다.
5b/6b 코드와 3b/4b 코드는 쌍을 이루는 disparity code입니다. 각각은 0과 1의 개수가 동일하거나 2개 차이가 납니다. 0이 아닌 disparty(disparty = 1 count - 0 count), 즉 $ \pm 2$가 사용되면, positive & negative dispartiy endocing을 선택해야 합니다. 표를 살펴보면 RD가 $\pm 2$가 들어온 경우에 계속해서 바뀌는 것을 확인할 수 있습니다.
Running disparity
8b/10b 코딩은 DC-free이다. 이것은 오랜 시간을 두고 신호를 살펴보면 0과 1의 비율이 정확히 50% 라는 것입니다. 이러한 조건을 달성하기 위해서는, 전송되는 0과 1의 숫자가 항상 $ \pm 2$ 를 유지할 수 있게 제한됩니다.
1과 0의 개수가 같지 않은 5b/6b과 3b/4b 코드에 대해 전송하는 데 사용할 수 있는 패턴이 2개가 있습니다.(1이 2개 더 많거나 0이 2개 더 많은 경우) RD의 값에 따라서 보낼 패턴이 선택됩니다. 1과 0의 개수가 같은 경우에는 D.07과 D.x.3을 제외하고는 선택의 여지가 없습니다.(D.07 같은 경우에는 1과 0의 개수가 같지만 2가지 케이스가 존재)
D.x.7의 경우에는 앞의 5b/6b의 코드와 결합했을 때, 5개의 연속된 같은 숫자가 나오면 안되기 때문에, D.x.P7 or D.x.A7 encoding을 사용합니다. D.x.A7의 경우 RD = 1이면 x = 11 or 13 or 14 , RD = -1 이면 x = 17 or 18 or 19 입니다.
Previous RD | Disparity of code word | Disparity chosen | Next RD |
---|---|---|---|
−1 | 0 | 0 | −1 |
−1 | ±2 | +2 | +1 |
+1 | 0 | 0 | +1 |
+1 | ±2 | −2 | −1 |
5b/6b table
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 |
3b/4b table
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
control symbols는 8b/10b 데이터가 없는 유효한 sequence입니다. control symbols는 low-level control function에 사용됩니다. 예를 들어, Fibre Channel에서, K28.5는 4바이트 sequences(=Ordered Sets)의 시작에 사용됩니다.
Input | RD=−1 & RD=+1 | RD=+1 & RD=−1 | |||
---|---|---|---|---|---|
DEC | HEX | HGF EDCBA | abcdei fghj | abcdei fghj | |
K.28.0 | 28 | 1C | 000 11100 | 001111 0100 | 110000 1011 |
K.28.1 † | 60 | 3C | 001 11100 | 001111 1001 | 110000 0110 |
K.28.2 | 92 | 5C | 010 11100 | 001111 0101 | 110000 1010 |
K.28.3 | 124 | 7C | 011 11100 | 001111 0011 | 110000 1100 |
K.28.4 | 156 | 9C | 100 11100 | 001111 0010 | 110000 1101 |
K.28.5 † | 188 | BC | 101 11100 | 001111 1010 | 110000 0101 |
K.28.6 | 220 | DC | 110 11100 | 001111 0110 | 110000 1001 |
K.28.7 ‡ | 252 | FC | 111 11100 | 001111 1000 | 110000 0111 |
K.23.7 | 247 | F7 | 111 10111 | 111010 1000 | 000101 0111 |
K.27.7 | 251 | FB | 111 11011 | 110110 1000 | 001001 0111 |
K.29.7 | 253 | FD | 111 11101 | 101110 1000 | 010001 0111 |
K.30.7 | 254 | FE | 111 11110 | 011110 1000 | 100001 0111 |
출처
- 위키피디아