사실 엄마 아빠가 둘 다 좋지는 않았던 컴퓨터

지난 게시물에서는 AND, OR, NOT이라는 세 가지 기본 논리 게이트를 살펴보고 이 게이트들을 조합하면 진리표로 표현 가능한 모든 논리 회로를 만들 수 있다는 것을 확인했습니다. 마치 레고 블록처럼 이 기본 게이트들을 쌓아 복잡한 기능을 구현하는 것이죠.

그런데 컴퓨터 하드웨어를 만드는 엔지니어의 입장에서는 조금 다른 생각이 들 수 있습니다. 컴퓨터는 사람이 아니기에 직관성이나 이해하기 쉬움보다는 물리적으로 구현하기 얼마나 효율적이고 간단한지가 훨씬 중요합니다. 다양한 종류의 기본 부품을 사용하는 것보다, 단 한 가지 종류의 부품만으로 모든 것을 만들 수 있다면 제조 과정이 훨씬 단순해지고 비용도 절감될 것입니다.

놀랍게도, 세상의 그 어떤 복잡한 논리 회로도 오직 NAND 게이트 하나만으로 모두 만들 수 있습니다. 이를 NAND의 완전성(Completeness) 또는 보편성(Universality) 이라고 부릅니다. 이번 게시물에서는 이 NAND 게이트에 대해 알아보고 실제로 다른 기본 게이트들을 만들어보겠습니다.

NAND 게이트

NAND 게이트는 이름에서 알 수 있듯이 AND 연산의 결과에 NOT 연산을 적용한 것입니다. 즉, 두 입력이 모두 참일 때만 거짓이 되고, 그 외의 경우에는 모두 참이 됩니다. A가 '엄마가 좋다'고 B가 '아빠가 좋다'면 A NAND B는 '엄마 아빠가 둘 다 좋지는 않다'인 셈이죠.

NAND 게이트의 진리표는 다음과 같습니다.

A NAND B
001
011
101
110

NAND로 AND OR NOT 만들기

NAND 게이트로 지난번에 살펴본 NOT, OR, AND 게이트를 직접 구현해봅시다.

NOT 만들기

우선 비교적 단순한 NOT 게이트부터 만들어봅시다. NAND 게이트의 두 입력에 같은 값을 연결해볼까요?

사각형 노드를 클릭해 입력값을 바꿔보세요. 출력이 입력의 반대가 되는게 잘 보이시나요?

직접 AND 만들어보기!

NAND 게이트는 AND 결과의 정반대 출력을 내놓죠. 그렇다면 NAND 게이트의 출력 값을 반전시키면 어떻게 될까요?

아래에 준비된 플레이그라운드를 활용해 직접 만들어보세요. 좌측 버튼들을 클릭해 게이트를 추가하고, 점끼리 이어 게이트들끼리 연결시켜보세요.


예시 답안 보기

NAND 게이트의 출력을 NAND 게이트의 입력들로 연결하면 AND 게이트가 됩니다.

OR 만들기

OR 게이트는 조금 고민이 필요한데요, 드모르간 법칙을 활용해볼 수 있습니다. 아래 순서대로 OR을 NAND로 표현할 수 있어요:

  1. A OR B
  2. NOT ((NOT A) AND (NOT B))
  3. (NOT A) NAND (NOT B)

보통 2->1 방향으로 드모르간 법칙을 사용하는데 여기선 역순으로 사용해서 생각해내기 어렵죠. 위 방법대로 구현한 모습은 아래와 같습니다:

NAND 게이트의 완전성 (Universality)

이렇게 NAND 게이트 하나만으로 NOT, OR, AND 게이트를 모두 구현할 수 있음을 확인했습니다. 그리고 지난 게시물에서는 AND, OR, NOT만 있으면 어떤 논리 회로든 만들 수 있다는 것을 배웠죠.

따라서 NAND 게이트 하나만으로도 이론적으로 세상의 모든 디지털 논리 회로를 구성하는 것이 가능하다는 결론에 도달합니다. 이것이 바로 NAND 게이트의 완전성(Universality) 입니다.

왜 이것이 중요할까요? 컴퓨터 하드웨어를 대량으로 생산하는 입장에서는 부품의 종류가 적을수록 생산 과정이 훨씬 효율적이고 단순해지기 때문입니다. 단 한 종류의 기본 부품만 찍어내서 연결하면 되니, 제조 비용을 크게 절감하고 복잡성을 줄일 수 있습니다.

마무리

복잡한 컴퓨터 하드웨어가 결국에는 이처럼 아주 단순한 NAND의 조합으로 이루어질 수 있다는 사실이 정말 놀랍지 않나요?

이제 컴퓨터가 사용하는 비트(0과 1)가 어떻게 논리적인 의미를 가지고 물리적인 부품으로 구현되는지 이해하게 되었습니다. 이 기본 논리 게이트들을 조합하면 어떤 논리 회로든 만들 수 있다는 것도 알게 되었죠.

다음 게시물에서는 이 논리 게이트들을 조합하여 실제로 간단한 계산을 수행하는 회로를 어떻게 만드는지 살펴보겠습니다. 드디어 컴퓨터가 숫자를 가지고 덧셈, 뺄셈 같은 연산을 하는 영역으로 들어가네요!

이전글목록으로다음글

로그인 중...

seongyeol