해밍 코드 ECC 비트 계산기
입력
| 데이터 비트 | 8 |
|---|
해밍 코드 ECC 비트 계산기
주어진 데이터 비트 수를 보호하기 위해 단일 오류 정정 해밍 코드에 필요한 최소 패리티 비트 수를 구하고, 전체 코드워드 길이와 패리티 오버헤드도 함께 보여줍니다.
입력
데이터 비트
결과
값을 입력하면 계산 결과가 표시됩니다.
계산 결과
해밍 코드 ECC 비트
해밍 코드는 몇 개의 패리티 비트를 덧붙여 데이터 블록을 보호합니다. 나중에 한 비트가 뒤집혀도 실패한 패리티 검사의 패턴이 바뀐 위치를 정확히 짚어내므로 디코더가 이를 되돌릴 수 있습니다. 유일한 설계상의 물음은 주어진 크기의 블록에 패리티 비트가 몇 개나 필요한가입니다.
최소 비트 조건
데이터 비트 수를 , 패리티 비트 수를 이라 합시다. 패리티 비트들은 함께 비트의 신드롬을 이루며 가지 값을 가질 수 있습니다. 개의 코드워드 위치 각각은 디코더가 뒤집힌 비트를 짚을 수 있도록 고유한 0이 아닌 신드롬이 필요하고, 한 값은 "오류 없음"을 위해 예약됩니다. 이것이 단일 오류 정정(SEC) 조건을 줍니다.
2r≥m+r+1이 양변에 나타나므로 닫힌 해는 없습니다. 필요한 패리티 수는 이 부등식을 만족하는 최소 이며, 을 차례로 시험하여 찾습니다.
계산 예: 데이터 8비트
로 두고 각 후보를 시험합니다.
| 2 | 4 | 11 | 아니오 |
| 3 | 8 | 12 | 아니오 |
| 4 | 16 | 13 | 예 |
처음으로 성립하는 행은 이므로, 8 데이터 비트에는 4 패리티 비트가 필요합니다.
24=16≥8+4+1=13전체 코드워드는
n=m+r=8+4=12 비트이고 패리티 오버헤드는
O=nr=124≈33.3%블록이 커질수록 오버헤드는 줄어든다
패리티 수는 대략 처럼 늘어나므로, 큰 블록일수록 검사 비트를 훨씬 많은 데이터에 분산합니다. 아래 표는 흔한 블록 크기를 나열합니다.
| 데이터 비트 | 패리티 비트 | 코드워드 | 오버헤드 |
|---|---|---|---|
| 1 | 2 | 3 | 66.7% |
| 4 | 3 | 7 | 42.9% |
| 8 | 4 | 12 | 33.3% |
| 11 | 4 | 15 | 26.7% |
| 16 | 5 | 21 | 23.8% |
| 26 | 5 | 31 | 16.1% |
| 32 | 6 | 38 | 15.8% |
| 57 | 6 | 63 | 9.5% |
| 64 | 7 | 71 | 9.9% |
| 247 | 8 | 255 | 3.1% |
고전적인 (7, 4) 해밍 코드 — 7비트 워드에 4 데이터 비트 — 는 위에서 세 번째 행에, (15, 11) 코드는 네 번째 행에 있습니다.
패리티 비트 배치
표준 배치에서 패리티 비트는 2의 거듭제곱 위치 1, 2, 4, 8, 16, … 을 차지하고 나머지 위치를 데이터 비트가 채웁니다. 위치 의 패리티 비트는 인덱스의 번째 비트가 켜진 위치만을 정확히 담당하므로, 실패한 검사들의 집합이 곧바로 오류 비트의 이진 주소로 읽힙니다. 까지의 2의 거듭제곱 위치 개수는 이 페이지가 계산하는 과 같으며, 그래서 배치 방식과 최소 비트 조건이 항상 일치합니다.
SEC와 SECDED
위 조건은 단일 오류 정정 코드에 대한 것으로, 임의의 1비트 오류를 정정하지만 진짜 2비트 오류를 1비트 오류와 구별하지는 못합니다. 코드워드 전체에 전체 패리티 비트를 하나 더하면 단일 오류 정정·이중 오류 검출(SECDED) 코드가 됩니다. 이는 여전히 임의의 1비트 오류를 정정하고, 나아가 임의의 2비트 오류를 (정정은 못 하지만) 검출합니다. SECDED의 경우 패리티 수와 전체 길이에 각각 1을 더하세요. "ECC"로 판매되는 메모리는 보통 SECDED를 사용하며, 예컨대 64 데이터 비트를 8 검사 비트로 보호합니다.
관련 계산
같은 길이의 두 비트 문자열을 비교해 몇 개의 위치가 다른지 세려면 — 이는 코드가 몇 개의 오류를 잡을 수 있는지를 정하는 지표입니다 — 해밍 거리 계산기 를 참고하세요. 위치를 지정하는 패리티 대신 체크섬을 덧붙이는 다른 오류 검출 방식으로는, CRC 체크섬 계산 가 순환 중복 검사를 계산합니다.
자주 묻는 질문 (FAQ)
해밍 코드에서 패리티 비트란 무엇인가요?
패리티 비트(검사 비트)는 디코더가 오류를 검출하고 정정할 수 있도록 데이터 블록에 추가하는 여분의 비트입니다. 단일 오류 정정(SEC) 해밍 코드에서는 각 패리티 비트가 데이터 위치의 특정한, 서로 겹치는 부분집합을 담당합니다. 어떤 비트가 뒤집히면 실패한 패리티 검사의 패턴, 즉 신드롬이 뒤집힌 비트의 정확한 위치를 이진수로 나타내므로 디코더가 다시 되돌릴 수 있습니다.
m개의 데이터 비트에 대한 패리티 비트 수 r 은 2^r ≥ m + r + 1 을 만족하는 최소 r 입니다. 데이터 8비트의 경우 r = 4 가 되어 12비트 코드워드가 됩니다.
SEC와 SECDED의 차이는 무엇인가요?
단일 오류 정정(SEC) 해밍 코드는 코드워드 내의 임의의 1비트 오류를 정정하지만, 2비트 오류를 1비트 오류와 확실히 구별하지는 못합니다. 단일 오류 정정·이중 오류 검출(SECDED)은 SEC 코드 위에 전체 패리티 비트를 하나 더 추가합니다. 이 추가 비트 덕분에 디코더는 임의의 1비트 오류를 정정하고, 나아가 임의의 2비트 오류를 (정정은 못 하지만) 검출할 수 있습니다.
이 계산기는 SEC 형태의 패리티 비트 수를 알려줍니다. SECDED의 경우 패리티 수와 전체 코드워드 길이에 각각 1을 더하세요. "ECC"로 표시된 서버 메모리는 흔히 SECDED 코드를 사용하며, 예를 들어 64 데이터 비트를 8 검사 비트로 보호합니다.
부등식이 왜 2^r ≥ m + r 이 아니라 2^r ≥ m + r + 1 인가요?
r개의 패리티 비트는 함께 r비트 신드롬을 만들어 2^r 가지 값을 가질 수 있습니다. n = m + r개의 코드워드 위치 각각은 디코더가 뒤집힌 위치를 지목할 수 있도록 고유한 0이 아닌 신드롬이 필요합니다. 그리고 한 값(모두 0인 신드롬)은 "오류 없음"을 뜻하도록 예약됩니다. 이 예약된 값이 + 1 의 근원이므로, 신드롬은 m + r개의 위치에 오류 없음의 경우까지 포함해야 합니다. 즉 2^r ≥ (m + r) + 1 입니다.
패리티 비트는 코드워드의 어디에 놓이나요?
고전적인 해밍 배치에서는 패리티 비트가 2의 거듭제곱 위치(1, 2, 4, 8, 16, …)에 놓이고 나머지 위치를 데이터 비트가 채웁니다. 각 패리티 비트를 위치 2^k 에 두면 인덱스의 k번째 비트가 켜진 위치만을 정확히 담당하게 되며, 이로써 실패한 검사들이 오류 비트의 이진 주소로 읽힙니다.
n 까지의 2의 거듭제곱 위치 개수는 이 계산기가 반환하는 r 과 같으며, 그래서 배치 방식과 최소 비트 수 공식이 항상 일치합니다.