수의 표현과 산술회로(3)

chelseey·2025년 4월 24일

디지털 코드

BCD 코드(Binary Coded Decimal Code)

BCD 코드

BCD 코드: 10진수 각 자리(0~9)를 4비트 이진수로 표현하는 코드

aka. 8421 코드 : 각 비트의 가중치는 8, 4, 2, 1

  • 4비트로 0(0000)부터 9(1001)까지만 사용
  • 1010(10)부터 1111(15)까지 여섯 가지 조합은 미사용
  • 여러 자리수 표현 시에는 각 자리마다 4비트를 연이어 나열
    ex. 10₁₀ → 0001 0000

BCD 코드의 형태

BCD 코드의 연산

이진 덧셈 결과가 9(1001)를 초과하는 경우,
BCD 유효 범위를 벗어나므로 6(0110)을 더해 보정해야 함

정상 범위 내 연산 (보정 없음)

  • 10진수 6 + 3 = 9

  • 10진수 42 + 27 = 69

유효 범위 초과 → 보정 필요

  • 10진수 8 + 7 = 15

  • 10진수 96 + 58
    상위 니블(1110)도 9 초과 → +0110
    하위 니블(1110)도 9 초과 → +0110

가중치 코드(weighted code)

각 비트에 2, 4, 2, 1의 가중치를 부여해 4비트로 한 자리 10진수를 표현

  • 자기보수(self-complementing) 성질
    : 어떤 수 n의 2421 코드를 비트 반전(bitwise-NOT) 하면
    → (9–n) 의 2421 코드가 됨

비가중치코드(non-weighted code)

3-초과 코드

각 10진수 n을 먼저 BCD(8421)로 표현한 뒤, 0011₂(=3) 을 더한 값

  • 자기보수(self-complementing) 성질
    : 코드 비트 반전(bitwise NOT) = (9–n) 의 3-초과 코드

그레이 코드(Gray Code)

  • 테이블의 어느 두 이웃한 코드끼리 비트 하나만 다름
  • 아날로그-디지털 변환기(ADC)나 입출력 장치 등에서 사용

그레이 코드(Gray Code) 변환 방법

2진수 → 그레이 코드 변환

  1. 최상위 비트(MSB)는 그대로 복사
  2. 그다음 비트들(2번째, 3번째, …)은 현재 비트 ⊕ 이전 비트 연산
    G₃ = b₃ = 1
    G₂ = b₃ ⊕ b₂ = 1 ⊕ 0 = 1
    G₁ = b₂ ⊕ b₁ = 0 ⊕ 1 = 1
    G₀ = b₁ ⊕ b₀ = 1 ⊕ 1 = 0

그레이 코드 → 2진수 변환

  1. 최상위 비트(MSB)는 그대로 복사
  2. 다음 비트들(2번째, …) = 이전에 복원된 2진 비트 ⊕ 현재 그레이 비트
    b₃ = G₃ = 1
    b₂ = b₃ ⊕ G₂ = 1 ⊕ 1 = 0
    b₁ = b₂ ⊕ G₁ = 0 ⊕ 1 = 1
    b₀ = b₁ ⊕ G₀ = 1 ⊕ 0 = 1

에러 검출 코드

패리티 비트(parity bit)

전송할 데이터 비트열에 추가비트를 붙여,
전송 도중 비트 오류를 검출하기 위한 방법

→ 짝수 개(2개, 4개…) 비트 오류가 동시에 발생하면 검출 못 함

  • 짝수 패리티
    전송할 전체 비트(데이터+패리티)에서 1의 개수를 짝수로 맞춤

  • 홀수 패리티
    전송할 전체 비트에서 1의 개수를 홀수로 맞춤

패리티 비트를 사용한 에러 검출 방법

송신측

  • 7개의 데이터 비트(D₁~D₇)를 패리티 비트 발생기에 입력
  • 짝수/홀수 패리티 규칙에 따라 P를 생성하여 8비트(7비트+P)로 전송

수신측

  • 전송선로를 거쳐 온 8비트(D₁’~D₇’, P’)를 에러 검출기에 입력
  • 동일한 패리티 규칙으로 다시 계산한 패리티와 수신된 P’를 비교
  • 불일치 시 에러 표시(Y=1), 일치 시 정상(Y=0)

패리티 비트를 사용한 에러 검출 예제

홀수 패리티에서
10110, 11010, 110011, 10101110100, 1100010101011 수신

1의 개수 세기 :

병렬 패리티 (가로와 세로의 1의 개수를 세어봄)

2차원(블록) 패리티를 이용한 에러 검출·정정 방식

  • 데이터를 가로 × 세로 형태의 블록으로 묶고,
  • 각 행(row)과 각 열(column)에 패리티 비트를 붙여 전송

수신 시 다시 모든 행·열의 패리티를 검사하여 단일 비트 오류를 검출·위치 지정

0개의 댓글