컴퓨터 하드웨어의 계층적 구축 원리
본 강연의 핵심은 ‘단순함에서 복잡성 구축(complexity from simplicity)’이라는 원칙 아래, 컴퓨터 시스템이 상향식(top-down)이 아닌 하향식(bottom-up)으로, 가장 기본적인 구성 요소부터 차례로 쌓아 올려 만들어진다는 점을 강조합니다.
- 1단계: 불리언 논리 (Boolean Logic)
- NAND 게이트: 모든 논리 회로를 만들 수 있는 ‘만능 게이트’로서 컴퓨터 구축의 시작점이 됩니다.
- 기본 게이트 구현: NAND 게이트만을 사용하여 NOT, AND, OR, XOR과 같은 모든 기본 논리 게이트를 구현하는 과정을 시연합니다. 특히 드 모르간의 법칙(De Morgan’s Law)을 활용한 OR 게이트의 최적화가 소개됩니다.
- 데이터 흐름 제어: MUX(Multiplexer)와 DEMUX(Demultiplexer)는 각각 ‘if 문’과 유사하게 여러 입력 중 하나를 선택하거나 하나의 입력을 여러 출력 중 하나로 분배하는 기능을 담당하며, 이들 또한 NAND 게이트로 구성됩니다.
- 확장 논리: 8-way OR 게이트나 4-way MUX와 같이 더 넓은 비트 폭을 처리하는 논리는 이진 트리 구조나 작은 MUX들을 조합하여 효율적으로 구축됩니다. 16비트 논리는 단순히 16개의 동일한 회로를 병렬로 배치하는 방식으로 확장됩니다.
- 2단계: 불리언 연산 (Boolean Arithmetic)
- 가산기 (Adders): 초등학교에서 숫자를 더하는 방식과 유사하게, 2진수 덧셈을 수행하는 하프 가산기(Half Adder)와 풀 가산기(Full Adder)를 소개합니다.
- 고속 가산기: 여러 풀 가산기를 직렬로 연결한 16비트 가산기는 지연(delay) 문제가 발생합니다. 이를 해결하기 위해 캐리를 병렬로 계산하는 캐리 예측 가산기(Carry Look Ahead Adder, CLA)가 도입되어 가산기의 깊이를 선형(linear)에서 로그(logarithmic)로 줄여 속도를 향상시킵니다.
- ALU (Arithmetic Logic Unit): 컴퓨터의 핵심 연산 장치로, 두 개의 16비트 입력에 대해 다양한 연산(AND, ADD 등)을 수행하고 결과를 출력합니다. ALU는 모든 가능한 연산을 병렬로 계산한 후, 제어 플래그에 따라 원하는 결과만 선택하는 MUX 구조를 가집니다. 이는 프로그래밍 언어에서는 보기 힘든 하드웨어만의 독특한 특징입니다.
- 3단계: 메모리 (Memory)
- 순차 논리 (Sequential Logic): 입력과 출력 외에 ‘기억’ 기능을 가지며 클록 신호에 동기화됩니다.
- DFF (Data Flip-Flop): 가장 기본적인 메모리 요소로, 이전 입력 값을 출력으로 유지합니다. DFF 또한 NAND 게이트만으로 구현 가능함을 보여줍니다.
- 비트 및 레지스터: DFF와 MUX를 조합하여 데이터를 저장하고 로드할 수 있는 1비트 메모리(Bit)를 만들고, 이를 확장하여 16비트와 같은 더 넓은 값을 저장하는 레지스터(Register)를 구축합니다.
- RAM (Random Access Memory): 여러 레지스터를 주소(address)로 접근할 수 있도록 구성한 메모리 뱅크입니다. DEMUX로 입력 데이터를 올바른 레지스터로 라우팅하고, MUX로 원하는 레지스터의 값을 출력합니다.
- 카운터 (Counter): 프로그램의 다음 명령어 주소를 기억하고 제공하는 장치로, 레지스터와 증가기를 결합하여 만듭니다.
- 4단계: 컴퓨터 아키텍처 (Computer Architecture)
- CPU (Central Processing Unit): ALU와 제어 논리를 포함하는 컴퓨터의 핵심입니다. 메모리에서 명령어와 데이터를 가져와 처리하고, 결과를 메모리에 저장하며 다음 명령어 주소를 결정합니다.
- ROM (Read-Only Memory): 프로그램 코드를 저장하며, 컴퓨터는 0번지부터 실행을 시작합니다.
- 메모리 맵 I/O: 키보드와 화면은 메모리 주소에 매핑되어, 일반적인 메모리 접근 방식을 통해 입출력을 처리합니다.
- 최종 컴퓨터: CPU, ROM, 메모리(RAM, 화면, 키보드 포함) 세 가지 주요 구성 요소를 연결하면 완전한 컴퓨터가 완성됩니다. 모든 구성 요소를 구축한 후에는 컴퓨터를 조립하는 과정은 놀랍도록 간단합니다.