만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

suover

development-logo

들어가며

소프트웨어 개발자는 코드가 어떻게 실행되는지 정확히 이해해야 할 필요가 있습니다. 우리가 작성한 프로그램은 결국 하드웨어 위에서 동작하며, CPU가 명령어를 해석하고 메모리가 데이터를 관리하는 방식은 시스템 전체의 성능과 안정성에 직결되기 때문입니다. 이런 이유로 컴퓨터 구조를 학습하는 일은 단순한 이론 습득을 넘어, 코드와 하드웨어 간의 연결 고리를 명확히 이해하여 더 나은 설계를 하고 효과적으로 문제를 디버깅할 수 있는 토대를 마련해 줍니다.

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

만들면서 쉽게 배우는 컴퓨터 구조

이번 스터디에서는 “만들면서 쉽게 배우는 컴퓨터 구조”라는 강의를 통해 컴퓨터가 동작하는 원리와 그 구성 요소들을 단계별로 학습했습니다. 이번 주차에는 컴퓨터 구조의 기초 개념부터 시작해 CPU, 메모리, 주변 장치의 역할을 이해하고, 불 대수를 기반으로 논리 회로를 설계해 보는 과정을 경험했습니다. 특히 실습 환경에 직접 접속하여 간단한 게이트를 조합해 보는 하드웨어 시뮬레이션을 통해 전기 신호가 어떻게 논리적 0과 1로 변환되는지, 그리고 그것이 궁극적으로 프로그램 실행 흐름과 어떻게 연결되는지를 몸소 체득할 수 있었습니다.

본 블로그 포스트에서는 위 과정을 통해 배운 개념들을 기반으로 스터디 미션 수행 결과와 인사이트를 공유하려고 합니다.

미션1. 4입력 논리 연산 진리표 작성

이번 미션에서는 4개의 입력(A, B, C, D)을 가지는 AND, OR, NAND, NOR, XOR 연산의 진리표를 작성했습니다.

1. 4입력 AND 연산

  • 출력이 1이 되려면 A, B, C, D 네 입력이 모두 1이어야 합니다.
ABCDQ
00000
00010
00100
00110
01000
01010
01100
01110
10000
10010
10100
10110
11000
11010
11100
11111

4입력 AND는 네 입력이 모두 1인 조합(마지막 행)에서만 출력이 1이 됩니다. 그 외 15개 조합에서는 단 한 개라도 0이 존재하므로 결과가 0입니다.

2. 4입력 OR 연산

  • 출력이 1이 되려면 A, B, C, D 중 적어도 하나의 입력이 1이면 됩니다.
ABCDQ
00000
00011
00101
00111
01001
01011
01101
01111
10001
10011
10101
10111
11001
11011
11101
11111

4입력 OR는 네 입력이 모두 0인 경우 첫 행에서만 출력이 0이고, 그 외 15개 조합에서는 적어도 한 입력이 1이므로 출력이 1입니다.

3. 4입력 NAND 연산

  • AND 연산의 결과를 뒤집은 형태로, 즉 네 입력이 모두 1일 때만 출력이 0이고, 그 외에는 1이 됩니다.
ABCDQ
00001
00011
00101
00111
01001
01011
01101
01111
10001
10011
10101
10111
11001
11011
11101
11110

NAND는 AND의 보수이므로, 네 입력이 모두 1인 마지막 행에서만 출력이 0이 되고, 그 외 모든 조합에서 출력은 1이 됩니다.

4. 4입력 NOR 연산

  • OR 연산의 결과를 뒤집은 형태로, 즉 네 입력이 모두 0일 때만 출력이 1이고, 그 외에는 0이 됩니다.
ABCDQ
00001
00010
00100
00110
01000
01010
01100
01110
10000
10010
10100
10110
11000
11010
11100
11110

NOR는 OR의 보수로, 네 입력이 모두 0인 첫 행에서만 출력이 1이 되며, 나머지 조합에서는 모두 0이 됩니다.

5. 4입력 XOR 연산

  • XOR 연산은 “입력 중 1의 개수가 홀수일 때 출력이 1”이 되는 특성을 가집니다. 4개를 XOR할 경우 1이 홀수(1개, 3개)인 조합에서만 출력이 1이 됩니다.
ABCDQ
00000
00011 (1개)
00101 (1개)
00110 (2개)
01001 (1개)
01010 (2개)
01100 (2개)
01111 (3개)
10001 (1개)
10010 (2개)
10100 (2개)
10111 (3개)
11000 (2개)
11011 (3개)
11101 (3개)
11110 (4개)
  • 1이 홀수 개일 때만 결과가 1이 됩니다.
    • 예를 들어, (0 0 0 1), (0 0 1 0), (0 1 0 0), (1 0 0 0) 같은 경우(1개): 출력 1
    • (0 1 1 1), (1 0 1 1), (1 1 0 1), (1 1 1 0) 같은 경우(3개): 출력 1
  • 1이 짝수 개(0개, 2개, 4개)일 때는 출력이 0이 됩니다.

느낀 점

  1. 패턴 인식의 중요성
    • 4입력 AND/OR/NAND/NOR는 모두 “모두 1이거나 모두 0이어야 특정 출력이 나온다”라는 뚜렷한 패턴을 가집니다.
    • 반면 XOR은 “1의 개수”에 따라 출력이 결정되는 특수한 패턴이어서, 조합 개수가 많아질수록 수작업 판단이 헷갈릴 수 있습니다.
  2. 진리표 작성 방법
    • 입력 조합 순서: 16가지 경우를 이진수 순서(0000 → 0001 → … → 1111)로 나열하면, 체계적으로 빠짐없이 기록할 수 있습니다.
    • 출력 규칙 적용: AND/OR 계열은 ‘모두 1인지’, ‘하나라도 1인지’만 확인하면 되지만, XOR 계열은 입력의 1 개수(홀짝)를 세어야 해서 다소 번거롭습니다.

이번 미션을 통해 4개의 입력을 갖는 논리 게이트가 어떻게 동작하는지, 그리고 입력 조합이 많아질수록 직접 진리표를 작성하기 어려워진다는 사실을 깨달을 수 있었습니다.

미션2. 불 방정식 간략화

이번 미션은 주어진 불 방정식들을 간략화 하는 미션입니다.

1번식

A( (BB)’ + 0A) + (CC)’  =  (AB’) + C

단계별 간략화

BB = B (아이디엠포턴트 법칙: X·X = X)
→ (BB)’ = B’
식 전체는

A( B’ + 0A) + (CC)’  

0A = 0 (제로 케리어: 0·X = 0)
→ B’ + 0 = B’
따라서

A B’ + (CC)’  

CC = C (아이디엠포턴트 법칙: X·X = X)
→ (CC)’ = C’
결과

A B’ + C’  

이제 “A B’ + C’”는 더 이상 축약 불가하므로
최종 결과

A( (BB)’ + 0A) + (CC)’  =  (AB’) + C’

2번식

(B’B’) + (AD’ + (CA)’)D  =  B’ + (D·C’) + (D·A’)

단계별 간략화

B’B’ = B’ (아이디엠포턴트 법칙: X·X = X)
식은

B’ + (AD’ + (CA)’)D  

(CA)’ = C’ + A’ (드모르간 법칙: (X·Y)’ = X’ + Y’)
식은

B’ + (AD’ + C’ + A’)D  

AD’ + A’ = A’ (흡수법칙: X + X·Y = X)
→ AD’ + C’ + A’ = A’ + C’
따라서

B’ + (A’ + C’)D  

분배 → A’D + C’D

B’ + A’D + C’D  

최종 결과

(B’B’) + (AD’ + (CA)’)D  =  B’ + (D·C’) + (D·A’)

3번식

(A’B) + B(B1 + BC)  =  B

단계별 간략화

B1 = B·1 (항등법칙: 1·X = X)
→ B1 = B
따라서

B(B1 + BC)  =  B(B + BC)

흡수법칙: B + BC = B

B(B + BC)  =  B

식은

A’B + B

흡수법칙: B + A’B = B

A’B + B  =  B

최종 결과

(A’B) + B(B1 + BC)  =  B

4번식

B’(1C + BD) + DB  =  (B’C) + (D·B)

단계별 간략화

1C = C (단위원 법칙: 1·X = X)
→ 1C + BD = C + BD
식은

B’(C + BD) + DB  

분배 → B’C + B’B·D

B’C + B’B·D + DB  

B’B = 0 (보수법칙: X′·X = 0)
→ B’B·D = 0

B’C + 0 + DB  =  B’C + DB  

최종 결과

B’(1C + BD) + DB  =  (B’C) + (D·B)

느낀점

이번 미션을 통해 Boolean 대수를 단계별로 적용하며 불 방정식이 어떻게 점점 단순해지는지 직접 확인할 수 있었습니다. 특히 흡수법칙과 드모르간 법칙을 적재적소에 활용하면 복잡해 보이던 식이 순식간에 깔끔한 형태로 바뀌는 점이 인상 깊었고, 논리 회로 설계나 프로그래밍 시 조건식을 최적화할 때도 같은 원리가 쓰인다는 것을 깨달았습니다. 앞으로 더 복잡한 논리식을 마주해도 두려움 없이 순서대로 법칙을 적용하며 간략화 과정을 밟아 나갈 자신이 생겼습니다.

미션3. 2진수를 10진수로 변환

  1. 110111₂ = 55₁₀
  2. 10000001₂ = 129₁₀
  3. 11111100000₂ = 2016₁₀
  4. 101010₂ = 42₁₀
느낀점

처음엔 자릿값을 일일이 떠올리는 게 헷갈렸지만, 몇 번 반복하다 보니 이진수를 보고 곧바로 10진수로 바꿀 수 있게 되었습니다. 특히 11111100000₂ 처럼 긴 숫자도 자연스럽게 계산할 수 있게 되어 뿌듯했고, 앞으로 더 길고 복잡한 이진수도 자신 있게 다룰 수 있을 것 같습니다.

미션4. 10진수를 2진수로 변환

  1. 10₁₀ = 1010₂
  2. 27₁₀ = 11011₂
  3. 86₁₀ = 1010110₂
  4. 516₁₀ = 1000000100₂
느낀점

10진수를 2진수로 변환할 때, 나눗셈과 나머지를 반복해서 구하는 과정이 처음에는 헷갈렸지만, 몇 번 연습해보니 “가장 큰 2의 거듭제곱 찾기” 방식으로 빠르게 변환할 수 있게 되었습니다. 특히 516₁₀ 같은 큰 수도 2⁹(512)부터 차례로 빼나가면 자연스럽게 이진수가 나와서 편리했습니다. 앞으로도 숫자 체계 변환이 필요할 때 직관적으로 처리할 수 있을 것 같습니다.

미션5. 불 방정식을 logisim을 이용해 회로 만들기

1번. (B′C) + (DB)

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

  • 구현 후 테스트
    • 입력 B=0, C=1, D=0
      • B′=1, 따라서 B′·C=1·1=1, D·B=0·0=0 → OR 결과=1
      • OUT = 1
    • 입력 B=0, C=0, D=1
      • B′=1, B′·C=1·0=0, D·B=1·0=0 → OR 결과=0
      • OUT = 0
    • 입력 B=1, C=0, D=1
      • B′=0, B′·C=0·0=0, D·B=1·1=1 → OR 결과=1
      • OUT = 1
    • 입력 B=1, C=1, D=0
      • B′=0, B′·C=0·1=0, D·B=0·1=0 → OR 결과=0
      • OUT = 0

이렇게 몇 가지 조합을 확인해 보니, 회로가 (B′·C) + (D·B) 대로 정확하게 동작했습니다.

2번. (AB’) + C

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

  • 구현 후 테스트
    • 입력 A=0, B=0, C=1
      • B′ = 1 (B=0 → B′=1)
      • A·B′ = 0·1 = 0
      • (A·B′) + C = 0 + 1 = 1
        → OUT = 1
    • 입력 A=0, B=1, C=0
      • B′ = 0 (B=1 → B′=0)
      • A·B′ = 0·0 = 0
      • (A·B′) + C = 0 + 0 = 0
        → OUT = 0
    • 입력 A=1, B=0, C=0
      • B′ = 1 (B=0 → B′=1)
      • A·B′ = 1·1 = 1
      • (A·B′) + C = 1 + 0 = 1
        → OUT = 1
    • 입력 A=1, B=1, C=1
      • B′ = 0 (B=1 → B′=0)
      • A·B′ = 1·0 = 0
      • (A·B′) + C = 0 + 1 = 1
        → OUT = 1

이렇게 몇 가지 조합을 확인해 보니, 회로가 (AB’) +C 대로 정확하게 동작했습니다.

3번. B′ + (D · C′) + (D · A′)

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

  • 구현 후 테스트
    • 입력 A=0, B=0, C=0, D=0
      • B′ = 1 (B=0→B′=1)
      • C′ = 1 (C=0→C′=1)
      • A′ = 1 (A=0→A′=1)
      • D·C′ = 0·1 = 0
      • D·A′ = 0·1 = 0
        → OR 결과 = B′ + (D·C′) + (D·A′) = 1 + 0 + 0 = 1
        OUT = 1
    • 입력 A=0, B=1, C=0, D=1
      • B′ = 0 (B=1→B′=0)
      • C′ = 1 (C=0→C′=1)
      • A′ = 1 (A=0→A′=1)
      • D·C′ = 1·1 = 1
      • D·A′ = 1·1 = 1
        → OR 결과 = 0 + 1 + 1 = 1
        OUT = 1
    • 입력 A=1, B=1, C=1, D=0
      • B′ = 0 (B=1→B′=0)
      • C′ = 0 (C=1→C′=0)
      • A′ = 0 (A=1→A′=0)
      • D·C′ = 0·0 = 0
      • D·A′ = 0·0 = 0
        → OR 결과 = 0 + 0 + 0 = 0
        OUT = 0
    • 입력 A=1, B=1, C=0, D=1
      • B′ = 0 (B=1→B′=0)
      • C′ = 1 (C=0→C′=1)
      • A′ = 0 (A=1→A′=0)
      • D·C′ = 1·1 = 1
      • D·A′ = 1·0 = 0
        → OR 결과 = 0 + 1 + 0 = 1
        OUT = 1
    • 입력 A=0, B=0, C=1, D=0
      • B′ = 1 (B=0→B′=1)
      • C′ = 0 (C=1→C′=0)
      • A′ = 1 (A=0→A′=1)
      • D·C′ = 0·0 = 0
      • D·A′ = 0·1 = 0
        → OR 결과 = 1 + 0 + 0 = 1
        OUT = 1

이렇게 몇 가지 조합을 확인해 보니, 회로가 B’ + (DC’) + (DA’) 대로 정확하게 동작했습니다.

느낀점

이번 미션을 통해 Logisim에서 불 방정식을 하나하나 직접 회로로 구현해보면서, 이론과 실제가 연결되는 과정을 확실히 이해할 수 있었습니다. 특히 식을 분해해 게이트 단위로 설계하고, 다양한 입력 조합으로 검증해보니 불 회로 동작 원리가 더 명확해졌습니다. 블로그에 정리하면서 설명을 구체적으로 써두니, 나중에 복습하거나 다른 사람에게 공유할 때도 큰 도움이 될 것 같습니다.

마치며

이번 스터디 미션을 통해 진리표 작성, 불 대수 간략화, 진법 변환, 그리고 Logisim을 이용한 논리 회로 구현까지 직접 해보면서, 이론이 실제 회로와 어떻게 연결되는지 쉽게 체감할 수 있었습니다. 각 단계별로 손으로 직접 확인하고 검증해보니 논리 연산 원리가 머릿속에 더 선명하게 남았습니다. 앞으로도 이 경험을 바탕으로 새로운 논리 설계나 회로 구현에 자신 있게 도전해 나가겠습니다. 감사합니다.

Leave a Comment