CORDIC 3 -9장

tennfin1·2023년 9월 15일
0

Research

목록 보기
10/12
post-custom-banner

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

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

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

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

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

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

드디어 cordic의 마지막입니다. 가봅시다.


앞선 강의들에서 시행착오가 발생하였는데, 이를 해결하고 최적화 목표를 이루어봅시다.
1. 오차 없애기
2. 가장 적은 자원 소비
를 기준으로 하겠습니다.


동적범위 측정법인데
사실 보편적으로 알고 있는 저희들의 지식을 바로 사용해도 됩니다.


저희가 사용할 초기값(소수)의 사용 범위를 정합니다.
1bit에 따라 6dB의 SQNR(Signal to Quantization Noise power Ratio)의 변화가 발생합니다.
사용하는 비트수가 증가할 수록 오차가 줄어든다는 걸 생각해봅시다.

쉬프팅& 사인 확장입니다.
사인비트가 있는 것을 고려해 shifting(x2 or /2 하는 것)으로 자리수를 맞추고,
다른 FWL, IWL을 가진 수끼리의 연산입니다.

결과값의 동적 범위는 simulation을 통해서 측정된 값을 통해 변수 C의 값을 정합니다.
정확한 과정은 위에 step1로 명시되어있지만, 우리는 대충 몇비트인지 예상이 가능합니다.


반 내림을 해줍니다.
주의 : C언어에서 shifting연산이 +연산보다 연산우선순위가 낮기 때문에 괄호로 영역표시 잘해줍시다.


역시나 결과 범위 측정입니다. (정규 과정 or 대충 예상)
0 7 6 bit 순으로 13bit라 가정, sign 확장해주고 반올림(반내림)해주는 과정....


사진이 상단과 같을 때,
C = A+B를 소수레벨이 아닌 정수레벨에서 연산하는 방법은 그래서 어떻게 되는가?

주의 : 직접 해보고 확인하시길 바랍니다.

일단 C가 가지는 bit = 덧셈의 결과 둘 중 하나라도 sign bit가 있으면 1bit, IWL에서 더 큰 쪽 = 7bit FWL에서 더 큰 쪽 = 8bit 결과 C = 1 + 7 + 8

A는 FWL(소수범위)가 C와 동일하기 때문에 16비트로 바꿀 때 그대로 바꾸면 됩니다.

그에 반해, B는 FWL이 7bit가 모자릅니다. 즉, 1개였던 FWL bit를 맞추기 위해서 2^7만큼 곱해줘야(shifting) 올바르게 ap_int(16)으로 변형이 가능합니다.


출력 에러(&오차) 측정을 하는 시퀀스를 겪어서 제대로 동작하는지 확인


FWL 길이 줄여서 수행해보기

FWL의 길이를 줄여서 정확도와 시간의 trade-off 관계를 확인해봅시다.

최적화에 성공하면, 변수type에 의한 성능 개선의 목표였던 자원줄이기가 성공한 것을 확인할 수 있습니다.
다만 Error 수치가 약간 증가한 것을 볼 수 있는데(오차)
이는 위에서 말한 trade-off입니다

다음은 제가 실제로 성공한 예시의 결과물입니다.




error : 0.62749
Latency = 36(28)
에서 비트수를 더 줄여봅니다.



error : 0.62871
Latency : = 28(20)
퍼센트로 표현하면 매우 작지만, 값은 항상 상대적인 것이기에...

이상으로 마치겠습니다. 감사합니다.

profile
심도깊은개발
post-custom-banner

0개의 댓글