⚙️ 논리회로 · 불대수 (5과목)
🚪 기본 논리 게이트
| 게이트 | 논리식 | 동작 |
|---|---|---|
| AND | Y = A · B | 둘 다 1일 때만 1 |
| OR | Y = A + B | 하나라도 1이면 1 |
| NOT | Y = A' | 반전 |
| NAND | Y = (A · B)' | AND의 반대. 모든 회로를 만들 수 있는 만능 게이트 |
| NOR | Y = (A + B)' | OR의 반대. 역시 만능 게이트 |
| XOR | Y = A ⊕ B | 서로 다르면 1 · 같으면 0 → 반가산기·패리티·그레이 코드에 사용 |
| XNOR | Y = (A ⊕ B)' | 같으면 1 → 일치 검출 |
📐 불 대수 기본 법칙
| 법칙 | AND 형태 | OR 형태 |
|---|---|---|
| 항등 | A · 1 = A A · 0 = 0 | A + 0 = A A + 1 = 1 |
| 멱등 | A · A = A | A + A = A |
| 보수 | A · A' = 0 | A + A' = 1 |
| 교환 | A · B = B · A | A + B = B + A |
| 결합 | (A·B)·C = A·(B·C) | (A+B)+C = A+(B+C) |
| 분배 | A·(B+C) = A·B + A·C | A + B·C = (A+B)·(A+C) |
| 흡수 | A · (A + B) = A | A + A·B = A |
드모르간의 법칙 — 출제 1순위
(A · B)' = A' + B'
(A + B)' = A' · B'
(A + B)' = A' · B'
부정을 안으로 넣으면 · 와 + 가 뒤바뀐다 — 이 한 문장이 전부
📊 기본 게이트 진리표 — 한 장으로
A B │ AND OR NAND NOR XOR XNOR
─────┼──────────────────────────────────
0 0 │ 0 0 1 1 0 1
0 1 │ 0 1 1 0 1 0
1 0 │ 0 1 1 0 1 0
1 1 │ 1 1 0 0 0 1
└ 둘다1 하나라도1 AND반전 OR반전 다르면1 같으면1
세로로 읽으면 관계가 보인다 — NAND는 AND를 뒤집은 것, NOR는 OR를 뒤집은 것, XNOR는 XOR를 뒤집은 것.
네 줄만 외우면 나머지는 반전으로 만들어진다.
🧮 논리 방정식 — 진리표에서 식 세우기
A B C │ F
────────┼───
0 0 0 │ 0
0 0 1 │ 1 ← A'B'C
0 1 0 │ 0
0 1 1 │ 1 ← A'BC
1 0 0 │ 0
1 0 1 │ 1 ← AB'C
1 1 0 │ 0
1 1 1 │ 1 ← ABC
SOP (곱의 합, 최소항) — 출력이 1인 행만 모아 OR 로 연결
F = A'B'C + A'BC + AB'C + ABC
규칙 : 변수가 0이면 보수(A'), 1이면 그대로(A) 로 적고 AND 로 묶는다
POS (합의 곱, 최대항) — 출력이 0인 행만 모아 AND 로 연결
규칙 : SOP와 정반대 — 0이면 그대로, 1이면 보수로 적고 OR 로 묶는다
⚠ SOP와 POS의 규칙이 정반대다
· SOP(1인 행) — 변수 값이 0이면 보수, 1이면 그대로 → AND로 묶고 전체를 OR
· POS(0인 행) — 변수 값이 1이면 보수, 0이면 그대로 → OR로 묶고 전체를 AND
헷갈리면 "SOP는 1을 모은다" 하나만 기억하고 나머지는 반대로 적용하면 된다.
· SOP(1인 행) — 변수 값이 0이면 보수, 1이면 그대로 → AND로 묶고 전체를 OR
· POS(0인 행) — 변수 값이 1이면 보수, 0이면 그대로 → OR로 묶고 전체를 AND
헷갈리면 "SOP는 1을 모은다" 하나만 기억하고 나머지는 반대로 적용하면 된다.
✂️ 논리식 간소화 — 단계별 예제
예제 ① F = A·B + A·B' + A'·B 를 간소화하면?
F = A·B + A·B' + A'·B
= A·(B + B') + A'·B ← 분배(A로 묶기)
= A·1 + A'·B ← 보수 B+B'=1
= A + A'·B ← 항등 A·1=A
= (A + A')·(A + B) ← 분배
= 1·(A + B) = A + B
F = A·B + A·B' + A'·B
= A·(B + B') + A'·B ← 분배(A로 묶기)
= A·1 + A'·B ← 보수 B+B'=1
= A + A'·B ← 항등 A·1=A
= (A + A')·(A + B) ← 분배
= 1·(A + B) = A + B
예제 ② F = A + A'·B 를 한 줄로 (자주 나오는 형태)
A + A'·B = A + B / A·(A' + B) = A·B
보수가 붙은 항 앞의 보수는 지워진다 — 흡수 법칙의 변형. 통째로 외워두면 빠르다
A + A'·B = A + B / A·(A' + B) = A·B
보수가 붙은 항 앞의 보수는 지워진다 — 흡수 법칙의 변형. 통째로 외워두면 빠르다
🔧 드모르간 활용 — NAND 하나로 다 만들기
NAND가 만능 게이트인 이유
NOT : A NAND A = (A·A)' = A'
AND : (A NAND B) NAND (A NAND B) = ((A·B)')' = A·B
OR : (A NAND A) NAND (B NAND B) = A' NAND B' = (A'·B')'
= A + B ← 드모르간
세 가지를 다 만들 수 있으므로 모든 논리회로를 NAND만으로 구현할 수 있다.
NOR 도 같은 이유로 만능 게이트다.
왜 만능 게이트를 쓰는가 — 공정에서 한 종류의 게이트만 대량 생산하면 되므로 단가가 내려가고 집적도가 올라간다.
"NAND/NOR가 만능 게이트인 이유"를 묻는 문제의 근거가 바로 위 세 줄이다.
🗺️ 카르노맵 (Karnaugh Map) — 논리식 간소화
불 대수 법칙을 하나씩 적용해 식을 줄이는 것은 실수하기 쉽다. 카르노맵은 진리표를 격자로 그려 놓고 눈으로 묶어 최소 논리식을 얻는 방법이다. 게이트 수를 줄여 회로를 단순하게 만드는 것이 목적이다.
핵심 — 칸 배열이 그레이 코드 순서다
BC
A 00 01 11 10 ← 01 다음이 11 (10이 아니다!)
0 · · · ·
1 · · · ·
이렇게 배열해야 이웃한 칸이 딱 1비트만 달라진다.
그래야 묶었을 때 변하는 변수가 사라진다.
| 묶기 규칙 | 내용 |
|---|---|
| 개수 | 1, 2, 4, 8 … 2의 거듭제곱 개씩만 묶는다 (3개·5개 묶기 불가) |
| 크기 | 최대한 크게 묶는다 — 크게 묶을수록 변수가 많이 사라진다 |
| 중복 | 이미 묶인 1을 다시 묶어도 된다 |
| 인접 | 상하좌우로만 인접. 맨 왼쪽과 맨 오른쪽, 맨 위와 맨 아래도 인접(맵이 원통처럼 감김) |
| 결과 읽기 | 묶음 안에서 값이 변하는 변수는 삭제, 변하지 않는 변수만 남긴다 |
📖 예제 — F(A,B,C) = Σm(0,1,2,3,4,5) 를 간소화하면?
BC
A 00 01 11 10
0 1 1 1 1 ← ① A=0 행 전체(4칸) 묶기
1 1 1 0 0
↑ ↑
└───┘ ② BC=00·01 두 열(4칸) 묶기
① A=0 행 4칸 → B와 C가 모두 변함 → 지움. A만 0으로 고정 → A'
② 왼쪽 두 열 4칸 → A와 C가 변함 → 지움. B만 0으로 고정 → B'
F = A' + B' (= (A·B)' — 드모르간으로 확인 가능)
| 용어 | 내용 |
|---|---|
| 최소항 Minterm · SOP |
출력이 1인 항들을 곱의 합(AND들을 OR)으로 표현. Σm 으로 씀 — 카르노맵에서 1을 묶는 방식 |
| 최대항 Maxterm · POS |
출력이 0인 항들을 합의 곱(OR들을 AND)으로 표현. ΠM 으로 씀 — 0을 묶는 방식 |
| 무관항 Don't care · X |
0이든 1이든 상관없는 칸. 묶는 데 도움이 되면 1로 취급해 더 크게 묶을 수 있다 |
⚠ 카르노맵 함정 세 가지
· 열 순서는 00 · 01 · 11 · 10 — 그레이 코드 순서다. 00·01·10·11로 그리면 전부 틀린다
· 3개씩은 묶을 수 없다. 반드시 1·2·4·8개
· 양 끝은 서로 인접하다. 맨 왼쪽 열과 맨 오른쪽 열, 4변수 맵에서는 네 모서리도 하나로 묶인다
· 열 순서는 00 · 01 · 11 · 10 — 그레이 코드 순서다. 00·01·10·11로 그리면 전부 틀린다
· 3개씩은 묶을 수 없다. 반드시 1·2·4·8개
· 양 끝은 서로 인접하다. 맨 왼쪽 열과 맨 오른쪽 열, 4변수 맵에서는 네 모서리도 하나로 묶인다
➕ 조합 논리회로
| 회로 | 기능 | 구성 |
|---|---|---|
| 반가산기 Half Adder |
1비트 두 개를 더함. 자리올림 입력은 못 받음 | S = A ⊕ B C = A · B XOR 1개 + AND 1개 |
| 전가산기 Full Adder |
자리올림 입력까지 3개 비트를 더함 | 반가산기 2개 + OR 1개 기출 |
| 디코더 (해독기) | n개 입력 → 2ⁿ개 출력 중 하나만 활성 | 주소 해독 |
| 인코더 (부호기) | 2ⁿ개 입력 → n개 출력 | 디코더의 반대 |
| 멀티플렉서 (MUX) | 여러 입력 중 하나를 선택해 출력 (2ⁿ → 1) | 선택선 n개 |
| 디멀티플렉서 (DEMUX) | 하나의 입력을 여러 출력 중 하나로 (1 → 2ⁿ) | MUX의 반대 |
⚠ 헷갈리는 짝 두 개
· 디코더 = 적은 입력 → 많은 출력 / 인코더 = 많은 입력 → 적은 출력
· MUX = 여러 개 중 하나 고르기(선택) / DEMUX = 하나를 여러 곳으로 분배
· 디코더 = 적은 입력 → 많은 출력 / 인코더 = 많은 입력 → 적은 출력
· MUX = 여러 개 중 하나 고르기(선택) / DEMUX = 하나를 여러 곳으로 분배
🔄 순서 논리회로 — 플립플롭
| 종류 | 동작 |
|---|---|
| RS 플립플롭 | Set / Reset. S=R=1 은 금지 입력(불확정) 기출 |
| JK 플립플롭 | RS의 금지 입력을 해결. J=K=1 이면 출력이 반전(토글) |
| D 플립플롭 | 입력을 그대로 저장. 데이터 지연·레지스터에 사용 |
| T 플립플롭 | T=1 이면 반전(Toggle). 카운터에 사용 |
조합 vs 순서 회로 — 조합 논리회로는 현재 입력만으로 출력이 정해진다(가산기·디코더·MUX).
순서 논리회로는 이전 상태(기억) 까지 반영한다(플립플롭·카운터·레지스터).
🔗 이어지는 단원
📝 시험 포인트
• NAND · NOR = 만능 게이트 (모든 논리회로 구현 가능)
• XOR = 다르면 1 → 반가산기 합·패리티·그레이 코드
• 드모르간 — 부정을 넣으면 · 와 + 가 바뀐다
• 반가산기 = XOR + AND, 전가산기 = 반가산기 2개 + OR 1개
• 디코더 n→2ⁿ / 인코더 2ⁿ→n, MUX 선택 / DEMUX 분배
• RS의 금지 입력 = S=R=1, JK는 J=K=1에서 토글
• SOP = 1인 행 모음(0이면 보수) / POS = 0인 행 모음(1이면 보수)
• A + A'B = A + B, A(A' + B) = AB — 통째로 암기
• 카르노맵 열 순서 = 00·01·11·10(그레이), 묶기는 2의 거듭제곱 개, 양 끝은 인접
• 조합회로 = 현재 입력만 / 순서회로 = 이전 상태 기억
• NAND · NOR = 만능 게이트 (모든 논리회로 구현 가능)
• XOR = 다르면 1 → 반가산기 합·패리티·그레이 코드
• 드모르간 — 부정을 넣으면 · 와 + 가 바뀐다
• 반가산기 = XOR + AND, 전가산기 = 반가산기 2개 + OR 1개
• 디코더 n→2ⁿ / 인코더 2ⁿ→n, MUX 선택 / DEMUX 분배
• RS의 금지 입력 = S=R=1, JK는 J=K=1에서 토글
• SOP = 1인 행 모음(0이면 보수) / POS = 0인 행 모음(1이면 보수)
• A + A'B = A + B, A(A' + B) = AB — 통째로 암기
• 카르노맵 열 순서 = 00·01·11·10(그레이), 묶기는 2의 거듭제곱 개, 양 끝은 인접
• 조합회로 = 현재 입력만 / 순서회로 = 이전 상태 기억