Personal Project/Binary Adder 구현

01 프로젝트 소개 / 이론

Orangetasteboy 2023. 6. 21. 13:28

프로젝트 소개

주제 : Binary Adder 구현

사용 언어 : Verilog


Binary Adder

4비트 2진수 2개와 Carry 입력을 더하여 4비트 2진수 합과 Carry를 출력하는 Binary Adder를 설계할 때, 크게 3가지 방식으로 접근할 수 있다.


첫 번째 접근 방식은 9개의 입력과 5개의 출력을 갖는 4비트 Parallel Adder 를 설계하는 것이다.

입력 9개는 Carry와 4비트 2진수 2개로 구성되어있고, 출력 5개는 덧셈 결과값인 4비트 2진수 1개와 Carry로 구성되어있다.

이 방식은 논리 회로가 복잡하다는 단점을 갖고 있어 활용하기 적합하지 않다.


두 번째 접근 방식은 Ripple Carry Adder이다.

2개 비트와 1개 Carry를 덧셈하는 Full Adder 모듈 4개를 연결하여 설계하는 방식으로, 첫 번째 모듈에서 출력되는 Carry는 두 번째 모듈의 Carry 입력이 되는 방식으로 동작한다.

LSB에서부터 연산을 시작하는 방식이 일반적으로 우리가 계산하는 방식과 유사하여 직관적이고 논리 회로가 4비트 Parallel Adder보다 비교적 단순하다는 장점이 있다.

하지만 첫 모듈의 Carry를 마지막 모듈까지 전파해야하기 때문에 비트 수가 커질 경우 Delay가 커진다는 단점을 갖고 있다.

 

세 번째 접근 방식은 Carry-Lookahead Adder이다.

Carry를 위해 이전 모듈에서의 결과값을 기다리지 않고 Carry를 예측하기 위해 Propagation과Generation을 사용한다.

Ripple Carry Adder에서 발생할 수 있는 Carry 연산의 Delay를 줄일 수 있는 장점이 있다.

하지만 4-bit Carry-Lookahead Circuit을 활용하는 경우, Gate의 fan-in이 증가하여 Cost 측면에서 문제가 발생한다.

fan-in을 줄이기 위한 방법으로 4-bit Carry-Lookahead Circuit을 Cascade하여 16-bit Adder with Carry-Lookahead를 이용할 수 있다.

16비트를 4비트씩 나누어서 Cascade하게 되면 Delay는 증가할 수 있으나, fan-in은 줄어들어 Cost 측면에서 발생하는 문제를 해결할 수 있다.

하지만 하나의 4-bit Carry-Lookahead Circuit에 Propagation Delay는 2개의 Gate Delay가 발생하므로, 총 Propagation Delay는 8개의 Gate Delay가 발생하게 된다.


Gate Delay 문제를 해결하는 방법으로 4-bit Carry-Lookahead Circuit을 2-Level로 사용하는 16-it Adder with Second Level Carry-Lookahead Adder가 있다.

이를 사용하면 가장 아래 단계의 4-bit Carry-Lookahead Circuit의 Propagation Delay는 2개의 Gate Delay만 발생하게 된다.

 

Binary Subtractor

Binary Subtracter 설계는 2진수 뺄셈을 빼는 수의 보수를 더하는 방식으로 연산한다는 것에서 시작한다.

Binary Adder와 유사한 접근 방식으로 설계할 수 있다.


첫 번째 접근 방식은 Full Adder 모듈 4개를 연결하고 빼는 수에 해당하는 비트 입력에 complement를 적용하여 설계하는 방식이다.

 

두 번째 접근 방식은 Full Substracter 모듈 4개를 연결하여 설계하는 방식이다.

 

가장 오른쪽 모듈에서 첫 번째 두 비트가 뺄셈 연산되고, 앞 자리에서 빌려올 필요가 있을 때 borrow 신호를 발생시키는 방식으로 동작한다.