메뉴
[Truth Table] Design of Binary Subtracter

2012. 2. 14. 01:13

Using Full Adder


Subtraction은 이전에도 end-around carry를 말하면서 언급되었듯이 full adder를 이용해서도 구현이 가능하다.
1's complement를 사용할 것인가 2's complement를 사용할 것인가가 중요한 문제가 되며,
둘 중 어찌되었든 A - B 를 계산하려면 B의 complement를 A에 더하면 된다.

위 그림은 2's complement를 이용한 것이다. 
단지 NOT gate만 달아줬을 뿐인데 왜 2's complement가 될까 라는 의문이 든다면
맨 오른쪽 full adder cell의 carry in이 1이라는 것을 보면 이해가 될 것이다.
이 carry in 을 통해서 1's complement가 아닌 2's complement가 된다.
1's complement 에 1을 더한 것이 곧 2's complement가 되는 것은 이미 배운 내용이다.
이 부분이 이해가 가지 않으면 다시 Negative Numbers에 대해 살펴보라:  http://blastic.tistory.com/167 

정리하면 NOT gate로 1's complement를 만들고 carry in으로 2's complement를 만든 것이다.

이전의 1's complement를 이용했을 때의 end-around carry를 이용하지 않으므로 조금 더 간결해 졌다.
게다가, MSB의 carry out은 그냥 ignore해버리면 된다.



Using Full Subtracter


Full adder 대신 아예 full subtracter를 사용하는 방법도 있다.
물론 이 경우에는 full subtracter에 대해서 다시 gate 설계를 해야 한다.
여기서는 carry가 아니라 borrow를 한다. 말 그대로 앞의 자리수에서 1을 빌려와야 한다.
이 개념이 자칫 이해가 어려울 수 있는 것이 빌려'온다'는 말 때문인데,
굳이 carry와 화살표의 방향을 다르게 다룰 필요는 없고, 그냥 빌려왔으면 다음 cell에 1을, 아니면 0을 보내면 된다.
우리는 그냥 이전 cell에서 나를 빌려 갔는지 아닌지만 판단하면 된다.
LSB의 cell은 이전 cell이 없으므로 이전 cell이 빌려간 1도 없다. 따라서 b_1은 항상 0으로 설정한다.

각 i번째 cell에 대해서 우리는 truth table을 만들 수 있다. 


\\ \begin{array}{rll} d_i &=& x_i'y_i'b_i+ x_i'y_iC_{in}'+x_iy_i'C_{in}' +x_iy_iC_{in} \\  &=& x_i'(y_i'b_i+ y_iC_{in}')+x_i(y_i'C_{in}' +x_iy_iC_{in}) \\ &=& x_i'(y_i\oplus C_{in})+x_i(y_i \oplus C_{in}') \\ &=& x_i\oplus y_i\oplus b_i \end{array}  \\\\\\\begin{array}{rll} b_{i+1} &=& x_i'y_i'b_i+x_i'y_ib_i'+x_i'y_ib_i+x_iy_ib_i \\&=&x_i'y_i'b_i+x_i'y_ib_i+x_i'y_ib_i'+x_i'y_ib_i+x_iy_ib_i+x_i'y_ib_i \\&=&x_i'b_i+x_i'y_i+y_ib_i  \end{array}


Truth table을 통해서 equation도 위와 같이 구할 수 있다.