트랜지스터로 논리 게이트 만들기 - 스위치 두 개에서 덧셈기까지

English (N/A)

앞 글에서 트랜지스터가 어떻게 생겼는지 봤다. 게이트에 전압을 걸면 유리 밑에 전자층이 생겨 소스와 드레인이 이어지는 스위치였다. 이 글은 그 스위치로 계산기를 만드는 과정을 회로도로 따라간다.

결론부터 말하면 필요한 건 성질이 반대인 스위치 두 종류와 배선 규칙 하나 다. 그 규칙에서 NAND 가 나오고, NAND 만 있으면 나머지 게이트가 전부 나오고, 게이트 몇 개를 붙이면 덧셈기가 된다. 덧셈기 위에 CPU 가 올라간다.

스위치는 두 종류다

nMOSn드레인소스게이트게이트가 1 이면 도통게이트가 0 이면 끊김0 V 쪽에 붙여 쓴다pMOSp소스드레인게이트게이트가 0 이면 도통게이트가 1 이면 끊김+V 쪽에 붙여 쓴다기호 읽는 법세로선 두 개 = 유리를 사이에 둔게이트 전극과 채널게이트 앞의 작은 동그라미는"반대로 동작한다"는 표시전류는 채널을 따라 위아래로흐르고 게이트로는 안 흐른다
이 글에서 쓸 스위치 두 종류. 회로도에서 트랜지스터는 세로선 두 개로 그린다. 왼쪽 선이 게이트 전극, 오른쪽 선이 채널이고 그 사이 틈이 산화막이다. pMOS 는 게이트에 동그라미를 붙여 "거꾸로 켜진다"고 표시한다.

앞 글에서 본 nMOS 는 p형 기판 위에 n형 섬 두 개를 놓은 것이었다. 게이트가 높으면 켜진다. 이걸 통째로 뒤집어서 n형 기판 위에 p형 섬을 놓으면 pMOS 가 되고, 게이트가 낮을 때 켜진다. 정공이 채널을 만들기 때문이다.

이 둘을 그림에서 구분하는 표시가 게이트 앞의 작은 동그라미다. 동그라미가 있으면 "거꾸로 켜진다"는 뜻이다.

왜 반대로 켜지는 두 종류가 필요한지가 이 글의 핵심이다. 스위치 하나로 스위치를 조작하려면, 출력을 1 로 만드는 쪽과 0 으로 만드는 쪽이 각각 있어야 하고 그 둘이 같은 입력에 대해 반대로 반응 해야 한다. 그래야 항상 둘 중 하나만 열린다.

가장 작은 게이트, NOT

입력 0 → 출력 1+V (1)pONnOFF출력=10 V (0)입력=0입력 1 → 출력 0+V (1)pOFFnON출력=00 V (0)입력=1NOT 진리표입력출력0110트랜지스터 2개1 (높음)0 (낮음)도통끊김
인버터. 입력이 0 이면 위쪽 pMOS 가 켜지고 출력은 +V 에 연결되어 1 이 된다. 입력이 1 이면 아래쪽 nMOS 가 켜지고 출력은 0 V 에 연결되어 0 이 된다. 어느 쪽이든 하나는 끊겨 있어서 +V 에서 0 V 로 곧장 흐르는 길이 없다.

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, 상보형)라고 부르는데, 이름의 "상보"가 정확히 "둘이 반대로 켜진다"는 뜻이다.

모든 게이트의 틀

+V (1)풀업 망pMOS 만으로 구성출력풀다운 망nMOS 만으로 구성0 V (0)입력들설계 규칙1. 어떤 입력에서도 둘 중 하나만 켜진다→ 출력은 항상 +V 나 0 V 중 하나에 붙는다2. 같은 입력이 두 망에 동시에 들어간다→ pMOS 와 nMOS 는 항상 반대로 켜진다3. 한쪽이 직렬이면 다른 쪽은 병렬→ 풀다운 직렬 = 풀업 병렬 (NAND)→ 풀다운 병렬 = 풀업 직렬 (NOR)이 규칙을 지키면 대기 전류가 0 이다
모든 CMOS 게이트는 이 틀이다. 위쪽 pMOS 망은 출력을 1 로 끌어올리는 역할만 하고 아래쪽 nMOS 망은 0 으로 끌어내리는 역할만 한다. 두 망이 서로의 거울상이라 어떤 입력에서도 정확히 한쪽만 열린다.

인버터를 일반화하면 이 그림이 된다. 위에는 pMOS 만으로 만든 망이 있어서 출력을 +V 로 끌어올리는 일만 한다. 아래에는 nMOS 만으로 만든 망이 있어서 출력을 0 V 로 끌어내리는 일만 한다. 같은 입력들이 두 망에 동시에 들어간다.

여기서 배선 규칙이 하나 나온다. 한쪽에서 직렬로 이은 건 다른 쪽에서 병렬로 잇는다. 아래 nMOS 두 개를 직렬로 이으면 둘 다 켜져야 0 V 에 닿는다. 그러면 위 pMOS 두 개는 병렬로 이어서 둘 중 하나만 켜져도 +V 에 닿게 한다. 입력이 뭐든 정확히 한쪽만 열리는 게 이 대칭 덕분에 보장된다.

이 규칙대로 두 입력을 넣으면 게이트가 딱 두 개 나온다.

NAND — 직렬 아래, 병렬 위

A=1, B=1 → 0+V (1)pA=1OFFpB=1OFF출력=0nA=1ONnB=1ON0 V (0)A=0, B=1 → 1+V (1)pA=0ONpB=1OFF출력=1nA=0OFFnB=1ON0 V (0)NAND 진리표AB출력001011101110트랜지스터 4개둘 다 1 일 때만 0 V 까지직렬 길이 뚫린다.하나라도 0 이면 병렬 pMOS중 하나가 +V 를 끌어온다.1 (높음)0 (낮음)도통끊김
NAND. 아래쪽은 nMOS 두 개가 직렬이라 A 와 B 가 둘 다 1 이어야 0 V 까지 길이 뚫린다. 위쪽은 pMOS 두 개가 병렬이라 A 나 B 중 하나만 0 이어도 +V 가 출력에 닿는다. 직렬과 병렬이 정확히 거울상이다.

아래 nMOS 두 개가 직렬이다. A 와 B 가 둘 다 1 이어야 0 V 까지 길이 뚫려서 출력이 0 이 된다. 위 pMOS 두 개는 병렬이다. A 나 B 중 하나라도 0 이면 그 pMOS 가 켜져서 출력이 1 이 된다.

"둘 다 1 일 때만 0" 이다. AND 의 반대, NAND 다. 트랜지스터 4개.

NOR — 병렬 아래, 직렬 위

A=0, B=0 → 1+V (1)pA=0ONpB=0ON출력=1nA=0OFFnB=0OFF0 V (0)A=1, B=0 → 0+V (1)pA=1OFFpB=0ON출력=0nA=1ONnB=0OFF0 V (0)NOR 진리표AB출력001010100110트랜지스터 4개둘 다 0 일 때만 직렬 pMOS길이 뚫려 +V 에 닿는다.하나라도 1 이면 병렬 nMOS중 하나가 0 V 로 끌어내린다.1 (높음)0 (낮음)도통끊김
NOR. NAND 를 위아래로 뒤집은 것이다. pMOS 가 직렬이라 둘 다 0 이어야 +V 에 닿고, nMOS 가 병렬이라 하나만 1 이어도 0 V 로 떨어진다.

NAND 를 위아래로 뒤집으면 된다. 위 pMOS 가 직렬이라 둘 다 0 이어야 +V 에 닿고, 아래 nMOS 가 병렬이라 하나만 1 이어도 0 V 로 떨어진다.

"둘 다 0 일 때만 1" 이다. OR 의 반대, NOR 다. 역시 4개.

AND 와 OR 은 오히려 비싸다

NAND (4개)+V (1)pA=1OFFpB=1OFFnA=1ONnB=1ON0 V (0)NOT (2개)+V (1)pONnOFF출력=10 V (0)AND = NAND + NOT트랜지스터 6개A=1, B=1 → NAND 0 → NOT 1그 외 → NAND 1 → NOT 0OR 도 같은 식: NOR + NOT1 (높음)0 (낮음)도통끊김
AND 는 NAND 뒤에 NOT 을 붙인 것이다. CMOS 에서는 "뒤집힌" 게이트가 기본형이고, 뒤집히지 않은 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 하나로 전부 만든다

NOT = NAND 1개A¬A두 입력을 묶는다AND = NAND 2개ABA·BNAND 뒤에 NOTOR = NAND 3개ABA+B각각 뒤집은 뒤 NAND (드모르간)
NAND 하나만 있으면 나머지를 전부 만들 수 있다. OR 은 드모르간 법칙 A+B = ¬(¬A·¬B) 를 그대로 회로로 옮긴 것이다.

NAND 는 그 자체로 완비된 부품이다. 두 입력을 묶으면 NOT 이 되고, NAND 뒤에 그 NOT 을 붙이면 AND 가 된다. OR 은 입력을 각각 뒤집은 뒤 NAND 에 넣는다. 드모르간 법칙 A+B = ¬(¬A·¬B) 를 회로로 옮긴 것이다.

그러니까 어떤 논리식이든 NAND 만 잔뜩 있으면 만들 수 있다. 실제로 그렇게 만든 컴퓨터가 있다. 아폴로 우주선의 유도 컴퓨터는 3입력 NOR 게이트 한 종류만 5,600개 써서 만들었다. 부품 종류를 하나로 줄이면 검증과 조달이 단순해지기 때문이었다. NOR 도 NAND 와 마찬가지로 혼자서 완비된 부품이다.

게이트 두 개가 덧셈기다

이제 계산을 해보자. 1비트 두 개를 더한다.

반가산기ABS (합)C (올림)XORAND1비트 덧셈ABSC00000110101011010 + 0 = 000 + 1 = 011 + 0 = 011 + 1 = 10S 는 XOR, C 는 AND 와 정확히 같다
1비트 두 개를 더하면 결과가 두 자리(올림수, 합)로 나온다. 진리표를 보면 합 자리는 XOR 이고 올림 자리는 AND 다. 게이트 두 개가 곧 덧셈기다.

0+0=0, 0+1=1, 1+0=1 까지는 그냥 OR 같은데 1+1 에서 갈린다. 답이 2 인데 1비트에는 못 담으니 10 으로 쓴다. 윗자리가 올림수, 아랫자리가 합이다.

진리표를 열별로 보면 합 자리는 "둘이 다를 때만 1", 즉 XOR 이고 올림 자리는 "둘 다 1 일 때만 1", 즉 AND 다. 게이트 두 개가 곧 덧셈기다. 이걸 반가산기라고 부른다. "반"인 이유는 아래 자리에서 올라오는 올림수를 못 받기 때문이다.

XOR 은 위 게이트들처럼 풀업·풀다운 한 쌍으로는 안 만들어진다. "둘이 다르다"는 조건이 직렬·병렬 조합만으로는 표현이 안 되어서다. 보통 인버터 두 개 포함 12개로 만든다.

올림수까지 받으면 진짜 덧셈기

전가산기 = 반가산기 2개 + OR반가산기 1ABS₁C₁반가산기 2CinS (합)C₂ORCout (올림)A + B + Cin 을 더한다. 올림은 두 단계 중 어디서든 한 번만 생기므로 OR 로 합친다.
아랫자리에서 올라온 올림수까지 받아야 진짜 덧셈기가 된다. 반가산기로 A 와 B 를 먼저 더하고, 그 합에 올림수를 한 번 더 더한다. 올림은 두 단계 중 어디서 나와도 최종 올림이므로 OR 로 묶는다.

A, B 에 더해 아래 자리에서 온 올림수 Cin 까지 세 개를 더해야 한다. 반가산기로 A 와 B 를 먼저 더하고, 그 합에 Cin 을 한 번 더 더한다. 올림수는 두 단계 중 어디서든 나올 수 있는데 둘 다 나오는 경우는 없다. 그러니 OR 로 묶으면 된다.

이게 전가산기다. 반가산기 두 개에 OR 하나. 게이트 수준으로 그리면 이렇지만 트랜지스터 수준에서 직접 최적화한 표준 설계는 28개다.

자리를 늘린다

4비트 리플 캐리 가산기FA0A0B0S0C1FA1A1B1S1C2FA2A2B2S2C3FA3A3B3S30C4올림수가 오른쪽(낮은 자리)에서 왼쪽으로 물결처럼 전파된다. 마지막 자리는 앞의 세 자리가 끝나야 확정된다.
전가산기를 자리 수만큼 늘어놓고 올림수를 옆으로 넘긴다. 이게 가장 단순한 여러 자리 덧셈기다. 32비트면 전가산기 32개, 트랜지스터로는 900개 정도다.

전가산기를 자리 수만큼 늘어놓고 올림수를 옆으로 넘긴다. 초등학교에서 배운 세로 덧셈 그대로다. 32비트면 32개, 64비트면 64개.

이 방식의 문제가 그림에 보인다. 맨 왼쪽 자리는 오른쪽 세 자리의 올림수가 차례로 넘어와야 확정된다. 자리가 64개면 올림수가 64단계를 거쳐야 하고, 그 시간이 덧셈 한 번의 속도를 정한다. 그래서 실제 CPU 는 올림수를 미리 계산하는 회로를 따로 둔다. 트랜지스터를 더 쓰는 대신 단계를 로그 규모로 줄이는 방식이다. 원리는 같고 배선이 영리해진 것뿐이다.

개수를 세어보면

부품트랜지스터
NOT2
NAND, NOR4
AND, OR6
XOR12
반가산기18
전가산기28
32비트 리플 캐리 가산기약 900

1978년 인텔 8086 은 트랜지스터 29,000개였다. 위 표로 환산하면 32비트 가산기 서른 개 정도의 양으로 CPU 하나를 만든 셈이다. 지금 스마트폰 칩은 200억 개 안팎이고 데스크톱용 최상위 칩은 1,000억 개를 넘는다. 그 안에 든 게 전부 위 그림의 NAND 와 NOT 이다. 종류가 늘어난 게 아니라 개수가 늘어났다.

정리

트랜지스터에서 계산까지의 사다리는 이렇다.

게이트 전압으로 켜는 스위치가 있고, 그걸 뒤집어 반대로 켜지는 스위치 를 하나 더 만든다. 둘을 +V 와 0 V 사이에 마주 세우면 어떤 입력에도 한쪽만 열리는 인버터가 되고, 가만히 있을 때 전기를 안 먹는다.

같은 틀에서 아래를 직렬, 위를 병렬로 이으면 NAND 다. NAND 하나로 나머지 게이트를 전부 만들 수 있다. XOR 과 AND 를 나란히 두면 1비트 덧셈이고, 그걸 이어 붙이면 여러 자리 덧셈이다.

칩 속 수백억 개의 트랜지스터가 하는 일은 결국 이 몇 장의 그림을 아주 많이 반복한 것이다.

이어서

스위치 자체가 어떻게 생겼는지, 게이트 밑 유리 아래 몇 나노미터에서 무슨 일이 일어나는지는 트랜지스터는 어떻게 생겼나에 정리해뒀다. 실리콘 원자가 왜 결합손을 넷 갖는지는 원자 해부도에서 다뤘다.

참고