컴퓨터를 만듭시다. 어때요~ 참 쉽죠? (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로 하면 된다. 그림은 따로 그리지 않겠다.

컴퓨터에게 더하기를 가르쳐 준다기에 거창한줄 알았는데, 별거 없었다. 그냥 논리 게이트 몇 개 잘 조합해서 덧셈과 동일한 진리표가 나오게했을 뿐이다. 사실 그거면 다 한것이다. 논리 회로에서는 그 이상 더 해 줄것이 없다. 하지만 아직은 약간 심심하다. 언제나 그렇듯 내 이야기는 조금씩 살을 붙여나간다. 오늘 본 이 간단한 가산기는 앞으로 얼마나 위대해 질 것인가! 기대해 주시기 바란다.

댓글

netop의 이미지

입사하고 바쁘실텐데 짬내서 새로운연재를 하고계시는군요..ㅎㅎ

디지털시간에 대충 외웠던 내용이 쏙쏙 이해되네요..항상 열심히 하시는모습이 부러워요!

계속해서 좋은내용 부탁드려요!
-------------------------------------------

-------------------------------------------

때로는 알면서도 모르는척..
때로는 모르면서도 아는척..

바보가 아니면서도 바보인척..
바보이면서도 바보가 아닌척

이원형의 이미지

감사합니다.

퀘이크의 이미지

이상한 질문일 수도 있는데, 저런 회로 자기가 직접 만들어 볼 수 있나요?

익명 사용자의 이미지

납땜 인두하고, 실납, 빵판(만능기판, 브레드보드), 7400 시리즈 IC 를 구입하여 자신이 만들 수 있습니다.
LED 도 구입하여 회로 구성하면 눈으로 확인 가능합니다.

통상,
1일때, 3.3V 또는 5V 값을 가지고
0일때, 0V 값을 가집니다.

자세한 볼트(전압)값은 IC 데이터쉬트(datasheet) 보시면 나옵니다.

j9500404의 이미지

내용 잘 알았습니다. 많은 도움이 되네요. 한편, Cout에서 Cin으로 들어가기전에 중간에 1bit 지연회로가 추가되면 독자들이 좀더 이해가 쉬울것 같지 않을까 생각됩니다. 물론 회로를 단순화하여 알기쉽게 만드시기 위해서 그렇게 하신것은 이해가 가지만요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.