카테고리 없음

컴퓨터 구조 - 가산기란 무엇인가? 논리게이트로 만드는 가산기, 반가산기

땅콩아놀자 2022. 12. 18.
반응형

게이트를 사용하면서 하드웨어 설계 과정이 아주 단순해졌다.

작은 프로그램을 조합해 더 크고 복잡한 컴퓨터 프로그램을 만들어 내는 것처럼,

게이트 조합으로 만든 고수준의 기본 기능 요소를 사용해 더 고수준의 부품을 만들 수 있다.

 

2의 보수 덧셈 가간기를 만들어 볼 수 있다. 가산기를 직접 설계할 필요는없겠지만,

논리를 영리하게 조작할 경우 성능을 얼마나 많이 향상 할 수 있는지 볼 수 있다.

 

 

먼저 가산기는 논리연산 불리언 대수와 이진수로 이루어지는걸 볼 수 있다.

 

논리연산 - 불리언대수

논리 연산은 예/아니요 질문에 대한 답을 표현하는 것이다.

이때 "예"를 참, true라는 용어로 부르고 "아니요"를 거짓, false라고 부른다.

 

자연어에서 예와 아니요 구절을 엮어서 한 문장으로 만드는 경우는 자주있다. 예를 들면 "밖에 비가 내리고 있거나 춥다면 코트를 입어라" 이다. 이때 '추운가가 참'이거나 '비가 오고있는가'가 참이라면 코트를 입는다가 참이다.

 

이렇게 다른 비트들이 표현하는 내용으로부터 새로운 비트를 만들어내는 동작을 논리 연산이라고 한다.

 

불리언 대수

대수가 수에 대한 연산 규칙의 집합인 것처럼, 불리언 대수도 비트에 대해 사용할 수 있는 연산 규칙의 집합이다. 일반 대수와 마찬가지로 결합 법칙, 교환 법칙, 분배 법칙을 불리언 대수에 적용할 수 있다.

 

기본적인 불리언 연산자는 NOT, AND, OR 세가지이다.

추가로 XOR이라는 합성 연산이 있다.

 

NOT : 논리적 반대를 의미한다. 거짓인 비트에 NOT을 하면 참이 되고 참인 비트에 NOT을 하면 거짓이 된다.

AND :  둘 이상의 비트에 작용한다. 2비트 연산인 경우 첫 번째 비트가 참이되고 두 번째 비트도 참인 경우에만 결과가 참이된다.(둘다 참) 2비트 보다 더 많은 비트에 연산을 적용하는 경우 모든 비트가 참이면 AND 연산의 결과도 참이된다.

OR : 둘 이상의 비트에 작용하며 2 비트 연산인 경우 첫 번째 비트가 참이거나 두 번째 비트가 참이면 결과가 참이된다. 2비트보다 더 많은 비트에 연산을 적용하는 경우 어느 한 비트라도 참이면 OR 연산의 결과도 참이된다.

XOR : 배타적 OR의 결과는 첫 번째 비트와 두 번째 비트가 다른 값인 경우에만 참이된다. 즉 두 값 중 어느 하나가 참이면  XOR의 결과는 거짓이다. 배타적 OR을 그대로 말로 하면 너무 길기 때문에 줄여서 XOR('엑스오알')이라고 부른다.

위의 표는 진리표 - truth table이다. 틀을 사용해 시각적으로 요약해 보여주는 것이다. 입력은 박스의 밖에 있고 출력은 박스 안에 있다. 이표에서 T는 참, F는 거짓을 나타낸다.

 

논리 연산을 사용해 2진 덧셈 수행하기를 표로 나타내보면 위의 그림과 같다.

 

반가산기와 전가산기 동작 이해

두 비트를 더한 값은 각 비트의 XOR이고 올림은 두 비트의 AND이다.

이 게이트로 반 가산기를 구현할 수 있다.  반가산기는 무언가 빠진 부분이 있어 가산기에 '반'이라는 접두사가 붙었다. 

두 비트를 더하기만 할땐 반가산기로도 충분하지만, 다른 자리에서 올라오는 올림을 처리하려면 세 번째 입력이 필요하다. 

따라서 각 비트의 합을 계산하기 위해 반가산기를 2개 연결 할 수 있지만 이보다 전가산기를 이용할 수 있다.

 

1. 가산기를 이용한 이진수의 덧셈

간단한 논리연산을 통해 계산기를 만들 수 있다.

 

 

0 더하기 0은 0이고 0더하기 1은 1, 1더하기 0은 1로 연산이된다.

이것은 부울대수식으로 생각하면  or연산과 같은것이다.

1 더하기 1은 0이 되어야한다.

하지만 다음 자릿수를 1 더해야한다 그래서 아래 그림과 같이 10이 나온다.

이것을 해결해주기 위한것이 carry이다.

( * 혹은 캐리 비트라고 한다. 캐리는 최상위 비트에서 그 위의 비트로 자리올림이 발생하는 것을 의미한다.)

 

 

2. Carry 가산기

 

전 가산기는 두 비트 이외에 다음 계산에서 넘어온 캐리까지 같이 계산할 수 있는 가산기를 의미한다.

1더하기 1은 10이 되어야하는데, 숫자를 추가하면 자릿수가 추가되어야 한다. 

그런 가산기를 전가산기라한다.

 

 

 

 

 

3. 여러가지 논리게이트로 SUM 가산기 만들기

기존의 GATE OR, NAND으로는 논리 게이트로는 SUM을 만들기 어렵다.

그러면 논리게이트를 연결을 더 해서 원하는 결과를 만들 수 있도록 생각해 볼 수 있다.

 

A와 B가 OR와 NAND에 둘다 흘러가도록 만든것이다.

하지만 아직 원하는 결과와 OR와 NAND의 출력결과가 동일하게 나오지 않았다.

 

그러면 SUM을 위해 논리게이트로,

OR와 NAND 게이트에 AND 게이트를 연결해볼 수 있다.

 

 

 

그러면 원하는 결과와 AND의 출력 결과가 동일함을 볼 수 있다.

 

기존의 게이트들을 연결을 해보면 원하는 결과를 얻어 볼 수 있다는 것이다.

CARRY 비트로도 이렇게 만들어 볼 수 있다.

 

 

4. XOR게이트

먼저 위의 내용에서 위의 그림과 같이 나타내기 위해서 XOR 게이트로 나타낼 수 있다.

 

 

여기까지 보면 1과 1비트를 더하기 위해, 결과적으로 SUM 비트와 CARRY비트가 필요했다

SUM비트는 XOR 게이트를 적용하면 가능하다.

CARRY비트는 AND 게이트를 이용하면 바로 나타난다.

 

그러면 1과 1 두개를 더해주는 연산은

SUM비트와 CARRY비트를 이용하여 만들 수 있는것이다.

이런 가산기가 바로 반가산기를 의미한다.

 

5. 반가산기(Half Adder)

반가산기는 두 bit를 덧셈하는 가산기를 의미한다.

그래서 반가산기는 입출력이 각 두개이다.

 

 

각각 하나의 bit인 A와 B를 더해서 합 S와 자리올림(Carry) C를 출렵하는 조합 논리회로를 아래와 같이 나타낼 수 있다.

좌 회로 / 우 박스 표현

 

6. 전가산기(full adder)

전가산기는 두 bit 외, carry 까지 계산할 수 있는 가산기를 의미한다.

 

반가산기를 조합해서 전가산기를 만들 수 있다.

전가산기는 A bit, B bit, carry bit 값을 입력으로 받아서, sum과 carry값을 출력 해준다.

 

 

위의 그림을 하나의 박스 전가산기인 full adder로만 쌓아서 만들 수 있다.

Carry, A, B를 입력하여 S(합), Carry(자리올림)을 출력할 수 있다.

반응형

댓글