CORDIC 2 -8장

tennfin1·2023년 9월 15일
0

Research

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

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

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

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

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

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

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


지난 주에 연산가속을 끝내지 못했습니다.

이유는 크게 3가지 : 곱셈, 타입, 문법입니다.

타입을 바꾼 경우에서의 연산입니다.

오른쪽의 DSP(Dedicated multiply-and-accoumulate unit, 아래에서 설명) FF(FLIP-FLOP) LUT(LOOK-UP_TABLE)은 일단 소비하는 컴퓨터 자원이라 생각합시다.
사용자원이 줄어들고, interval(수행시간)이 줄어드는 모습을 볼 수 있습니다.


FIR FILTER를 최적화하는 과정에서, 기존의 코드 스타일은 가속이 발생하지 않는다는 것을 공부했던 해당 글의 10페이지 슬라이드 부분을 부분과는 다릅니다.


factor의 값을 계속해서 절반으로 나누는 연산과, 이를 곱해주는 연산을 수행하는 부분입니다. 해당 부분을 합친 연산은 shifting이라는 훨씬 빠른 연산으로 대체가 가능합니다.

곱셈을 mux/add/sub로 대체하는 부분입니다.
factor 연산이 이미 빠졌기 때문에, shift에 대한 값 연산과 아래의 current값을 정하는 연산을 합칠 수 있습니다.

2중곱셈을 shifting으로 만들고, 나머지는 부호를 결정하는 코드와 합쳐버렸습니다.


시간은 확실하게 줄었지만...


원래의 float를 사용하는 것 조차 약간의 error가 발생했는데, 다른 타입을 쓰면 아예 틀린 결과를 만들어 내게 됩니다.


단순하게 타입 변환만 하는 것은 틀린 방볍입니다.
올바른 것은 무엇일까요?


구글링으로 간단하게 알아낼 수 있는 정보라 설명을 요약하자면,
부호 + 정수부 + 소수부를 나타내는 이진법들의 합


소수 부분을 1을 2로 나눈 값들의 합으로 표기해야 하기 때문에, 소숫점의 범위가 무한이 아니면 오차가 발생할 수 밖에 없음 => 반올림 처리해버리기

그래도 한 문제 풀어보겠습니다.
사진에서 x2나 x1/2 부분은 shifting이라 생각하고, 이를 2로 통일시켜주면
1.11 x 2 (shifting 없음)
0.011 x2 (오른쪽으로 2칸 shifting)
이를 더해주면
10.001 x 2로 표현되고, 3비트를 사용하기 위해서 normalize, rounding 해주면
=1.00 x 4

사용하는 변수타입에 따라 소비자원이 다르다고 했는데, 각 변수타입별 소비량입니다.


그중 하나인 DSP는 위의 기능을 가진 연산로직입니다.
정확한 설명을 하지는 않겠지만, 딱봐도 연산과정이 복잡해서 소모되는 비용이 클 것 같습니다.


이제 위에서 보여드린 슬라이드가 어떤 의미를 가지는지 이해도가 올라갔습니다.


그래서 float 안쓰면 좋은건 알겠는데, 왜 오류가 발생할까?
변수의 정수부, 소수부에 대한 세팅을 하지 않았습니다.

예를들어, 3.428 => 3.0으로 그냥 치환해버리게 되는것

다음 강의에서 해결해봅시다

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

0개의 댓글