저번 포스팅에서 10진수의 덧셈을 할 수 있는 BCD Adder를 구현했습니다. 이번 포스팅에서는 Binary Multiplier와 Magnitude Comparator에 대해 알아보고 구현해보도록 하겠습니다.
두 Binary number 101과 110을 곱하면 어떻게 될까요? 위 연산 과정을 보면 0에 어떤 수(0 혹은 1)을 곱하면 0이 나오고 1에 1을 곱하면 1이 나오는 것을 알 수 있습니다. 이것은 AND Gate의 Logic과 동일합니다.
Binary Multiplier은 두 Binary number을 곱하는 것입니다. 그렇다면 Binary Multiplier를 어떻게 구현할 수 있는지 지금부터 알아보겠습니다.
2bit × 2bit의 곱셈은 위와 같이 나오게 됩니다. 위 곱셈 과정을 보면 Binary Multiplier은 AND Gate와 Adder로 구현될 수 있는 것을 확인할 수 있습니다.
이때 2bit × 2bit은 2bit을 더하게 되므로 AND Gate와 half adder를 사용해 구현할 수 있고 위와 같습니다. 그렇다면 4bit × 3bit Multiplier는 어떻게 구현할 수 있을까요?
우리가 앞에서 배운 half adder는 2bit을 더할 수 있고 full adder은 3bit을 더할 수 있습니다. 하지만 위와 같이 4bit × 3bit은 두 단계로 나눠서 더하면 되는 것을 확인할 수 있습니다.
지금까지 Binary Multiplier을 구현해봤는데 이번에는 binary number를 비교하는 Magnitude Comparator를 구현해보도록 하겠습니다. 그렇다면 어떻게 binary number를 비교할 수 있을까요? 우리가 두 숫자 A, B를 비교하면 세 가지 case에 따라 비교할 수 있습니다. 첫 번째는 A > B, 두 번째는 A = B, 세 번째는 A < B 입니다. 그렇다면 지금부터 4bit binary number인 A3A2A1A0 과 B3B2B1B0 를 구현해보겠습니다.
먼저 A = B인 case부터 구현해보도록 하겠습니다.
A3A2A1A0 와 B3B2B1B0 을 비교할 때 상위 bit부터 차례대로 비교해서 만약 두 bit이 같다면 1을 출력하고 다르다면 0을 출력하도록 Logic을 구현해보겠습니다. 이걸 논리식으로 나타내면 두 수가 같으면 1, 다르면 0을 출력하는 XNOR2 Gate를 사용해 구현하고 4 bit이 전부다 같아야 하므로 AND Gate를 사용하여 정리할 수 있습니다.
다음으로 A > B인 case를 구현해보도록 하겠습니다.