※ solution에 대한 코드는 절대 제공되지 않으며, 수업진행에 필요한 모든 도움은 최영규 교수님의 자료 및 이메일을 참고하길 바랍니다.
이번 시간에는 cordic 연산에 대해서 최적화를 진행할 것인데, 알고리즘 자체에 대한 내용에 대한 자세한 설명은 구글링을 통해 알아보시거나 교수님의 강의영상을 참고하시길 바랍니다.
보편적으로 고등학교 수학시간이나, 대학 수학시간에 배운 바에 따르면, 위의 그림의 식은 원 위의 좌표를 원의 둘레를 따라 Θ만큼 이동한 좌표를 도출해내는 과정입니다.
이 곱셈 연산을 컴퓨터로 수행하기에는 굉장히 비용이 많이 들기에, 없앨 것입니다.
곱셈 연산을 일반화하기 위해서, 좌표를 옮기는 식 자체를 이동 각도 Θ에 대해서 일반화 해봅니다.
사진과 같은 식이 나오게 됩니다.
탄젠트를 2의 배수로만 제한해버리면
해당 식으로 일반화가 가능합니다.
일반화된 식으로부터, 각각의 각도에 대해서 90도를 2의 배수로 나눈 각도들에 대한 cordic gain을 얻어낼 수 있습니다.
이렇게 만들어낸 표를 이용하면 0도부터 90도 사이의 모든 각에 대한 값의 근사치를 구할 수 있습니다.
해당 그림처럼 90도를 2의 배수로 나눈 각도들의 연속적인 연산으로 근사치를 얻어낼 수 있습니다.
해당 개념과 굉장히 유사한 개념으로 고정소수점이 존재하는데, 이를 알고 있으면 이해가 편합니다.
자세한 설명은 생략하고, 코드로 넘어가겠습니다.
해당코드와 헤더파일은 깃허브링크에서 다운로드 가능합니다.
탄젠트 쎄타가 2의 배수여야 함. 그 때 각도는?이를 vitis HLS를 만들어주고, 설정을 해줍니다.
소프트웨어 testbench를 수행할 것인데,
-90도~ 90도의 임의의 값을 생성해내서 실제 라이브러리가 만들어낸 연산값이랑 얼마나 일치하는지를 확인해보겠습니다.
오차의 제곱의 루트 = 표준편차와 비슷한 개념
Csim 오차값이 해당과 같게 나와야 합니다.
시간이 왜 오래걸릴까요...?
아직 곱 연산이 남아있기 때문....
이를 어떻게 해결할까요?