논리회로는 크게 조합 논리회로와 순차 논리회로로 나눌 수 있습니다.
조합 논리회로는 출력값이 입력값에만 영향을 받는 논리회로 입니다. 논리회로에 입력이 주어지면 바로 출력이 나오며, 이전의 회로 상태가 출력에 영향을 미치지 않습니다. 즉, 메모리 소자를 가지지 않습니다.
순차 논리회로는 조합 논리회로와 달리 출력값이 입력값 이외에 메모리 소자에 저장된 이전 상태에 의해서도 영향을 받는 논리회로 입니다. 즉 메모리 소자를 가집니다.
이번 글에서는 조합 논리회로 중 가산기에 대해 알아보겠습니다.
가산기(Adder)는 입력들의 합을 출력하는 논리회로입니다. 가산기에는 2개의 입력을 더하는 반가산기(Half Adder, HA)와, 3개의 입력을 더하는 전가산기(Full Adder, FA)가 있습니다.
1. 반가산기(Half Adder, HA)
반가산기(HA)는 2진수 한 자리를 덧셈하여 캐리(Carry)와 덧셈의 결과를 출력합니다. 반가산기의 진리표는 아래와 같습니다.
A |
B |
캐리(C) |
덧셈(S) |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
진리표를 보면, 올림수인 캐리는 AND gate, 덧셈의 결과는 XOR gate와 동일함을 알 수 있습니다. 회로는 다음과 같습니다.
반가산기의 경우 캐리에 대한 입력을 받지 않기 때문에 최하위 비트(Least Significant Bit, LSB)에서만 사용할 수 있습니다.
2. 전가산기(Full Adder, FA)
전가산기(FA)는 반가산기에 캐리를 추가한 3개의 입력을 더하여 캐리와 덧셈의 결과를 출력하는 회로입니다. 전가산기의 진리표는 아래와 같습니다.
A |
B |
Cin |
Cout |
S |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
진리표만으로는 회로를 설계하기 어렵습니다. 논리식을 설계하기위해 카르노맵을 그려보겠습니다. 카르노맵에 대한 설명은 이 글에서 생략합니다.
카르노맵을 통해 다음과 같은 논리식을 설계할 수 있습니다.
해당 논리식을 토대로 회로를 그리면 다음과 같습니다.
2개의 반가산기와 OR gate로 구성되어 있음을 알 수 있습니다. 간략화하면 다음과 같습니다.
전가산기 n개를 병렬로 연결한다면 리플 캐리 가산기(Ripple Cary Adder)라는 n비트 가산기를 만들 수 있습니다.
가산기의 B 입력을 부호 플래그와 XOR하여 사용한다면 덧셈과 뺄셈이 모두 가능한 회로가 됩니다. 이것은 2의 보수법을 이용한 것입니다.
3. 캐리 예측 가산기(Carry Look-ahead Adder, CLA)
리플 캐리 가산기는 전가산기를 통해 간단하게 설계할 수 있지만, 비트수가 늘어날수록 연산속도가 느려진다는 문제가 있습니다. 왜냐하면 캐리를 입력으로 받기 때문에 상위 비트는 하위 비트가 계산될 때까지 연산을 하지 못하고 대기해야 하기 때문입니다. 이것을 해결하기 위해서 캐리 예측 가산기(CLA)를 사용할 수 있습니다.
캐리 예측 가산기는 부분 전가산기(Partial Full Adder, PFA)로부터 생성(Generation)과 전파(Propagation) 함수를 입력받아 이전 비트의 계산결과를 기다릴 필요 없이 연산을 한번에 할 수 있습니다.
부분 전가산기(PFA)는 전가산기(FA)에서 캐리 생성과 관련된 회로를 제외한 회로입니다. 캐리는 PFA에서 2개의 출력선에 의해 결정됩니다.
생성(G) 함수는 이전 비트의 결과값에 상관없이 캐리의 생성여부를 결정합니다. 부분 전가산기의 AND gate에 의해 출력된 값이 이에 해당합니다.
전파(P) 함수는 이전 비트의 결과값에 따른 캐리의 생성여부를 출력합니다. 부분 전가산기의 XOR gate에 의해 출력된 값이 이에 해당합니다.
G와 P를 통해 S와 C를 구하는 논리식을 다음과 같이 세울 수 있습니다.
부분 전가산기 4개로 4비트 전가산기를 구성한다면 4개의 캐리에 대한 회로를 구성해야 합니다.
이렇게 구성된 4비트 가산기를 2개 연결하면 8비트 가산기, 4개 연결하면 16비트 가산기를 만들 수 있습니다.
|