티스토리 뷰

Study/Circuit

[Circuit] 3bit ripple carry adder 구현하기

생각많은 소심남 2015. 10. 15. 00:49

3bit ripple carry adder 라는 게 있다. 

이게 하는 역할은 3bit짜리 2`s complement 값을 인자로 받아 두개의 합을 3 bit 의 result와 그에 대한 carry를 나타내는 논리 회로다. 생긴건 위와 같이 생겼다. 말속에 adder라는 말이 들어있다시피 여러 개의 full adder를 합쳐서 만들게 된다. 그래서 위의 회로를 full adder로 풀어쓰게 되면 다음과 같은 그림이 된다.



결국 3 bit ripple carry adder를 설계하려면 1 bit full adder를 설계할 수 있어야 한다. 지난 포스트 중에 mux를 활용해서 2 bit adder / subtractor를 만들어봤었는데, 이번에는 단순히 Full Adder만을 활용한 3bit ripple carry adder를 만들어보고자 한다. 

 우선 1 bit full adder의 truth table을 그리면 다음과 같다.


 

이 표를 이용해서 논리회로를 설계하라는 게 첫번째 관문이다. 어떻게 보면 조금 막막할 수도 있겠지만 디지털 논리회로 수업을 들은 사람이라면 이 표를 보고 Sum Of Product(SOP)나 Karnaugh map을 그려서 최소화된 논리 연산자만으로 이뤄진 식을 만들 수 있을 것이다. 개인적으로는 karnaugh map으로 그리는게 직관적이고 효율적으로 회로를 그릴 수 있는 듯 하다. 아무튼 이를 통한 결과물로 S와 Cout에 관해서 다음과 같은 수식을 만들 수 있다.

이 수식을 보면 이제 S를 만드는데는 3개의 입력과 2개의 XOR 소자(가능하다면 3 input XOR 소자 1개)가 필요할 것이고, Cout을 설계하려면 2 input AND와 3 input OR 논리소자가 필요할 수 있다는 것을 알 수 있다. 과제에서는 XOR 소자가 어려워서 reference로 다음과 같이 주어졌다.


이제 여기까지 오면 Gate level에서 3 bit ripple carry adder를 구현하기 위해서 어떤 소자들이 필요한지 알 수 있다. 보면 AND, OR 소자도 필요하고 XOR 소자를 구현하기 위해선 앞에 보이는 것처럼 NOR2 소자가 필요하다. 아마 하는 사람은 알겠지만 CMOS로 만들 수 있는 가장 기본적인 소자가 바로 NAND와 NOR, 그리고 inverter 다. AND연산자도 NAND에 inverter를 붙이면 되고, OR 연산자도 NOR에 inverter를 붙여서 만들 수 있는데, 결국 이를 통해서 알 수 있는 건, ripple carry adder가 막 복잡한 소자로 구성되어 있어서 만들기 힘들것처럼 보이지만 실제로는 NAND와 NOR, NOT gate만 만들 수 있으면 구현할 수 있다는 거다. 일단 고정 값으로 pMOS의 width를 16, nMOS의 width를 4, 그리고 MOS 전부의 length를 1로 고정하고 각각을 만들어보았다.


- NAND2 : AND를 만들기 위함


- NOR2 : XOR2와 OR를 만들기 위함


- NOR3 : OR3를 만들기 위함

- XOR2

- 1 bit Full Adder


- 3 bit ripple carry adder

정말 논리 회로는 만들때마다 신기하고, 신경써야 할 것도 많다. 배치를 어떻게 하냐에 따라서 값이 완전 다르게 나올 수도 있고, 혹은 MOS의 width ratio를 잘 못 계산해버리면 원하는 결과와 다른 값도 얻을 수 있다. 이때문에 뭔가 이런 회로를 설계할 때는 항상 선을 어디에 연결하고 값을 잘 넣었는지는 확인하는 게 중요한 거 같다.

 아무튼 간단한 논리 소자를 가지고 3bit ripple carry adder를 만들어 봤다.

댓글