8b/10b encoding이란? 개념 정리



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

5b/6b code
InputRD=−1RD=+1InputRD=−1RD=+1
EDCBAabcdeiEDCBAabcdei
D.0000000100111011000D.1610000011011100100
D.0100001011101100010D.1710001100011
D.0200010101101010010D.1810010010011
D.0300011110001D.1910011110010
D.0400100110101001010D.2010100001011
D.0500101101001D.2110101101010
D.0600110011001D.2210110011010
D.0700111111000000111D.23 †10111111010000101
D.0801000111001000110D.2411000110011001100
D.0901001100101D.2511001100110
D.1001010010101D.2611010010110
D.1101011110100D.27 †11011110110001001
D.1201100001101D.2811100001110
D.1301101101100D.29 †11101101110010001
D.1401110011100D.30 †11110011110100001
D.1501111010111101000D.3111111101011010100
K.2811100001111110000

3b/4b table

3b/4b code
InputRD=−1RD=+1InputRD=−1RD=+1
HGFfghjHGFfghj
D.x.000010110100K.x.000010110100
D.x.10011001K.x.1 ‡00101101001
D.x.20100101K.x.2 ‡01010100101
D.x.301111000011K.x.3 ‡01111000011
D.x.410011010010K.x.410011010010
D.x.51011010K.x.5 ‡10101011010
D.x.61100110K.x.6 ‡11010010110
D.x.P7 †11111100001
D.x.A7 †11101111000K.x.7 ‡11101111000

Control symbols

control symbols는 8b/10b 데이터가 없는 유효한 sequence입니다. control symbols는 low-level control function에 사용됩니다. 예를 들어, Fibre Channel에서, K28.5는 4바이트 sequences(=Ordered Sets)의 시작에 사용됩니다.

Control symbols
InputRD=−1 & RD=+1RD=+1 & RD=−1
DECHEXHGF EDCBAabcdei fghjabcdei fghj
K.28.0281C000 11100001111 0100110000 1011
K.28.1 †603C001 11100001111 1001110000 0110
K.28.2 925C010 11100001111 0101110000 1010
K.28.3 1247C011 11100001111 0011110000 1100
K.28.4 1569C100 11100001111 0010110000 1101
K.28.5 †188BC101 11100001111 1010110000 0101
K.28.6 220DC110 11100001111 0110110000 1001
K.28.7 ‡252FC111 11100001111 1000110000 0111
K.23.7 247F7111 10111111010 1000000101 0111
K.27.7 251FB111 11011110110 1000001001 0111
K.29.7 253FD111 11101101110 1000010001 0111
K.30.7 254FE111 11110011110 1000100001 0111

출처

  • 위키피디아