순환중복검사 (CRC, Cyclic Redundancy Check)

I. 순환 중복 검사, CRC (Cyclic Redundancy Check)

가. CRC의 개념

  • 네트워크 등을 통하여 데이터를 전송할 때 전송된 데이터에 오류가 있는지 확인하기 위한 체크값을 결정하는 방식
  • 송신측에서는 CRC값을 데이터에 붙인 코드워드를 전송하며, 수신측에서는 수신된 코드워드에서 CRC값을 이용하여 에러 발견
  • 오류 제어를 위한 후진 오류 수정(BEC, Backward Error Correction) 방식 중 오류 검출 방식

나. CRC의 특징

  • CRC 기법은 수학적 연산 과정은 복잡하나, 높은 오류 검출율과 간단한 H/W 구현 가능
  • CRC-8/-10/-16/-32 유형 존재

 

II. CRC 기법의 상세 원리

가. CRC 기법의 동작 원리

  • CRC는 에러 발견을 위해 전송 Data뒤에 CRC 검출 정보를 붙여 전송하는 기법

나. CRC 기법의 동작 상세 설명

단계설명
Encoding
(CRC 계산)
– 데이터워드 + n-bit로 구성된 데이터를 (n+1)-bit Divisor로 나누어 CRC정보 생성
– 데이터워드 + CRC 이루어진 코드워드 생성
– Divisor는 0, 1 스트링보다 대수다항식 표현
Transmission
(Data + CRC)
– 코드워드(데이터워드 + CRC)를 네트워크를 통해 수신측에 전송
– 손실, 순서 바뀜, 중복 등 에러 발생 가능
Decoding
(에러체크)
– 수신된 코드워드를 Divisor 이용하여 나눔
– 나머지가 0인 경우 데이터 정상 수신
– 나머지 발생 시 에러 발생으로 간주, ARQ
  • CRC 기법은 Encoding 단계에서 CRC를 생성하여 송신하며, 수신측에서 Divisor로 나머지 값 여부로 에러 발생 여부 검증

 

III. CRC 기법 상세 사례

가. CRC 기법의 코드워드 계산 과정

구분설명
제시사례
분석
– 데이터워드: 01101011
– Divisor: 100000111 // CRC-8 = x8 + x2 + x + 1
코드워드
계산
전송
데이터
– 코드워드 = 01101011 + 00010110
– 전송데이터 = 0110101100010110
  • 수신측에서는 수신된 코드워드를 Divisor로 나누어 에러 여부 검증

나. CRC 기법의 에러 검증 과정

구분설명
검증
데이터
– 수신된 데이터 = 0110101100010110
– Divisor: 100000111 // CRC-8 = x8 + x2 + x + 1
에러
검증
검증
결과
– Divisor 나누기 값이 0이므로 정상 데이터 수신
– 수신된 데이터의 데이터워드(01101011)를 추출하여 목적에 맞게 사용
  • CRC 기법을 구현하기 위해 쉬프트 레지스터와 배타적 논리합 연산장치를 이용하여 구현 가능

 

IV. CRC의 D-FF 논리회로 기반 하드웨어 구현

[x3 + x + 1 의 논리 회로 구현]

 
  • 입력은 한 클럭 동안 하나의 bit를 입력하며, 출력은 O2, O1, O0로 3bit로, 직렬 입력에 대해 클럭마다 CRC값 출력
10 Comments

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^