8b/10b 인코딩
1. 개요
8b/10b 인코딩은 8비트 데이터를 10비트 심볼로 변환하여 클럭 정보를 내장하고, 데이터와 클럭을 동일한 배선으로 전송하는 직렬 통신 방식이다. 이 방식은 Low/High 상태의 장기간 지속을 방지하고, DC 균형을 유지하며, 런닝 디스패리티를 통해 오류를 검출한다. 8b/10b 인코딩은 5b/6b와 3b/4b 인코딩 단계를 거치며, 데이터 심볼 외에 제어 심볼(K 코드)을 사용하여 프레임 시작/종료 등을 제어한다. IBM의 특허 만료 후 널리 사용되어 기가비트 이더넷, 파이버 채널, PCI Express 등 다양한 통신 기술에 적용되었으며, 8b/10b에서 발생하는 노이즈 문제를 해결하기 위해 스크램블링이 사용되기도 한다. 64b/66b, 128b/130b, 128b/132b 인코딩은 8b/10b의 대안으로 개발되었다.
| 종류 | 라인 코드 |
|---|---|
| 용도 | 직렬 통신 |
| 개발자 | 앨버트 자비드 위드머와 피터 프라나첵 (IBM) |
| 발표 연도 | 1983년 |
| 다른 이름 | IBM 8b/10b |
| 기반 | 차분 부호화 |
| 대역폭 효율 | 80% |
| 동기화 | 자기 클럭킹 |
| DC 균형 | 있음 |
-
통신 표준 -
CAN 버스
CAN 버스는 1983년 로버트 보쉬 유한회사에서 개발된 차량 내 통신 네트워크 프로토콜로, 자동차, 농업 장비 등 다양한 분야에서 전자 제어 장치 간의 통신을 가능하게 한다. -
통신 표준 -
고급 데이터 연결 제어
고급 데이터 연결 제어(HDLC)는 IBM의 SDLC 프로토콜을 기반으로 개발되어 ITU, ANSI 등에서 표준화된 동기식/비동기식 데이터 링크 제어 프로토콜로서, 프레임 구조 정의, 투명성 확보 기법, 다양한 프레임 종류를 통해 통신 요구를 지원한다.
2. 특징
8b/10b 인코딩은 8비트 데이터를 10비트 심볼 (또는 문자)로 변환하여 전송한다. 하위 5비트는 6비트 그룹(5b/6b)으로, 상위 3비트는 4비트 그룹(3b/4b)으로 인코딩되어 10비트 심볼을 형성한다. 데이터 심볼은 D.x.y (x: 0-31, y: 0-7), 제어 문자는 K.x.y로 표시된다.
8b/10b 인코딩은 1024개 심볼 중 일부를 제외하여 연속된 동일 비트 런 길이를 5개로 제한하고, 0과 1의 개수 차이를 2 이하로 보장한다. 256개 8비트 워드 중 일부는 두 가지 방식으로 인코딩 가능하며, 이를 통해 직렬 데이터 스트림에서 장기적인 DC 균형을 달성한다. 따라서 변압기 결합 비차폐 연선 쌍 (이더넷)이나 자동 게인 제어를 사용하는 광 수신기 등 하이패스 특성 채널을 통해 데이터 스트림을 전송할 수 있다.
2.1. 클럭 복구
8b/10b 방식은 시리얼 데이터 안에 클럭을 내장하여 데이터와 클럭의 전송을 동일한 배선으로 수행하는 것이 특징이다.
데이터와 클럭을 동시에 통신할 때, Low 또는 High 상태가 장기간 지속되면 클럭을 추출할 수 없게 될 수 있다. 8b/10b는 어떤 데이터에 대해서도 Low/High 상태가 4 클럭 이하가 되도록 변환한다. 이를 통해 대역폭의 20%를 손실(=데이터 비율이 8/10이 됨)하는 대신 데이터와 클럭을 동일한 배선으로 동시에 송수신하는 것이 가능해진다.
2.2. DC 균형
8b/10b 방식은 시리얼 데이터 안에 클럭을 내장하여 데이터와 클럭 전송을 같은 배선으로 수행하는 것이 특징이다.
데이터와 클럭을 동시에 통신할 때, Low 또는 High 상태가 장기간 지속되면 클럭을 추출할 수 없게 될 수 있다. 8b/10b는 어떤 데이터에 대해서도 Low/High 상태가 4 클럭 이하가 되도록 변환한다.
2.3. 런닝 디스패리티 (RD)
8b/10b 코딩은 DC-free 방식으로, 장기적으로 전송되는 1과 0의 비율이 정확히 50%가 되도록 한다. 이를 위해 전송된 1의 개수와 0의 개수의 차이는 항상 ±2로 제한되며, 각 심볼의 끝에서 이 차이는 +1 또는 -1이다. 이 차이를 러닝 디스패리티(RD, Running disparity)라고 한다.
이 방식은 러닝 디스패리티에 대해 +1과 -1의 두 가지 상태만 필요로 하며, 시작은 -1이다.
1과 0의 개수가 같지 않은 각 5b/6b 및 3b/4b 코드에 대해, 전송에 사용될 수 있는 두 가지 비트 패턴이 있다. 하나는 "1" 비트가 2개 더 많은 패턴이고, 다른 하나는 모든 비트가 반전되어 0이 2개 더 많은 패턴이다. 신호의 현재 러닝 디스패리티에 따라, 인코딩 엔진은 주어진 데이터에 대해 두 가지 가능한 6비트 또는 4비트 시퀀스 중 하나를 선택하여 전송한다.
6비트 또는 4비트 코드에 1과 0의 개수가 동일하다면, D.07 (00111) 및 D.x.3 (011)의 서브 블록을 제외하고는 디스패리티가 변경되지 않으므로 선택의 여지가 없다. 두 경우 모두 디스패리티는 여전히 변경되지 않지만, D.07을 만났을 때 RD가 양수이면 000111이 사용되고 음수이면 111000이 사용된다. 마찬가지로, D.x.3을 만났을 때 RD가 양수이면 0011이 사용되고 음수이면 1100이 사용된다.
| 이전 RD | 코드워드의 디스패리티 | 선택된 디스패리티 | 다음 RD |
|---|---|---|---|
| -1 | 0 | 0 | -1 |
| -1 | ±2 | +2 | +1 |
| +1 | 0 | 0 | +1 |
| +1 | ±2 | -2 | -1 |
3. 변환 방식
8b/10b 인코딩은 8비트 데이터를 10비트 심볼로 변환하는 방식이다. 이 과정은 5b/6b 인코딩과 3b/4b 인코딩의 두 단계로 이루어진다。
8비트 원본 데이터는 `HGF EDCBA`와 같이 표현되며, 상위 3비트(HGF)와 하위 5비트(EDCBA)로 나뉜다. 하위 5비트는 5b/6b 인코딩을 통해 6비트 `abcdei`로, 상위 3비트는 3b/4b 인코딩을 통해 4비트 `fghj`로 변환된다. 이렇게 생성된 6비트와 4비트는 결합되어 10비트 심볼 `abcdei fghj`를 형성하며, 최하위 비트(LSB)부터 전송된다.
5b/6b 인코딩과 3b/4b 인코딩은 각각 짝 불균형 코드로, 각 6비트 또는 4비트 코드 워드는 0과 1의 수가 같거나(불균형 0), 0이 1보다 2개 더 많거나 적은 두 가지 형태를 가진다. 0이 아닌 불균형을 가진 코드를 사용할 때는 실행 불균형(RD)을 토글해야 한다. 즉, 0이 아닌 불균형 코드는 교대로 나타난다.
8b/10b 인코딩은 데이터 심볼(D 코드) 외에 프레임 시작/종료, 링크 유휴 상태 등을 나타내는 데 사용되는 12개의 제어 심볼(K 코드)을 정의한다。
* 5b/6b 인코딩: 입력 데이터의 하위 5비트 (EDCBA)를 6비트 (abcdei)로 변환한다.
* 3b/4b 인코딩: 입력 데이터의 상위 3비트 (HGF)를 4비트 (fghj)로 변환한다.
3.1. 5b/6b 인코딩
5b/6b 코드는 입력 데이터의 하위 5비트(EDCBA)를 6비트(abcdei)로 변환하는 방식이다. 8비트 원본 데이터를 `HGF EDCBA` 형태로 표현했을 때 하위 5비트에 해당한다. 5b/6b 테이블은 각 입력값에 대해 '정 심볼'과 '부 심볼' 두 가지 가능한 출력값을 제공하며, 런닝 디스패리티 (RD)에 따라 선택된다. RD는 지금까지 보낸 심볼의 `0`과 `1`의 개수 차이를 의미하며, RD 값에 따라 정/부 심볼 중 하나가 선택된다.
* 직전 RD가 정(1이 많음)이면, 부 심볼을 보낸다.
* 직전 RD가 부(0이 많음)이면, 정 심볼을 보낸다.
* 보낼 심볼의 `1`의 수와 `0`의 수가 같으면, RD의 정/부는 유지된다.
RD의 초기값은 부이다.
5b/6b 변환은 심볼 `D.xx.x`와 같이 표기하며, 8비트 원본 데이터 `0x00~0xFF`는 `D.00.0`, `D.01.0`, ... , `D.31.6`, `D.31.7`와 같이 256종의 심볼로 표현된다.
다음은 IBM에서 구현한 5b/6b 변환 테이블의 예시이다. 이 비트 변환은 정해진 규칙 없이 테이블 변환으로 수행된다.
| 심볼명 | 5비트 값 EDCBA | 6비트 값 abcdei | |
|---|---|---|---|
| 정 심볼 | 부 심볼 | ||
| D.00 | 00000 | 100111 | 011000 |
| D.01 | 00001 | 011101 | 100010 |
| D.02 | 00010 | 101101 | 010010 |
| D.03 | 00011 | 110001 | |
| D.04 | 00100 | 110101 | 001010 |
| D.05 | 00101 | 101001 | |
| D.06 | 00110 | 011001 | |
| D.07 | 00111 | 111000 | 000111 |
| D.08 | 01000 | 111001 | 000110 |
| D.09 | 01001 | 100101 | |
| D.10 | 01010 | 010101 | |
| D.11 | 01011 | 110100 | |
| D.12 | 01100 | 001101 | |
| D.13 | 01101 | 101100 | |
| D.14 | 01110 | 011100 | |
| D.15 | 01111 | 010111 | 101000 |
| D.16 | 10000 | 011011 | 100100 |
| D.17 | 10001 | 100011 | |
| D.18 | 10010 | 010011 | |
| D.19 | 10011 | 110010 | |
| D.20 | 10100 | 001011 | |
| D.21 | 10101 | 101010 | |
| D.22 | 10110 | 011010 | |
| D.23 | 10111 | 111010 | 000101 |
| D.24 | 11000 | 110011 | 001100 |
| D.25 | 11001 | 100110 | |
| D.26 | 11010 | 010110 | |
| D.27 | 11011 | 110110 | 001001 |
| D.28 | 11100 | 001110 | |
| D.29 | 11101 | 101110 | 010001 |
| D.30 | 11110 | 011110 | 100001 |
| D.31 | 11111 | 101011 | 010100 |
K 코드(제어용 심볼) 중 K.28.x, K.23.7, K.27.7, K.29.7, K.30.7은 5b/6b 인코딩 방식을 사용한다.
3.2. 3b/4b 인코딩
입력 데이터의 상위 3비트(HGF)는 4비트(fghj)로 변환된다. 3b/4b 테이블도 실행 불균형(RD)에 따라 두 가지 가능한 출력값을 제공한다.
8비트 원본 데이터 `HGF EDCBA`는 상위 3비트와 하위 5비트로 나뉘며, 각각 1비트씩 추가되어 `abcdei fghj` 형태의 하위 6비트와 상위 4비트로 변환된다. 이 변환은 `D.xx.x` 심볼로 표기되며, 8비트 원본 데이터 `0x00~0xFF`는 256종의 심볼 (D.00.0, D.01.0, ... , D.31.6, D.31.7)로 표현된다.
다음은 IBM의 구현을 나타내는 변환 테이블이다. 이 비트 변환에는 정해진 규칙이 없으며, 완전한 테이블 변환으로 수행된다.
| 심볼명 | 3비트 값 HGF | 4비트 값 fghj | |
|---|---|---|---|
| 정 심볼 | 부 심볼 | ||
| D.xx.0 | 000 | 1011 | 0100 |
| D.xx.1 | 001 | 1001 | |
| D.xx.2 | 010 | 0101 | |
| D.xx.3 | 011 | 1100 | 0011 |
| D.xx.4 | 100 | 1101 | 0010 |
| D.xx.5 | 101 | 1010 | |
| D.xx.6 | 110 | 0110 | |
| D.xx.7 | 111 | 1110 | 0001 |
| 0111 | 1000 | ||
심볼 중에는 정과 부 두 종류가 준비되어 있는 것이 있는데, 대부분
0과 1의 개수가 다르며, 이를 반전시킨 조로 되어 있다. 지금까지 보낸 심볼의 0과 1의 개수 차이를 런닝 디스패리티 (RD)라고 하며, 이 RD에 따라 정/부 심볼 중 어느 것을 사용할지가 결정된다.* 직전 RD가 정(=
1이 많음)이면, 다음은 부 심볼을 보낸다.* 직전 RD가 부(=
0이 많음)이면, 다음은 정 심볼을 보낸다.* 보낼 심볼의
1의 수와 0의 수가 같으면, RD의 정/부는 유지한다.
3.3. 제어 심볼 (K 코드)
8b/10b 인코딩은 데이터 심볼(D 코드) 외에 12개의 제어 심볼(K 코드)을 정의한다. K 코드는 프레임 시작/종료, 링크 유휴 상태 등을 나타내는 데 사용되며, 하위 레벨 제어 기능에 사용되는 특수한 심볼이다. 예를 들어, 파이버 채널에서 K28.5는 루프 중재, 채우기 단어, 링크 재설정 등과 같은 기능을 수행하는 4바이트 시퀀스(정렬된 집합)의 시작 부분에 사용된다.
5b/6b 및 3b/4b 테이블을 통해 전송 가능한 12개의 제어 기호는 다음과 같다.
| 입력 | 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 |
K.28.1, K.28.5, K.28.7은 콤마 심볼로, 수신기에서 심볼 정렬을 찾는 데 사용된다. 콤마 심볼은 비트 스트림 내에서 8b/10b 코드의 정렬을 찾는 동기화에 사용된다. K.28.7을 사용하지 않으면 고유한 콤마 시퀀스 00111110 또는 11000001은 일반 코드의 어떠한 조합 내에서도 해당 비트 위치에서 의도치 않게 나타날 수 없다.
K.28.7을 허용하는 실제 코딩에서는 동기화 패턴에 대해 더 복잡한 정의를 사용해야 한다. K.28.7과 여러 다른 코드의 조합이 두 코드를 중첩하는 잘못 정렬된 콤마 기호를 형성하기 때문이다. 여러 K.28.7 코드 시퀀스는 감지할 수 없는 잘못 정렬된 콤마 기호를 발생시키므로 허용되지 않는다.
K.28.7은 데이터 스트림에서 단일 비트 오류로 인해 발생할 수 없는 유일한 콤마 심볼이다.
4. IBM 구현
8b/10b 인코딩은 원래 IBM에서 개발되었으며, 1983년에 관련 특허가 출원되었다. IBM 구현은 5b/6b 및 3b/4b 변환 테이블을 사용하여 8비트 데이터를 10비트 심볼로 매핑한다.
8비트 원본 데이터 `HGF EDCBA`는 상위 3비트(HGF)와 하위 5비트(EDCBA)로 나뉘어 각각 1비트씩 추가되어 `abcdei fghj`와 같이 하위 6비트와 상위 4비트로 변환된다. 이 변환은 LSB가 먼저 오도록 수행된다. 심볼은 D.xx.x와 같이 표기되며, 8비트 원본 데이터 0x00~0xFF는 256종의 심볼 (D.00.0, D.01.0, ... , D.31.6, D.31.7)로 표현된다.
이 비트 변환은 정해진 규칙이 없으며, 다음의 완전한 테이블 변환으로 수행된다.
| 심볼명 | 5비트 값 EDCBA | 6비트 값 abcdei | |
|---|---|---|---|
| 정 심볼 | 부 심볼 | ||
| D.00 | 00000 | 100111 | 011000 |
| D.01 | 00001 | 011101 | 100010 |
| D.02 | 00010 | 101101 | 010010 |
| D.03 | 00011 | 110001 | |
| D.04 | 00100 | 110101 | 001010 |
| D.05 | 00101 | 101001 | |
| D.06 | 00110 | 011001 | |
| D.07 | 00111 | 111000 | 000111 |
| D.08 | 01000 | 111001 | 000110 |
| D.09 | 01001 | 100101 | |
| D.10 | 01010 | 010101 | |
| D.11 | 01011 | 110100 | |
| D.12 | 01100 | 001101 | |
| D.13 | 01101 | 101100 | |
| D.14 | 01110 | 011100 | |
| D.15 | 01111 | 010111 | 101000 |
| D.16 | 10000 | 011011 | 100100 |
| D.17 | 10001 | 100011 | |
| D.18 | 10010 | 010011 | |
| D.19 | 10011 | 110010 | |
| D.20 | 10100 | 001011 | |
| D.21 | 10101 | 101010 | |
| D.22 | 10110 | 011010 | |
| D.23 | 10111 | 111010 | 000101 |
| D.24 | 11000 | 110011 | 001100 |
| D.25 | 11001 | 100110 | |
| D.26 | 11010 | 010110 | |
| D.27 | 11011 | 110110 | 001001 |
| D.28 | 11100 | 001110 | |
| D.29 | 11101 | 101110 | 010001 |
| D.30 | 11110 | 011110 | 100001 |
| D.31 | 11111 | 101011 | 010100 |
| 심볼명 | 3비트 값 HGF | 4비트 값 fghj | |
|---|---|---|---|
| 정 심볼 | 부 심볼 | ||
| D.xx.0 | 000 | 1011 | 0100 |
| D.xx.1 | 001 | 1001 | |
| D.xx.2 | 010 | 0101 | |
| D.xx.3 | 011 | 1100 | 0011 |
| D.xx.4 | 100 | 1101 | 0010 |
| D.xx.5 | 101 | 1010 | |
| D.xx.6 | 110 | 0110 | |
| D.xx.7 | 111 | 1110 | 0001 |
| 0111 | 1000 | ||
심볼 중에는 정과 부 두 종류가 준비되어 있는 것이 있는데, 대부분
0과 1의 개수가 다르며, 이를 반전시킨 조로 되어 있다. 지금까지 보낸 심볼의 0과 1의 개수 차이를 런닝 디스패리티 (RD)라고 하며, 이 RD에 따라 정/부 심볼 중 어느 것을 사용할지가 결정된다.* 직전 RD가 정(=
1이 많음)이면, 다음은 부 심볼을 보낸다.* 직전 RD가 부(=
0이 많음)이면, 다음은 정 심볼을 보낸다.* 보낼 심볼의
1의 수와 0의 수가 같으면, RD의 정/부는 유지한다.RD의 초기값은 부이다.
데이터를 표현하는 D 코드 외에, 제어용으로 K 코드라고 불리는 12개의 심볼이 있다.
| 심볼명 | 10비트 값 abcdei fghj | 구조 | |
|---|---|---|---|
| 정 심볼 | 부 심볼 | ||
| K.28.0 | 001111 0100 | 110000 1011 | 하위 6비트는 K.28이라고 불리는 특수 심볼 001111을 사용한다.상위 4비트는 D 코드와 거의 같지만 항상 정/부 반전시킨다. 예외적으로 동일 비트가 5개 연속되는 것이 있다. |
| K.28.1 | 001111 1001 | 110000 0110 | |
| K.28.2 | 001111 0101 | 110000 1010 | |
| K.28.3 | 001111 0011 | 110000 1100 | |
| K.28.4 | 001111 0010 | 110000 1101 | |
| K.28.5 | 001111 1010 | 110000 0101 | |
| K.28.6 | 001111 0110 | 110000 1001 | |
| K.28.7 | 001111 1000 | 110000 0111 | |
| K.23.7 | 111010 1000 | 000101 0111 | D.23과 D.xx.7 하단의 조합 |
| K.27.7 | 110110 1000 | 001001 0111 | D.27과 D.xx.7 하단의 조합 |
| K.29.7 | 101110 1000 | 010001 0111 | D.28과 D.xx.7 하단의 조합 |
| K.30.7 | 011110 1000 | 100001 0111 | D.30과 D.xx.7 하단의 조합 |
5. 8b/10b를 사용하는 기술
IBM 특허 만료 이후, 8b/10b 인코딩은 다양한 통신 기술에 널리 채택되었다. 8b/10b 인코딩이 적용되는 분야는 다음과 같다.
| 통신 기술 |
|---|
| 오로라 |
| 카메라 시리얼 인터페이스 |
| CoaXPress |
| 공통 공중 라디오 인터페이스(CPRI) |
| DVB 비동기 직렬 인터페이스(ASI) |
| DVI 및 HDMI 비디오 아일랜드(전이 최소화 차동 신호) |
| 디스플레이포트 1.x |
| ESCON (엔터프라이즈 시스템 연결) |
| 파이버 채널 |
| 기가비트 이더넷 (꼬임쌍선 기반의 1000BASE-T 제외) |
| IEEE 1394b (FireWire 등) |
| 인피니밴드 |
| JESD204B |
| OBSAI RP3 인터페이스 |
| PCI 익스프레스 1.x 및 2.x |
| 시리얼 래피드IO |
| SD UHS-II |
| SATA |
| SAS 1.x, 2.x 및 3.x |
| SSA |
| 서버넷 (ServerNet2부터 시작) |
| SGMII |
| UniPro M-PHY |
| USB 3.0 |
| 썬더볼트 1.x 및 2.x |
| XAUI |
| SLVS-EC |
5.1. 주요 응용 분야
IBM 특허가 만료된 이후 이 스킴은 더 대중화되어 여러 통신 기술에 사용되었다. 8b/10b 인코딩을 응용한 분야는 다음과 같다.
* CPRI (CPRI)
* DVB 비동기 직렬 인터페이스(ASI)
* DVI 및 HDMI 비디오 아일랜드 (변화 최소화 차분 신호)
* 디스플레이포트
* ESCON(Enterprise Systems Connection)
* 파이버 채널
* 기가비트 이더넷(연선–기반 1000Base-T 제외)
* IEEE 1394(파이어와이어 등)
* 인피니밴드
* JESD204B
* OBSAI RP3 인터페이스
* PCI 익스프레스 1.x 및 2.x
* 직렬 RapidIO
* SD UHS-II
* 직렬 ATA
* SAS
* SSA
* ServerNet (ServerNet2부터)
* SGMII
* UniPro M-PHY
* USB 3.0
* XAUI
5.2. 파이버 채널
파이버 채널 FC-0 표준은 8b/10b 또는 64b/66b 인코딩 방식을 정의한다. 4GFC 및 8GFC 변형에는 8b/10b 인코딩이 사용되고, 10GFC 및 16GFC 변형에는 64b/66b가 사용된다. 파이버 채널 FC1 데이터 링크 계층은 신호의 8b/10b 인코딩 및 디코딩을 구현한다.
파이버 채널 8b/10b 코딩 방식은 기가비트 이더넷(1000BASE-X), 파이버 채널(1GFC~8GFC) 등 다른 통신 시스템에서도 사용된다. 8b/10b에서 동일한 심볼을 장시간 연속 전송하면 전기적 변동이 주기적이 되어 기판상에서 노이즈 발생의 원인이 될 수 있다. 10기가비트 이더넷(10GBASE-R)이나 파이버 채널(10GFC・16GFC)에서는 64b/66b가 채택되었다.
5.3. 디지털 오디오
8b/10b 인코딩은 다음과 같은 디지털 오디오 저장 응용 분야에 사용된다.
* 디지털 오디오 테이프
* 디지털 컴팩트 카세트 (DCC)
오디오 CD 및 CD-ROM에 사용되는 관련 방식은 컴팩트 디스크 8-14 변조가 있다.
6. 대안
8b/10b 인코딩은 특정 코드가 아닌 인코딩 방식이라는 점에 유의해야 한다. 많은 응용 분야에서 동일한 코드를 사용하지만, 전송 최소화 차동 신호처럼 호환되지 않는 구현도 존재한다.
8b/10b 인코딩은 10비트당 2비트의 오버헤드(25%)를 갖는다는 단점이 있다.
6.1. 64b/66b 인코딩
10기가비트 이더넷의 10GBASE-R 물리 매체 종속 (PMD) 인터페이스를 위해 도입된 64b/66b 인코딩은 8b/10b 인코딩보다 오버헤드가 낮아, 인코딩된 데이터 64비트당 2비트의 오버헤드를 갖는다. 이 방식은 8b/10b 인코딩과 설계가 상당히 다르며, DC 균형, 짧은 런 길이 및 전이 밀도를 명시적으로 보장하지 않고 스크램블링을 통해 통계적으로 보장한다. 64b/66b 인코딩은 PCI Express 3.0 및 USB 3.1에서 128b/130b 및 128b/132b 인코딩 변형으로 확장되어, 이전 버전의 8b/10b 인코딩을 대체했다.
10기가비트 이더넷(10GBASE-R)이나 파이버 채널(10GFC・16GFC)에서는 64b/66b가 채택되었고, PCI Express 3.0이나 USB 3.1 Gen2에서는 128b/130b가 채택되었다.
6.2. 128b/130b 및 128b/132b 인코딩
PCI Express 3.0 및 USB 3.1은 각각 128b/130b 및 128b/132b 인코딩을 사용하여 8b/10b 인코딩을 대체하고 더 낮은 오버헤드를 제공한다. 더욱 고속 통신에서는 스크램블 처리를 사용하는 방식이 많아지며, 10기가비트 이더넷(10GBASE-R)이나 파이버 채널(10GFC・16GFC)에서는 64b/66b가 채택되었다.
7. 노이즈 대책 (스크램블링)
8b/10b에서 동일한 심볼이 장시간 연속으로 전송되면, 전기적 변동이 주기적이 되므로 기판상에서 노이즈 발생의 원인이 될 수 있다.
이러한 문제에 대한 대책으로, PCI Express에서는 8비트 데이터에 의사 난수를 이용한 스크램블 처리를 한 후 8b/10b 변환하는 방식을 채택하여, 전송로가 항상 임의의 비트 패턴으로 동작하여 주기적인 변동을 방지하고 있다. 10기가비트 이더넷(10GBASE-R)이나 파이버 채널(10GFC・16GFC)에서는 64b/66b, PCI Express 3.0이나 USB 3.1 Gen2에서는 128b/130b와 같이 더욱 고속 통신에서도 스크램블 처리를 사용하는 방식이 많다.