Kogge-Stone Adder

왜인지 정확히는 잘 모르겠지만
나는 굉장히 arithmetic unit에 집착하는 편인 것 같다.
사실 processor의 설계 면에서 봤을 때는
arithmetic unit의 algorithm이나 efficiency는
전체 processor의 성능에 그렇게 큰 영향을 미친다고 볼 수 없기 때문에
(뭐 single cycle CPU라면 얘기가 다르겠지만...)
굉장한 뻘짓이긴 하다만
사실 이것만큼 재밌는 분야가 없는 것 같기도...


여하튼, 오늘의 포스팅은
Kogge-Stone adder인데,

요거는
Peter M. Kogge 횽과 Harold S. Stone 횽이 1973년도에 
Kogge, P. & Stone, H. "A Parallel Algorithm for the Efficient Solution of a General Class of Recurrence Equations"IEEE Transactions on Computers, 1973, C-22, 783-791
요기서 제기된 이론이 되겠따.


위는 32-bits Kogge-Stone adder의 구조.

하이튼,
잡설 생략하고 톡까놓고 말해보자면
"가장 빠른 adder로 간주된다."

보통 prefix adder는 세 가지 갈래로 나뉘는데

속도↑ ------------------- 크기↓
KSA          HKA          BKA

요렇게 나뉘고 여기서 hybrid adder라던가 하는 것이 등장한다.
Ladner-Fischer adder나 공부할때 많이 참조했던
UCA Oklobdzija 교수님 adder라던가 하는 것도 세부 분류라고 볼 수 있다.

(현재 비마관 휴게실인데 에어콘물이 졸라 꼴꼴거려서 불안해하고있다)

prefix adder의 원리는 그렇게 어렵지 않다.
다만 책에 잘 안나와있을뿐이지.......

이것들은 carry look-ahead adder의 확장판이라고 볼 수 있다
따라서 P와 G의 개념
(P = a ^ b , G = a & b)을 그대로 사용한다.

요거를 또 어떻게 사용하나,
위의 KSA의 그림을 예로 들어보자면,

처음에 31-bits(끝에꺼 빼고) 전부가 다음 bit로 넘어가고,
그 다음부터 2, 4, 8 번 bit부터 넘기는 것을 볼 수 있다.
(요 tree의 설계는 안드로메다행 급행열차이니
다른 prefix adder들과 더불어 찬찬히 알아보도록 하자)

따라서, 여기서 귀납적으로 유추해보면
64-bits adder는 16번 bit부터 넘기는 stage가 하나 더 필요하다고 볼...

오늘따라 굉장히 두서없이 글을 싸질르는것 같다.



자, 다시 위의 그림으로 되돌아가 볼 때,
일단은, 처음의 P와 G를 모든 bit에 대해 구해 두도록 한다.
이것이 첫줄 끝이다.

둘째 줄을 보면,

LSB에는 점 위에 연결된 또다른 점이 없는 것을 볼 수 있다.
그럼 얘는 에미없으니깐 Gray cell을 통과시킨다.
나머지는 부모 노드를 가지고 있는 것을 볼 수 있으니
Black cell을 통과시킨다.

그리고 셋째 줄, 넷째 줄 이렇게 나가다보면
그레이쎌 8개(사실은 마지막 스테이지에선 끝까지 그레이쎌)
가 되는 순간 tree가 완성됨을 확인할 수 있다.

그럼...
Gray cell이 뭐고 Black cell이 뭐냐고 ???

찬찬히 가보면,
CLA에서 p와 g로 다음 carry 를 구하는 것이
cout = g+p&cin
이잖은가??

gray cell은 이 공식을 이용하여
전단의 G를 cin에 대입하고
현단의 P와 G를 각각 넣어서 다음 (stage/level/row의)
G를 구하는 cell이며,

black cell은 gray cell을 하나 가지며
이 외에 전단의 P를 입력받아 이를 현단의 P와
AND operate하여 다음 P와 G를 구하는 cell이다.
(둘중 하나만 없으면 캐삭빵!!!!!!!)

자 이렇게 하면 간단히
그렇게나 빠르다는 Kogge-Stone Adder를 구성할 수 있다.
오오미

아 깜빡한게 있는데
이렇게 해서 값이 나오는 것은 아니고
최종 결과값은 각 단의 carry in(최종 stage의 g)과
 p를 XOR 연산해 주면 나온다
그렇다면 최종 carry out은 역시 gray cell을 이용하여 구할 수 있당

허허허허
하이튼
그렇게 해서 나오는 KSA_64와 KSA_32의 resource utilization by entity 표이다.


64-bits KSA는 안드로메다 저 너머롴ㅋㅋㅋㅋㅋㅋ
32-bits KSA도 64-bits KSA와 공유하는 부분이 synthesize되어 있을 뿐이지
CLA 등과 비교해 볼땐 상당히 큰 크기를 가진다
(다시 프로젝트를 만들어서 측정하긴 귀찮으므로 일단 생략)

q_add와 q_add_32는 검증을 위해 사용한 뻘module이므로 신경쓰지 말것


위의 그림에서 slow model에서의 worst case propagation delay를 볼 수 있따.
놀라운 점은
32-bits adder와 64-bits adder가 delay가 다른점이 없다
(실험을 잘못한것같다 -_-;;;;;)
그래서 약 24ns에 64-bits add연산을 끝마치는 것으로 훈훈하게~

허허 잡adder를 쓴다고 했다가
곱셈기부터 쓰고 씨피유 쓰고
갑자기 코그스톤애더를 훈훈하겤ㅋㅋㅋㅋㅋ

일단 오늘은 여기까지

댓글

이 블로그의 인기 게시물

중국 컵라면 강사부 홍소우육면 康师傅 红烧牛肉面 캉시푸 홍샤오니우러우미엔

Hilton 등급 없이 Visa Infinite 카드로 룸 업그레이드 받고 Hilton Gold Fast Track 달성하기

토탈워:삼국 예약판매 스틸북 개봉기 Total war:Three kingdoms Steel book edition