SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

수 체계, 데이터 표현과 논리회로

진법·보수·문자·실수 표현과 부울대수·조합·순서논리회로를 학습한다.

예상 읽기 5

1. 정보 단위와 진법

  • bit: 0 또는 1
  • nibble: 4bit
  • byte: 8bit
  • word: CPU가 한 번에 처리하는 기본 비트 수

2진수는 3비트씩 묶으면 8진수, 4비트씩 묶으면 16진수로 쉽게 바꿀 수 있다. 10진 정수는 목표 진수로 반복 나누고 나머지를 역순으로 읽는다. 소수 부분은 목표 진수를 반복 곱해 정수 부분을 순서대로 읽는다.

2. 부호 있는 정수

n비트 2의 보수 정수 범위는 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
-2^(n-1) ~ 2^(n-1)-1

2의 보수는 비트를 반전한 뒤 1을 더한다. 덧셈 회로를 뺄셈에도 재사용할 수 있어 현대 컴퓨터의 대표 표현이다.

같은 부호의 두 수를 더했는데 결과 부호가 달라지면 오버플로를 의심한다. 최상위 비트의 자리올림만으로 부호 오버플로를 판단하면 안 된다.

3. 실수와 문자 표현

부동소수점은 부호, 지수, 가수(유효숫자)로 표현한다. 제한된 비트로 실수를 근사하므로 0.1처럼 정확히 표현되지 않는 값이 존재한다. 정규화, 지수 바이어스, 반올림 오차를 함께 이해해야 한다.

  • ASCII: 대표적인 7비트 문자 코드
  • Unicode: 전 세계 문자를 코드 포인트로 표현하는 표준. UTF-8·UTF-16·UTF-32는 인코딩 방식이다.

Unicode를 단순히 16비트·65,536문자로 한정해서는 안 된다.

4. 부울대수와 게이트

기본 연산은 AND, OR, NOT이며 XOR는 입력이 다를 때 1이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
(A+B)' = A'B'
(AB)' = A'+B'

NAND와 NOR는 모든 논리함수를 구성할 수 있는 범용 게이트이다.

5. 조합논리회로

현재 출력이 현재 입력으로만 결정된다.

  • 반가산기: S=A⊕B, C=AB
  • 전가산기: 두 입력과 이전 자리올림을 더한다.
  • 디코더: n비트 입력을 최대 2^n개 출력 중 하나로 변환
  • 인코더: 여러 입력을 코드로 변환
  • 멀티플렉서: 여러 입력 중 하나를 선택
  • 디멀티플렉서: 하나의 입력을 선택된 출력으로 전달

6. 순서논리회로

현재 입력뿐 아니라 이전 상태의 영향을 받는다. 플립플롭, 레지스터, 카운터가 대표적이다.

  • SR: Set·Reset, 금지 입력에 주의
  • JK: SR의 금지 상태를 보완
  • D: 입력 D를 저장
  • T: 입력 조건에서 상태를 토글

7. 진법 변환과 소수 표현

10진수 45.625를 2진수로 바꾸면 정수부 45는 101101, 소수부는 다음처럼 구한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
0.625×2 = 1.25  → 1
0.25 ×2 = 0.5   → 0
0.5  ×2 = 1.0   → 1

따라서 45.625₁₀ = 101101.101₂이다. 10진 유한소수가 2진에서도 항상 유한한 것은 아니다. 분모를 기약분수로 만들었을 때 2의 거듭제곱만 포함해야 2진 유한소수가 된다.

8. 2의 보수 덧셈과 오버플로

8비트에서 100 + 40을 계산하면 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
  0110 0100  (100)
+ 0010 1000  (40)
= 1000 1100  (-116으로 해석)

양수 두 개를 더했는데 부호 비트가 1이 되었으므로 signed overflow다. 반면 unsigned 해석에서는 140으로 정상이다. 같은 비트 패턴도 자료형 해석에 따라 값과 오버플로 판단이 달라진다.

빼기 A-BA + (B의 2의 보수)로 수행할 수 있다. n비트 결과 바깥의 자리올림은 버리지만 signed overflow는 피연산자와 결과 부호 관계로 판단한다.

9. IEEE 754 단정도 해석

단정도는 부호 1비트, 지수 8비트(바이어스 127), 가수 23비트다. 정규수는 다음처럼 해석한다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
(-1)^sign × 1.fraction × 2^(exponent-127)

예를 들어 비트가 0 | 10000001 | 010000...이면 부호는 +, 실제 지수는 129-127=2, 유효숫자는 1.01₂=1.25이므로 값은 1.25×2²=5.0이다.

지수 필드가 모두 0이면 0 또는 비정규수, 모두 1이면 무한대 또는 NaN을 나타낸다. 부동소수점 비교에서 작은 반올림 오차를 고려해야 한다.

10. 부울식 간소화와 카르노 맵

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
F = AB + AB' = A(B+B') = A
F = A + A'B = A + B

카르노 맵에서는 1을 1,2,4,8…개 직사각형으로 묶고 가장 큰 묶음을 우선해 항을 줄인다. 행·열은 그레이 코드 순서라 가장자리도 서로 인접할 수 있다. don't-care 항은 간소화에 유리할 때만 포함한다.

11. 멀티플렉서로 논리함수 구현

2:1 MUX 출력은 다음과 같다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Y = S'·I0 + S·I1

I0=0, I1=1이면 Y=S, I0=1, I1=0이면 Y=S'가 된다. 선택선에 변수 일부를 연결하고 데이터 입력에 0,1 또는 다른 변수를 넣으면 일반 논리함수를 구현할 수 있다.

12. 전가산기와 자리올림

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Sum  = A ⊕ B ⊕ Cin
Cout = AB + Cin(A ⊕ B)

여러 전가산기를 연결한 리플 캐리 가산기는 단순하지만 낮은 자리의 carry가 높은 자리까지 전파되어 지연이 커진다. carry lookahead는 생성·전파 신호를 이용해 지연을 줄인다.

13. 플립플롭·레지스터 타이밍

순서회로에서는 클록 에지 전 입력이 안정되어야 하는 setup time과 에지 후 유지되어야 하는 hold time이 중요하다. 위반하면 출력이 일정 시간 0과 1 사이에서 불안정한 metastability에 빠질 수 있다. 비동기 입력을 여러 플립플롭으로 동기화하는 이유다.

D 플립플롭은 유효 클록 에지에서 Q(next)=D, T 플립플롭은 T=1이면 토글하고 T=0이면 유지한다.

최종 확인 문제

  1. 10진수 13.375를 2진수로 변환하시오.
  2. 8비트 signed 2의 보수에서 90+50의 비트 결과와 signed overflow 여부를 쓰시오.
  3. IEEE 754 단정도 0 | 10000000 | 100000...의 값을 구하시오.
  4. 부울식 XY + XY'를 간소화하시오.
  5. T 플립플롭에서 현재 Q=0이고 연속 두 클록 동안 T=1이면 각 클록 후 Q 값을 쓰시오.