Adder¶
이 문서에서는 gate들로 adder를 구현하는 것을 보여줌.
Half Adder¶
2개의 bit를 입력으로 하여 addition을 수행함.
- 이전 자리에서 넘어오는 carry에 대한 고려가 없음
- 때문에 half adder라고 불림.
Full Adder¶
2개의 bit와 이전 자리에서 넘어오는 carry를 고려한 addition을 수행함.
Ripple-carry Adder¶
full adder들을 순차적으로 연결하여 구현.
- input carry가 이전 자리에 대한 full adder의 출력 carry와 연결됨.
- 각 full adder의 출력 carry가 다음 자리의 input으로 연결되어 각 비트에서 다음 비트로 물결이 출렁이듯 전달된다는 의미로 ripple이 붙음.
쉽게 이해가 되는 구조이나 propagation delay 등으로 인해 자리수가 높은 adder 구현에는 적합하지 않음.
Carry Look-ahead Adder¶
\(i+1\) th bit의 입력 carry (or carry-in)는 다음과 같이 \(i\) th bit의 입력 bit \(A_i,B_i\)와 carry-in \(C_i\)에 의해 결정됨.
ripple carry adder의 문제점이 carry들이 순차적으로 입력되는 구조라는 점인데, 다음자리의 carry_in을 계산하려면 현재 자리의 carry-in이 있으면 되므로 이를 미리 계산해낼 수 있고,이 경우 맨 첫자리의 carry-in과 모든 자리의 \(A,B\)를 안다면 모든 자리의 carry-out을 구할 수 있다.
이를 위해,우선 \(i+1\) th bit의 입력 carry를 살펴보면 다음과 같은 식이 된다.
앞서 구한 \(C_{i+1}\)을 위 식에 대입하면, \(i+2\) th 의 carry-in (=\(i+1\) th carry-out)을 계산하는데, \(i\) th 의 입력정보만으로 충분함을 확인할 수 있다.
이를 가장 첫째 자리까지 수행하여 구하면 한번에 모든 자리의 carry를 구할 수 있게 된다.
이같이 carry를 구하는 방식의 adder를 carry look-ahead adder라고 부르며 이 경우 propagation delay의 영향이 최소화되게 된다. (단 더 많은 gate들이 필요함.)