그림 26원리관

논리 회로로 하는 덧셈

이 기판에서 7 더하기 9를 하면 게이트 20개를 거치고, 마지막 자리올림은 스위치를 바꾼 뒤 게이트 지연 8번째에 도착합니다.

논리 회로로 하는 덧셈
모형을 불러오는 중

이 기기에서는 3D를 띄울 수 없습니다. 아래 안내 단계를 글로 볼 수 있습니다.

1 / 20 4비트 수 두 개와 LED 다섯 개앞줄에는 4비트 수 두 개가 있습니다. 지금 A 는 0111(7), B 는 1001(9)입니다. 빛이 게이트 20개를 지나 LED 가 10000(십진수로 16)을 가리킬 때까지 지켜보세요. 스위치를 누르면 그 비트가 바뀌고, 회로 슬라이더로 다른 회로를 고를 수 있습니다.

끌어서 돌리고, 휠이나 두 손가락으로 확대하세요.

수정 출처 확인
광고

스위치만으로 7 더하기 9를 하려면

종이에 7 + 9를 쓰면 한 줄이면 끝납니다. 일의 자리에 6을 쓰고 1을 올리면 16입니다. 그런데 컴퓨터에는 종이도 없고, 수가 무엇인지도 모릅니다. 가진 것은 켜지거나 꺼지는 스위치뿐입니다. 스위치 더미가 어떻게 7과 9에서 16을 얻어 낼까요?

위의 기판은 그 답을 한 층씩 보여 주고, 거기서 더 나아갑니다. 처음 화면은 4비트 리플 캐리 가산기입니다. 앞쪽 가장자리에 4비트 수 A 와 B(각각 0~15)를 넣는 비트 스위치 여덟 개가 있고, 그 뒤에 논리 게이트 20개, 뒤쪽 가장자리에 결과를 보여 주는 LED 다섯 개가 있습니다. 스위치를 바꾸면 1을 나르는 구리 배선에 불이 들어오고, 그 빛은 게이트 지연 슬라이더로 정한 속도로 게이트를 지나갑니다. 무대 구석의 표는 입력과 LED 값을 이진수와 십진수로 함께 보여 줍니다.

회로 슬라이더를 움직이면 같은 게이트 칩으로 만든 회로 15가지 가운데 하나로 기판이 바뀝니다. 게이트 하나, 반가산기, 전가산기, 4비트와 8비트 리플 캐리 가산기, 자리올림 예측 가산기, 가감산기, 비교기, 멀티플렉서, 7세그먼트 디코더, SR 래치, D 플립플롭, 카운터, 작은 ALU, 그리고 NAND 게이트 네 개로 푸는 퍼즐입니다. 모두 같은 시뮬레이션으로 움직이므로 회로마다 게이트가 몇 개 들고, 멈추기까지 얼마나 걸리는지 나란히 비교할 수 있습니다.

숫자 두 개로 쓰는 수

십진수에서는 한 자리가 바로 오른쪽 자리의 열 배입니다. 일, 십, 백 하는 식입니다. 이진수도 똑같은데 10 대신 2를 씁니다. 자리마다 1, 2, 4, 8을 나타내므로 비트 네 개로 0(0000)부터 15(1111)까지 쓸 수 있습니다. 기판에서 스위치 A0 은 1의 자리, A3 은 8의 자리이고, 스위치 아래 작은 숫자가 그 값입니다.

7은 4 + 2 + 1이므로 0111, 9는 8 + 1이므로 1001입니다. 둘의 합 16에는 16을 나타내는 다섯째 자리가 필요해서 답은 10000이 됩니다. 이 다섯째 자리가 자리올림 LED C4 입니다. 합이 15보다 크면 기판이 그 사실을 보여 줄 방법은 이 LED 하나뿐입니다.

이진수가 전자 회로에 잘 맞는 것은 전선이 뚜렷하게 다른 두 상태 가운데 하나에만 있으면 되기 때문입니다. 회로는 3 V 와 3.5 V 를 가려낼 필요 없이 「높음」과 「낮음」만 가리면 되고, 이쪽이 1초에 수십억 번을 틀림없이 해내기가 훨씬 쉽습니다.

스위치로 쓰는 트랜지스터

회로 슬라이더를 「게이트 하나」로 두고 모형 아래에서 「전선」을 고르세요. 스위치 X 가 점퍼 하나로 LED 를 전원에 이어 주므로 LED 는 스위치 상태를 그대로 따라갑니다. 1이면 켜지고 0이면 꺼집니다.

이번에는 「트랜지스터」를 고르세요. 다리가 셋 달린 NPN 트랜지스터가 나옵니다. 가운데 다리(베이스)로 작은 전류가 들어가면 나머지 두 다리(컬렉터와 이미터) 사이로 훨씬 큰 전류가 흘러 LED 가 켜집니다. 베이스 전류를 끊으면 LED 도 꺼집니다. 손가락 대신 전기로 켜고 끄는 스위치가 생긴 셈입니다.

모형은 이것을 단순하게 그렸습니다. 실제 트랜지스터는 아날로그 소자여서 어느 범위에서는 베이스 전류가 늘수록 컬렉터 전류도 늘어납니다. 논리 회로는 트랜지스터가 완전히 꺼지거나 완전히 켜진 상태로만 머물고 그 사이는 되도록 빨리 지나가게 설계합니다. 그래서 트랜지스터를 스위치로 다룰 수 있습니다.

트랜지스터 짝으로 만드는 게이트

스위치가 다른 스위치를 조종할 수 있으면 판단을 하는 회로를 만들 수 있습니다. 요즘 칩은 MOSFET 이라는 트랜지스터를 두 종류로 씁니다. n채널 트랜지스터는 입력이 높을 때, p채널 트랜지스터는 입력이 낮을 때 전류를 통합니다. CMOS 논리는 이 둘을 짝지어 한쪽 회로망은 출력을 전원 쪽으로 끌어올리고 다른 쪽은 접지 쪽으로 끌어내리게 하며, 어떤 입력에서도 둘 중 한쪽만 전류를 통하게 합니다. 그래서 게이트가 가만히 있을 때는 전류가 거의 흐르지 않습니다. 1963년 페어차일드의 사치탕(Chih-Tang Sah)과 프랭크 원래스가 보인 이 성질 덕분에 휴대폰 칩에 트랜지스터 수십억 개를 넣어도 녹아내리지 않습니다.

트랜지스터 수를 세어 보면 게이트마다 값이 다릅니다.

게이트 하는 일 CMOS 트랜지스터
NOT 입력을 뒤집음 2
NAND 두 입력이 모두 1일 때만 0 4
NOR 두 입력이 모두 0일 때만 1 4
AND NAND 뒤에 NOT 6
OR NOR 뒤에 NOT 6
XOR 두 입력이 다르면 1 여기서 쓰는 기본형으로 12

누구나 처음 배우는 AND 가 NAND 보다 비싸다는 점이 뜻밖입니다. CMOS 에서는 출력을 끌어내리는 쪽이 n채널 회로망이라서, 뒤집힌 게이트가 자연스럽게 나옵니다. n채널 트랜지스터 두 개를 직렬로 이으면 두 입력이 모두 1일 때만 출력이 내려가므로 NAND 가 되고, 병렬로 이으면 NOR 가 됩니다. AND 를 얻으려면 인버터를 하나 더 붙여야 합니다. 「칩마다 트랜지스터 수」를 켜면 칩마다 개수가 표시되고, 「게이트 하나」 실험대에서는 전선과 일곱 가지 게이트를 차례로 바꿔 볼 수 있습니다.

NAND 에는 성질이 하나 더 있습니다. NAND 게이트만으로 NOT(두 입력을 묶음), AND(NAND 뒤에 NOT), OR(두 입력을 먼저 뒤집음)를 비롯해 모든 게이트를 만들 수 있습니다. 기판의 마지막 회로가 이것을 이용한 퍼즐입니다. NAND 게이트 네 개의 입력을 조작 아래 실험 칸에서 직접 고르는데, 제대로 이으면 출력이 네 줄 모두 XOR 과 같아집니다.

반가산기: 합은 XOR, 자리올림은 AND

XOR 의 진리표를 보세요. 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1이고, 1 + 1은 이진수로 10이어서 이 자리에는 0을 쓰고 1을 올립니다. 모든 답의 오른쪽 자리는 XOR 열과 똑같습니다. 자리올림은 마지막 줄에서만 1인데, 이것은 AND 와 똑같습니다.

그러니 같은 두 비트를 받는 XOR 하나와 AND 하나가 있으면 두 비트를 더할 수 있습니다. 이 짝을 반가산기라고 부릅니다. 「반가산기」 기판에서는 혼자 있고, 4비트 가산기에서는 비트마다 첫 블록입니다. A 와 B 가 모두 1이면 XOR 은 합 0을, AND 는 자리올림 1을 냅니다.

전가산기: 비트 셋이 들어가고 둘이 나옵니다

1의 자리는 반가산기로 충분하지만 다른 자리에서는 더할 것이 셋입니다. A 의 비트, B 의 비트, 그리고 오른쪽에서 올라온 자리올림입니다. 전가산기는 반가산기 두 개와 OR 게이트 하나로 이 일을 합니다. 기판에서는 비트마다 이런 이름을 씁니다.

  1. p = A xor B, g = A and B (첫째 반가산기)
  2. S = p xor C, t = p and C (둘째 반가산기가 들어온 자리올림 C 를 더함)
  3. 자리올림 출력 = g or t

OR 게이트에 1이 두 개 한꺼번에 들어오는 일은 없습니다. A 와 B 가 모두 1이면 p 가 0이므로 t 는 1이 될 수 없습니다. OR 은 자리올림이 생기는 두 경우를 모을 뿐입니다. 그 자리가 스스로 만들었거나(g), 받은 자리올림을 넘겨주거나(t)입니다. 전가산기 진리표의 여덟 줄이 모든 경우를 다루고, 가장 큰 1 + 1 + 1 = 3은 자리올림 1, 합 1로 나옵니다.

비트마다 게이트 다섯 개, 비트가 넷이니 4비트 가산기의 게이트는 20개입니다. 각 전가산기의 자리올림 출력은 왼쪽 이웃의 자리올림 입력으로 이어집니다. 종이 위에서 「1을 올린다」고 하는 단계와 같습니다. 이 사슬 때문에 리플 캐리 가산기라고 부릅니다. 회로가 움직이는 동안 구석의 진리표는 비트마다 어느 줄을 쓰고 있는지 표시합니다. 비트 0이 1 1 0에 머무는 동안 비트 3은 0 1 1에서 기다리는 모습을 볼 수 있습니다.

자리올림이 느린 이유

게이트는 바로 답하지 않습니다. 입력이 바뀌면 출력은 잠시 뒤에 따라 바뀌는데, 이 시간을 게이트 지연 또는 전파 지연이라고 합니다. 모형은 모든 게이트에 똑같이 지연 1단위를 주었고, 슬라이더로 그 단위를 0.05초부터 2.4초까지 늘려 눈으로 볼 수 있게 했습니다.

0 + 0에서 7 + 9로 바꾸면 이렇게 됩니다.

게이트 지연 바뀌는 것
1 첫 줄의 XOR 과 AND 가 모두 새 스위치에 반응합니다. 비트 0(1 + 1)이 g = 1을 만듭니다.
2 비트 1로 가는 자리올림이 켜집니다. 비트 1, 2, 3은 일단 합 1을 보여 줍니다.
3~4 비트 1이 자리올림을 더합니다. 합은 다시 0이 되고 자리올림 출력이 켜집니다.
5~6 비트 2에서 같은 일이 일어납니다.
7~8 비트 3이 0으로 떨어지고 C4 가 켜집니다. LED 는 10000(십진수로 16)을 가리킵니다.

비트 하나가 자리올림을 넘기는 데 게이트 지연 두 번이 걸립니다. t 를 만드는 AND 한 번, 자리올림 출력을 만드는 OR 한 번입니다. 네 비트를 지나면 마지막 자리올림은 지연 8번 뒤에 도착합니다. 4비트 기판에서 가장 느린 경우는 지연 9번이고, 비트 수 n = 4일 때 2n + 1과 맞습니다. 「칩마다 지연 번호」를 켜면 칩마다 출력이 마지막으로 바뀐 지연이 표시되는데, 자리올림 사슬을 따라 2, 4, 6, 8로 올라갑니다.

이 8번의 지연 동안 LED 를 보면 틀린 답이 지나갑니다. 지연 6번째에는 01000(8)이 보이기도 합니다. 고장이 아닙니다. 그 LED 들은 자리올림이 오기 전에 계산한 합을 보여 주고 있을 뿐입니다. 실제 회로에도 이런 짧은 거짓 출력이 생기며, 이것을 글리치라고 합니다. 그래서 프로세서는 가장 느린 경로가 끝날 만큼 정해진 시간을 기다린 뒤에 가산기의 출력을 읽고, 그 기다림의 길이가 클록 속도를 정하는 요인 가운데 하나가 됩니다. 「타이밍 차트」를 켜면 같은 일을 파형으로 볼 수 있습니다. 출력이 오르내리다가 자리를 잡는 모습이 그대로 그려집니다.

8비트 기판에서는 이 값이 분명하게 드러납니다. 같은 전가산기를 여덟 번 이은 게이트 40개짜리 회로인데, 255 + 1을 하면 자리올림이 모든 비트를 지나고 LED 는 게이트 지연 16번 뒤에야 멈춥니다. 4비트 기판의 15 + 1보다 두 배 깁니다. 같은 방식으로 64비트 리플 캐리 가산기를 만들면 가장 느린 경우 지연 129번이 걸립니다. 지연을 한 번씩 보고 싶으면 「지연 한 번씩」을 켜고 모형 아래 「다음 지연」을 누르세요.

자리올림을 미리 계산하기

빠른 가산기는 리플을 기다리지 않습니다. 전가산기를 다시 보면, 어떤 자리는 g = A and B 가 1일 때 스스로 자리올림을 만들고, p = A xor B 가 1일 때 받은 자리올림을 넘겨줍니다. 이 두 신호는 모든 자리에서 한꺼번에 지연 한 번 만에 나옵니다. 이것으로 자리올림을 하나씩 풀어 쓸 수 있습니다.

  • C1 = g0 + p0 C0
  • C2 = g1 + p1 g0 + p1 p0 C0
  • C3 = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 C0
  • C4 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 C0

C2 를 문장으로 읽으면 이렇습니다. 비트 1이 자리올림을 만들었거나, 비트 0이 만든 것을 비트 1이 넘겨주거나, 올림 입력을 비트 1과 0이 함께 넘겨주면 비트 2로 자리올림이 들어갑니다. 줄마다 AND 게이트 한 줄 뒤에 OR 하나이므로 모든 자리올림이 지연 3번 만에, 합은 그 한 번 뒤에 나옵니다. 「자리올림 예측 가산기」 기판은 게이트 26개로 이 일을 합니다. 15 + 1을 넣으면 리플 기판이 8번 걸리던 것이 지연 4번 만에 멈춥니다. 무대의 표는 비트마다 P, G, 자리올림을 보여 줍니다.

대가는 AND 게이트에서 치릅니다. C4 에 벌써 5입력 AND 와 5입력 OR 가 필요하고, 비트가 늘 때마다 항이 늘어납니다. 그래서 넓은 가산기는 두 방법을 섞습니다. 4비트짜리 작은 예측 블록을 만들고, 블록 사이에 다시 한 단계 예측을 둡니다. IBM 의 제럴드 로젠버거는 1957년에 2진 자리올림 예측 가산기 특허를 냈습니다. 찰스 배비지는 그보다 한 세기 앞서 같은 문제를 알아보고 해석 기관에 자리올림을 미리 내다보는 장치를 설계했습니다. 지금은 「빠른 자리올림」 4비트 가산기가 카탈로그에 있는 칩이고, 텍사스 인스트루먼트는 SN74LS283 을 여전히 팔고 있습니다.

같은 가산기로 하는 뺄셈

컴퓨터에는 뺄셈기가 따로 없어도 됩니다. 음수를 저장하는 보통 방법인 2의 보수에서는 「B 의 비트를 모두 뒤집고 1을 더한 것」이 −B 입니다. 그러니 A − B 는 A + (B 를 뒤집은 것) + 1입니다.

「가감산기」 기판은 B 앞에 비트마다 XOR 을 하나씩 둡니다. SUB 를 끄면 XOR 이 B 의 비트를 그대로 넘기고, 켜면 비트를 뒤집습니다. 같은 SUB 선이 올림 입력에도 이어져서 남은 1을 보탭니다. 5 − 7을 해 보세요. B = 0111은 1000이 되고, 가산기는 0101 + 1000 + 1 = 1110을 냅니다. 1110을 부호 있는 4비트 수로 읽으면 −2입니다. 부호 없는 수로 읽으면 14인데, 이것도 나름대로 맞습니다. 5 − 7 + 16 = 14이기 때문입니다. 같은 비트가 읽는 방식에 따라 다른 뜻이 되고, 무대 표는 둘을 함께 보여 줍니다.

부호 있는 4비트 수는 −8부터 7까지만 담을 수 있어서 넘치는 답도 생깁니다. 기판의 초록 V LED 가 이것을 잡아냅니다. 맨 윗자리로 들어가는 자리올림과 나가는 자리올림의 XOR 인데, 둘이 다르면 켜집니다. SUB 를 끄고 7 + 1을 하면 켜집니다. 0111 + 0001 = 1000이고, 이것은 −8로 읽히기 때문입니다. XOR 한 줄 때문에 앞에서 지연이 한 번 늘고 V 게이트 때문에 끝에서 한 번 늘어서, 이 기판의 가장 느린 경우는 지연 11번입니다.

광고

두 수 비교하기

회로는 9가 5보다 크다는 것을 어떻게 알까요? 종이에 쓴 수를 비교할 때와 같습니다. 두 수가 처음 달라지는 가장 높은 자리를 봅니다. 「비교기」 기판은 비트마다 따져 봅니다. 한 비트에서 A > B 는 A 가 1이고 B 가 0이라는 뜻이고(B 쪽에 인버터를 단 AND), A < B 는 그 반대이며, 둘 다 아니면 그 비트는 같습니다(두 신호의 NOR).

그다음 비트에 순서를 매깁니다. 비트 3이 A 가 크다고 하거나, 비트 3은 같고 비트 2가 A 가 크다고 하거나, 비트 3과 2가 같고 비트 1이 그렇다고 하는 식으로 내려가면 A 가 큽니다. AND 항 네 개를 OR 로 묶은 것이어서 자리올림 예측과 모양이 같습니다. 1001과 0101은 비트 3에서 처음 다르고 거기서 A 가 1이므로 A > B LED 가 지연 4번 만에 켜집니다(이 기판에서 가장 느린 경우는 5번). 게이트는 29개입니다. TI 의 SN74LS85 는 같은 일을 패키지 하나로 하고, 입력이 더 있어서 칩 여러 개로 긴 수도 비교합니다.

하나를 고르고, 숫자를 그리기

AND 게이트 여러 개를 OR 하나로 모으는 모양은 회로 두 가지에 더 나옵니다.

멀티플렉서는 고릅니다. 「4대1 멀티플렉서」 기판에는 데이터 입력 D0~D3 과 선택 비트 두 개가 있습니다. 데이터 입력마다 선택 비트(또는 그 반대)를 함께 받는 3입력 AND 로 들어가므로, 어떤 설정에서도 AND 하나만 열리고 OR 가 그 데이터 비트를 Y 로 넘깁니다. 게이트 일곱 개, 지연 세 번입니다. 프로세서의 레지스터 파일부터 TV 의 입력 전환까지, 여러 신호 중 하나를 전선 하나로 보내야 할 때마다 멀티플렉서를 씁니다.

디코더는 그립니다. 7세그먼트 표시기에는 a 부터 g 까지 막대 모양 LED 일곱 개가 있고, 숫자마다 켜는 막대가 다릅니다. 1은 b 와 c, 8은 일곱 개 모두를 켭니다. 막대마다 그 막대를 켜는 숫자 목록을 만들고, 그 목록을 줄여 AND 항 몇 개를 OR 로 묶은 곱의 합으로 쓸 수 있습니다. 기판의 디코더는 전시 코드에서 이 방법으로 구했습니다. 인버터 4개, 함께 쓰는 AND 항 28개, OR 7개로 게이트 39개이고, 스위치에서 막대까지 지연 세 번이 걸립니다. 0부터 9까지뿐 아니라 십육진수 A 부터 F 까지도 그립니다. TI 의 SN74LS47 이 0부터 9까지를 위한 카탈로그 칩입니다.

기억하는 회로

여기까지 나온 회로는 모두 잊어버립니다. 스위치를 바꾸면 출력이 따라가고, 앞에서 무슨 일이 있었는지는 상관이 없습니다. 기억하려면 고리가 필요합니다.

SR 래치는 NOR 게이트 두 개가 서로의 출력을 받는 회로입니다. S 와 R 이 모두 0이면 고리는 갖고 있던 값(Q = 1 이나 Q = 0)을 전원이 있는 동안 계속 붙잡습니다. S 에 1을 주면 Q 가 1이 되고, R 에 1을 주면 0이 됩니다. Q 를 세트한 뒤 S 를 다시 끄면 Q 는 1로 남습니다. 트랜지스터 여덟 개로 만든 1비트 메모리입니다.

래치에는 넣으면 안 되는 입력이 있습니다. S 와 R 이 모두 1이면 두 출력이 모두 0이 되고, 그 상태에서 둘을 동시에 놓으면 두 게이트가 경주를 합니다. 두 게이트의 지연이 똑같은 이 모형에서는 고리가 끝내 멈추지 않습니다. 출력 둘이 지연마다 함께 뒤집히고, 무대 표가 그렇다고 알려 줍니다. 실제 래치는 결코 완벽한 대칭이 아니어서 한쪽이 이기지만, 어느 쪽이 언제 이길지는 미리 알 수 없습니다. 이것을 준안정 상태라고 하며, 디지털 회로는 평소에 이런 일이 생기지 않도록 짜여 있습니다.

D 플립플롭은 데이터를 한순간에만 받아들여 이 문제를 없앱니다. 기판의 플립플롭은 7474 칩에 쓰인 NAND 여섯 개짜리 설계입니다. 클록이 낮거나 높게 머무는 동안에는 D 가 아무리 바뀌어도 Q 는 움직이지 않습니다. CLK 가 0에서 1로 올라가는 순간에만 Q 가 D 의 값을 받고, 다음 상승 에지까지 그 값을 지킵니다. D 와 CLK 를 무작위로 4만 9,152번 바꿔 보았고 Q 는 매번 이 규칙을 따랐습니다.

클록 펄스 세기

플립플롭 네 개를 나란히 두고, 지금 수에 1을 더하는 작은 회로를 붙여 그 결과를 플립플롭의 D 입력으로 돌려보내면 클록 펄스마다 다음 수가 들어갑니다. 「4비트 카운터」 기판이 바로 그렇게 게이트 30개를 씁니다. 플립플롭 네 개에 NAND 24개, 1을 더하는 회로에 게이트 6개입니다. 비트 0은 언제나 뒤집히고, 비트 1은 비트 0이 1일 때, 비트 2는 비트 1과 0이 모두 1일 때, 비트 3은 아래 세 비트가 모두 1일 때 뒤집힙니다.

「클록 한 번」을 누르고 순서를 보세요. 클록 에지가 플립플롭 네 개에 한꺼번에 닿고, 출력은 게이트 지연 두 번 뒤에 바뀌며, 「1 더하기」 게이트는 다음 펄스가 오기 한참 전에 다음 수를 준비합니다. 모든 비트가 같은 에지에서 바뀌므로 동기식 카운터라고 하고, TI 의 SN74LS161A 가 같은 종류입니다. 1111 다음에는 0000으로 돌아갑니다. 펄스 40번을 보냈더니 카운터는 0부터 15까지 세고 다시 돌기를 한 번도 틀리지 않았습니다.

같은 부품으로 만든 ALU

프로세서의 산술 논리 장치(ALU)는 실제로 계산을 하는 회로입니다. 「4비트 ALU」 기판은 게이트 59개로 그 생각을 보여 줍니다. 비트마다 A + B, A − B, A AND B, A OR B 네 가지 결과를 나란히 계산하고, 연산 비트 두 개가 멀티플렉서와 같은 AND·OR 선택으로 그중 하나를 출력에 보냅니다. 연산 00은 덧셈, 01은 뺄셈(가감산기의 XOR 줄을 씀), 10은 AND, 11은 OR 입니다.

네 결과는 언제나 모두 계산되고, 연산 비트는 어느 것을 보여 줄지만 고릅니다. 실제 ALU 도 이렇게 움직이며, 그래서 ALU 의 가장 긴 경로(여기서는 지연 13번)가 가산기 하나보다 깁니다. 12 AND 10을 해 보세요. 1100과 1010은 비트 3 하나만 겹치므로 답은 1000(십진수로 8)입니다.

게이트 지연은 얼마나 짧을까

모형은 지연을 횟수로 세지만 실제 부품은 나노초로 잽니다. 텍사스 인스트루먼트는 SN74HC00 NAND 게이트의 대표 지연을 4.5 V 에서 9 ns, 그보다 오래된 SN74LS00 은 9~10 ns, SN74AC00 은 5 V 에서 약 5 ns 로 적었습니다. 릴레이는 백만 배쯤 느립니다. 옴론 G5V-1 데이터시트는 동작 시간을 최대 5 ms 로 잡습니다.

이것을 기판의 가장 긴 경로에 곱해 봅니다. 4비트 리플 캐리 가산기는 지연 9번이므로 74HC00 같은 게이트로는 약 81 ns 만에 멈추고, 1초에 1,200만 번쯤 덧셈을 할 수 있습니다. 같은 가산기를 릴레이로 만들면 45 ms 가 걸립니다. 조작 아래 실험 칸은 기판에 놓인 회로마다 이 계산을 해 줍니다. 요즘 프로세서가 64비트 덧셈을 1초에 수십억 번 하는 것은 게이트가 수천 배 빠르고 가산기가 예측 방식을 쓰기 때문이지, 논리가 달라서가 아닙니다.

모든 회로를 직접 확인하기

기판의 회로는 모두 가능한 모든 입력에 대해 진리표와 맞춰 보았습니다. 4비트 가산기는 512가지 조합 모두에서 A + B + C0 을 냈고, 한 입력에서 다른 입력으로 바뀌는 26만 2,144가지 경우마다 지연 9번 안에 맞는 답에 멈췄습니다. 8비트 가산기는 합 13만 1,072가지 모두와 무작위 변화 40만 가지를 확인했습니다. 자리올림 예측 가산기는 지연 4번, 가감산기는 11번, 비교기는 5번, 멀티플렉서와 디코더는 3번, ALU 는 104만 8,576가지 변화 모두에서 13번 안에 멈췄습니다. 기억 회로는 순서대로 돌려 보았습니다. 래치는 세트, 유지, 리셋을, 플립플롭은 무작위 클록과 데이터를, 카운터는 펄스 40번을 거쳤습니다.

기판에서 몇 가지를 해 볼 수 있습니다.

  • 리플 가산기에서 15 + 1: 자리올림 네 번이 모두 번져 가고, 지연 8번 뒤 LED 가 10000을 가리킵니다.
  • 예측 가산기에서 15 + 1: 같은 답이 지연 4번 만에 나옵니다.
  • 5 + 2: 자리올림이 없어서 답 0111(7)이 지연 2번 만에 나옵니다.
  • 가감산기에서 5 − 7: 1110, 부호 있는 수로 −2입니다.

모형과 실제 칩이 다른 점

  • 모든 게이트의 지연이 같습니다. 실제로는 XOR 이 NAND 보다 느리고, 입력 여러 개를 끄는 게이트가 하나만 끄는 게이트보다 느리며, 지연은 온도와 전원 전압에 따라서도 달라집니다.
  • 전선은 길이와 상관없이 게이트 지연의 0.85배가 걸립니다. 실제 기판의 짧은 배선은 사실상 즉시 전달되고, 칩 안의 긴 배선은 게이트보다 느릴 수도 있습니다.
  • 신호는 완벽하게 0 아니면 1입니다. 실제 전압은 짧은 시간에 걸쳐 오르내리고, 이 기판에는 잡음, 열, 팬아웃 한계가 없습니다.
  • 칩 하나에 게이트 하나입니다. 실제 논리 칩은 패키지 하나에 NAND 네 개나 인버터 여섯 개가 들어 있고, 기판에서 뺀 전원 핀, 바이패스 커패시터, 풀업 저항이 필요합니다.
  • 실험대의 트랜지스터는 바이폴라 스위치 하나로 그렸지만, 칩에 표시하는 트랜지스터 수는 CMOS 기준입니다.

불의 대수에서 릴레이 가산기까지

1854년 조지 불은 『사고의 법칙』을 펴냈습니다. 논리 명제를 곱셈과 덧셈 비슷한 연산으로 묶는 대수였고, 기호 1과 0이 특별한 역할을 했습니다. 기계가 아니라 추론에 관한 책이었습니다.

회로와 이어진 것은 1937년입니다. MIT 석사 과정 학생이던 클로드 섀넌은 논문 『릴레이와 스위칭 회로의 기호 분석』에서 직렬과 병렬로 이은 스위치가 불의 대수와 같은 규칙을 따른다는 것을 보였습니다. 그래서 회로를 시행착오 대신 대수로 설계하고 줄일 수 있게 되었습니다. 마지막 장에서 그는 이진수 가산기를 비롯한 예제 회로 몇 가지를 내놓았습니다. 이 논문에서 나온 글이 1938년 『미국 전기공학회 회보』에 실렸고 앨프리드 노블상을 받았습니다.

같은 해 벨 연구소 과학자 조지 스티비츠는 릴레이로 시연용 가산기를 만들었습니다. 집 부엌 식탁에서 조립했다고 해서 이름을 모델 K 라고 붙였습니다. 10년 뒤인 1947년 12월, 벨 연구소의 존 바딘과 월터 브래튼이 윌리엄 쇼클리가 이끄는 연구진에서 처음으로 작동하는 트랜지스터를 만들었습니다. 세 사람은 「반도체 연구와 트랜지스터 효과의 발견」으로 1956년 노벨 물리학상을 함께 받았습니다.

릴레이에서 트랜지스터 수십억 개까지

초기의 큰 컴퓨터는 손에 넣을 수 있는 스위치를 썼습니다. 콘라트 추제의 1941년 Z3 는 릴레이 2,300개, 1944년에 완성된 하버드 마크 1은 릴레이 3,500개를 썼고, 길이 15 m 가 넘는 캠축이 박자를 맞췄습니다. 1944년 초부터 블레츨리 파크에서 돌아간 콜로서스는 진공관 2,500개로 스위칭했고, 1946년 2월 펜실베이니아 대학이 공개한 에니악은 진공관 1만 8,000개가 필요했으며 30 × 50 ft(약 9 × 15 m) 되는 방을 채웠습니다. 1956년 MIT 의 TX-0 은 트랜지스터로 만든 최초의 범용 프로그래머블 컴퓨터였고, 진공관처럼 갈아 끼울 수 있게 트랜지스터를 하나씩 「병」에 넣었습니다.

그다음 게이트가 실리콘 위로 옮겨 갔습니다. 1961년 페어차일드는 최초의 평면형 집적회로 가운데 하나인 플립플롭을 발표했는데, 트랜지스터 4개와 저항 5개로 되어 있었습니다. 텍사스 인스트루먼트가 1966년부터 값싼 플라스틱 패키지로 판 TTL 논리 칩 7400 시리즈는 얼마 지나지 않아 논리 칩 시장의 절반 넘게 차지했고, NAND 네 개짜리 SN7400 같은 부품은 지금도 팔립니다. 1968년 아폴로 7호에서 처음 날았던 아폴로 유도 컴퓨터는 3입력 NOR 게이트 두 개가 든 칩 한 종류로 대부분을 만들었고, 컴퓨터 한 대에 그 칩이 수천 개 들어갔습니다.

1965년 고든 무어는 칩 하나에 들어가는 부품 수가 해마다 두 배가 된다고 예측했고, 나중에 2년마다 두 배로 고쳤습니다. 1971년 인텔 4004 는 4비트 프로세서 전체를 트랜지스터 2,300개(컴퓨터 역사 박물관 연표에는 2,250개)로 칩 하나에 담았습니다. 2020년 애플 M1 에는 그 약 700만 배인 160억 개, 2024년 엔비디아 블랙웰 GPU 에는 2,080억 개가 들어 있습니다. 그 모두의 안에서 계산을 하는 것은 여전히 이 기판에 있는 가산기, 멀티플렉서, 플립플롭 같은 회로입니다.

자주 묻는 질문

컴퓨터는 왜 십진수가 아니라 이진수를 쓰나요?

전선은 높음과 낮음 두 상태 가운데 하나에만 있으면 되고, 트랜지스터는 완전히 켜지거나 완전히 꺼지기만 하면 됩니다. 두 상태를 가려내는 것이 열 상태를 가려내는 것보다 훨씬 믿을 만하고, 불의 대수가 두 상태 회로를 정확하게 설명해 줍니다.

반가산기와 전가산기는 무엇이 다른가요?

반가산기는 비트 두 개를 더해 합과 자리올림을 냅니다. 전가산기는 비트 세 개(두 자리 숫자와 들어온 자리올림)를 더하며, 반가산기 두 개와 OR 게이트 하나로 만듭니다.

왜 리플 캐리 가산기라고 부르나요?

전가산기마다 오른쪽 자리의 자리올림을 기다려야 자기 자리올림 출력이 정해집니다. 자리올림이 물결처럼 비트를 하나씩 건너가기 때문에 리플(물결)이라는 이름이 붙었습니다.

4비트 리플 캐리 가산기는 얼마나 걸리나요?

이 모형에서는 비트마다 자리올림에 게이트 지연이 두 번씩 더해집니다. 가장 느린 경우는 지연 9번이고, 7 + 9는 8번 뒤에 멈춥니다. 74HC00 같은 게이트(한 번에 9 ns)로는 약 81 ns 입니다.

LED 가 잠깐 틀린 수를 보여 주는 이유는 무엇인가요?

자리마다 자기 게이트가 반응하는 대로 합을 보여 주는데, 이때 오른쪽 자리의 자리올림은 아직 도착하지 않았습니다. 이런 짧은 거짓 출력을 글리치라고 합니다. 프로세서는 가장 느린 경로가 끝날 때까지 기다렸다가 결과를 씁니다.

합이 15보다 크면 어떻게 되나요?

합 비트 네 개로는 0부터 15까지만 보여 줄 수 있습니다. 다섯째 LED 인 C4 가 맨 윗비트의 자리올림을 받으며 16을 나타냅니다. 이것까지 쓰면 기판은 15 + 15 + 1 = 31까지 보여 줄 수 있습니다.

같은 회로로 뺄셈도 할 수 있나요?

할 수 있습니다. B 의 비트를 모두 뒤집고 올림 입력을 켜면 가산기가 2의 보수로 A − B 를 계산합니다. 「가감산기」 기판은 비트마다 XOR 하나로 이 일을 하고, 프로세서도 같은 방법으로 가산기 하나에 덧셈과 뺄셈을 다 맡깁니다.

NAND 를 왜 만능 게이트라고 부르나요?

NAND 게이트만으로 어떤 논리 함수든 만들 수 있기 때문입니다. 입력을 묶은 NAND 가 NOT 이고, NAND 뒤에 NOT 을 붙이면 AND, 두 입력을 뒤집어 NAND 에 넣으면 OR 입니다. NOR 도 같은 성질이 있습니다. 기판의 NAND 퍼즐은 NAND 넷으로 XOR 를 만들어 보라는 과제입니다.

AND 가 NAND 보다 트랜지스터를 더 쓰는 이유는 무엇인가요?

CMOS 에서 출력을 접지로 끌어내리는 트랜지스터는 n채널이고, 이것 두 개를 직렬로 이으면 두 입력이 모두 1일 때만 출력이 내려갑니다. 그래서 뒤집힌 함수인 NAND 가 트랜지스터 4개로 나옵니다. AND 는 인버터를 하나 더 붙여야 해서 6개가 됩니다.

자리올림 예측 가산기가 언제나 더 좋은가요?

더 빠르지만, 비트 수가 늘수록 게이트가 많아지고 입력이 넓은 게이트가 필요합니다. 4비트 예측 기판은 리플 기판의 20개보다 많은 26개를 씁니다. 넓은 가산기는 작은 예측 블록들을 두고 블록 사이를 한 단계 더 예측합니다.

래치와 플립플롭은 무엇이 다른가요?

래치는 입력이 바뀔 때마다 바로 따라갑니다(SR 래치는 바로 세트와 리셋을 합니다). 플립플롭은 클록 에지에서만 바뀌므로, 플립플롭으로 가득한 회로 전체가 클록 펄스 하나에 한 걸음씩 박자를 맞춰 나아갑니다.

기판의 4비트 가산기에는 트랜지스터가 몇 개 드나요?

CMOS 게이트로 세면 168개입니다. XOR 8개가 12개씩, AND 8개가 6개씩, OR 4개가 6개씩입니다. ALU 기판은 418개가 들고, 인텔 4004 는 프로세서 전체에 약 2,300개를 썼습니다.

용어

  • 비트: 이진수 한 자리, 0 또는 1.
  • 논리 게이트: 출력이 입력의 정해진 함수인 회로. AND, OR, NOT, NAND, NOR, XOR 등.
  • 진리표: 가능한 모든 입력 조합과 그때의 출력을 적은 표.
  • 트랜지스터: 작은 전류나 전압으로 큰 전류를 조절하는 반도체 부품. 논리 회로에서는 스위치로 씁니다.
  • CMOS: n채널과 p채널 MOSFET 을 짝지어 만든 논리. 가만히 있을 때 전류가 거의 흐르지 않습니다.
  • 반가산기: 비트 두 개를 더하는 XOR 과 AND.
  • 전가산기: 비트 두 개와 자리올림을 더하는 반가산기 두 개와 OR.
  • 자리올림: 한 자리의 합이 2 이상일 때 다음 자리로 넘기는 1.
  • 게이트 지연: 입력이 바뀐 뒤 게이트 출력이 바뀌기까지 걸리는 시간. 전파 지연이라고도 합니다.
  • 리플 캐리 가산기: 자리올림이 다음 자리로 이어지도록 전가산기를 사슬처럼 이은 가산기.
  • 자리올림 예측: 생성(g)과 전파(p) 신호로 자리올림을 한꺼번에 구하는 빠른 방법.
  • 2의 보수: 음수를 저장하는 보통 방법. −B 는 B 의 비트를 모두 뒤집고 1을 더한 것입니다.
  • 멀티플렉서: 선택 비트에 따라 여러 입력 중 하나를 출력으로 보내는 회로.
  • 디코더: 이진수를 출력마다 하나씩의 신호로 바꾸는 회로. 숫자의 막대 일곱 개를 켜는 것이 한 예입니다.
  • 래치: 전원이 있는 동안 1비트를 붙잡는 게이트 고리.
  • 플립플롭: 클록 에지에서만 입력을 받아들이는 기억 회로.
  • ALU: 산술 논리 장치. 프로세서에서 덧셈, 뺄셈, 비트 연산을 하는 부분.

출처

광고

이 전시 퍼가기

이 코드를 웹 페이지나 블로그 글에 붙여 넣으면 그 자리에 움직이는 모형이 나옵니다.

열기