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

Podobne dokumenty