덧셈? a + b = c, 즉 두 개의 입력을 받아 c 를 출력하게 함

 

1. 칩에 대한 진리표를 만든다

2. 진리표를 수식으로 만든다

3. 수식을 논리게이트로 표현한다

 

[칩에 대한 진리표를 만든다]

덧셈을 진리표 형식으로 나타내기

A B C
0 0 0
1 0 1
0 1 1
1 1 2

bit로는 마지막 행을 표현할 수가 없음

---> '자리올림'으로 해결

ㄴ 위 그림을 열별로 보았을 때 덧셈을 두번 시행했다고 볼 수 있음

(자리올림값) + a + b = c 로 된 계산이 두번 시행된 것

 

따라서 가산기의 모양은 아래와 같이 됨

input은 세 개 : A, B, Ci (자리올림)

output은 두 개: Sum, Co (다음 자리올림에 올라갈 값)

 

Co 값은 새로운 가산기의 Ci 값이 됨

병렬 연결

 

위 가산기의 진리표를 그려보기

input output
A B Ci Co Sum
0 0 0 0 0
1 0 0 0 1
0 1 0 0 1
0 0 1 0 1
1 1 0 1 0
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1

 

[진리표를 수식으로 만든다]

사실은 ... Adder는 두 개의 칩으로 이루어진 것이다. output이 두 개(Co, Sum)이기 때문!

하나의 칩은 하나의 output을 가진다고 보면 된다

 

먼저, Co 에 대한 수식을 만들어보자

- 진리표에서 Co이 1이 되는 행을 찾는다

- Co 이 참이 될 때는?

  - A는 거짓이고 B가 참이고, C도 참인 경우

혹은

  - A가 참이고, B가 거짓이고, C도 참인 경우

혹은 

  - A가 참이고, B가 참이고, C는 거짓인 경우

혹은

  - A가 참이고, B가 참이고, C가 참인 경우

--> 이를 수식으로 나타내면 (Ac∩B∩C)∪(A∩Bc∩C)∪(A∩B∩Cc)(A∩B∩C)

--> 이를 단순화하면 (A∩B)∪(B∩C)(AC)

(계산 과정)

 

[수식을 논리게이트로 표현한다]

(A∩B)∪(B∩C)(AC)

이상 Co칩을 논리게이트로 표현했다

 

같은 방식으로 Sum칩을 표현한다면?

 

드디어 두 칩을 활용해서 Adder(가산기) 만들기

다만 위 가산기는 1bit 연산밖에 되지 않음

 

만약 1비트 이상의 연산을 하고자 한다면? 예를 들어 3비트 연산

열 방향으로 보았을 때 가산기 세 개가 존재하는 것임

앞 연산들이 모두 끝나야 다음 연산이 가능하다는 단점 ---> 1비트 연산에 비해 3비트 연산이 3배의 시간이 걸리게 됨

이와 같이 Carry가 물방울 뚝뚝 떨어지듯 연산이 이루어지는 '리플 캐리 방식'이 실제로 쓰이지 않음

 

따라서 '캐리 룩어헤드' 방식을 사용하게 됨: 캐리값이 한꺼번에 계산이 되어 Sum값이 한번에 계산이 되는 시스템

 

추가 자료: https://opentutorials.org/module/2719/15502

 

 

복사했습니다!