본문 바로가기
논리회로

[논리회로] 디지털 코드

by spareone 2025. 4. 17.

1. BCD 코드

 

BCD코드는 10진수를 2진수 4비트로 표현한 코드입니다.

0 ~ 9를 표현하며, 2진수 0000 ~ 1001에 대응됩니다.

(단, 10 ~ 15는 1010 ~ 1111에 대응되지 않습니다. 해당 2진수 범위는 사용하지 않습니다.)

 

[그림 1] 10진수의 4비트 BCD코드 표현

BCD코드는 간단히 10진수 표현을 할 수 있으며, 하드웨어 구현이 용이합니다.

과거에 만들어진 시스템을 계속 작동시켜야 하는 경우 호환성을 위해 BCD코드를 계속 사용합니다.

 

[그림 2] BCD코드의 연산

당연히 BCD코드로 표현된 수도 연산을 할 수 있습니다.

다만 연산 결과 중 특정 자리수가 9를 초과하면 +6을 하여 강제로 올림수를 발생시켜야 정상적인 값이 출력됩니다.

 

 

BCD코드 + 3을 하면 3증수 코드가 되는데,

0 <-> 9, 1 <-> 8... 의 자기 보수 관계가 형성됩니다.

 

이 외에도 다른 가중치 코드 형태가 있습니다.

BCD는 8421코드라고 하는데, 2421, 84-2-1, 51111 코드(존슨) 등 여러 코드가 존재합니다.

 

 

2. 그레이 코드

 

그레이코드는 인접 코드 간 비트 변화가 하나인 코드를 말합니다.

[그림 3] 10진수의 이진 코드, 그레이 코드 표현

그레이 코드 0001 다음 코드가 0011인 것을 볼 수 있습니다. 진짜 딱 1비트만 다른 것을 확인할 수 있습니다.

이런 특성 때문에 연산은 불가하며 주로 데이터 전송이나 광학 인코더, 통신 시스템에서 사용됩니다.

 

2진수와 그레이 코드 변환이 어려울 것 같아 보이지만 의외로 괜찮습니다.

아래는 2진수 1010을 그레이 코드로 변환하는 과정입니다.

[그림 4] 그레이 코드, 2진수 변환

맨 왼쪽 비트를 그대로 사용하는 것은 동일합니다.

2진수에서 그레이 코드로 변환하려면, MSB 이후 비트부터 이전 2진수 비트의 값과 현재 위치의 비트 값을 XOR하여 결과를 작성합니다.

그레이 코드에서 2진수로 변환하려면, 이전 비트 결과값과 현재 위치의 비트 값을 XOR하여야 합니다.

 

 

3. 오류 검출 코드

 

데이터를 통신할 때 송신자는 수신자에서 자체적으로 오류 발생 여부를 확인할 수 있도록 데이터 앞에 패리티라고 하는 정보를 붙여 보내게 됩니다.

 

3-1. Parity bit

수신자는 패리티 비트를 통해 1비트 오류 발생 여부를 알 수 있습니다.

짝수 패리티와 홀수 패리티 두 종류가 있습니다.

 

짝수 패리티는 패리티 비트를 포함한 1의 개수가 짝수 개가 되도록 배리티 비트값을 설정하는 방법입니다.

패리티 비트를 붙인다면 주로 짝수 패리티 방법을 사용하게 됩니다.

수신자는 도착한 비트 값의 1의 개수가 짝수 개임을 확인하면 (XOR연산을 통해 확인) 이상이 없다고 판단합니다.


홀수 패리티는 반대로 패리티 비트를 포함한 1의 개수가 홀수 개가 되도록 배리티 비트값을 설정하는 방법입니다.

오류 확인 방식은 짝수 패리티와 같습니다. (XOR 통해 검출) 다만 1의 개수가 홀수 개여야 이상이 없다고 판단합니다.

 

과거에는 7비트 ASCII 코드 맨 앞에 1비트의 패리티 비트를 붙여 총 8비트의 값을 전송했습니다.

현재는 ASCII 코드에 패리티 비트를 붙이진 않습니다.

 

3-2. 해밍 코드

해밍 코드는 오류 검출 뿐만 아니라 정정까지 할 수 있는 기능을 가지고 있습니다.

 

해밍 코드는 두 가지 과정을 통해 설정됩니다.

 

1. 패리티 비트 개수 결정

메시지 길이가 \(m\)이고 \(k\)개의 패리티 비트를 붙인다고 할 때, 총 비트 길이는 \(m + k = n\) 가 됩니다.

\(n\) 비트에서 1비트의 오류가 발생하는 경우의 수는 \(n\)이며, 오류가 존재하지 않는 경우까지 포함하면 \( n + 1 \)이 됩니다.

패리티 비트는 위의 경우를 다 구분할 수 있어야 하기에 아래와 같은 수식이 나옵니다.

$$ 2^{K} >= (n + 1) $$

 

2. 패리티 비트 값 결정

패리티 비트의 길이가 결정되면 해밍 코드를 구할 수 있습니다.

 

 

오류 검출은, 패리티의 값이 오류가 난 비트 번호를 확인합니다.

패리티의 모든 비트가 오류가 없는 상태(0)를 나타내면 신드롬이라고 표현합니다.

 

4. ASCII 코드

 

7비트로 128가지 문자(알파뱃, 숫자, 특수문자 등)를 표현한 코드입니다.

여기에 패리티 비트 1비트를 붙이면 1byte가 됩니다.

 

 

5. Unicode

 

영어 외 전 세계 모든 문자를 일관되게 표시할 수 있도록 만들어진 코드입니다.

표현해야 할 글자가 많기 때문에 한 글자당 2bytes를 소모합니다.

 

Unicode는 특정 변환 포맷을 이용하여 인코딩을 해야 합니다.

UTF-8 방식이 가장 많이 쓰이며, UTF-16등 여러 인코딩 방식도 존재합니다.

'논리회로' 카테고리의 다른 글

[논리회로] 수의 체계  (0) 2025.04.16
[논리회로] 신호의 종류와 논리 연산  (0) 2025.04.16

댓글