최종 알고리즘은 아래와 같다!!!!
- 파이프라인을 이용한 속도 최적화 아키텍쳐
회전모드(Rotation)
z를 현재 각도라고 하고 z를 0으로 만들면
초기값 x = 0.607253, y = 0, z = θ
i = 0 -> n 까지
z > 0 이면 di = 1 그렇지 않으면 di = 0
xi+1 = xi - di*(2^-i)*yi
yi+1 = yi + di*(2^-i)*xi
zi+1 = zi - di*ai
결과 xn = cos(θ ), yn = sin(θ )
정확도 n bits
헉헉... 힘든 여정이였다. 이해가 잘되었는지 모르겠다. 위 공식에 의해서 최종 값 x는 cos이고 y는 sin이 되는 것이고 정확도는 가져간 n만큼 비트수가 되겠다.
(사실 필자도 아직 코딩 안해서 ... 맞는지는... 코딩하다 문제있으면 추후 수정)
벡터모드는 위 식을 반대로하면 되는데 증명은 안하고 식만 .. (히..힘드니까욤)
xn = 1/K(x^2 + y^2)^(1/2)
yn = 0
zn = z + tan^-1(y/x)
고맙게도 식과 함께 CORDIC 기본 모드부터 Linear, Hyperbolic을 한번에 정리해 놓은 것이 있어 그대로 붙여 넣는다.
아 정말 깔끔하다. 이거 만든분에게 정말 감사해야 할 듯.
이 CORDIC 알고리즘을 이용하여 계산할 수 있는 수식을 정리하면 아래와 같다.
직접적으로 계산가능한 것은
sin, cos, sinh, cosh
tan^-1, tanh^-1
Division
multiplication
tan^-1(y/x)
y + x*z
(x^2+y^2)1/2
(x^2-y^2)1/2
e^z = sinh(z) + cosh(z)
간접 계산으로 가능한 수식들도 있는데 나머진 위키북 자료를 참조하시기 바라며
최종 요약이다.
(귀찮아서 잘라 붙인게.... 맞습니다. ㅠ)
조금 먼가 수식들 때문에 복잡해 보인다면 같은거지만 추가로 위키북에서도 가져오면
하드웨어 아키텍쳐도 위키북에서 가져와 추가해본다.
(3화로 하드웨어를 포스팅할려고 했으나 내용도 별로 없어서 그냥 붙여 넣음!!!)
- 하드웨어 재사용을 이용한 면적 최적화 아키텍쳐
그림참조 : http://en.wikibooks.org/wiki/Digital_Circuits/CORDIC
- 파이프라인을 이용한 속도 최적화 아키텍쳐
그림참조 : http://en.wikibooks.org/wiki/Digital_Circuits/CORDIC
이해할 수 있도록 자료를 잘 만들어 준
Minnesota 대학의 Kia Bazargan 님에게 감사하며... 이 강좌를 마친다.
reference
2. EE 5324 – VLSI Design II, Part IX: CORDIC Algorithms, Kia Bazargan, University of Minnesota, spring 2006