컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (11)
#11. 더하기.
이 이야기를 하고 있는 나는 국민학교에 입학해서 초등학교를 졸업했다. 아니 좀더 정확히 옆 학교는 초등학교였고 나는 국민학교 졸업장을 받았다. 같은 학교를 졸업한 내 동생은 초등학교를 졸업했다. 중요한 것은 초등학교, 국민학교가 아니다. 우리가 정규 교육을 처음 시작하면서 산수라는 것을 배울 때 숫자 읽는 법을 배우고 사칙 연산을 배운다. 그 사칙 연산 중 가장 먼저 배우는 것이 더하기다. 요즘 애들은 학교 가기전에 유치원에서 이미 다 배우고 간다. 그만큼 더하기는 쉬운 계산이다.
어쩜 이리 컴퓨터는 사람과 비슷한지. 역시 컴퓨터에게도 더하기를 먼저 가르쳐 준다. 다만 사람은 더하기 다음에 빼기, 곱하기, 나누기를 배우지만 컴퓨터는 오로지 더하기 밖에 할 줄 모른다. 지금 내가 이 이야기를 쓰고 있는 컴퓨터도 더하기 밖에 할 줄 모르고 여러분이 이 이야기를 읽고 있는 컴퓨터도 더하기 밖에 할 줄 모른다. 컴퓨터는 더하기로 모든 연산을 다 처리한다. 컴퓨터에게 더하기는 유일하게 할 줄 아는 연산이다.
자, 그럼 컴퓨터에게 더하기를 가르쳐 보자.
XOR 게이트와 AND 게이트로 이뤄진 단순한 회로다. 이 회로가 가장 간단한 더하기 회로다. 무슨 말도 안되는 소리냐고 반문 할수도 있다. 위 회로의 진리표를 보자.
0 + 0 = 00
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10
1비트 이진수 덧셈의 결과와 정확히 일치하는 진리표다. 논리 회로는 진리표로 말한다. 진리표가 덧셈을 말하고 있으니 저 회로는 더하기 회로가 맞다. 위 회로를 반가산기(half adder)라고 한다. 가산기면 그냥 가산기지 왜 ‘반’이 붙은건가? 왜냐하면 말 그대로 반만 계산하기 때문이다. 반만 계산한다는게 무슨 말인가?
10진수 더하기에서 16+5를 하면 답은 21이다. 6과 5를 더하면 11이 된다. 십의 자리수 1을 올려서 앞 자리가 2가 되고 남은 일의 자리수를 붙여 21이 되는 것이다. 이진수의 덧셈도 이와 동일하게 2가 넘어가는 숫자에 대해서는 자리 올림을 해줘야 한다. 하지만 위 회로에는 자리 올림에 대한 배려가 없다. 즉 위 회로를 연달아 두 개 붙인다고 2비트 더하기가 제대로 동작하지 않는다는 것이다. 그래서 반가산기라고 부른다. 그러면 당연히 다음은 자리 올림을 모두 고려한 가산기가 나올 차례다.
반가산기 주변에 게이트가 몇 개 더 붙었다. 자세히 보면 알겠지만 전가산기는 반가산기 두 개를 붙이고 그 출력을 OR 게이트로 묶어서 올림수로 보낸 것이다. 잘 안보이는가?
이름 처럼 전가산기의 반은 반가산기다. 반가산기 두 개가 붙으면 한 개의 전가산기가 된다. 누가 지었는지 참 이름을 재미있게 지었다. Cin은 자리 올림 수가 입력되는 핀이고 Cout은 자리 올림 수가 나가는 핀이다. 자리 올림수를 영어로 캐리(Carry)라고 부른다. 그래서 Carry In, Carry Out이라고 두 핀을 읽으면 된다. 자리 올림까지 고려한 위 회로를 전가산기(full adder)라고 부른다. 위 회로는 연달아 이어 놓으면 붙인 만큼 계산이 가능하다.
위 그림처럼 전가산기 네 개를 붙여 놓으면 4비트 가산기가 된다. 유의해서 볼 점은 하위 비트 가산기의 Cout은 상위 비트 가산기의 Cin으로 들어간다는 것이다. 당연히 그렇게 되어야 한다. 아랫 자리 숫자의 올림 숫자는 당연히 윗 자리에 더해지는 것이 덧셈의 규칙이니까.
플립플롭과 마찬가지로 가산기도 네모 심볼로 그 회로를 대체해서 그린다. 아래 그림은 8비트 가산기를 표현한 그림이다. 나도 앞으로 가산기를 그릴때 게이트 회로 대신 이렇게 사각형으로 그리겠다.
A[0]부터 A[7], 그리고 B[0]부터 B[7]까지 각 8비트씩 16개의 입력이 들어가고 이 값을 더해서 S[0]부터 S[7]까지의 결과가 나온다. 만약 캐리가 발생한다면 Cout에 1이 출력된다. 8비트 가산기를 두 개 붙이면 16비트 가산기가 된다. 그렇게 사용하려면 Cin도 있어야 한다. 또한 조작의 편의를 위해 CLK 신호선도 달았다. CLK는 플립플롭을 설명했을 때와 마찬가지로 클록 펄스를 입력으로 준다. 그러면 위 8비트 가산기 역시 라이징 엣지가 생겼을 때 계산을 수행한다. 기존 회로에 CLK를 붙여 라이징 엣지에 동작하게 만드는 방법은 간단하다. A[0..7], B[0..7] 이렇게 16개의 모든 입력선에 AND 게이트를 붙인 다음 나머지 입력선은 CLK로 하면 된다. 그림은 따로 그리지 않겠다.
컴퓨터에게 더하기를 가르쳐 준다기에 거창한줄 알았는데, 별거 없었다. 그냥 논리 게이트 몇 개 잘 조합해서 덧셈과 동일한 진리표가 나오게했을 뿐이다. 사실 그거면 다 한것이다. 논리 회로에서는 그 이상 더 해 줄것이 없다. 하지만 아직은 약간 심심하다. 언제나 그렇듯 내 이야기는 조금씩 살을 붙여나간다. 오늘 본 이 간단한 가산기는 앞으로 얼마나 위대해 질 것인가! 기대해 주시기 바란다.
첨부 | 파일 크기 |
---|---|
_11_01_half_adder.png | 8.01 KB |
_11_02_half_adder_truth_table.gif | 1.55 KB |
_11_03_full_adder.png | 18.16 KB |
_11_04_full_adder_2_of_half_adder.gif | 5.07 KB |
_11_05_4bit_adder.png | 33.77 KB |
_11_06_8bit_adder.png | 8.05 KB |
댓글
간만에 들어왔더니 새로운연재를 하고계시는군요..ㅎ
입사하고 바쁘실텐데 짬내서 새로운연재를 하고계시는군요..ㅎㅎ
디지털시간에 대충 외웠던 내용이 쏙쏙 이해되네요..항상 열심히 하시는모습이 부러워요!
계속해서 좋은내용 부탁드려요!
-------------------------------------------
-------------------------------------------
때로는 알면서도 모르는척..
때로는 모르면서도 아는척..
바보가 아니면서도 바보인척..
바보이면서도 바보가 아닌척
반가산기 전가산기를...잘 보고갑니당..
감사합니다.
잘 봤습니다. 아직 저는 잘 이해가 안되지만요.
이상한 질문일 수도 있는데, 저런 회로 자기가 직접 만들어 볼 수 있나요?
납땜 인두하고, 실납, 빵판(만능기판, 브레드보드),
납땜 인두하고, 실납, 빵판(만능기판, 브레드보드), 7400 시리즈 IC 를 구입하여 자신이 만들 수 있습니다.
LED 도 구입하여 회로 구성하면 눈으로 확인 가능합니다.
통상,
1일때, 3.3V 또는 5V 값을 가지고
0일때, 0V 값을 가집니다.
자세한 볼트(전압)값은 IC 데이터쉬트(datasheet) 보시면 나옵니다.
Cout에서 Cin으로 들어가기전에 중간에 1bit 지연회로가 추가되면 독자들이 좀더 이해가 쉬울것 같은데요
내용 잘 알았습니다. 많은 도움이 되네요. 한편, Cout에서 Cin으로 들어가기전에 중간에 1bit 지연회로가 추가되면 독자들이 좀더 이해가 쉬울것 같지 않을까 생각됩니다. 물론 회로를 단순화하여 알기쉽게 만드시기 위해서 그렇게 하신것은 이해가 가지만요.
댓글 달기