inż. Pantoł Arkadiusz
Transkrypt
inż. Pantoł Arkadiusz
Inż. Arkadiusz Pantoł – IV rok Koło Naukowe Techniki Cyfrowej dr inż. Wojciech Mysiński – opiekun naukowy FPGA IMPLEMENTATION OF FAST FOURIER TRANSFORM ALGORITHM IMPLEMENTACJA ALGORYTMU SZYBKIEJ TRANSFORMATY FOURIERA W UKŁADZIE PROGRAMOWALNYM FPGA Keywords: FPGA, DSP, FFT, Xilinx, zynq, digital electronics Słowa kluczowe: FPGA, DSP, FFT, Xilinx, zynq, elektronika cyfrowa Abstract The most efficient way to create an FFT processor is to implement it in programmable structure, because FPGA’s can execute multiple operations in one clock cycle – everything depends on implementation method. This article describes method of implementation of the most important digital signal processing algorithm – Fast Fourier Transform – in Zynq SoC device. 1. Wstęp 1.1. Szybka transformata Fouriera Transformata Fouriera umożliwia dekompozycję badanego sygnału okresowego ciągłego na N sygnałów sinusoidalnych (lub kosinusoidalnych) o różnych amplitudach oraz częstotliwościach. Przyporządkowując częstotliwościom konkretne amplitudy w układzie współrzędnych amplituda – częstotliwość uzyskuje się reprezentację sygnału okresowego w dziedzinie częstotliwości. Transformata Fouriera – dla sygnałów ciągłych okresowych – dana jest wzorem: Niestety – niemożliwe jest zaimplementowanie powyższej formuły w układzie cyfrowym. Powyższe wyrażenie realizuje transformatę Fouriera od minus do plus nieskończoności. Rozmiary pamięci RAM (służące do przechowywania próbek sygnału badanego) są wartościami skończonymi, co oznacza że pamięci te mogą przechowywać maksymalnie N próbek sygnału. Dlatego też klasyczna transformata Fouriera nie może zostać wykorzystana do analizy sygnałów cyfrowych. Rozwiązaniem tego problemu jest dyskretna transformata Fouriera - DFT, w której definiowany jest rozmiar transformaty. Poniżej przedstawiono formułę wyrażającą rezultat transformaty dyskretnej: Gdzie . DFT najczęściej realizowane jest w postaci skończonej pętli po N próbkach sygnału, w której realizowane są operacje mnożenia oraz sumowania liczb zespolonych. Niestety taki sposób realizacji wiąże się z długim czasem wykonywania operacji DFT. Szybszą odmianą DFT jest szybka transformata Fouriera (FFT – Fast Fourier Transform). Algorytm ten dzieli dużą transformatę na wiele mniejszych transformat, przez co wzór nie jest realizowany wprost. W pierwszym etapie FFT, N – punktowy sygnał w dziedzinie czasu przetwarzany jest na N pojedynczych punktów w dziedzinie częstotliwości. Realizowane jest to przy pomocy inwersji bitowej, która zamienia kolejność bitów poszczególnych próbek. Aby z tych pojedynczych próbek uzyskać ciągłe widmo częstotliwościowe należy powtórzyć ten proces, „cofając” się krok po kroku. W drugą stronę – niestety – niemożliwe jest zastosowanie inwersji bitowej. W tym celu wykorzystuje się tzw. struktury motylkowe. 1.2. Informacje dotyczące użytego układu scalonego Do realizacji założeń projektowych wykorzystano płytę prototypową, firmy Digilent z układem Zynq – 7000. Poniżej podano podstawowe parametry użytego układu scalonego: dwa rdzenie 32 – bitowe, typu ARM Cortex A9, maksymalna częstotliwość taktowania rdzenia – 650MHz, maksymalna częstotliwość pracy układu FPGA – 450MHz, 4400 makrokomórek, każda z sześciowejściową tablicą LUT, 80 makrokomórek DSP, Wbudowany przetwornik analogowo – cyfrowy 1.3. Podstawowe informacje dotyczące realizowanego algorytmu W strukturze programowalnej zaimplementowana została 1024 – punktowa transformata typu Radix-4, która wymaga mniejszej liczby etapów niż standardowa wersja algorytmu FFT (Radix2). Liczba etapów wyrażona jest wzorem , gdzie N to rozmiar transformaty. W tym przypadku algorytm wymagał będzie pięciu etapów. W celu zaoszczędzenia cennych zasobów układu FPGA (w głównej mierze elementów DSP48E1) zdecydowano się zaimplementować architekturę typu SPDF (single-path delay feedback), w której próbki wejściowe ładowane i przetwarzane są szeregowo, co sprawia, iż na każdy etap przypadają dwie struktury motylkowe (SMT) oraz jeden moduł sumująco-mnożący (MAC). Pomimo tego, że dane ładowane są szeregowo wiele operacji mnożenia oraz sumowania jest wykonywane równolegle, co sprawia, że implementacja tego algorytmu ma w dalszym ciągu przewagę nad tradycyjną realizacją DFT. 2. Architektura procesora FFT 2.1. Struktura modułu FFT Jak już wcześniej wspomniano struktura zbudowanego procesora FFT podzielona została na pięć etapów, z tym że każdy etap składa się z dwóch struktur motylkowych (SMT) oraz jednego modułu MAC (sumująco-mnożący). Każdy moduł MAC wyposażony jest w dwie pamięci ROM, przechowujące wartości funkcji sinus oraz cosinus, odpowiednio przemnażane przez próbki wejściowe. Struktura systemu przedstawiona jest na poniższym rysunku: Etap 1 N = 512 16 Etap 2 N = 256 18 17 SMT 1 SMT 2 sin 18 N = 128 19 SMT 1 MAC N = 64 Etap 3 20 SMT 2 sin MAC N = 32 20 N = 16 21 SMT 1 22 SMT 2 cos cos sin MAC cos kontroler 22 23 SMT 1 N=8 24 SMT 2 N=4 Etap 4 sin 25 24 26 MAC SMT 1 SMT 2 cos N=2 N=1 mag moduł Etap 5 Rys. 1. Struktura zaimplementowanego procesora FFT w strukturze FPGA Ze względu na to, że w układach cyfrowych niemożliwe jest bezpośrednie działanie na liczbach zespolonych zdecydowano się na osobne przetwarzanie zarówno części rzeczywistej jak i urojonej. Ułatwia to późniejsze operacje na wyjściowej liczbie zespolonej (przykładowo obliczanie modułu, przesunięcia fazowego itp..) Na każdym etapie przetwarzania – po operacjach sumowania oraz mnożenia, wielkości wyjściowe są skalowane oraz zaokrąglane, dlatego też długości bitowe słów wyjściowych nie przekraczają 32 bitów. W strukturze procesora znajduje się także moduł kontrolera, który w odpowiedni sposób przełącza połączenia w modułach SMT oraz generuje adres dla pamięci ROM przechowującej wartości funkcji sinus oraz kosinus. Do zaprojektowania wszystkich modułów wykorzystano język SystemVerilog. Całość systemu jest parametryzowana, co pozwala na wykorzystanie każdego modułu wielokrotnie, w różnych konfiguracjach (różne długości słów wejściowych oraz wyjściowych). 2.2. Moduł MAC Nazwa modułu została zaczerpnięta z języka angielskiego –„Multiply and Accumulate”. Moduł ten odpowiedzialny jest za przemnażanie próbek wejściowych przez odpowiednie wartości funkcji sinus i cosinus oraz zsumowanie rezultatów. Realizuje on poniższą operację: Gdzie to wartości funkcji sinus oraz cosinus na poszczególnych etapach FFT. Zostały one zapisane na stałe w pamięciach ROM, po uprzednim wygenerowaniu tych wartości w programie Matlab. Poniżej przedstawiono strukturę modułu mnożąco – sumującego: ROM cos ROM sin A*sin(x) A SMT i=0 B*cos(x) Asin(x)+Bcos(x) Acos(x)-Bsin(x) SMT i=1 B*sin(x) B A*cos(x) Rys. 2. Struktura zaprojektowanej jednostki MAC Moduł ten odpowiedzialny jest za mnożenie dwóch liczb zespolonych. Ze względu na to, że części składowe liczb zespolonych przetwarzane są przy pomocy osobnych ścieżek należało wykorzystać cztery elementy mnożące oraz dwa sumatory. Aby zwiększyć maksymalną dopuszczalną częstotliwość sygnału zegarowego dla tego modułu wykorzystano technikę pipeliningu, która polega na umieszczaniu elementów opóźniających na wejściach i wyjściach układów arytmetycznych. Rys. 3. Zastosowanie techniki pipeliningu, niebieskie prostokąty to elementy opóźniające Odpowiednie zastosowanie pipeliningu skutkuje tym, że elementy arytmetyczne podczas syntezy umieszczone zostają w bloku DSP48E1 (w układach Zynq), który może pracować przy maksymalnej częstotliwości sygnału zegarowego. Ponieważ mnożenie liczby M bitowej przez liczbę N – bitową daje w rezultacie liczbę (M+N) – bitową wartości wyjściowe były odpowiednio skalowane oraz zaokrąglane. 2.3. Struktury motylkowe Aby możliwe było przejście z dziedziny czasu do dziedziny częstotliwości należało stworzyć moduły realizujące działanie motylka FFT. Strukturę jednego z modułów przedstawiono na poniższym rysunku: mux4 Re{P} P_re Im{P} P_im mux3 mux2 Re{A} RAM mux1 Im{A} STEROWANIE RAM Rys. 4. Struktura modułu SMT Widoczne na rysunku przełączniki (multipleksery) są sterowane przy pomocy modułu kontrolera. Przez pierwsze N/2 cykli sygnału zegarowego przełączniki ustawione są w pozycji 0, co sprawia że próbki wejściowe są bezpośrednio kierowane w stronę pamięci RAM, pełniącej rolę rejestru przesuwnego. W kolejnym kroku układ sterujący zmienia pozycję przełączników na przeciwną. Po tym przełączeniu obliczana jest dwupunktowa transformata z próbek przechowywanych w pamięci RAM oraz z próbek wejściowych (operacje sumowania i odejmowania). Część próbek wyjściowych przekierowywana jest do modułu MAC, natomiast reszta jest przetwarzana dalej (pamięć RAM i układy sumująco – odejmujące). Wartość opóźnienia N dla każdego etapu jest inna, co zostało wyraźnie zaznaczone na rysunku 1. 3. Podsumowanie Zaprojektowany moduł procesora FFT działa prawidłowo, co odnotowano w symulacji funkcjonalnej modułu (w programie Modelsim). Na wejściach modułu wygenerowano wartości funkcji sinus oraz cosinus, po czym na wyjściach zaobserwowano prążki pojawiające się w kolejnych odstępach czasu. Rys. 5. Symulacja funkcjonalna modułu FFT, część rzeczywista: sinus, część urojona: cosinus. W wyniku syntezy uzyskano szczegółowe informacje dotyczące zużycia zasobów wykorzystanego układu programowalnego, z czego najważniejszą informacją było zużycie bloków DSP. W zaprojektowanym układzie zużycie to było na poziomie 24 bloków DSP. Maksymalna częstotliwość sygnału zegarowego mogącego taktować zbudowany procesor FFT wynosi ok. 400MHz. Obecnie trwają prace nad zwiększeniem tej częstotliwości. Zaprojektowany moduł z powodzeniem można zastosować w układach pomiarowych, przykładowo do budowy analizatora widma. Ze względu na bogate wyposażenie płyty prototypowej z układem Zynq – 7010 możliwe jest także rozbudowanie takiego analizatora widma o dodatkowe interfejsy typu USB, Ethernet, co w dzisiejszych czasach jest powszechnie stosowanym zabiegiem. Lit erat u ra [1] http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/ug873-zynq-ctt.pdf [2] https://www.digilentinc.com/Data/Products/ZYBO/ZYBO_RM_B_V6.pdf [3] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-973communication-system-design-spring-2006/lecture-notes/lecture_10.pdf [4] E. Wold and Alvin M. Despain "Pipeline and Parallel-Pipeline FFT Processors for VLSI Implementations," IEEE Trans. Computers vol. 33, no. 5, pp. 414-426, 1984 [5] http://www.xilinx.com/support/documentation/user_guides/ug479_7Series_DSP48E1.pdf