본문 바로가기
CS

컴퓨터구성[Computer System Architecture]- WEEK01~04 (디지털 컴퓨터, 논리 게이트, 부울 대수, 카르노 맵)

by assidu 2026. 4. 13.

목차]

I. Digital Computers

II. Logic Gates

III. Boolean Algebra

IV. Map Simplification

V. Combinational Circuits

VI. Flip-Flops

VII. Sequential Circuits

 

 

I. Digital Computers (p.3~6)

p.3 — Digital의 의미 디지털이란 이산적(discrete)인 값을 갖는 것을 말합니다. 진법별로 사용하는 숫자가 다릅니다.

  • 10진수: 0~9 / 16진수: 0~F / 8진수: 0~7 / 2진수: 0, 1
  • 비트(Bit): 이진 숫자 하나. 예: 1011010
  • 프로그램: 명령어의 연속적인 나열
  • 컴퓨터 = 하드웨어 + 소프트웨어

 

p.4 — 소프트웨어 계층 구조 컴퓨터 소프트웨어는 아래처럼 계층화되어 있습니다.

 
Application S/W (DB, 워드, 게임 등)

API
Operating System(운영체제)

ROM BIOS

Computer H/W
  • 소프트웨어 = 프로그램 + 데이터
  • 응용 S/W: 사용자가 직접 사용하는 프로그램
  • 시스템 S/W: OS, 컴파일러, 디바이스 드라이버 등

ROM BIOS는 HW초기화/ 부팅 프로세스 관리 / 기본 입출력 서비스 / CMOS 셋업 등등을 기능함. 메인보드 ROM칩에 저장된 펌웨어로서 하드웨어와 OS 사이에서 저수준 인터프리터 역할을 한다.

+펌웨어: HW, SW의 중간 성격을 가짐. 기기 내부의 ROM / 플래시 메모리에 내장되어 해당 장치를 제어하는 하위 수준의 프로그램이다. 기기 전원을 키면 가장 먼저 동작하여 HW 기능 최적화하는 제어 안내서 역할을 한다.

 

 

  • CPU: 연산·제어 담당
  • 메모리: ROM(프로그램 저장)-비휘발성!,  RAM(데이터 저장) - 휘발성, 메인메모리라고도 함
  • I/O 장치: 키보드·마우스(입력), 프린터·모니터(출력), HDD(저장)
  • Input-Output Processor(IOP): 주변 장치와 메모리 사이의 데이터 전송을 전담하는 독립적인 처리 장치

 

 

p.6 — 컴퓨터 구조란? Hennessy & Patterson의 정의에 따르면 컴퓨터 구조는 두 가지로 나뉩니다.

  • ISA (Instruction Set Architecture): 명령어, 주소 지정 방식, 명령어/데이터 형식, 레지스터
  • Machine Organization: CPU(제어장치 + 데이터패스), 메모리, 입출력
쉽게 말해 ISA는 "무엇을 할 수 있는가", Machine Organization은 "어떻게 구현되었는가"입니다.

 

 

II. Logic Gates (p.7~10)

p.7 — 논리 게이트 개념

  • 컴퓨터 내부에서 2진 정보는 신호(signal) 형태로 표현됩니다.
  • 게이트(Gate): 0 또는 1의 신호를 만들어내는 하드웨어 블록
  • 핵심 사실: 모든 게이트는 NAND 게이트나 NOR 게이트의 조합으로 대체 가능합니다. (Complete Set)
  • 퀴즈: NAND/NOR로 AND, OR 회로 구현하기

p.8~9 — 논리 게이트 종류 (회로 그림) 이 페이지들은 주로 그림으로 구성되어 있으며, 아래 게이트들의 기호와 진리표가 나옵니다.

게이트기호동작
AND A·B 둘 다 1일 때만 1
OR A+B 하나라도 1이면 1
NOT A' 입력 반전
NAND (AB)' AND의 반전
NOR (A+B)' OR의 반전
XOR A⊕B 다를 때만 1
XNOR (A⊕B)' 같을 때만 1

 

III. Boolean Algebra (p.11~15)

p.11 — 부울 대수 기본 개념

  • 부울 변수: 0 또는 1의 값만 갖는 변수 (A, B, x, y)
  • 부울 함수: 변수 + 논리 연산. 예: F(x,y,z) = x + y'z
  • 진리표(Truth Table): n개 변수 → 2ⁿ가지 조합. 변수 3개면 8행
  • 논리 회로도: 게이트로 함수를 표현한 그림

 

 

p.12 — 부울 대수 기본 정리 17가지

법칙식
항등원 x+0=x, x·1=x
영원 x·0=0, x+1=1
멱등 x+x=x, x·x=x
보원 x+x'=1, x·x'=0
교환 x+y=y+x
결합 x+(y+z)=(x+y)+z
분배 x(y+z)=xy+xz
드모르간 (x+y)'=x'y', (xy)'=x'+y'
이중 부정 (x')'=x

드모르간의 법칙이 특히 중요합니다. NAND/NOR 게이트 구현에 핵심적으로 사용됩니다.

 

 

 

p.13 — 부울식 간소화가 필요한 이유

  • 게이트 수를 줄여 전파 지연(propagation delay) 감소
  • 비용 절감
  • 방법: 기본 정리 이용 / 카르노맵 이용

 

 

 

p.14 — 간소화 예제

 
 
F = AB' + C'D + AB' + C'D
  = (AB' + C'D) + (AB' + C'D)   ← x+x = x
  = AB' + C'D

F = ABC + ABC' + A'C
  = AB(C+C') + A'C              ← 분배 + 보원
  = AB + A'C                    (인버터 1개, AND 게이트 1개 절약!)
 
 
 
 

p.15 — 퀴즈

  • F = AB'C + AC 

= AC(B' + 1) = AC

  • F = (A+B)'(A'+B')'

= A'B' AB = 0

 

 

IV. Map Simplification (p.16~26)

p.16 — 카르노맵 기초: 민텀/맥스텀

  • 민텀(Minterm): n개 변수의 곱(AND). 변수가 1이면 그대로, 0이면 보수 (x=1, x'=0)
  • 맥스텀(Maxterm): n개 변수의 합(OR). 변수가 0이면 그대로, 1이면 보수 (x=0, x'=1)
더보기

1. Maxterm의 설계 목적: "오직 이때만 0이 되는 함정(Trap) 만들기"

Maxterm은 변수들이 **OR 게이트(+)**로 묶여 있는 덩어리입니다. OR 게이트의 치명적인 특징은 **"입력이 모두 0일 때만 딱 한 번 0이 나온다"**는 것입니다.

  • 상황: 진리표를 보니 입력이 x=1, y=0일 때 결과가 0이 나와야 하는 오답 케이스라고 가정해 봅시다.
  • 함정 설계: 이 1, 0이 들어올 때만 전체를 0으로 만드는 OR 게이트를 조립해야 합니다.
    • y는 이미 0이니까 그냥 y를 그대로 씁니다.
    • $x$는 1이 들어오므로, OR 게이트 안에서 0으로 만들어주기 위해 반전시켜서 $x'$를 씁니다.
    • 두 개를 더하면 (x' + y) 라는 식이 완성됩니다. MAXTERM으로 2 의미. M₂
  • 결과: 이 식은 오직 x=1, y=0이 들어올 때만 (1' + 0) = 0 + 0 = 0$이 되고, 나머지 3가지 경우의 수에서는 무조건 1이 나옵니다.
  • 결론: Maxterm에서 반대로 기호를 붙이는 이유는 **"내가 지목한 딱 그 오답 케이스에서만 0을 뿜어내는 맞춤형 스위치"**를 억지로 만들어내기 위해서입니다.

2. AND 곱하기(Pi)의 역할: "함정에 걸리면 즉시 전원 차단하기"

이제 진리표에서 결과가 0인 오답 케이스들을 찾아 각각의 맞춤형 함정(Maxterm)들을 만들었습니다. 이것들을 모조리 **AND 게이트($\cdot$)**로 곱해버립니다 (Product).

AND 게이트의 특징은 **"수백 개가 1이어도 단 하나만 0이면 전체 결과는 0이다"**라는 절대적인 거부권(Veto)을 가진다는 것입니다.

  • 정답인 케이스가 들어올 때: 어떤 함정(Maxterm)도 발동하지 않아 모두가 1을 내보냅니다. 따라서 1 dot 1 dot 1 = 1이 되어 무사히 통과합니다.
  • 오답인 케이스가 들어올 때: 대기하고 있던 수많은 함정 중 하나가 자기가 맡은 오답을 인식하고 0을 뿜어냅니다. 그러면 나머지 Maxterm들이 1이든 말든 상관없이, AND 곱하기에 의해 **전체 회로의 결괏값은 즉시 0으로 배제(Exclusion)**되어 버립니다.

💡 핵심 요약

결국 POS 회로는 **"오답을 만나면 0이 되는 스위치(Maxterm)들을 싹 다 직렬(AND)로 연결해 두고, 오답이 하나라도 들어오면 전체 회로의 불을 꺼버리는(0으로 만드는) 설계 방식"**입니다. Minterm의 규칙을 거꾸로 뒤집어서 완벽한 필터링 시스템을 만들어낸 것이죠!

 

2변수 예시:

x                         y                      Minterm                                                          Maxterm
0 0 m₀ = x'y' M₀ = x+y
0 1 m₁ = x'y M₁ = x+y'
1 0 m₂ = xy' M₂ = x'+y
1 1 m₃ = xy M₃ = x'+y'

 p.17 — 2변수 카르노맵 예시 F = x'y + xy의 카르노맵에서 m₁, m₃을 묶으면 → F = y (간소화 완료)

  F는 SOP로 표현 (정답 즉 1인 것들, minterm들) 또는 POS로 표현 (오답, 즉 0인 것들, MAXTERM들)

 

오답인 (0,2)를 SOP로 표현하면 F'를 표현한게 된다!

 

 

 

p.18 — 카르노맵 구조 (2/3/4/5변수)

  • 2변수: 2×2 맵 (0, 1  / 0 , 1)
  • 3변수: 2×4 맵 (그레이 코드 순서: 00, 01, 11, 10)
  • 4변수: 4×4 맵

4변수부터 카르노맵의 숫자 위치를 어떻게 익히지...? 에 대한 답>>

더보기

결론부터 말씀드리면, 안쪽의 십진수 숫자들(0~15)은 절대 외우는 것이 아닙니다. 카르노 맵의 가로축과 세로축에 적히는 그레이 코드(Gray Code)의 생성 원리만 딱 하나 이해하면, 아무리 큰 카르노 맵이라도 그 자리에서 바로 그려낼 수 있습니다.

그레이 코드가 어떻게 1비트만 다르게 배치되도록 만들어지는지, 그 마법 같은 **'거울 반사의 원리(Reflection)'**를 알려드릴게요.

1. 그레이 코드는 어떻게 만들어질까? (거울 반사 원리)

그레이 코드는 앞 단계의 코드를 '거울에 비추듯' 반사한 뒤, 절반을 나누어 0과 1을 붙이는 아주 단순한 규칙으로 만들어집니다. (그래서 정식 명칭도 Reflected Gray Code입니다.)

[1단계] 1비트 그레이 코드

가장 기본이 되는 상태입니다.

  • 0
  • 1

[2단계] 2비트 그레이 코드 (카르노 맵 축에 사용됨)

1비트 코드를 거울에 비춰서 데칼코마니처럼 접었다 편다고 상상해 보세요.

  1. 반사: 0, 1 |거울| 1, 0
  2. 앞에 숫자 붙이기: 거울을 기준으로 위쪽(원래 것)에는 앞에 0을 붙이고, 아래쪽(반사된 것)에는 앞에 1을 붙입니다.
    • 00
    • 01
    • 11
    • 10
  3. 결과: 우리가 카르노 맵에서 달달 외우던 **00, 01, 11, 10**이 바로 이렇게 탄생합니다! (위아래를 비교해 보시면 정말로 딱 1비트씩만 다릅니다.)

2. 4변수 카르노 맵에 적용하기 (암기 해방)

이제 4변수(A, B, C, D) 카르노 맵의 4x4 표를 머릿속으로 그려보세요.

  • 가로축 (C, D): 00, 01, 11, 10
  • 세로축 (A, B): 00, 01, 11, 10

표 안쪽의 숫자들은 그냥 세로축의 이진수와 가로축의 이진수를 합친 것일 뿐입니다. 가장 헷갈리는 3번째 줄(행)을 직접 조합해 볼까요?

  • 세로축 A, B가 **11**인 3번째 줄:
    • 가로축 00과 만남 -> 1100 (십진수 12)
    • 가로축 01과 만남 -> 1101 (십진수 13)
    • 가로축 11과 만남 -> 1111 (십진수 15)
    • 가로축 10과 만남 -> 1110 (십진수 14)

이렇게 세로축의 3번째 인덱스가 10이 아니라 그레이 코드에 의해 11이 되기 때문에, 3번째 줄의 십진수 값들이 8, 9... 가 아니라 12, 13, 15, 14로 껑충 뛰는 것입니다.

이제 표의 헤더에 00, 01, 11, 10만 적어두면, 굳이 안쪽 숫자를 외우지 않아도 교차하는 이진수를 읽어서 바로 십진수로 변환할 수 있습니다!

  • 5변수: 4×8 맵

인접 셀은 1비트만 다르게 배치합니다(그레이 코드). 이것이 K-맵의 핵심입니다.

 

 

 

p.19~21 — 4변수 카르노맵 예제 F(a,b,c,d) = Σm(0,1,2,5,8,9,10) 간소화

  • F' = AB + CD + BD
  • F = (A'+B')(C'+D')(B'+D') (곱의 합 → POS 형태)

 

p.22 — 인접 사각형 규칙

  • 묶음의 크기는 반드시 2ⁿ개 (2, 4, 8, ...)
  • 같은 행의 양 끝, 같은 열의 위·아래 끝도 인접으로 간주 (환형 구조)
  • 네 모서리도 서로 인접 (위아래로 말아서 b' 좌우로 말아서 d' -> b'd') 
  • 묶음은 겹쳐도 됨

카르노맵에서 보이듯 A, B, C, D가 1인 영역을 표시해두면 묶은 결과 알아내기 쉽다!

 

 

p.24 — NAND/NOR 구현 및 Don't Care

 

SOP에서 결국 마지막은 합으로 표현되는데, 원래 회로에 이중부정을 걸면 결과는 동일하다!

이 때 드모르간 법칙을 그대로 적용하면 (부정의 합 = 곱의 부정) invert 해서 부정의 합으로 연산하는 부분을 곱의 부정 NAND 게이트로 바꿔 표현할 수 있다!

  

 

  • 곱의 합(SOP) → NAND 게이트로 구현 (합으로 표현된 걸 곱으로 표현) - 이중부정+드모르간으로 게이트 부품 통일!
  • 합의 곱(POS) → NOR 게이트로 구현 (곱으로 표현된 걸 합으로 표현)  - 이중부정+드모르간으로 게이트 부품 통일!
  • Don't Care 조건: 입력이 발생하지 않거나 출력이 무관한 경우 → X로 표시, 간소화에 활용

 

 

p.25 — Don't Care 상세 X로 표시된 셀은 0 또는 1 어느 쪽으로도 사용 가능 → 더 큰 묶음 형성에 활용하여 추가 간소화

 돈케어 1로 보고 묶으면 묶은 돈케어는 SOP에서 1을 나타내게 되고, 돈케어 0으로 보고 묶은 돈케어는 POS에서 0을 나타내게 된다.

 

 

 

p.26 — 퀴즈

 

  • F(x,y,z) = Σ(0,1,5,7) 

나는 F=xz+x'y'+y'z 라고 생각했는데 1인 부분 다 묶었으면(덮었으면) 불필요하게 더 안묶어도된다.

안묶인 1이 있으면 묶은 부분도 또 묶을 수 있는 것!

더보기

그런데 왜 최종 정답(간소화된 식)에는 y'z가 빠져야 할까요? 여기서 카르노 맵의 또 다른 숨겨진 핵심 규칙인 '중복항(Redundant Term) 제거' 개념이 등장합니다. 아주 중요한 부분을 찌르셨습니다!

💡 왜 y'z는 정답에서 빠질까? (필수 그룹 vs 잉여 그룹)

카르노 맵의 진짜 목적은 "모든 1을 다 덮되, 최소한의 그룹 개수로 덮는 것"입니다. 그룹을 하나라도 덜 써야 논리 게이트 부품을 아낄 수 있기 때문입니다.

우리가 덮어야 할 1은 0, 1, 5, 7입니다.

  1. 첫 번째 필수 그룹 (x'y'): m_0m_1을 묶습니다.
    • (이제 0번과 1번은 안전하게 구출되었습니다.)
  2. 두 번째 필수 그룹 (xz): m_5m_7을 묶습니다.
    • (이제 5번과 7번도 안전하게 구출되었습니다.)

자, 여기서 잠시 멈추고 표를 보세요. 우리가 구해야 할 1(0, 1, 5, 7번)이 모두 동그라미 안에 들어왔나요? 네, 모두 다 구출되었습니다!

  1. 세 번째 그룹 (y'z)의 운명: 질문자님이 만드신 m_1m_5의 묶음입니다.
    • 분명히 묶을 수 있는 짝꿍이 맞습니다.
    • 하지만 m_1은 이미 첫 번째 그룹이 구출했고, m_5는 이미 두 번째 그룹이 구출했습니다.
    • 즉, 이 y'z라는 묶음은 **"이미 다른 그룹에 의해 완벽하게 커버된 애들끼리만 묶어놓은 쓸데없는(Redundant) 묶음"**이 되어버립니다.

🎯 핵심 요약

지난번 m_1, m_5 질문에서 "이미 묶인 것도 또 묶을 수 있다"라고 했던 것은, 아직 구출되지 않은 1을 구출하기 위해 빌려올 때의 이야기입니다.

하지만 이번 상황처럼 **"묶음에 들어있는 1들이 모두 이미 다른 곳에서 안전하게 구출된 상태"**라면, 굳이 돈을 들여서 묶음(게이트)을 하나 더 만들 필요가 없습니다. 카르노 맵에서는 이런 군더더기 묶음을 지워버리는 것이 간소화의 완성입니다.

따라서 계산하신 y'z는 논리적으로 틀린 값은 아니지만, '최적화(간소화)' 규칙에 의해 생략되어야 하는 잉여 묶음이기 때문에 최종 식 F = x'y' + xz 에서 빠지는 것입니다!

  • F(A,B,C,D) = Σ(0,2,8,9,10,11,14,15)

 


V. Combinational Circuits (p.27~31)

p.27 — 조합회로 개념

  • 논리 게이트들이 연결된 회로
  • 출력이 현재 입력에만 의존 (기억 없음) - 플립플롭 같은 소자 없음! 순수 입력 -> 출력
  • n개 입력 → m개 출력

 

 

p.28 — 조합회로 설계 절차

  1. 문제 정의
  2. 입출력 변수 결정
  3. 진리표 작성
  4. 부울 함수 간소화 (K-맵 또는 부울 대수)
  5. 논리 회로도 작성

 

 

p.29~31 — 조합회로 예제 (그림 위주) 반가산기(Half Adder), 전가산기(Full Adder), 비교기(Comparator) 등의 회로 그림이 포함됩니다.

 

 

  • 반가산기: 1비트 + 1비트 → 합(S), 올림수(C)
    • S = A⊕B, C = AB (S 계산은 XOR 연산, C는 AND 연산 결과와 같음)
    • XOR 게이트 1개, AND 게이트 1개로 구성
  • 전가산기: 올림수 입력까지 포함한 1비트 덧셈기

전가산기 3변수일 때는 C값이 변수들 중 1인게 '2개 이상일 때', S값은 변수들 중 '값 1인 개수가 홀수개일 때' 1이 나온다. 

 

이 때 카르노맵은 왜 최대로 묶는 모습이 아니지???

C를 예로 들면 m3,m7 묶고 m5,m7 묶고, m7,m6 묶어야하지않나?

더보기

질문자님의 카르노 맵 직관이 100% 정확하게 맞습니다! 카르노 맵의 절대 규칙인 "최대한 크게 묶어라"를 적용하면, m5와 m7은 당연히 묶어야 하고, 심지어 m3와 m7도 묶어야 합니다. (이때 m7은 무려 3번이나 중복 사용됩니다!)

그렇다면 왜 교재나 어떤 풀이에서는 m3와 m5를 예쁘게 묶지 않고 굳이 따로 빼서 이상하게 식을 만들었을까요?

그 이유는 카르노 맵의 규칙이 틀려서가 아니라, 컴퓨터 공학자들이 **'부품 재사용'이라는 엄청난 꼼수(하드웨어 최적화)**를 쓰기 위해 수학 규칙을 일부러 살짝 비틀었기 때문입니다.

이 두 가지 관점의 차이를 명확하게 비교해 드릴게요. (변수는 $A, B, C_{in}$으로 설명하겠습니다)

1. 수학자의 방식: 정석 카르노 맵 묶기 (질문자님의 생각)

전가산기 Carry Out의 1 위치는 m3, m5, m6, m7입니다.

이것을 카르노 맵 원칙대로 가장 크게 묶으면 m7을 중심으로 3개의 그룹이 나옵니다.

  • m6, m7 묶음: $AB$
  • m5, m7 묶음: $A C_{in}$
  • m3, m7 묶음: $B C_{in}$
  • 최종 수학적 정답: $C_{out} = AB + AC_{in} + BC_{in}$ (아주 완벽한 정답입니다!)

2. 엔지니어의 방식: 실제 하드웨어 설계 (교안의 이상한 묶음)

수학적으로는 위의 식이 완벽하지만, 실제로 공장에 가서 게이트(부품)를 조립하려고 보니 억울한 일이 생겼습니다.

우리는 이미 **합(Sum)**을 계산하기 위해 $A \oplus B$ (XOR 게이트) 부품을 만들어 두었습니다. 엔지니어들은 "어? 저 부품 이미 만들어놨는데, C를 구할 때도 어떻게든 재활용할 수 없을까?"를 고민합니다.

그래서 카르노 맵의 완벽한 묶음을 포기하고 식을 억지로 조작합니다.

  1. m6, m7은 그대로 묶습니다: $AB$
  2. m3(011)과 m5(101)를 굳이 묶지 않고 따로 봅니다:
    • $A'BC_{in} + AB'C_{in}$
    • 여기서 $C_{in}$을 밖으로 묶어내면? $\rightarrow$ **$(A'B + AB')C_{in}$**
    • 괄호 안의 식은 완벽하게 XOR 형태가 됩니다! $\rightarrow$ $(A \oplus B) \cdot C_{in}$
  3. 최종 엔지니어의 정답: $C_{out} = AB + (A \oplus B)C_{in}$

💡 결론

질문자님이 "m5, m7 묶을 수 있는 거 아니야?"라고 생각하신 것은 카르노 맵 이론상 완벽한 정답입니다.

하지만 교안에서 굳이 그것을 따로 빼서 묶은 이유는, 순수하게 카르노 맵을 간소화하려는 목적이 아니라 Sum 연산에서 이미 만들어둔 XOR 게이트($A \oplus B$)를 Carry 연산에도 재활용해서 칩의 단가를 낮추려는 엔지니어들의 설계 기법을 보여주기 위함입니다!

---------------------------------------------------------------------------------------------------------------------------------

1. 자리올림 C (Carry): "다수결의 원칙 (Majority Function)"

질문자님께서 **"1이 짝수(2개)일 때 1이고, 모두 1(3개)일 때도 1이다"**라고 관찰하신 내용을 합치면 수학적으로 아주 깔끔한 한 문장이 됩니다.

  • 원리: 3개의 입력(X, Y, Z) 중 '1'이 과반수(2개 이상)이면 C는 무조건 1이 됩니다.
  • 컴퓨터 과학에서는 이를 **다수결 함수(Majority Function)**라고 부릅니다. 3명이 투표를 해서 2명 이상이 찬성(1)하면 다음 자리로 숫자를 넘겨버리는(C=1) 직관적인 원리입니다.

2. 내친김에 보는 합 S (Sum)의 패턴: "홀수 판독기 (Odd Parity)"

C의 패턴을 찾으셨으니, 합계인 S의 세로줄도 한번 훑어보세요! 아주 기가 막힌 대칭적인 패턴이 숨어 있습니다.

  • 원리: 3개의 입력 중 '1'의 개수가 정확히 홀수 개(1개 또는 3개)일 때만 S는 무조건 1이 됩니다. (1이 0개나 2개인 짝수 상황에서는 0이 됩니다.)
  • 그래서 S를 계산하는 회로를 만들 때, 들어온 1의 개수가 홀수인지 짝수인지 기가 막히게 판별해 내는 전용 게이트인 **XOR 게이트를 통째로 가져다 쓰는 것입니다.

💡 핵심 요약

질문자님의 날카로운 관찰을 정리하면 전가산기는 결국 이렇게 움직이는 기계입니다.

  • S (Sum): "입력된 1의 개수가 홀수인가?" (XOR 역할)
  • C (Carry): "입력된 1의 개수가 **2개 이상(다수)**인가?" (Majority 역할)

이렇게 원리를 스스로 깨우치시면, 나중에 입력이 4개, 5개로 늘어나는 복잡한 가산기를 배우더라도 진리표를 보지 않고 머릿속으로 결과를 바로 예측하실 수 있을 겁니다. 완벽한 분석이었습니다!

 

 

VI. Flip-Flops (p.32~39)

p.32 — 플립플롭 개념

  • 1비트 정보를 저장할 수 있는 이진 소자
  • 동기식 저장 소자: 클록 펄스가 발생하는 순간에만 상태 변화
  • 클록 펄스 생성기(Clock Pulse Generator)로 동기화

p.33~36 — 각종 플립플롭 (그림 위주)

 

F/F 종류특징
SR F/F Set/Reset. S=R=1 금지 상태 존재
JK F/F SR의 개선판. J=K=1이면 토글(반전)
D F/F 입력 D를 그대로 저장. 가장 단순
T F/F T=1이면 토글, T=0이면 유지

 

 

1. SR F/F: 모든 기억 소자의 조상

NAND 게이트 2개를 꼬아서 연결하면 1비트를 기억할 수 있는 기본 '래치(Latch)'가 된다. 여기에 클럭(CP) 신호를 받을 수 있도록 앞에 NAND 게이트 2개를 더 붙이면 완벽한 SR 플립플롭이 완성됩니다.

한계점: S=1 R=1 이 동시에 들어오면 회로가 붕괴되는 '금지된 상태'가 존재한다는 약점이 있습니다.

 

[금지된 상태에 대한 자세한 설명]

더보기

1단계: NOR 게이트의 절대 규칙

회로를 이해하기 위해 딱 하나만 기억하면 됩니다.

  • NOR 게이트의 성질: 여러 입력 선 중 단 하나라도 '1'이 들어오면, 나머지 입력이 뭐든 상관없이 무조건 '0'을 뿜어냅니다.

2단계: 모순의 시작 (S=1, R=1을 동시에 누를 때)

평소에는 S나 R 중 하나만 1이 들어와서 Q와 Q'가 서로 1과 0을 사이좋게 나눠 가집니다. 그런데 S와 R에 동시에 1을 주면 끔찍한 일이 벌어집니다.

  • R 선에 1이 들어오니, 위쪽 NOR 게이트는 무조건 Q를 0으로 만들어 버립니다.
  • S 선에 1이 들어오니, 아래쪽 NOR 게이트도 무조건 Q'를 0으로 만들어 버립니다.
  • 논리적 붕괴: Q와 Q'는 이름부터 서로 정반대(NOT)여야 하는 쌍둥이인데, 둘 다 0이 되어버리는 모순이 발생합니다. 이것이 첫 번째 고장입니다.

3단계: 진짜 대참사 발발 (버튼에서 손을 뗄 때 = Race Condition)

사실 둘 다 0이 된 것 자체보다, S=1, R=1 상태에서 다시 상태 유지(S=0, R=0)로 돌아가기 위해 손을 떼는 찰나의 순간에 진짜 충돌이 일어납니다.

  1. 방금 전까지 Q=0, Q'=0 이었습니다.
  2. 스위치에서 손을 떼면 S=0, R=0이 됩니다.
  3. 위쪽 게이트의 입력은 (R=0, Q'=0)이 되고, 아래쪽 게이트의 입력은 (S=0, Q=0)이 됩니다.
  4. NOR 게이트는 입력이 둘 다 0일 때만 출력을 '1'로 올립니다. 따라서 위쪽 게이트와 아래쪽 게이트가 동시에 출력을 1로 올리려고 시도합니다.
  5. 충돌 (Race Condition): 두 게이트가 1을 향해 경주(Race)를 시작합니다. 그런데 어느 한쪽 게이트가 간발의 차이로 아주 조금 더 빨리 1이 되면, 그 1이 교차된 선을 타고 반대쪽 게이트로 쳐들어가서 상대방을 다시 0으로 짓눌러버립니다.
  6. 예측 불가: 위쪽이 이겨서 Q=1이 될지, 아래쪽이 이겨서 Q'=1이 될지는 오로지 전선의 미세한 길이 차이, 온도의 차이 같은 물리적인 '우연'에 의해 결정됩니다. 컴퓨터 세계에서 "다음 결과를 수학적으로 100% 확신할 수 없다"는 것은 시스템 다운을 의미하는 최악의 오류입니다.
 근데 NOR 또는 NAND로 구성된 SR (래치) 회로에서 S,R은 사용자가 가정하고 시작한다쳐도 Q와 Q' 값이 주어지지 않았을 때 회로작동이 어떻게 되는지 알 수 있나?? (초기화 딜레마 - 닭이 먼저냐, 알이 먼저냐..)


결론부터 말씀드리면, "Q와 Q'의 초기값을 모르는 상태에서 S=0, R=0(유지)을 주면, 회로가 어떻게 작동할지 이론적으로 절대 알 수 없습니다." 이 딜레마가 이론과 현실에서 어떻게 다르게 나타나고, 엔지니어들은 이를 어떻게 해결하는지 3가지 관점으로 명쾌하게 풀어드릴게요.

1. 이론적 관점 (시뮬레이터의 세계): "영원한 미지수(Unknown)"
우리가 로직웍스 같은 시뮬레이터에서 처음 SR 래치(NOR 기준)를 그리고 스위치를 S=0, R=0으로 두면, 전선의 색깔이 빨간색(1)도 파란색(0)도 아닌 보라색이나 'X', 'U'(Unknown) 상태로 뜹니다.

이유: 위쪽 게이트는 "아래쪽 Q'가 뭔지 알아야 내 값(Q)을 정하지!"라고 버티고, 아래쪽 게이트는 "위쪽 Q가 뭔지 알아야 내 값(Q')을 정하지!"라고 서로 무한 대기를 타기 때문입니다.

2. 현실 세계의 물리 법칙: "랜덤 뽑기 (Random Power-up State)"

하지만 현실에서 실제 빵판(Breadboard)에 칩을 꽂고 전원을 넣으면 보라색(X) 같은 상태는 존재하지 않습니다. 전기가 들어오는 찰나의 순간, 회로는 무조건 0이나 1 중 하나로 무작위로 결정됩니다.

이유: 현실의 부품은 완벽하게 대칭이지 않습니다. 아주 미세한 전선의 길이 차이, 온도의 차이, 공기 중의 노이즈 때문에 어느 한쪽 NOR 게이트가 0.000000001초라도 먼저 작동하게 됩니다.

컴퓨터를 켤 때마다 플립플롭이 1이 될지 0이 될지 랜덤으로 결정된다면, 컴퓨터는 부팅할 때마다 미쳐버릴 것입니다.

3. 엔지니어의 완벽한 해결책: "강제 초기화 (Global Reset)"
그래서 실제 하드웨어 설계자들은 회로를 만들 때 "현재 상태가 뭐든 간에 무조건 알 수 있도록 강제로 멱살을 잡고 끌고 오는 과정"을 무조건 넣습니다.

컴퓨터나 스마트폰의 전원 버튼을 누르는 순간, CPU 내부에서는 약 0.1초 동안 모든 플립플롭의 R(Reset) 핀에 강제로 1을 쫙 쏴버립니다.

R=1이 들어가는 순간, Q가 이전 상태가 무엇이든, 심지어 모르는 상태(Unknown)였든 상관없이 무조건 Q=0으로 확정 지어 버립니다. (NOR 게이트는 하나만 1이어도 무조건 0이 되니까요!)이렇게 한 번 Q=0, Q'=1로 **초기화(Initialization)**를 하고 난 뒤에야 비로소 $S=0, R=0$을 주면서 정상적인 작동을 시작합니다.

 

2. D F/F: "금지된 상태를 원천 차단"

SR의 S에 D를, R에 D'를 넣어서 1과 0만 들어가게 만듭니다.

S와 R에 절대 같은 값이 들어가지 못하게 NOT 게이트(인버터)를 하나 답니다. 그 결과 SR F/F 에서 (1,0) (0,1)일 때의 상태만 저장하게됩니다. 입력된 D값이 클럭이 뛸 때마다 그대로 Q로 전달되는 데이터 저장소 (Data/Delay F/F)가 탄생했습니다.

 

 

3. JK F/F: "금지된 상태를 유용하게 써먹자" (피드백의 마법)

Q'를 J쪽에 Q를 K쪽에 AND 게이트로 연결하여 '피드백'을 이용합니다.

SR이 1,1 일 때 고장 나는 이유는 "자신이 지금 무슨 상태인지 모르고 무작정 바꾸려다 충돌하는 것"

그래서 JK는 자신의 현재 출력(Q, Q')을 다시 입력 쪽으로 끌고 와서(피드백) 확인합니다. 덕분에 J=1, K=1이 들어오면 고장 나는 대신 현재 상태를 정반대로 뒤집어버리는 토글(Toggle) 기능으로 진화했습니다.

 

 

4. T F/F: "토글 기능만 극대화하자"

  • 내용: JK F/F의 J와 K를 하나로 묶어서 T로 만들고 E(또는 CP)로 작동하게 한다.
  • 추가 포인트: 이것도 100% 정답입니다. J와 K를 하나의 선으로 묶어버리면, 들어올 수 있는 입력은 (0, 0) 아니면 (1, 1) 두 가지뿐입니다.
  • T=0이면 (0, 0)이 들어가서 현재 상태 유지(No Change).
  • T=1이면 (1, 1)이 들어가서 무조건 반전(Toggle).
  • 0 1 0 1 로 깜빡거려야 하는 '카운터(Counter)' 회로를 만들 때 이 T 플립플롭이 핵심 부품으로 쓰입니다.

 

 

 

edge-triggered f/f

 

 0->1 : positive transition / 1->0 : negative transition

 

 

p.37 — Race 현상

  • 발생 조건: Setup Time > Propagation Delay
  • 증상: 0과 1을 반복하다 불안정 상태
  • 해결책: Edge Triggered F/F 또는 Master/Slave F/F 사용

1. 진짜 레이스 현상의 조건 2가지

보통 학부 수준에서 레이스 현상이라고 하면 다음 두 가지 중 하나를 의미합니다.


조건 A: 펄스 폭(Pulse Width, t_p) > 전파 지연(t_{pd})

  • 현상: 가장 유명한 **'레이스 어라운드(Race-around) 현상'**입니다. 클럭이 '1'로 유지되는 시간(펄스 폭)이 너무 길어서, 신호가 플립플롭을 빠져나간 뒤 피드백 선을 타고 다시 돌아와 자기 자신을 또 뒤집어버리는(무한 토글) 현상입니다.
  • 예상: 교수님이 펄스 폭(Pulse Width)을 적으려다가 셋업 타임(Setup Time)으로 잘못 적으셨을 가능성이 가장 큽니다.

    조건 B: 홀드 타임(t_{hold}) > 전파 지연(t_{pd})
    • 현상: 방금 전 우리가 시뮬레이터로 보았던 상황입니다. 앞 플립플롭을 통과하는 속도(t_{pd})가 너무 빨라서, 뒤 플립플롭이 문을 채 닫기도 전(t_{hold})에 새로운 값이 난입해버리는 현상입니다.

2. 왜 Setup time > Propagation delay는 어색할까?

셋업 타임은 클럭(셔터)이 터지기 **'전'**에 데이터가 미리 와서 대기해야 하는 시간입니다.

만약 전파 지연 시간보다 셋업 타임이 더 길다면, 그냥 회로가 다음 클럭 주기에 맞춰 데이터를 안정적으로 밀어 넣기 매우 빡빡해진다는 뜻(Setup Time Violation)입니다. 신호가 통제를 벗어나서 회로를 마구 뚫고 지나가거나 빙글빙글 도는 '경주(Race)' 자체와는 물리적인 연관성이 없습니다.

 

 

p.38 — 여기표 (Excitation Table)

  • 현재 상태 → 다음 상태로 바꾸기 위해 F/F 입력에 무엇을 넣어야 하는지 정리한 표
  • 순서회로 설계의 핵심 도구

 

 

p.39 — 퀴즈 SR, JK, D, T F/F 각각을 NOR 게이트로 구성한 회로도를 작성하세요.


 

VII. Sequential Circuits (p.40~48)

p.40 — 순서회로 개념 (그림)

  • 조합회로 + 플립플롭(기억 소자)
  • 출력이 현재 입력 + 현재 상태에 의존

 

 

p.41 — 플립플롭 입력 방정식

  • 입력 방정식: F/F 입력에 대한 부울식
    • 예: D_A = Ax + Bx, D_B = A'x
  • 출력 방정식: y = Ax' + Bx'

 

p.42~45 — 순서회로 분석/설계 예제 (그림 위주) 상태 다이어그램, 상태표(State Table), 여기표를 이용한 순서회로 설계 과정

 

 

 

p.46 — 이진 카운터

이진 카운터를 상태표로 표현
  • 입력 변수 A, B, x를 갖는 이진 카운터
  • 상태 전이표와 플립플롭 입력 방정식 유도
상태표를 보고 카르노맵으로 간소화

 

 

p.47 — JK F/F로 구현한 카운터 논리 회로도

 
x → [JK F/F A] → [JK F/F B] → Clock
 
 

p.48 — 최종 퀴즈

2개의 플립플롭과 1개의 입력 x를 갖는 2비트 다운 카운터 설계

  • x=0: 카운터 변화 없음
  • x=1: 11 → 10 → 01 → 00 → 11 반복

 

 

 

 

 

'CS' 카테고리의 다른 글

자료구조(Data Structure)- 점검편 1  (0) 2026.03.30