본 발명은, 정해진 FFT 과정이 심볼 당 3번 이루어지는 OFDM 수신기에서 사용되는 OFDM 수신기용 FFT/IFFT 연산코어에 관한 것으로, DIT 방법의 파이프라인 FFT와 DIF 방법의 파이프라인 IFFT 과정을 번갈아 행함으로써 데이터 열 변환을 수행하지 않도록 하며, FFT 입출력 샘플클럭의 주파수에 비해 M(M은 정수)배의 코어클럭(core clock)을 사용함으로서 복수의 FFT 과정이 가능하게 한다. 예를 들어, FFT 과정이 3번 필요한 OFDM 수신기에서는 M이 4가 된다.
또한 가변 N-포인트(variable N point) FFT를 복수로 수행하기 위하여 DIT 방법 또는 DIF 방법과 FFT 순번에 따라서 스테이지들의 동작 구성을 달리하고, 특정 기억장치들을 공유하는 구조를 가지도록 한다.
이하에서는 본 발명의 구체적인 실시 예를 도면을 참조하여 상세히 설명하도록 한다.
본 발명에 대해 설명하기 전, 정해진 FFT 과정이 심볼 당 3번 이루어지는 OFDM 수신기에서의 연산과정을 설명하며, 표 1은 심볼 당 3번의 FFT 과정이 필요한 경우의 연산과정에 대한 것이다.
FFT 순서 |
FFT/IFFT |
DIT/DIF |
Input sequence |
Output sequence |
Latency |
1st |
FFT |
DIT |
permutated |
Naturally ordered |
N |
2nd |
IFFT |
DIF |
Naturally ordered |
permutated |
N |
3rd |
FFT |
DIT |
permutated |
Naturally ordered |
2 x N |
표 1을 참조하면, FFT를 수행하건 IFFT를 수행하건 변환후의 데이터 시퀀스의 순서는 변환전의 데이터 시퀀스의 순서와 바뀐다는 것을 알 수 있다.
첫 번째(1st)의 FFT는 DIT 방법을 사용하여 시간 도메인 상의 OFDM 심볼 캐리어(symbol carrier) 즉 입력시퀀스(input sequence)를 주파수 도메인으로 변환시키며, 출력시퀀스(output sequence)의 데이터는 입력시퀀스와 배열순서가 바뀌어 진다. DIF 방법을 사용하는 두 번째(2nd)의 IFFT 및 DIT 방법을 사용하는 세 번째(3rd)의 FFT는 채널추정을 위해서 사용된다.
무선채널 환경에서는 시간과 주파수 영역 상에서 채널상태가 시간적으로 불규칙하게 변하게 되는 페이딩(fading) 특성을 가지게 되는데, 여기서 페이딩 이란 경로를 달리하는 2개 이상의 전파가 간섭한 결과, 진폭 및 위상이 불규칙하게 변하는 현상을 의미한다. 채널에 대해 진폭과 위상을 추정하는 것을 채널추정(channel estimation)이라고 하는데, 채널추정은 무선채널의 주파수 응답을 추정하는 것이라 할 수 있다.
일반적으로 FFT의 사이즈(size)는 포인트(point)라고 하는데, 이하에서는 설명의 편의를 위해, 8192 포인트 FFT/IFFT 연산코어 즉 FFT의 최대 사이즈가 8192인 경우에 대한 것으로 한정하였다. 따라서 설명은 8192 포인트 및 그 이하의 포인트에 대하여 설명하겠지만, 설명에 기초하여 더 큰 사이즈의 FFT에 동작시키기에 적합하도록 본 발명을 수정(modify)하는 것은 본원발명의 기술적 사상의 범위에 들어간다.
도 1은 본 발명에 따른 FFT/IFFT 연산코어의 블록다이어그램이다.
도 1을 참조하면, FFT/IFFT 연산코어(100)는 입력버퍼(110), 제1먹스(M1), 연산블록(120) 및 컨트롤블록(130)을 구비한다.
입력 버퍼(110)는 첫 번째(1st) FFT의 입력시퀀스(1st FFT inputs)를 저장하고 출력한다.
제1먹스(MUX1)는 첫 번째(1st) FFT의 입력시퀀스(1st FFT inputs) 및 세 번째(3rd) FFT의 입력시퀀스(3rd FFT inputs) 중 하나를 스위칭(multiplex) 한다.
컨트롤블록(130)은 입력되는 시퀀스를 DIT 방식으로 처리할 것인지 혹은 DIF 방식으로 처리할 것인지를 지시하는 신호처리방식 지시신호(DIT/DIF) 및 입력되는 시퀀스를 처리하지 않고 그대로 통과시킬 것을 지시하는 바이패스 지시신호(BP)를 생성한다. 여기서 신호처리방식 지시신호(DIT/DIF) 및 바이패스 지시신호(BP)는 FFT의 사이즈에 따라 결정된다.
연산블록(120)은 신호처리방식 지시신호(DIT/DIF) 및 바이패스 지시신호(BP)에 응답하여 첫 번째(1st) FFT의 입력시퀀스(1st FFT inputs) 및 세 번째(3rd) FFT의 입력시퀀스(3rd FFT inputs)를 변환하여 첫 번째 FFT의 출력시퀀스(1st FFT outputs) 및 세 번째 FFT의 출력시퀀스(3rd FFT outputs)를 각각 생성하며, 두 번째(2nd) IFFT의 입력시퀀스(2nd IFFT inputs)를 변환하여 두 번째 IFFT의 출력시퀀스(2nd IFFT outputs)를 생성하며, 직렬로 연결된 복수 개의 연산스테이지를 구비한다.
제0연산스테이지(121)는 해당 신호처리방식 지시신호(DIT/DIF) 및 해당 바이패스 지시신호(BP)에 응답하여, 제1먹스(MUX1)의 출력신호(Mo) 또는 제1연산스테이지(122)의 제2출력신호(D1F)를 그대로 혹은 신호처리하여 제1출력신호(D0T) 또는 제2출력신호(D0F)를 생성한다. 여기서 신호처리를 한다는 것은 입력시퀀스에 대하여 FFT 또는 IFFT 연산을 수행하는 것을 의미하며 이하의 설명에서도 동일하게 적용된다.
제1연산스테이지(122)는 해당 신호처리방식 지시신호(DIT/DIF) 및 해당 바이패스 지시신호(BP)에 응답하여, 제1연산스테이지(121)의 제1출력신호(D0T) 또는 제3연산스테이지(123)의 제2출력신호(D0F)를 그대로 혹은 신호처리하여 제1출력신호(D1T) 또는 제2출력신호(D1F)를 생성한다.
제2연산스테이지(123) 내지 제5연산스테이지(126)는 상술한 제1연산스테이지(122)와 동일한 논리로 연결되어 있으므로, 여기서는 설명을 하지 않는다.
제6연산스테이지(127)는 해당 신호처리방식 지시신호(DIT/DIF) 및 해당 바이패스 지시신호(BP)에 응답하여, 제5연산스테이지(126)의 제1출력신호(D5T) 또는 두 번째(2nd) IFFT의 입력시퀀스(2nd IFFT inputs)를 그대로 혹은 신호처리하여 제1출력신호(D6T) 또는 제2출력신호(D6F)를 생성한다.
상기의 내용을 정리하면, 첫 번째(1st) FFT의 입력시퀀스(1st FFT inputs) 및 세 번째(3rd) FFT의 입력시퀀스(3rd FFT inputs)가 연산블록(120)에 입력될 때는 제0연산스테이지(121)로부터 순차적으로 제6연산스테이지(127)의 방향으로 DIT 방식의 연산을 수행하여 첫 번째 FFT의 출력시퀀스(1st FFT outputs) 및 세 번째 FFT의 출력시퀀스(3rd FFT outputs)를 생성시킨다. 두 번째(2nd) IFFT의 입력시퀀스(2nd IFFT inputs)가 연산블록(120)에 입력될 때는 제6연산스테이지(127)로부터 순차적으로 제0연산스테이지(121)의 방향으로 DIF 방식의 연산을 수행하여 두 번째 IFFT의 출력시퀀스(2nd IFFT outputs)를 생성시킨다.
이러한 FFT/IFFT 연산의 수행방향은 신호처리방식 지시신호(DIT/DIF)에 의하여 결정된다. 8192 포인트 FFT/IFFT 연산일 경우에는 직렬로 연결된 복수 개의 연산스테이지(121 ~ 127)가 모두 사용되겠지만, 8192보다 적은 개수의 FFT/IFFT 연산일 경우에는 바이패스 지시신호(BP)에 의해 일부의 연산스테이지가 사용되지 않게 된다. 즉, 연산에 사용되지 않는 연산스테이지에 연결된 바이패스 지시신호(BP)를 인에이블 시킴으로써, 해당 연산스테이지에 입력되는 시퀀스는 연산되지 않고 그대로 다음 연산스테이지로 바이패스 되게 한다.
상술한 바와 같이 도 1에 도시된 본 발명에 따른 FFT/IFFT 연산코어(100)는 N이 8192개인 8192 포인트 FFT/IFFT 연산코어에 대한 것이므로, 제0연산스테이지 내지 제6연산스테이지 중 하나의 연산스테이지는 래딕스-2(Radix-2) 구조를 가지고, 나머지 6개의 연산스테이지들은 래딕스-4(Radix-4)의 구조를 가져야 할 것이다. 여기서 래딕스-2 구조는 2샘플의 입력시퀀스를 처리하는 구조이며, 래딕스-4 구조는 4샘플의 입력시퀀스를 처리하는 구조를 가진다. 이들이 직렬로 연결되면 모두 8192(2*46) 포인트가 된다. 상기에 기재된 샘플과 이하의 설명에서 사용할 샘플은, I(In-phase) 채널 및 Q(Quadrature) 채널 정보를 포함하고 있다.
또한 도 1에 도시된 본 발명에 따른 FFT/IFFT 연산코어(100)는 OFDM 수신기에서 사용되는 것이 바람직하다.
발명의 개념을 용이하게 이해하기 위하여 도 1에 도시된 제0연산스테이지(121)가 래딕스-2 구조를 가지고 나머지 6개의 연산스테이지들(122 ~ 127)은 래딕스-4 구조를 가진다고 가정한다.
도 2는 도 1에 도시된 제0연산스테이지의 내부 블록다이어그램이다.
도 2를 참조하면, 제0연산스테이지(121)는, 제2먹스(M2), 제3먹스(M3), 제4먹스(M4), 래딕스-2 버터플라이 블록(210), 제1지연기(220) 및 제1곱셈기(230)를 구비한다.
제2먹스(M2)는 신호처리방식 지시신호(DIT/DIF)가 DIT 방식의 연산을 지시할 경우(DIT)에는 제1먹스(M1)의 출력신호(Mo)를 선택하여 스위칭하고, DIF 방식의 연산을 지시할 경우(DIF)에는 제1연산스테이지(122)의 제2출력(D1F)을 선택하여 스위칭한다. 제3먹스(M3)는 신호처리방식 지시신호(DIT/DIF)가 DIT 방식의 연산을 지시할 경우(DIT)에는 회전인자(twiddle factor, Wk(n))를 선택하여 스위칭하고, DIF 방식의 연산을 지시할 경우(DIF)에는 단위 회전인자(1, unit weight)를 선택하여 스위칭 한다. 여기서 k는 정수로서 스테이지의 번호를 의미하며, 따라서 도 2에 사용된 k는 0(zero)이 되고 이 때 회전인자는 W0(n)로 표시된다.
래딕스-2 버터플라이 블록(210)은 제2먹스(M2)의 출력신호 중 일부의 출력신호를 바이패스 시키고, 나머지 출력신호 및 제1지연기(220)로부터 출력되는 지연신호에 버터플라이(butterfly) 연산을 수행한다. 제1지연기(220)는 래딕스-2 버터플라이 블록(210)에서 바이패스 된 신호를 지연시켜 상기 지연신호를 생성한다. 제1곱셈기(230)는 제2먹스(M2)의 출력신호와 래딕스-2 버터플라이 블록(210)의 출력신호를 복소수 곱(complex multiplication)한다.
제4먹스(M4)는 바이패스 지시신호(BP)가 디스에이블(disable)상태인 경우에는 제1곱셈기(230)의 출력신호를 선택하여 스위칭하고, 인에이블(enable)상태가 되면 제2먹스(M2)의 출력신호를 선택하여 스위칭한다. 즉 바이패스 지시신호(BP)가 인에이블 되면 제0연산스테이지(121)는 FFT/IFFT 연산에서 사용되지 않게 되므로 제2먹스(M2)를 통해 입력되는 신호를 바이패스(bypass) 시킨다.
제4먹스(M4)의 출력신호가 제1출력신호(D0T) 및 제2출력신호(D0F)가 된다. 신호처리방식 지시신호(DIT/DIF)가 DIT 방식의 연산을 지시할 경우(DIT)에는 제2출력신호(D0F)가 이어지는 다음 연산스테이지에서 사용되지 않으며, 신호처리방식 지시신호(DIT/DIF)가 DIF 방식의 연산을 지시할 경우(DIF)에도 제1출력신호(D0T)가 이어지는 다음 연산스테이지에서 사용되지 않으므로 도 2에 도시된 바와 같이 제1출력신호(D0T) 및 제2출력신호(D0F)가 동시에 출력되더라도 FFT/IFFT 연산에 문제가 발생하지 않는다.
도 3은 도 1에 도시된 제1연산스테이지 내지 제6연산스테이지의 내부 블록다이어그램이다.
도 3을 참조하면, 제k(k는 1 내지 6 중의 하나의 정수)연산스테이지(122~127)는, 제5먹스(M5), 제6먹스(M6), 제7먹스(M7), 래딕스-4 버터플라이 블록(310), 지연블록(320) 및 제2곱셈기(330)를 구비한다.
제5먹스(M5)는 신호처리방식 지시신호(DIT/DIF)가 DIT 방식의 연산을 지시할 경우(DIT)에는 제(k-1)연산스테이지의 출력신호(D(k-1)T)를 선택하여 스위칭하고, DIF 방식의 연산을 지시할 경우(DIF)에는 제(k+1)연산스테이지의 제2출력(D(k+1)F)을 선택하여 스위칭한다. 이 때 제k연산스테이지가 제6연산스테이지(127)인 경우에는, 제2출력(D(k+1)F) 대신 두 번째(2nd) IFFT의 입력시퀀스(2nd IFFT inputs)가 선택되어 스위칭 되게 될 것이다. 제6먹스(M6)는, 상기 제6먹스(M6)가 포함된 연산스테이지가 FFT/IFFT 연산에 사용되는 연산스테이지들 중 마지막 단계에 사용되는 경우에는 제어신호(last stage)에 응답하여 단위 회전인자(1)를 선택하고, FFT/IFFT 연산에 사용되는 연산스테이지들 중 중간에 사용되는 연산스테이지에 포함되는 경우에는 신호처리방식 지시신호(DIT/DIF)에 따라 결정되는 회전인자(Wk(n))를 선택하여 스위칭 한다.
래딕스-4 버터플라이 블록(310)은 제5먹스(M5)의 출력신호 중 일부 신호를 바이패스 시키고, 제2먹스(M2)의 출력신호 중 나머지 신호 및 지연블록(320)으로부터 출력되는 지연신호들에 버터플라이 연산을 수행한다. 지연블록(320)은 래딕스-4 버터플라이 블록(310)에서 바이패스 된 신호를 지연시켜 상기 복수 개의 지연신호들을 생성하며, 3개의 지연기(321, 322, 323)를 구비한다. 제1지연기(321)는 래딕스-4 버터플라이 블록(310)에서 바이패스 된 신호 중 첫 번째 신호를 일정시간 지연시킨다. 제2지연기(322)는 래딕스-4 버터플라이 블록(310)에서 바이패스 된 신호 중 두 번째 신호를 일정시간 지연시킨다. 제3지연기(323)는 래딕스-4 버터플라이 블록(310)에서 바이패스 된 신호 중 세 번째 신호를 일정시간 지연시킨다. 래딕스-4 버터플라이 블록(310)은 제1지연기(321) 내지 제3지연기(323) 및 제2먹스(M2)의 출력신호에 대해 버터플라이 연산을 수행하며, 버터플라이 연산에서 생성된 4개의 출력 중 하나만 출력되고 나머지 3개의 출력은 3개의 지연기(321~323)에 다시 저장된다.
제2곱셈기(330)는 제6먹스(M6)의 출력신호와 래딕스-4 버터플라이 블록(310)의 출력신호를 복소수 곱한다. 제7먹스(M7)는 바이패스 지시신호(BP)가 인에이블(enable) 되면 제5먹스(M5)의 출력신호를 선택하여 스위칭하고 디스에이블(disable) 되면 제2곱셈기(330)의 출력신호를 선택하여 스위칭한다. 즉 바이패스 지시신호(BP)가 인에이블 되면 제k연산스테이지는 FFT/IFFT 연산에서 사용되지 않게 되므로 제5먹스(M5)를 통해 입력되는 신호를 바이패스(bypass) 시킨다.
여기서 제7먹스(M7)의 출력신호가 제1출력신호(DkT) 및 제2출력신호(DkF)가 된다. 신호처리방식 지시신호(DIT/DIF)가 DIT 방식의 연산을 지시할 경우(DIT)에는 제2출력신호(DkF)는 사용되지 않고, 신호처리방식 지시신호(DIT/DIF)가 DIF 방식의 연산을 지시할 경우(DIF)에는 제1출력신호(DkT)는 사용되지 않으므로 도 3에 도시된 바와 같이 제1출력신호(DkT) 및 제2출력신호(DkF)가 동시에 출력되더라도 FFT/IFFT 연산에 문제가 발생하지 않는다. 도 2 및 도 3에 도시된 회전인자(Wk(n))는 각 연산스테이지 별로 다르다.
도면에는 자세하게 기재되지 않았지만, 복수 개의 연산스테이지가 순차적으로 사용될 때의 마지막 연산스테이지의 내부 곱셈기(230, 330)에 먹스(M3, M6)를 통해 인가되는 회전인자(Wk(n))는 항상 1(one)이 된다. 이 부분에 대해서는 이 후에 기재된 도 12를 참조하면 쉽게 이해할 수 있다.
도 4는 다양한 사이즈의 입력시퀀스에 따른 각 연산스테이지들의 사용 여부 및 사용 순서를 나타낸다.
도 4에서 화살표의 방향은 연산이 수행되는 순서를 의미하며, 숫자는 연산스테이지의 번호를 의미한다.
먼저 DIT 방식의 연산을 수행하는 경우에 대하여 설명한다.
이 경우 본 발명에 따른 FFT/IFFT 연산코어(100)가 처리할 수 있는 최대 사이즈가 8192이므로, 이 보다 적은 사이즈의 시퀀스를 처리할 경우에는 내장된 연산스테이지들 중 일부만 사용하고 나머지는 바이패스 되어야 한다.
도 4를 참조하면, FFT의 사이즈가 16일 경우 래딕스-4 구조를 가지는 2개의 연산스테이지를 순차적으로 사용하면 되는데, 여기서는 제1연산스테이지(1) 및 제2연산스테이지(2)가 순차적으로 사용(1→2)되는 것으로 예를 들었다. FFT의 사이즈가 32일 경우에는 FFT의 사이즈가 16일 경우에 래딕스-2 구조를 가지는 제0연산스테이지(0)를 추가(0→1→2)하기만 하면 된다. FFT의 사이즈가 1024일 경우 래딕스-4 구조를 가지는 5개의 연산스테이지를 순차적으로 사용하면 되는데, 여기서는 제1연산스테이지(1) 내지 제5연산스테이지(5)가 순차적으로 사용(1→2→3→4→5)되는 것으로 예를 들었다. 마찬가지로 1024의 2배의 사이즈가 되는 2048의 경우에는 래딕스-2 구조를 가지는 제0연산스테이지(0)를 추가(0→1→2→3→4→5)하기만 하면 된다.
DIF 방식의 연산을 수행하는 경우도 마찬가지로 설명될 수 있다.
도 4를 참조하면, IFFT의 사이즈가 16일 경우 래딕스-4 구조를 가지는 2개의 연산스테이지를 사용하면 되는데, 여기서는 제2연산스테이지(2)를 바이패스 한 제3연산스테이지(3) 및 제1연산스테이지(1)가 사용(3→1)되는 것을 예를 들었다. 32일 경우에는 IFFT 사이즈가 16일 경우에 래딕스-2 구조를 가지는 제0연산스테이지(0)를 추가(3→1→0)하기만 하면 된다. IFFT의 사이즈가 1024일 경우 래딕스-4 구조를 가지는 5개의 연산스테이지를 사용하면 되는데 여기서는 제5연산스테이지(5)를 바이패스 한 제6연산스테이지(6) 내지 제2연산스테이지(2)가 사용(6→4→3→2→1)되는 것을 예로 들었다. 마찬가지로 1024의 2배가 되는 2048의 경우에는 래딕스-2 구조를 가지는 제0연산스테이지(0)가 추가(6→4→3→2→1→0)되기만 하면 된다.
도 5는 FFT/IFFT의 사이즈가 다른 경우, 각 연산스테이지들에서 사용되는 메모리 용량(memory depth)을 나타낸다.
도 5를 참조하면, 각 블록들 내부의 숫자는 메모리 용량(memory depth)을 나타내며, 숫자가 기재되지 않는 블록들은 사용되지 않는 연산스테이지에 대응되는 메모리를 의미한다.
FFT 코어(100)를 1개만 사용하면서 심볼(symbol) 당 FFT 과정, IFFT 과정 및 FFT 과정을 순차적으로 수행하기 위해서는 추가적인 저장장치(memory)가 필요하다. 추가되어야 하는 저장장치는 첫 번째(1st) FFT의 DIT 출력 시에 두 번째(2nd) IFFT의 DIF 입력시퀀스를 저장하기 위한 것 및 두 번째(2nd) IFFT의 DIF 출력 시에 세 번째(3rd) FFT의 DIT 입력시퀀스를 저장하기 위한 것이다.
이를 구체적으로 설명하면, DIT에서 DIF로 FFT 동작 방법이 변경되는 경우에는 최대
개의 샘플들을 저장하기 위한 메모리가 필요하고, DIF에서 DIT로 FFT 동작방법이 변경되는 경우에는 최대 N개의 샘플을 저장하기 위한 메모리가 필요하다.
상기 메모리에 대한 문제를 해결하기 위하여, 입력버퍼(110)에 저장되는 샘플 당 비트(bits per sample) 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수에 비해 적은 경우 및 입력버퍼(110)에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지가 처리 할 수 있는 샘플 당 비트 수와 동일한 경우로 구분한다.
첫 째, 입력버퍼(110)의 샘플 당 비트수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수 N(N은 정수)에 비해 작은 경우, DIT와 DIF 사이에서 필요한 메모리는
샘플만큼의 추가 메모리를 사용하여 구현하고, DIF와 DIT 사이에서 필요한 N 샘플 메모리는 추가한
샘플 메모리와 제6연산스테이지(127)의
샘플 메모리를 공유해서 사용한다. 본 발명에 따른 FFT/IFFT 연산코어가 총 8192 비트의 입력시퀀스를 처리할 수 있으므로, 8192보다 적은 입력시퀀스를 처리하여야 할 경우가 이에 해당된다. 이러한 경우 입력버퍼(110)를 아래에 설명하는 바와 같이 구역분할 하여 사용할 수 있다.
도 6은 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수에 비해 적은 경우, 입력버퍼의 구성 및 사용 과정의 일실시예이다.
도 6을 참조하면, 입력버퍼(110)의 샘플 당 비트수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수에 비해 작을 때, 입력버퍼(110)를 8192 용량의 SP-SRAM(Single Port SRAM) 1개(601)와 2048 용량의 SP-SRAM 1개(602)를 사용하는 방식으로 입력버퍼의 구역을 분할할 수 있다. 여기서 2048 용량의 SP-SRAM은 상술한 바와 같은 메모리 즉
샘플만큼의 추가 메모리가 된다. 첫 번째 심볼(1)에 대한 쓰기 및 읽기(Write & Read) 후 2 번째 심볼(2)에 대한 쓰기 및 읽기, 그리고 연속되는 심볼에 대한 쓰기 및 읽기 과정은 메모리(N, N/4)의 오른쪽에 표시된 화살표에 따라 진행된다.
둘 째, 입력버퍼(110)의 샘플 당 비트 수와 FFT 내부 연산스테이지가 처리 할 수 있는 샘플 당 비트 수가 동일한 경우, DIT와 DIF 사이에서 필요한
샘플 메모리는 입력버퍼(110)에서
용량만큼을 공유해서 사용하고, DIF와 DIT 사이에서 필요한 N 샘플 메모리는 입력버퍼(110)의
용량만큼의 메모리와 제6연산스테이지(127)의
샘플 메모리를 공유해서 사용한다. 이 경우에도 입력버퍼(110)를 아래에 설명하는 바와 같이 구역분할 하여 사용할 수 있다.
도 7은 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수와 동일한 경우, 입력버퍼의 구성 및 사용 과정의 일실시예이다.
도 7을 참조하면, 입력버퍼(110)의 샘플 당 비트수와 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수가 동일할 때, 메모리의 클럭 주파수와 연산코어(100)의 클럭 주파수가 동일할 경우 입력버퍼(110)는 2048 용량의 SP-SRAM 5(701~705)개를 사용하여 구성한다(왼쪽). 메모리의 클럭 주파수가 연산코어(100)의 클럭 주파수에 비해 2배 빠른 경우 입력버퍼(110)는 10240 용량의 SP-SRAM 1개(706)를 사용한다(오른쪽).
첫 번째 심볼(1)에 대한 쓰기 및 읽기(Write & Read) 후 두 번째 심볼(2)에 대한 쓰기 및 읽기가 4개의 메모리(701~704)를 통해 진행된 후, 연속되는 두 번째 심볼에 대한 쓰기 및 읽기 과정은 4개의 메모리(705, 701, 702, 703)를 통해 진행된다. 계속하여 세 번째 심볼에 대한 쓰기 및 읽기 과정은 4개의 메모리(704, 705, 701, 702)를 통해 진행된다.
입력버퍼(110)를 그림 7의 왼쪽과 같이 구성할 경우, 매 심볼마다
샘플만큼 사용하지 않는 구간이 존재한다. 예를 들어, 첫 번째 심볼의 FFT를 수행하기 위해서 N 샘플(701~704)을 연산블록(120)에서 읽고 난 이후에는, 두 번째 심볼이 입력버퍼(110)에 저장되는 구간에서 도 7의 4번째 메모리 영역(704)은 항상 아이들(idle)상태에 있게 된다. 즉, 매 입력 심볼(input symbol) 마다 아이들(idle) 상태의 메모리 영역이 항상
샘플만큼 존재한다. 또한 DIF 출력과 DIT 입력 사이에서, 제6연산스테이지(127)의
샘플 메모리는 읽기 액세스(read access)만 수행하거나 아무런 액세스가 없는 구간 일 수 있으므로, 이 구간에서는 DIT 입력을 메모리에 기록(write)하고 다음 구간에서 읽기(read)함으로써
샘플 메모리를 공유할 수 있다.
도 6 및 도 7을 참조하면, 일정한 용량의 메모리를 구현시킬 때, 대상되는 용량과 동일한 용량의 메모리 1개를 사용하는 경우가 복수 개의 단일 메모리를 합쳐서 사용하는 경우에 비해 면적이 상대적으로 적게 소비되고 속도도 빠른 것이 일반적이다. 따라서 이러한 장단점에 따라 응용되는 기술에 맞춰 설계자가 임의로, 상기 메모리의 구조를 결정하는 것이 바람직하다.
도 8은 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수에 비해 적은 경우, 각 연산스테이지들의 메모리 종류 및 용량을 나타낸다.
도 9는 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수와 동일한 경우, 각 연산스테이지들의 메모리의 종류 및 용량을 나타낸다.
도 8 및 도 9를 참조하면, 왼쪽에는 메모리에 사용되는 클럭 주파수와 FFT/IFFT 연산코어에 사용되는 클럭 주파수가 동일한 경우에 대한 경우이고 오른 쪽에는 메모리에 사용되는 클럭 주파수가 FFT/IFFT 연산코어에 사용되는 클럭 주파수에 비해 2배 빠른 경우에 대한 것이다.
도 8을 참조하면, 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 샘플 당 비트 수에 비해 적은 경우, 입력버퍼에는 추가되는
메모리(Extra mem)가 포함되어 있다. 도 9를 참조하면, 입력버퍼에 저장되는 샘플 당 비트 수가 FFT 내부 연산스테이지에서 처리할 수 있는 총 비트 수와 동일한 경우, 입력버퍼의 총 용량은 10240인 것을 알 수 있다.
도 10은 32-포인트 DIT FFT의 신호흐름도이다.
도 11은 32-포인트 DIF IFFT의 신호흐름도이다.
도 10 및 도 11은 일반적으로 알려진 연산과정에 대한 것이므로 여기서는 설명을 하지 않는다.
도 12는 32-포인트 DIT 연산 및 32-포인트 DIF 연산을 수행하는 각 연산스테이지들의 연결 관계를 나타낸다.
도 12를 참조하면, 32-포인트 DIT 및 32-포인트 DIF 연산을 수행하기 위해서는 래딕스-2 구조를 가지는 1개의 연산스테이지 및 래딕스-4 구조를 가지는 2개의 연산스테이지가 필요하며, 여기서는 설명의 편의를 위해 래딕스-2 구조를 가지는 제0연산스테이지(0) 및 래딕스-4 구조를 가지는 제1연산스테이지(1) 및 제2연산스테이지(2)를 사용한다고 가정하고 설명한다.
도 12의 왼쪽을 참조하면, 32-포인트 DIT를 수행할 때 입력시퀀스(DIT inputs)는 제0연산스테이지(0), 제1연산스테이지(1) 및 제2연산스테이지(2)를 거치면서 DIT 출력시퀀스(DIT outputs)를 생성한다. 도 12의 오른쪽을 참조하면, 32-포인트 DIF를 수행할 때 입력시퀀스(DIF inputs)는 제2연산스테이지(2), 제1연산스테이지(1) 및 제0연산스테이지(0)를 거치면서 DIF 출력시퀀스(DIF outputs)를 생성한다. 이 때 연산의 마지막 스테이지의 회전인자(Wk(n))는 항상 1(one)이 된다. 도 12에 도시된 각 연산스테이지의 순서는 도 4에 도시된 32-포인트 DIT 및 32-포인트 DIF 연산의 순서에 대응된다.
도 13은 3연속 입력에 대한 32-포인트 DIT/DIF 동작 타이밍을 나타낸다.
도 13을 참조하면, DIT FFT 연산을 처리하고 이어서 DIF IFFT 연산을 처리하며 마지막으로 DIT FFT연산을 처리할 때의 타이밍을 나타낸다. 도 13에 도시된 타이밍 다이어그램은 당업자라면 누구든지 용이하게 해석할 수 있으므로 여기서는 자세한 설명을 하지 않는다.
도면에는 도시되지 않았지만, 본 발명에 따른 FFT/IFFT 연산코어의 연산스테이지에 포함된 복수 개의 연산블록(120)을 구성하는 복수 개의 연산스테이지들이 사용하는 메모리가 포함되어 있다. 3번의 연산을 위해서 3개의 연산코어가 존재하게 된다면, 복수 개의 연산스테이지들 각각의 메모리가 차지하는 면적이 본원 발명에 비해 적어도 3배 크게 된다. 그러나 본 발명에 따른 연산코어는 3번의 연산 시, 이를 시분할 방식으로 공유함으로서 종래에 비해 적어도 소비면적을 1/3으로 감소시킬 수 있다.
이상에서는 본 발명에 대한 기술사상을 첨부 도면과 함께 서술하였지만 이는 본 발명의 바람직한 실시 예를 예시적으로 설명한 것이지 본 발명을 한정하는 것은 아니다. 또한 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 이라면 누구나 본 발명의 기술적 사상의 범주를 이탈하지 않는 범위 내에서 다양한 변형 및 모방이 가능함은 명백한 사실이다.