[無에서 시작하는 컴퓨터&과학]

[컴퓨터][13] 산술/논리 연산 회로 - 1 (이진법과 비트 그리고 덧셈 회로 : 반가산기)

core-basic 2024. 8. 30. 21:13
728x90

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.


이전 글을 통해서

컴퓨터 설계 목적과 그 목적에 알맞은 폰 노이만 컴퓨터 구조를 살펴보았다.

컴퓨터는 초기에 산술/논리 연산 등 수학적 계산을 자동화하고자 설계되었다.

이후 계산한 결과들을 재사용하고자,

저장과 읽기 기능이 있는 메모리 회로를 구현하게 되고

더 나아가

여러 가지 작업을 자동으로 수행하기 위해 제어장치 회로를 구현하게 되었다.

그리고 다른 컴퓨터와 데이터를 주고받는 통신 기능까지 구현하게 되었다.

 

[컴퓨터][12] 게이트로 컴퓨터를 구현한다는 것은 어떤 의미인가 (폰 노이만 구조)

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.이전 글들을 통해서컴퓨터가 다양한 전류의 흐름을 제어하는 회로로 구성되어 있으며각 회로는 사람의 언어로

core-basic.tistory.com

따라서 이번 글을 통해서

컴퓨터 설계 목적 순서에 따라 초기에 산술/논리 연산을

어떻게 회로, 게이트들로 구현할 수 있었는지 살펴보겠다.

< 산술/논리 연산 회로 >
( 이진법과 비트 그리고 반가산기 )


< 산술/논리 연산 회로 >

컴퓨터는 초기에 기본적인 산술/논리 연산 회로였다.

초기에는 기본적인 논리 연산 AND,OR, NOT, XOR, NAND, NOR, NXOR

그리고, 기본적인 산술 연산 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)이 요구되었다. 

이에 대해,  앞선 글을 통해서 전지, 전선, 스위치, 릴레이 등을 이용해

기본적인 논리 연산자 AND, OR, NOT, XOR 등을 구현할 수 있었다.

그리고 AND, OR, XOR은 NOT 게이트와 결합하여

 NAND, NOR, NXOR 게이트를 구현할 수 있었다.

그렇다면

산술 연산자, 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)은 어떻게 구현 할 수 있을까

만약 앞서 언급한 재료들로 덧셈, 뺄셈, 곱셈, 나눗셈 회로를 구성한다면

실질적으로 우리는 그 회로의 입력으로

 

(1) 스위치를 누름으로써 전류가 흐르는 상태

(2) 눌러진 스위치를 떼어냄으로써 전류가 흐르지 못하는 상태

 

이렇게 두 가지 논리적 상태를 입력으로 할 수 있다.

따라서

회로에서 입력이라는 것은 무언가 넣는 것이 아닌

회로의 상태를 결정하는 신호를 제공하는 것이다.

그래서

입력이라는 단어보다는 입력 신호라는 단어가 더 적합할 수도 있다.

그러므로,

두 가지 입력 신호만으로 덧셈, 뺄셈, 곱셈, 나눗셈 등

산술 연산을 할 수 있어야 회로를 구성할 수 있다.


< 전자 회로와 부울 대수 그리고 이진법 >

자 회로와 같이 두 가지 입력 신호를 이용한 수 체계로는

이전 글을 통해 알아본 부울 대수가 있다.

부울 대수는 두 가지 논리 상태 : 참과 거짓을 사용한다.

이는 전자 회로의 두 가지 상태에 직접적으로 대응이 된다.

(1) 스위치를 누름으로써 전류가 흐르는 상태 : 참

(2) 눌러진 스위치를 떼어냄으로써 전류가 흐르지 못하는 상태 : 거짓

그리고 부울 대수는 논리 연산자 (AND, OR, NOT, XOR 등)를 통해

새로운 논리 결과를 도출해 낼 수 있다.

이에 따라

이전 글들을 통해 논리 연산자들을 회로로 구현해 보았다.

따라서, 무엇이든 부울 대수로 표현할 수 있다면 회로를 구현할 수 있다.

 

[컴퓨터][4] 부울 대수의 논리 표현식을 스위치 회로로 구성하기(게이트)

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.이전 글을 통해서 부울 대수가 무엇인지, 그리고부울 대수를 통해서 세상을 논리 표현식으로 구성할 수 있다는

core-basic.tistory.com

하지만

산술 연산이라는 것은 숫자를 다루는 연산이다.

따라서 부울 대수의 참과 거짓이라는 상태만으로는

직접적으로 숫자를 다루는 산술 연산을 하지 못한다.

따라서

논리 상태 : 참과 거짓, 회로의 입력 신호 등을

두 개의 숫자에 각각 대응할 필요가 있다.

이를 위해 모든 숫자를 두 개의 숫자 표현하는 체계인

이진법 체계를 사용한다.


< 이진법과 비트 >

이진법 체계는 수학자 라이프니츠가 발명하였으며,

두 개의 숫자 기호, ‘0’과 ‘1’을 사용하여 모든 숫자를 표현할 수 있다.

이에 따라 ‘0’과 ‘1’로 이루어진 수를 이진수라고 한다.

그리고

다음과 같은 두 가지 입력 신호, 논리 상태에 각각 대응될 수 있다.

 

스위치를 누름으로써 전류가 흐르는 상태 : 참 : 1

눌러진 스위치를 떼어냄으로써 전류가 흐르지 못하는 상태 : 거짓 : 0

 

따라서,

이진수는 산술연산이 가능하므로,

이진수가 어떠한 과정을 거쳐 덧셈을 하는지 이해한다면, 그리고

 ‘0’과 ‘1’ 두 숫자가 산술 연산에서 어떻게 변화하는지 이해한다면,

산술 연산 과정을 논리 표현식으로 변환하고,

그렇게 변환된 논리 표현식을 통해 전자 회로를 구현할 수 있다.

따라서

컴퓨터는 이진법 또한 사용한다고 볼 수 있다.

 

정리하면

부울대수는 전기 회로를 설계 및 분석하는 데 사용되고,

이진법은 전기 회로의 상태를 표현하거나,

숫자/데이터를 저장하거나 계산할 때 사용된다.


< 비트 >

그리고 특정 지점에서 전류가 흐르는지, 흐르지 않는지 등

“전기 회로의 상태”를 “비트(bit)”라고 부르며,

위에서 언급하였듯이 0(거짓)과 1(참)로 표현할 수 있다.


<십진법과 이진법>

이진법으로 산술 연산을 하기 위해

사람이 사용하는 십진법과 차이를 비교해 보며,

이진법의 특징을 알아보겠다.

십진수 0 1 2 3 4 5 6 7 8
이진수 0 1 10 11 100 101 110 111 1000
십진수 9 10 11 12 13 14 15 16
이진수 1001 1010 1011 1100 1101 1110 1111 10000

[차이점 1]

십진법은 열 개의 숫자 0~9를 사용하는 반면,

이진법은 두 개의 숫자 0, 1만 사용한다.

 

[차이점 2]

십진법은 10의 거듭제곱에서 자리올림이 발생하여 자릿수가 증가하고,
(10, 100, 1000...)

이진법은 2의 거듭제곱이 될 때 자리올림이 발생하여 자릿수가 증가한다.
( 2, 4, 8, 16... )


< 이진수의 덧셈 과정 >

이진수의 덧셈 과정에서

‘0’과 ‘1’ 두 숫자가 어떻게 변화하는지 파악한다면, 회로로 구현할 수 있다.

따라서

우선 자리올림을 따로 빼놓고

1비트 이진수 덧셈을 진행할 경우 그 과정은 다음과 같다.

0 + 0 = 0 (자리올림 : 0)

0 + 1 = 1 (자리올림 : 0)

1 + 0 = 1 (자리올림 : 0)

1 + 1 = 0 (자리올림 : 1)

그리고 해당 과정을 표로 표현하면 다음과 같다.

A B A + B (합) C (자리올림)
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

그리고 주어진 표를 논리게이트와 비교해 보면

A+B의 결과는 A, B에 대해서 XOR게이트와 같고,

C(자리올림)의 결과는 A, B에 대해서 AND게이트와 같다.

따라서 이를 논리 게이트 표에 대응시키면 다음과 같다.

A B A XOR B  [ A + B (합) ] A AND B  [ C (자리올림) ]
거짓(0) 거짓(0) 거짓(0) 거짓(0)
거짓(0) 참(1) 참(1) 거짓(0)
참(1) 거짓(0) 참(1) 거짓(0)
참(1) 참(1) 거짓(0) 참(1)

따라서, A+B의 합을 출력하는 부분과

자리올림을 출력하는 부분을 나누어 이를 논리적으로 표현하면

간단한 한자리 덧셈 연산을 회로로 구현할 수 있다.


< 덧셈 회로 : 반가산기(Half adder) 회로 >

 

< 0 + 0 = 0 (자리올림 : 0) >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< 0 + 1 = 1 (자리올림 : 0) >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< 1 + 0 = 1 (자리올림 : 0) >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< 1 + 1 = 0 (자리올림 : 1) >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

하지만 자리올림이 없는 한 자리 덧셈 연산에 불과하고

덧셈 기능을 부분/절반만 수행한다고 하여

“반가산기(Half adder)”라고 부른다.

 

혹시, Paul falstad 사이트에서 gate를 이용할 경우 전자의 흐름이 보이지 않는데

이에 대해 아시는 것이 있다면 공유 부탁드리겠습니다.

 

이번 글은 요기서 마치며,

다음글은 절반의 기능을 하는 반가산기에 어떠한 변화를 주어서

완전한 가산기를 구현할 수 있을지 알아보고

더 나아가, 다른 산술 연산 회로에 대해서도 탐구해 보겠다. 


※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.

728x90