디지털 회로개론

Lecture 14&15 (Adder)

kangyuseok 2021. 12. 6. 23:34
728x90

The Half-Adder

Input : 두개의 2진수가 들어옵니다.

Output : 두개의 출력이 나오는데 하나는 sum 또 다른 한개는 carry 입니다.

 

 

A B C out Sum
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

다음 진리표를 보면

C out은 입력 A와 B의 AND gate와 같은 역할을 하는 것을 볼 수 있습니다.

Sum 은 입력 A와 B 의 XOR gate와 같은 역할을 하는 것을 볼 수 있습니다.

 

따라서 왼쪽 그림과 같은 회로도로 나타낼 수 있습니다.

 

 

 

 

 

 

 


 

The Full-Adder

Input : 2개의 이진수와 Carry가 들어갑니다.

Output : Sum과 Carry가 나옵니다.

Half Adder와 차이점은 Full Adder은 Input으로 Carry를 받는다는 것입니다.

 

다음 진리표를 보면 

C outCin(A⊕B)+AB 와 같다는 것을 알 수 있습니다.

Sum(A⊕B)⊕Cin 과 같다는 것을 알 수 있습니다.


Parrallel Binary Adder

두개 또는 그 이상의 full-adder가 연결되어 있는 형태 입니다.

예를 들어 3-bit 2진수 덧셈 101 + 011 이라고 한다면 

A3 = 1, A2 = 0, A1 =1

B3 = 0, B2 = 1, B1 = 1

입니다.

다음과 같은 결과가 나오게 됩니다.

 

cascading (연속화)

다음 그림을 보면 4-bit full adder2개를 서로 연결시켜 8-bit adder를 만들 수 있습니다.

low-order adder에서 나온 Cout이 high-order adder의 Cin 으로 연결됩니다.

이러한 연결성을 cascading이라고 합니다.

예를 들어

A8A7A6A5A4A3A2A1 = 10111001

B8B7B6B5B4B3B2B1 = 10011110

이라고 하면 먼저 low-order adder에서 A4A3A2A1과 B4B3B2B1 을 계산하고 Cout을 high-order adder로 보내줍니다.

또 high-order adder에서는 A8A7A6A5와 B8B7B6B5 를 계산해주고 최종결과를 출력합니다.

 

parrallel adder는 내부의 carry의 이동에 따라 2가지의 adder로 나뉘어 질 수 있습니다.

Ripple CarryLook-Ahead Carry 입니다.

외부적으로는 둘다 비슷해 보이지만

속도 측면에서 Look-Ahead Carry > Ripple Carry 입니다. 즉 Look-Ahead Carry가 더 빠릅니다.


The Ripple Carry Adder

일반적인 parrallel adder와 비슷합니다.

첫번째 adder에서 계산한 carry out이 다음 adder의 carry in에 입력으로 들어가게 됩니다.

여기서 두번째 adder는 carry in이 들어오기 전까지 작동을 안합니다.

따라서 각 adder을 거칠 때 마다 time delay가 발생하게 됩니다.

다음 그림을 보면 총 32ns의 time delay가 발생한것을 볼 수 있습니다.


The Look-Ahead Carry Adder

가장 큰 특징은 각 adder마다 carry out을 미리 예상한다는 것입니다.

따라서 carry delay를 줄여 시간을 단축할 수 있습니다.

output carry는 carry generation 또는 carry propagation에 의해 만들어 집니다.

 

Carry generation

carry generation은 내부적으로 carry가 발생할때 발생합니다. 

A      B

0  +  0

0  +  1

1  +  1 (Carry 발생)

carry는 두개의 bit가 모두 1일 때 발생하므로 Cg는 AND로 사용할 수 있습니다

Cg = AB

 

Carry propagation

carry propagation은 두개의 입력 bit가 모두 0일 때만 발생하지 않고 나머지는 발생합니다.

A      B

0  +  0 (발생 X)

0  +  1 (발생 O)

1  +  1 (발생 O)

따라서 Cp는 OR로 사용할 수 있습니다.

Cp = OR

 

이제 우리는 Carry가 발생하는 경우를 알아볼 것입니다. (carry = 1)

1) Cg 가 1 이면 무조건 carry가 발생합니다.

2) Cp가 1 이고 Cin 이 1이면 무조건 carry가 발생합니다.

즉 2가지 경우중 1가지 경우만 만족해도 carry가 발생하게 됩니다.

따라서 Cout = Cg + Cp *Cin 을 만족합니다.

 

이렇게 미리 carry발생을 알 수 있어 시간절약에 도움이 됩니다.