Mam szczególnie dużą transformację przetwarzania sygnału, którą należy przenieść z Matlaba na VHDL. To zdecydowanie wymaga pewnego rodzaju udostępniania zasobów. Trochę obliczeń dało mi następujące informacje:
- 512 fft 64-punktowych
- 41210 operacji wielokrotnego dodawania
Biorąc pod uwagę, że największy Virtex 6 FPGA ma ~ 2000 bloków DSP48E, wiem, że mogę współdzielić zasoby, aby wielokrotnie korzystać z zasobów. Czas wykonania nie jest tak naprawdę problemem, czas przetwarzania może potrwać stosunkowo długo w kategoriach FPGA.
Patrząc na wykorzystanie zasobów, użycie architektury radix-2 lite daje mi bloki 4dsp / FFT = 2048 bloków DSP, w sumie ~ 43k. największy Virtex FPGA ma 2k bloków, czyli 20 operacji / multiplekser.
Oczywiście uwzględnienie tak dużych miksów w tkaninie również zajmie plastry. Gdzie znajdę górną granicę tego limitu? Nie mogę w nieskończoność udostępniać zasobów FPGA. Czy mnożniki 41210 są za duże? Jak obliczyć, co jest za duże?
Przyjrzałem się także innym zasobom (plastry, stłuczki itp.). Radix-2 Lite daje również 4 x 18k Brams / fft = 2048 Brams, największy Xilinx FPGA zawiera 2128 Brams. bardzo granica. Obawiam się, że mój projekt jest po prostu za duży.
AKTUALIZACJA:
Więcej informacji na temat samego projektu. Nie mogę wdawać się w szczegóły, ale oto, co mogę dać:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
wyjściowa specyfikacja danych: „szybciej niż symulacja Matlaba”
obliczenia mądre, oto gdzie jestem:
Etap FFT: łatwy. Mogę wdrożyć FFT 1/2/4/8, zapisać wyniki w pamięci SDRAM i uzyskać dostęp później. Stosunkowo mały, nawet jeśli zajmuje dużo czasu, jest w porządku. używając radix-2 lite mogę uzyskać 2 DSP48E i 2 18k BRAMS / FFT. Streaming daje 6 DSP48Es 0BRAMS / FFT. w obu przypadkach 64-punktowy FFT jest niewielki pod względem zasobów FPGA.
Mnożniki : to mój problem. Dane wejściowe do mnożenia są pobierane z tabel odnośników lub danych FFT. To naprawdę jest cała masa wielokrotnych dodań. Nie ma wiele do optymalizacji. Nie filtr, ale ma cechy podobne do filtra.
Biorąc pod uwagę współdzielenie zasobów na FPGA, matematyka działa w następujący sposób: Jeden LUT-6 może być używany jako multipleks 4-kierunkowy. Wzór na multipleks M-bitowy N-way jest następujący:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
chrupanie liczb dla mojej implementacji nie daje dobrych rezultatów. 90% z rodziny virtix-6 nie ma wystarczającej liczby wycinków, aby dzielić zasoby DSP w celu wykonania 40 000 operacji.