성열의 컴퓨터공학

데이터야, 어디로 가고 싶니?

지난 글에서 NAND 게이트 하나만으로 모든 논리 회로를 만들 수 있다는 것을 배웠다. AND, OR, NOT이 모두 NAND의 조합이었다.

지금까지 만든 회로는 입력이 들어오면 항상 같은 방식으로 처리한다. 하지만 실제 컴퓨터는 상황에 따라 다르게 동작해야 한다. 덧셈을 할 때는 덧셈 회로에 데이터를 보내고, 뺄셈을 할 때는 뺄셈 회로에 보내야 한다. 네 개의 저장소 중 하나를 골라 읽어야 할 때도 있다. 이런 선택이 가능하려면 어떤 회로가 필요할까?

멀티플렉서

리모컨의 채널 버튼을 생각해보자. 여러 방송 중 하나를 골라 TV 화면에 보여준다. 멀티플렉서(MUX)가 바로 이 리모컨이다. 여러 입력 중 하나를 골라 출력하는 회로다.

가장 간단한 MUX는 입력 두 개 중 하나를 고르는 2-to-1 MUX다. 선택 신호 S가 0이면 A를, 1이면 B를 출력한다.

Out
0000
0010
0101
0111
1000
1011
1100
1111
  1. S가 0인 행만 살펴보자. Out이 항상 A와 같다.
  2. S가 1인 행만 살펴보자. Out이 항상 B와 같다.

즉 S가 0이면 A를, 1이면 B를 그대로 출력한다. 논리식으로 쓰면 (NOT S AND A) OR (S AND B). 이전 글에서 배운 게이트들로 만들 수 있다.

  1. S를 0으로 두고 A를 바꿔보자. A의 값이 그대로 Out에 나온다. 반면 B를 바꿔도 Out은 바뀌지 않는다.
  2. S를 1로 바꿔보자. 이번에는 B의 값이 Out에 나온다.
  3. S가 어떤 입력을 고를지 정하는 선택 신호 역할을 하는 것이다.

입력이 네 개라면? 선택 신호를 2비트(S1, S0)로 늘리면 된다. 4-to-1 MUX00이면 첫 번째, 01이면 두 번째, 10이면 세 번째, 11이면 네 번째 입력을 고른다. 2-to-1 MUX 세 개를 조합하면 만들 수 있다. S1으로 두 개의 MUX가 각각 후보 둘씩을 고르고, S0으로 세 번째 MUX가 그 결과 중 하나를 최종 선택하는 구조다.

네 개의 데이터 소스 중 하나를 골라 읽어야 할 때 바로 이 4-to-1 MUX가 사용된다. 2비트 선택 신호가 데이터 소스의 번호에 해당하는 것이다.

디코더

이번에는 반대 방향이다. 하나의 입력을 받아 여러 출력 중 정확히 하나만 활성화하는 회로가 디코더다.

엘리베이터 버튼을 생각해보자. 3층 버튼을 누르면 3층 표시등만 켜진다. 입력은 하나(버튼)지만, 그에 대응하는 출력 하나만 활성화되는 것이다.

가장 간단한 2-to-4 디코더는 2비트 입력을 받아 네 개의 출력 중 하나만 1로 만든다.

O0O1O2O3
001000
010100
100010
110001
  1. 각 행에서 출력(O0~O3) 중 정확히 하나만 1인 것을 확인해보자.
  2. 입력 AB가 00이면 O0, 01이면 O1, 10이면 O2, 11이면 O3가 켜진다. 각 출력은 AND와 NOT의 조합으로 만들 수 있다. 예를 들어 O0 = (NOT A) AND (NOT B), O3 = A AND B다.
  1. A와 B를 모두 0으로 두면 O0만 1이 된다. 나머지는 모두 0이다.
  2. B를 1로 바꿔보자. O0이 꺼지고 O1이 켜진다.
  3. A도 바꿔가며 네 가지 조합을 모두 시도해보자. 항상 출력 하나만 활성화된다.

디코더는 이후 글에서 컴퓨터 내부의 핵심 부품으로 다시 등장한다.

응용: 여러 저장소에서 골라 읽고 쓰기

MUX와 디코더를 합치면 어떤 일이 가능할까?

네 개의 저장소에 각각 다른 값이 들어 있다고 해보자. 이 중 하나를 골라 읽거나, 하나를 골라 새 값을 쓰고 싶다.

  • 읽기: MUX가 주소를 받아 해당 저장소의 값을 출력한다.
  • 쓰기: 디코더가 주소를 받아 해당 저장소 하나만 활성화한다.
  1. D0~D3는 네 개의 저장소 값이다. S0, S1이 주소로 MUX와 디코더에 동시에 들어간다.
  2. S0, S1을 바꿔보자. MUX는 해당 번호의 값을 Read로 출력하고, 디코더는 해당 번호의 W 출력만 활성화한다.

마무리

여러 입력 중 하나를 골라 출력하는 MUX, 하나의 입력으로 여러 출력 중 하나를 활성화하는 디코더. 이 두 회로는 방향이 반대지만, 둘 다 선택이라는 같은 문제를 풀고 있다.

다음 글에서는 게이트를 조합하여 실제로 덧셈을 수행하는 회로를 만들어보자.