CORDIC 1 -7장

tennfin1·2023년 9월 6일
0

Research

목록 보기
8/12
post-thumbnail
post-custom-banner

※ 본 포스트는 인하대학교 지능형반도체 연구실의 최영규 교수님의 허가 하에 작성되었습니다.

※ 교수님의 설명에 해당하는 내용을 제외하고, 제 의견은 노란색 글씨로 작성 하겠습니다.

※ solution에 대한 코드는 절대 제공되지 않으며, 수업진행에 필요한 모든 도움은 최영규 교수님의 자료 및 이메일을 참고하길 바랍니다.

7장에 대한 강의영상 링크입니다.

요약 + 간단한 의견으로 구성됩니다.

자세한 내용은 반드시 강의를 참고해주시길 바랍니다.

이번 시간에는 cordic 연산에 대해서 최적화를 진행할 것인데, 알고리즘 자체에 대한 내용에 대한 자세한 설명은 구글링을 통해 알아보시거나 교수님의 강의영상을 참고하시길 바랍니다.


보편적으로 고등학교 수학시간이나, 대학 수학시간에 배운 바에 따르면, 위의 그림의 식은 원 위의 좌표를 원의 둘레를 따라 Θ만큼 이동한 좌표를 도출해내는 과정입니다.

이 곱셈 연산을 컴퓨터로 수행하기에는 굉장히 비용이 많이 들기에, 없앨 것입니다.

곱셈 연산을 일반화하기 위해서, 좌표를 옮기는 식 자체를 이동 각도 Θ에 대해서 일반화 해봅니다.
사진과 같은 식이 나오게 됩니다.

탄젠트를 2의 배수로만 제한해버리면

해당 식으로 일반화가 가능합니다.


일반화된 식으로부터, 각각의 각도에 대해서 90도를 2의 배수로 나눈 각도들에 대한 cordic gain을 얻어낼 수 있습니다.

이렇게 만들어낸 표를 이용하면 0도부터 90도 사이의 모든 각에 대한 값의 근사치를 구할 수 있습니다.

해당 그림처럼 90도를 2의 배수로 나눈 각도들의 연속적인 연산으로 근사치를 얻어낼 수 있습니다.

해당 개념과 굉장히 유사한 개념으로 고정소수점이 존재하는데, 이를 알고 있으면 이해가 편합니다.


자세한 설명은 생략하고, 코드로 넘어가겠습니다.

해당코드와 헤더파일은 깃허브링크에서 다운로드 가능합니다.

탄젠트 쎄타가 2의 배수여야 함. 그 때 각도는?
1. THETA_TYPE theta는 커널 파일로 들어오는 데이터 타입으로 선언한 것인데, 해당 타입은 cordic.h에서 선언된 타입입니다.
2. 초기 벡터에 대한 cos값을 생성합니다
3. 각도가 0보다 작으면 sigma 변수를 -1로 설정해줍니다
4. 단순화 시킨 연산
5. tan값이 절반이 되는 각도로 theta값을 줄여서 새로운 연산을 준비합니다.
6. 5번에서 절반이 되는 tan값(인자로 사용되므로 새로 저장하는 것)

이를 vitis HLS를 만들어주고, 설정을 해줍니다.


소프트웨어 testbench를 수행할 것인데,
-90도~ 90도의 임의의 값을 생성해내서 실제 라이브러리가 만들어낸 연산값이랑 얼마나 일치하는지를 확인해보겠습니다.


오차의 제곱의 루트 = 표준편차와 비슷한 개념


Csim 오차값이 해당과 같게 나와야 합니다.


시간이 왜 오래걸릴까요...?


아직 곱 연산이 남아있기 때문....
이를 어떻게 해결할까요?

다음장에서 본격적으로 배우게되는 shifting을 이용하여 연산 수행시간을 확실하게 줄일 것이고, 이게 CORDIC에서 가속을하는 가장 주요한 원인이라 필자는 생각합니다. 즉, 이번장보다는 다음 장이 더 중요하다 생각합니다.
profile
심도깊은개발
post-custom-banner

0개의 댓글