불 연산 회고
이 2장 정리를 진작에 했어야 했는데 시간이 나지를 않아서 지금 포스팅하게 되었다.
모든 코드는 깃허브에 있다.
일단 저번 회고 때 마지막으로 정리했던것은 카르노맵 이었다.
카르노맵으로 뭔가의 공식들을 도출할 수 있으니까 논리식을 간소화한 후에 회로도를 셋팅하는 정도는 이제 무리가 없었다.
이게 정말 다행이었고 여기서부터는 이제 입력 값이 3개이기 때문에 3변수 카르노맵을 통해
풀게 되었다.
일단 2진수의 덧셈을 생각해보면 2진수는 0과 1로 이루어져있다.
일반적인 10진수에서 덧셈을 할때를 보면 10일때는 올림
처리를 한다.
2진수도 마찬가지다 도합 2가 되면 올림
처리를 해주는 것이다.
그것을 Carry
라고 부른다.
자 반가산기 이다. 반가산기는 덧셈을 수행하는 가산기이며 입력값이 두가지 이다.
그러니까 처음 계산할 때 대부분 반가산기를 사용할 것이다.
2진수로 1 + 1 = 0
이 성립한다.
이때 X = 1, Y = 1인것이고 Carry(올림)
이 1이다 왜냐면 저 0은 더해서 2가 되어서
올림 처리를 해주고 남은 0이라서 합계가 0이 되는 것이다.
그래서 진리표대로 잘 나오는 것을 확인하였고 이것을 토대로 카르노맵을
Carry의 입장, Sum의 입장에서 하나씩 구현을 했다.
이 반가산기는 언제쓰나 했더니 자세히 보니까 한자리 덧셈만 할 때,
이 때만 수행해준다.
전가산기
이 전가산기가 나온이유가 바로 위에서 반가산기 덧셈 후에
그러니까 맨 처음 덧셈을 수행할 때만 이렇게 해주고
나머지는 올림처리한 입력값 까지 같이 계산을 해야되니까
이 전가산기를 통해 나머지 연산을 해주어야 한다.
16비트 가산기
그래서 이 16비트 가산기가 설명을 하자면
예를들어 1111
+ 1010
이 두개를 더한다고 해보자
1 1 1 1
1 0 1 0
맨 오른쪽인
1과 0을 보면 이제 이 부분이 반가산기로 연산을 수행하는 것이다.
1 + 0 은 0이고 Carry 또한 발생하지 않았기 때문에 그대로 진행하고 그 다음부터는 올린 수를 고려해야 하기 때문에
3개 입력 -> 이전 Carry 0 + 1 + 1이 되는 것이다.
HalfAdder
FullAdder
...
를 수행하게 된다.
이렇게 반가산기, 전가산기 두개로 가산기에 대해서 알아보았다.
ALU라는 2장의 끝판왕이 존재하는데 저번 회고에서
이 유튜브 페이지에 들어가서 Computer Science
탭에 ALU설명을 듣고나니까 구현할 수 있을것만 같다.
토요일에 구현해보고 다시 회고를 작성해보겠다.