Chapter 1 전체 흐름
- 디지털 시스템이 무엇인지
- 정보를 어떻게 0과 1로 표현하는지
- 수 체계(2진수, 8진수, 10진수, 16진수)
- 진법 변환
- 이진 연산
- 십진 코드(BCD 등)
- 문자 코드(ASCII, Unicode)
- 오류 검출용 패리티 비트
- Gray code
즉, 이번 챕터에서는 논리회로를 배우기 전에 필요한 표현 방식의 기초를 다룬다.
디지털 시스템의 정의
- 디지털 시스템이란?
디지털 시스템은 이산적인(discrete) 입력 정보와 이산적인 내부 상태를 받아서 이산적인 출력 정보를 만드는 시스템이다. 핵심은 다음 3개다. 입력(Input), 출력(Output), 상태(State) 즉, 단순 입력만 보는 것이 아니라, 어떤 시스템에서는 현재 저장된 상태 값도 함께 고려해 출력을 만든다.
- 왜 '디지털'인가?
디지털은 연속값이 아니라 딱 끊어진 값들을 사용한다.
예 : 전등 : 켜짐 / 꺼짐, 스위치 : 1 / 0, 논리값 : True / False, 전압 레벨 : High / Low
아날로그는 연속적으로 변하지만, 디지털은 두 개의 값, 즉 binary(2진)를 사용한다.
디지털 시스템의 종류
- 조합 논리 시스템(Combinational Logic System)
상태가 없는 시스템이다. 출력이 현재 입력에만 의존하다. Output = Function(Input)
예 : 가산기, 디코더, MUX, 기본 논리 게이트 회로
특징 : 기억 기능 없음, 지금 들어온 입력만 보면 출력 결정 가능, 과거 입력 중요하지 않음
- 순차 논리 시스템(Sequential System)
상태가 있는 시스템이다. 출력이 입력뿐 아니라 현재 상태에도 의존할 수 있다.
보통 이전 입력의 결과가 저장된 값이다.
순차 회로의 핵심 식
상태 갱신 : State_next = Function(State, Input)
출력 : Output = Function(State) 또는 Output = Function(State,Input)
- 동기식 / 비동기식
동기식 순차 시스템
- 상태가 정해진 시간(클록)에만 갱신됨
- 실제 디지털 시스템 대부분이 이 방식
비동기식 순차 시스템
- 상태가 입력 변화에 따라 아무 때나 바뀔 수 있음
디지털 시스템 예시 : 카운터
- 디지털 카운터(odometer)

입력 : Count Up, Reset
출력 : Display
상태 : 현재 저장된 숫자 값
이 시스템은 현재 입력만으로 충분하지 않고, 지금까지 몇 번 올라갔는지 저장된 값이 있어야 하므로 순차회로다.
정보 표현과 신호(Signals)
- 정보는 물리량으로 표현된다
정보는 실제 회로 안에서 전압, 전류, 자기 상태, 광 신호 같은 물리량으로 표현된다.
즉, 추상적인 0과 1은 실제로는 전압 범위 같은 물리적인 값으로 실현된다.
- 디지털 신호와 아날로그 신호
아날로그 신호
연속적인 값을 가짐 예 : 온도, 음성 파형, 조도
디지털 신호
이산적인 값을 가짐, 보통 2개 값 사용 : 0, 1

- 전압 레벨과 임계 값
디지털 회로에서는 0과 1을 특정 전압 범위로 구분한다.
예를 들어 낮은 전압 범위 -> 0, 높은 전압 범위 ->1
중간 영역은 불안정 할 수 있으므로, 실제 설계에서는 논리 0 영역, 논리 1영역, 불확정 영역을 나누어 생각한다.

수 체계(Number Systems)
- 기수(Radix, Base)
어떤 수 체계가 몇 개의 숫자를 사용하느냐를 나타낸다.
- 일반적인 수 표현
기수 r인 수 체계에서 숫자는 다음처럼 표현된다. 여기서 각 자리수는 0부터 r-1 사이의 값을 가진다.


- 각 진법의 사용 숫자
2진수 : 0,1 / 8진수 : 0~7 / 10진수 : 0~9 / 16진수 : 0~9, A, B, C, D, E, F
16진수에서 A, B, C, D, E, F는 각각 10, 11, 12, 13 ,14, 15다
진법 변환(Base Conversion)
- 2진수 -> 10진수
각 자리값에 해당하는 가중치를 곱해서 더한다.

- 10진수 정수 -> 다른 진수
계속 나누기(divide-by-r) 방식 사용
예 : 25를 2진수로 변환

아래에서 위로 읽으면 11001(b) 즉, 정수부는 나눗셈 반복, 나머지를 역순으로 읽음
- 10진수 소수 -> 다른 진수
계속 곱하기(multiply-by-r) 방식 사용
예 : 0.625를 2진수로 변환

위에서 아래로 읽으면 0.101(b) 즉, 소수부는 곱셈 반복, 정수부를 순서대로 읽음
- 2진수 <-> 8진수
3비트씩 묶는다. 다음 예를 보면 110(b) = 6, 101(b) = 5

- 2진수 <-> 16진수
4비트씩 묶는다. 8진수와 동일한 이유다. 1110(b) = E, 1101(b) =D

이진 산술(Binary Arithmetic)
- 이진 덧셈
다음 4개만 외우면 된다.
0 + 0 = 0 / 0 + 1 = 1 / 1 + 0 = 1 / 1 + 1 = 10 -> 합은 0, 자리올림 carry 1
세 비트를 더할 때 : 1 + 1 + 1 = 11 -> 합 1, carry 1
- 이진 뺄셈
다음 4개만 외우면 된다.
0 - 0 = 0 / 1 - 0 = 1 / 1 - 1 = 0 / 0 - 1은 불가능하므로 borrow(자리내림) 필요
- 이진 곱셈
10진수 곱셈과 원리는 동일하다. 단, 곱해지는 숫자가 0또는 1뿐이라 더 단순하다.
0 x anything = 0
1 x anything = 1
예 : 101(b) x 11(b) = 101 + 1010 = 1111(b) 즉 5 x 3 =15
SI 단위와 IEC 단위

컴퓨터 메모리나 저장장치는 본질적으로 2진 기반이라, 실제로는 1024 단위가 많이 사용된다.
예 :
1 KiB = 1024bytes
1 KB = 1000bytes 이 둘의 차이를 알아야 한다.
Decimal Codes : BCD
- BCD란?
BCD(Binary Coded Decimal)는 십진수의 각 자리 숫자 하나를 4비트 이진수로 표현하는 방식이다.
예:
5 -> 0101(b)
9 -> 1001(b)
십진수 59를 BCD로 표현하면
따라서 59 = 0101 1001(BCD)
BCD는 숫자 하나하나를 따로 4비트로 코딩하는 것이지, 전체 수를 이진수로 직접 바꾸는 것이 아니다.
- BCD에서 유효한 코드
4비트로 16개 표현 가능하지만, 십진수 숫자는 0~9까지만 있으므로 실제 사용은 다음뿐이다.
0000 ~ 1001 -> 유효
1010 ~ 1111 -> BCD에서 무효
- BCD 덧셈
BCD에서는 각 자리 4비트 결과가 9를 초과하거나 carry가 발생하면 0110(즉, 6)을 더해 보정한다
왜 6을 더하나?
4비트 이진수는 0~15까지 표현 가능하지만, BCD는 0~9만 허용된다. 10~15는 잘못된 코드이므로, 이를 올바른 십진 자리올림 형태로 바꾸기 위해 6을 더한다.
보정 조건
합이 1001(9) 보다 크면 또는 자리올림(carry)가 생기면 0110 추가
예:
9 + 5 = 14
이진합 : 1001 + 0101 = 1110
1110은 BCD로 유효하지 않다. 따라서 0110을 더하면
1110 + 0110 = 1 0100
결과는 자리 올림 1과 0100, 즉 14를 올바르게 표현한다.
기타 십진 코드
- Excess-3 code
각 십진 숫자에 3을 더한 뒤 4비트 이진수로 표현한 코드다.
예:
decimal 0 -> 0011
decimal 1 -> 0100
decimal 2 -> 0101
특징 : 자기보수적 성질과 관련해 자주 언급됨
- 84-2-1 코드 같은 가중 코드
각 비트에 가중치가 부여된 십진 코드.
Alphanumeric Codes
- ASCII
ASCII는 문자를 숫자로 표현하는 대표적인 코드다.
기본적으로 7비트며 문자, 숫자, 특수 문자, 제어 문자를 포함한다.
예 : 숫자 0 ~ 9, 대문자 A ~ Z, 소문자 a ~ z, 제어문자 NUL, LF, CR 등
- ASCII 특징
영어권 문자 표현 중심, 7비트라서 총 128개 표현 가능, 확장 ASCII는 8비트를 쓰기도 함
- Unicode
ASCII보다 넓은 범위의 문자를 표현하기 위한 코드 체계다.
다양한 언어 지원, 한글, 한자, 특수 기호 등 포함 가능
ASCII를 확장한 전세계 문자 표현 방식정도 이해하고 넘어가자.
Parity Bit
- 패리티 비트란?
오류 검출(error detection)을 위해 데이터에 1비트 추가하는 방법이다. 데이터 자체를 고치는 것은 아니고, 오류를 검출하는 목적이다.
- Even parity와 Odd parity
Even parity - 전체 1의 개수가 짝수가 되도록 패리티 비트를 추가
Odd parity - 전체 1의 개수가 홀수가 되도록 패리티 비트를 추가
예 : 데이터가 1011001이라 하자.
1의 개수는 4개다.
Even parity - 이미 짝수이므로 parity bit = 0
Odd parity - 홀수로 만들어야 하므로 parity bit = 1
- 한계
패리티 비티는 홀수 개의 비트 오류는 검출 가능하지만, 짝수 개 오류는 검출하지 못할 수 있다.
Gray Code
- Gray code란?
인접한 코드값 사이에서 오직 1비트만 변화도록 만든 코드다.
일반 이진수는 숫자가 1 증가할 때 여러 비트가 동시에 바뀔 수 있다.
- 왜 필요한가?
센서, 위치 검출기, 회전축 인코더 등에서 값이 변하는 순간 여러 비트가 동시에 바뀌면 오류 가능성이 생긴다. Gray code는 이를 줄여준다. 광학식 shaft encoder, 위치 검출 시스템, 상태 전이 오류 감소가 필요한 곳에 쓰인다.

Chapter 1 총정리
- 디지털 시스템은 이산적인 입력, 상태, 출력을 가진다.
- 조합회로는 상태가 없고, 순차회로는 상태가 있다.
- 동기식 순차회로는 상태가 클록에 맞춰 갱신된다.
- 디지털 정보는 실제로 전압 범위 같은 물리량으로 표현된다.
- 2진수는 0과 1만 사용한다.
- 8진수는 3비트씩, 16진수는 4비트씩 묶어 변환한다.
- 10진수 정수 변환은 나눗셈 반복, 소수 변환은 곱셈 반복이다.
- BCD는 십진수 각 자리를 4비트로 표현한다.
- BCD에서 유효한 코드는 0000~1001이다.
- BCD 덧셈에서 합이 9 초과 또는 carry 발생 시 0110을 더해 보정한다.
- ASCII는 7비트 문자 코드다.
- 패리티 비트는 오류 검출용이다.
- Gray code는 인접 코드 간 1비트만 변화한다.