트랜지스터로 논리 게이트 만들기 - 스위치 두 개에서 덧셈기까지
앞 글에서 트랜지스터가 어떻게 생겼는지 봤다. 게이트에 전압을 걸면 유리 밑에 전자층이 생겨 소스와 드레인이 이어지는 스위치였다. 이 글은 그 스위치로 계산기를 만드는 과정을 회로도로 따라간다.
결론부터 말하면 필요한 건 성질이 반대인 스위치 두 종류와 배선 규칙 하나 다. 그 규칙에서 NAND 가 나오고, NAND 만 있으면 나머지 게이트가 전부 나오고, 게이트 몇 개를 붙이면 덧셈기가 된다. 덧셈기 위에 CPU 가 올라간다.
스위치는 두 종류다
앞 글에서 본 nMOS 는 p형 기판 위에 n형 섬 두 개를 놓은 것이었다. 게이트가 높으면 켜진다. 이걸 통째로 뒤집어서 n형 기판 위에 p형 섬을 놓으면 pMOS 가 되고, 게이트가 낮을 때 켜진다. 정공이 채널을 만들기 때문이다.
이 둘을 그림에서 구분하는 표시가 게이트 앞의 작은 동그라미다. 동그라미가 있으면 "거꾸로 켜진다"는 뜻이다.
왜 반대로 켜지는 두 종류가 필요한지가 이 글의 핵심이다. 스위치 하나로 스위치를 조작하려면, 출력을 1 로 만드는 쪽과 0 으로 만드는 쪽이 각각 있어야 하고 그 둘이 같은 입력에 대해 반대로 반응 해야 한다. 그래야 항상 둘 중 하나만 열린다.
가장 작은 게이트, NOT
pMOS 를 +V 쪽에, nMOS 를 0 V 쪽에 두고 가운데를 출력으로 뽑는다. 게이트 둘을 묶어 입력으로 쓴다.
입력이 0 이면 pMOS 만 켜진다. 출력은 +V 에 연결되어 1 이 된다. 입력이 1 이면 nMOS 만 켜진다. 출력은 0 V 에 연결되어 0 이 된다. 입력의 반대가 나온다.
트랜지스터 두 개로 게이트가 하나 만들어졌다. 여기서 확인할 게 두 가지다.
출력이 항상 어딘가에 붙어 있다. +V 아니면 0 V 다. 붕 떠 있는 상태가 없다. 그래서 출력을 다음 게이트의 입력으로 그대로 꽂을 수 있다.
+V 에서 0 V 로 곧장 흐르는 길이 없다. 어느 상태든 둘 중 하나는 끊겨 있다. 상태가 바뀌는 찰나에만 잠깐 둘 다 살짝 열리고, 그 순간에만 전류가 흐른다. 가만히 있을 때 전력을 안 쓴다는 뜻이다.
두 번째 성질이 얼마나 중요한지는 반대 경우를 보면 안다. 1970년대 초까지 쓰던 방식은 nMOS 하나에 저항 하나를 붙인 것이었다. 출력이 0 일 때 저항을 통해 전류가 계속 새서, 게이트 절반이 항상 전기를 먹고 있었다. 게이트 수백만 개면 그 열을 감당할 수 없다. pMOS 와 nMOS 를 짝지은 방식을 CMOS(Complementary MOS, 상보형)라고 부르는데, 이름의 "상보"가 정확히 "둘이 반대로 켜진다"는 뜻이다.
모든 게이트의 틀
인버터를 일반화하면 이 그림이 된다. 위에는 pMOS 만으로 만든 망이 있어서 출력을 +V 로 끌어올리는 일만 한다. 아래에는 nMOS 만으로 만든 망이 있어서 출력을 0 V 로 끌어내리는 일만 한다. 같은 입력들이 두 망에 동시에 들어간다.
여기서 배선 규칙이 하나 나온다. 한쪽에서 직렬로 이은 건 다른 쪽에서 병렬로 잇는다. 아래 nMOS 두 개를 직렬로 이으면 둘 다 켜져야 0 V 에 닿는다. 그러면 위 pMOS 두 개는 병렬로 이어서 둘 중 하나만 켜져도 +V 에 닿게 한다. 입력이 뭐든 정확히 한쪽만 열리는 게 이 대칭 덕분에 보장된다.
이 규칙대로 두 입력을 넣으면 게이트가 딱 두 개 나온다.
NAND — 직렬 아래, 병렬 위
아래 nMOS 두 개가 직렬이다. A 와 B 가 둘 다 1 이어야 0 V 까지 길이 뚫려서 출력이 0 이 된다. 위 pMOS 두 개는 병렬이다. A 나 B 중 하나라도 0 이면 그 pMOS 가 켜져서 출력이 1 이 된다.
"둘 다 1 일 때만 0" 이다. AND 의 반대, NAND 다. 트랜지스터 4개.
NOR — 병렬 아래, 직렬 위
NAND 를 위아래로 뒤집으면 된다. 위 pMOS 가 직렬이라 둘 다 0 이어야 +V 에 닿고, 아래 nMOS 가 병렬이라 하나만 1 이어도 0 V 로 떨어진다.
"둘 다 0 일 때만 1" 이다. OR 의 반대, NOR 다. 역시 4개.
AND 와 OR 은 오히려 비싸다
CMOS 구조에서는 출력이 항상 뒤집혀 나온다. 입력이 1 이면 nMOS 가 켜져서 출력을 0 으로 당기는 구조라 그렇다. 그래서 NAND 와 NOR 이 기본형이고, AND 와 OR 은 거기에 인버터를 하나 더 붙여야 나온다. AND 는 6개, OR 도 6개다.
논리 교과서는 AND, OR 부터 가르치지만 실제 칩 설계는 반대다. 회로 합성 도구는 가능하면 AND 대신 NAND 를 쓰도록 식을 변형한다. 트랜지스터 두 개와 게이트 하나 만큼의 지연이 줄기 때문이다.
NAND 와 NOR 중에서도 NAND 를 더 좋아한다. pMOS 는 정공이 전류를 나르는데, 정공은 전자보다 느리다. 실리콘에서 두 배 반쯤 느리다. NOR 은 그 느린 pMOS 가 직렬로 놓여서 출력을 1 로 올리는 데 시간이 더 걸린다. NAND 는 빠른 nMOS 가 직렬이고 느린 pMOS 가 병렬이라 사정이 낫다. 그래서 같은 4개짜리인데도 NAND 가 표준 부품이 됐다.
NAND 하나로 전부 만든다
NAND 는 그 자체로 완비된 부품이다. 두 입력을 묶으면 NOT 이 되고, NAND 뒤에 그 NOT 을 붙이면 AND 가 된다. OR 은 입력을 각각 뒤집은 뒤 NAND 에 넣는다. 드모르간 법칙 A+B = ¬(¬A·¬B) 를 회로로 옮긴 것이다.
그러니까 어떤 논리식이든 NAND 만 잔뜩 있으면 만들 수 있다. 실제로 그렇게 만든 컴퓨터가 있다. 아폴로 우주선의 유도 컴퓨터는 3입력 NOR 게이트 한 종류만 5,600개 써서 만들었다. 부품 종류를 하나로 줄이면 검증과 조달이 단순해지기 때문이었다. NOR 도 NAND 와 마찬가지로 혼자서 완비된 부품이다.
게이트 두 개가 덧셈기다
이제 계산을 해보자. 1비트 두 개를 더한다.
0+0=0, 0+1=1, 1+0=1 까지는 그냥 OR 같은데 1+1 에서 갈린다. 답이 2 인데 1비트에는 못 담으니 10 으로 쓴다. 윗자리가 올림수, 아랫자리가 합이다.
진리표를 열별로 보면 합 자리는 "둘이 다를 때만 1", 즉 XOR 이고 올림 자리는 "둘 다 1 일 때만 1", 즉 AND 다. 게이트 두 개가 곧 덧셈기다. 이걸 반가산기라고 부른다. "반"인 이유는 아래 자리에서 올라오는 올림수를 못 받기 때문이다.
XOR 은 위 게이트들처럼 풀업·풀다운 한 쌍으로는 안 만들어진다. "둘이 다르다"는 조건이 직렬·병렬 조합만으로는 표현이 안 되어서다. 보통 인버터 두 개 포함 12개로 만든다.
올림수까지 받으면 진짜 덧셈기
A, B 에 더해 아래 자리에서 온 올림수 Cin 까지 세 개를 더해야 한다. 반가산기로 A 와 B 를 먼저 더하고, 그 합에 Cin 을 한 번 더 더한다. 올림수는 두 단계 중 어디서든 나올 수 있는데 둘 다 나오는 경우는 없다. 그러니 OR 로 묶으면 된다.
이게 전가산기다. 반가산기 두 개에 OR 하나. 게이트 수준으로 그리면 이렇지만 트랜지스터 수준에서 직접 최적화한 표준 설계는 28개다.
자리를 늘린다
전가산기를 자리 수만큼 늘어놓고 올림수를 옆으로 넘긴다. 초등학교에서 배운 세로 덧셈 그대로다. 32비트면 32개, 64비트면 64개.
이 방식의 문제가 그림에 보인다. 맨 왼쪽 자리는 오른쪽 세 자리의 올림수가 차례로 넘어와야 확정된다. 자리가 64개면 올림수가 64단계를 거쳐야 하고, 그 시간이 덧셈 한 번의 속도를 정한다. 그래서 실제 CPU 는 올림수를 미리 계산하는 회로를 따로 둔다. 트랜지스터를 더 쓰는 대신 단계를 로그 규모로 줄이는 방식이다. 원리는 같고 배선이 영리해진 것뿐이다.
개수를 세어보면
| 부품 | 트랜지스터 |
|---|---|
| NOT | 2 |
| NAND, NOR | 4 |
| AND, OR | 6 |
| XOR | 12 |
| 반가산기 | 18 |
| 전가산기 | 28 |
| 32비트 리플 캐리 가산기 | 약 900 |
1978년 인텔 8086 은 트랜지스터 29,000개였다. 위 표로 환산하면 32비트 가산기 서른 개 정도의 양으로 CPU 하나를 만든 셈이다. 지금 스마트폰 칩은 200억 개 안팎이고 데스크톱용 최상위 칩은 1,000억 개를 넘는다. 그 안에 든 게 전부 위 그림의 NAND 와 NOT 이다. 종류가 늘어난 게 아니라 개수가 늘어났다.
정리
트랜지스터에서 계산까지의 사다리는 이렇다.
게이트 전압으로 켜는 스위치가 있고, 그걸 뒤집어 반대로 켜지는 스위치 를 하나 더 만든다. 둘을 +V 와 0 V 사이에 마주 세우면 어떤 입력에도 한쪽만 열리는 인버터가 되고, 가만히 있을 때 전기를 안 먹는다.
같은 틀에서 아래를 직렬, 위를 병렬로 이으면 NAND 다. NAND 하나로 나머지 게이트를 전부 만들 수 있다. XOR 과 AND 를 나란히 두면 1비트 덧셈이고, 그걸 이어 붙이면 여러 자리 덧셈이다.
칩 속 수백억 개의 트랜지스터가 하는 일은 결국 이 몇 장의 그림을 아주 많이 반복한 것이다.
이어서
스위치 자체가 어떻게 생겼는지, 게이트 밑 유리 아래 몇 나노미터에서 무슨 일이 일어나는지는 트랜지스터는 어떻게 생겼나에 정리해뒀다. 실리콘 원자가 왜 결합손을 넷 갖는지는 원자 해부도에서 다뤘다.
참고
- CMOS - Wikipedia — 상보형 구조, 풀업·풀다운 망, 정적 전력
- NAND gate - Wikipedia — CMOS NAND 회로와 트랜지스터 4개 구성
- NAND logic - Wikipedia — NAND 만으로 NOT·AND·OR·XOR 을 만드는 법
- NMOS logic - Wikipedia — 저항 풀업 방식의 정적 전력 문제
- Adder (electronics) - Wikipedia — 반가산기·전가산기·리플 캐리와 캐리 선행 가산기
- XOR gate - Wikipedia — CMOS XOR 의 트랜지스터 구성
- Apollo Guidance Computer - Wikipedia — 3입력 NOR 게이트 한 종류로 만든 컴퓨터
- Transistor count - Wikipedia — 8086 부터 최신 칩까지의 트랜지스터 수
- Electron mobility - Wikipedia — 실리콘에서 전자와 정공의 이동도 차이