Monday, December 29, 2014

[매드프로젝트 강좌] CORDIC - 02. 알고리즘-2

최종 알고리즘은 아래와 같다!!!!



회전모드(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

3 comments :

  1. 안녕하세요? 혹시 왜 x 초기값을 초기값 x = 0.607253로 하셨는지요? 1로 하면 안되나요?

    ReplyDelete
    Replies
    1. 안녕하세요~ 답변이 늦었네요 ㅠ 오래되서 기억은 가물하지만 알고리즘 상 아무 값이나 넣어도 됩니다. 빠르게 찾기 위해서는 결과값에 가까운 초기값을 설정하는 것이 좋습니다~
      감사합니다.

      Delete
  2. 안녕하세요. 현재 CORDIC을 verilog로 구현해 보려고하는데 .. google에서 찾은 코드들을 제가 이해를 못하겠어서 그런데 혹시 코드 구현 하셨나요? 몇가지 질문좀 하려고요 ~... 메일로좀 답변해주시면 정말 감사하겠습니다. jeongminwoo7@naver.com

    ReplyDelete