임베디드 스터디 - 조합논리회로 - 4
이번 글 참고자료:
한빛아카데미, 디지털 논리회로4판
ElectronicsTutorials
에러 검출 코드 (Error Detection Code)
데이터의 송수신 과정에서 다음과 같은 요소에 의해 신호에 노이즈가 발생해 데이터에 오류가 발생할 수 있다.
- 감쇠 : 신호의 세기가 전송 매체(구리선, 광케이블), 장애물, 반사 등에 의해 약해짐
- 지연 왜곡 : 하나의 매체에서 여러 신호가 발생될 때 신호의 속도에 따라 발생함
- 상호 변조 : 두 가지 이상의 주파수가 하나의 매체를 공유할 때 섞이면서 발생
- 충격 잡음 : 외란(번개, 물리적 충격)에 의해 순간적으로 발생
이러한 노이즈에 의한 데이터 오류를 방지하기 위해 에러 검출 코드를 사용해 데이터의 신뢰성을 확보한다. 이번 글에서는 조합논리회로로 구현할 수 있는 에러 검출 코드를 설명한다.
패리티 발생기 / 검출기
패리티 발생은 원본 데이터에 1비트 패리티를 추가하여 전체 데이터의 1의 개수를 짝수, 혹은 홀수로 맞춘다. 짝수 패리티는 1의 개수를 짝수로, 홀수 패리티는 1의 개수를 홀수로 맞춘다.
마지막 출력단에서 XOR 게이트를 사용하면 짝수 패리티, XNOR 게이트를 사용하면 홀수 패리티이다. 검출기는 동일한 조합논리회로를 사용하여 수신한 데이터의 패리티 비트와 비교하여 오류 여부를 검출할 수 있다. 패리티 발생/검출 IC는 74280 IC 이다. IC에는 9개의 입력단으로 구성되어있는 것을 확인할 수 있는데, 발생기로 사용할 경우에는 원본 데이터 8비트를, 검출기로 사용할 경우에는 패리티비트 포함 총9비트를 입력하면 된다.
에러 정정 코드 (Error Correction Code)
기본 패리티 코드로는 데이터의 에러를 식별할 수 있으나, 어떤 데이터가 잘못됐는지 알 수 없다. 에러 정정 코드는 데이터의 오류를 검출하고, 잘못된 비트를 수정하여 데이터를 복원한다.
해밍 코드 (Hamming Code)
해밍코드는 원본 데이터에서 하나의 비트에 오류가 발생할 경우 오류가 발생한 비트를 정정할 수 있는 코드이다.
해밍코드를 사용하기 위해 추가하는 비트 수는 다음과 같이 지정할 수 있다. $d$는 데이터 비트 수, $p$는 해밍 코드의 추가 비트 수이다.
$2^{p} \geq d+p+1$
지정된 추가 비트 수를 각 패리티 비트 영역에서 짝수 패리티가 나올 수 있게 비트를 추가하면 된다.
$P_{n}$ 패리티는 $P_{n}$을 포함하여 n개의 데이터를 취하고 n개 건너 n개씩 있는 비트를 바탕으로 짝수 패리티를 생성한다.
| 비트 위치 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 종류 | $P_{1}$ | $P_{2}$ | $D_{1}$ | $P_{4}$ | $D_{2}$ | $D_{3}$ | $D_{4}$ | $P_{8}$ | $D_{5}$ | $D_{6}$ | $D_{7}$ | $D_{8}$ |
| $P_{1}$ 커버 | ● | ● | ● | ● | ● | ● | ||||||
| $P_{2}$ 커버 | ● | ● | ● | ● | ● | ● | ||||||
| $P_{4}$ 커버 | ● | ● | ● | ● | ● | |||||||
| $P_{8}$ 커버 | ● | ● | ● | ● | ● |
코드 변환기
2진-Gray 변환기
불 대수 함수
$G_{0}=B_{1} \oplus B_{0}$
$G_{1}=B_{2} \oplus B_{1}$
$G_{2}=B_{3} \oplus B_{2}$
$G_{3}=B_{3}$진리표
10진수 $B_{3}$ $B_{2}$ $B_{1}$ $B_{0}$ $G_{3}$ $G_{2}$ $G_{1}$ $G_{0}$ 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 2 0 0 1 0 0 0 1 1 3 0 0 1 1 0 0 1 0 4 0 1 0 0 0 1 1 0 5 0 1 0 1 0 1 1 1 6 0 1 1 0 0 1 0 1 7 0 1 1 1 0 1 0 0 8 1 0 0 0 1 1 0 0 9 1 0 0 1 1 1 0 1 10 1 0 1 0 1 1 1 1 11 1 0 1 1 1 1 1 0 12 1 1 0 0 1 0 1 0 13 1 1 0 1 1 0 1 1 14 1 1 1 0 1 0 0 1 15 1 1 1 1 1 0 0 0
Gray-2진 변환기
불 대수 함수
$B_{0}=B_{1} \oplus G_{0}$
$B_{1}=B_{2} \oplus G_{1}$
$B_{2}=B_{3} \oplus G_{2}$
$B_{3}=G_{3}$진리표
그레이코드 값 $G_{3}$ $G_{2}$ $G_{1}$ $G_{0}$ $B_{3}$ $B_{2}$ $B_{1}$ $B_{0}$ 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 2 0 0 1 0 0 0 1 1 3 0 0 1 1 0 0 1 0 4 0 1 0 0 0 1 1 1 5 0 1 0 1 0 1 1 0 6 0 1 1 0 0 1 0 0 7 0 1 1 1 0 1 0 1 8 1 0 0 0 1 1 1 1 9 1 0 0 1 1 1 1 0 10 1 0 1 0 1 1 0 0 11 1 0 1 1 1 1 0 1 12 1 1 0 0 1 0 0 0 13 1 1 0 1 1 0 0 1 14 1 1 1 0 1 0 1 1 15 1 1 1 1 1 0 1 0
BCD-3초과 코드
3초과 코드란 BCD코드에 연산에 $+0011_{(2)}$를 더한 것과 같은 코드이다. 3초과 코드는 BCD에 비해 연산 과정에서 이점을 갖고 있다.
- 비트를 반전 하는 것만으로도 (10진수에서의)9의 보수를 얻을 수 있으므로, 감산에 유용하다.
- MSB가 4 이하일 때 0, 5 이상일 때 1이 되므로, 반올림에 유용하다.
- 모든 비트가 동시에 0이 되는 일이 없으므로, 단선 등에 의한 신호두절을 구별할 때 이용할 수 있다.


