지난 글에서 NAND 게이트 하나만으로 모든 논리 회로를 만들 수 있다는 것을 배웠다. AND, OR, NOT이 모두 NAND의 조합이었다.
지금까지 만든 회로는 입력이 들어오면 항상 같은 방식으로 처리한다. 하지만 실제 컴퓨터는 상황에 따라 다르게 동작해야 한다. 덧셈을 할 때는 덧셈 회로에 데이터를 보내고, 뺄셈을 할 때는 뺄셈 회로에 보내야 한다. 네 개의 저장소 중 하나를 골라 읽어야 할 때도 있다. 이런 선택이 가능하려면 어떤 회로가 필요할까?
리모컨의 채널 버튼을 생각해보자. 여러 방송 중 하나를 골라 TV 화면에 보여준다. 멀티플렉서(MUX)가 바로 이 리모컨이다. 여러 입력 중 하나를 골라 출력하는 회로다.
가장 간단한 MUX는 입력 두 개 중 하나를 고르는 2-to-1 MUX다. 선택 신호 S가 0이면 A를, 1이면 B를 출력한다.
| Out | |||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 |
즉 S가 0이면 A를, 1이면 B를 그대로 출력한다. 논리식으로 쓰면
(NOT S AND A) OR (S AND B). 이전 글에서 배운 게이트들로 만들 수 있다.
입력이 네 개라면? 선택 신호를 2비트(S1, S0)로 늘리면 된다. 4-to-1 MUX는
00이면 첫 번째, 01이면 두 번째, 10이면 세 번째, 11이면 네 번째 입력을
고른다. 2-to-1 MUX 세 개를 조합하면 만들 수 있다. S1으로 두 개의 MUX가 각각 후보
둘씩을 고르고, S0으로 세 번째 MUX가 그 결과 중 하나를 최종 선택하는 구조다.
네 개의 데이터 소스 중 하나를 골라 읽어야 할 때 바로 이 4-to-1 MUX가 사용된다. 2비트 선택 신호가 데이터 소스의 번호에 해당하는 것이다.
이번에는 반대 방향이다. 하나의 입력을 받아 여러 출력 중 정확히 하나만 활성화하는 회로가 디코더다.
엘리베이터 버튼을 생각해보자. 3층 버튼을 누르면 3층 표시등만 켜진다. 입력은 하나(버튼)지만, 그에 대응하는 출력 하나만 활성화되는 것이다.
가장 간단한 2-to-4 디코더는 2비트 입력을 받아 네 개의 출력 중 하나만 1로 만든다.
| O0 | O1 | O2 | O3 | ||
|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
00이면 O0, 01이면 O1, 10이면 O2, 11이면 O3가 켜진다. 각
출력은 AND와 NOT의 조합으로 만들 수 있다. 예를 들어
O0 = (NOT A) AND (NOT B), O3 = A AND B다.디코더는 이후 글에서 컴퓨터 내부의 핵심 부품으로 다시 등장한다.
MUX와 디코더를 합치면 어떤 일이 가능할까?
네 개의 저장소에 각각 다른 값이 들어 있다고 해보자. 이 중 하나를 골라 읽거나, 하나를 골라 새 값을 쓰고 싶다.
여러 입력 중 하나를 골라 출력하는 MUX, 하나의 입력으로 여러 출력 중 하나를 활성화하는 디코더. 이 두 회로는 방향이 반대지만, 둘 다 선택이라는 같은 문제를 풀고 있다.
다음 글에서는 게이트를 조합하여 실제로 덧셈을 수행하는 회로를 만들어보자.