SORTOWANIE (przykład zastosowania DMA) Orkiszewski Marcin Koło Naukowe Układów Cyfrowych DEMAIN
Zadanie: Posortować liczby 128-bitowe w jak najkrótszym czasie. Liczby mogą się powtarzać. Liczba danych – 2^n (max. 4MB).
Algorytm sortujący: Jaki algorytm sortujący pasuje do układów FPGA ? Mergesort – rekurencyjne sklejanie uporządkowanych zbiorów. Sklejanie łączenie strumieni.
Implementacja (1) SDRAM 8 MB (16 bit) 2x DMA 16 bit Komparator VHDL
Implementacja (1) – problemy… SDRAM 8 MB (16 bit) zbyt wąska szyna danych (dane 128-bitowe) wydłużone porównywanie (komparator musi gromadzić dane) jednoczesny odczyt z SDRAM przez dwa DMA (znaczne spowolnienie odczytu)
Implementacja (2) Algorytm rekurencyjny Tylko jedno DMA obsługujące SDRAM w danym momencie 2x DMA 128 bitowe (4x szybciej) Komparator 128 bitowy Algorytm rekurencyjny
Synchronizacja DMA_read pobiera dane z SDRAM i wypełnia pierwszą pamięć DMA_1 i DMA_2 wysyłają strumienie do komparatora DMA_RESULT odbiera posortowany strumień DMA_write zapisuje posortowane dane z drugiej pamięci do SDRAM
Merger128.vhd Dwa 128-bitowe porty wejściowe Obsługa sygnału waitrequest dla każdego portu (pod DMA) Zawiera 2 liczniki dla danych wejściowych (ustawiane przez CPU): Jeżeli oba liczniki większe od 0, to wystaw na wyjście większą liczbę z dwóch strumieni oraz pobierz kolejną do porównania Jeżeli licznik dla danego strumienia osiągnął zero, to wystawiaj na wyjście liczbę z drugiego strumienia Jeżeli oba liczniki osiągnęły 0, zacznij od początku.
Założenie projektu
Altera NIOS II Wymagane oprogramowanie: Quartus II v. 9.0 Nios IDE v. 9.0 Do pobrania na stronie www.altera.com
Uwaga! Katalogi, w których instalujemy oprogramowanie oraz w których zakładamy projekty: ! NIE MOGĄ zawierać spacji !
Uwaga! Unikać powtarzania nazw: - block diagram: <..>_project - SOPC: <..>_sopc - Nios IDE <..>_soft W razie problemów www.google.com
1. Otworzenie projektu Quartus II Project Restore Archived Project… Otworzenie archiwum projektu: Quartus II Project Restore Archived Project…
2. Kompilacja projektu Processing Start compilation - Wykorzystanie komórek logicznych - Wykorzystanie bloków pamięci
3. Załadowanie obrazu do układu Tools Programmer - Hardware Setup USB-Blaster Program/Configure Start - Czasami przydatne bywa włączenie zasilania -
Programowanie
7. Założenie projektu (1/2) File New Project… Nios II C/C++ Application
7. Założenie projektu (2/2) Wskazanie obrazu systemu (.ptf): Select project template: Blank Project Name: szkolenie3_merger SOPC Builder System PTF File: ../szkolenie3_sopc.ptf Finish
8. Kompilacja biblioteki Prawy klawisz myszki na szkolenie3_merger_syslib Properties System Library Reduced device drivers Small C library itp.. Build Project
9. Dodanie plików źródłowych (C/C++) Prawy klawisz myszki na szkolenie3_merger Import… General File System szkolenie3_merger.h szkolenie3_functions.c szkolenie3_merger.c
10. Uruchomienie projektu Run Run… Nios II Hardware Main Project: szkolenie3_merger Target Connection: USB-Blaster Run
Program
Program Gdy DMA_1 skończy kopiować dane do komparatora, uruchom DMA_read, aby uzupełnić dane dla strumienia, następnie ponownie uruchom DMA_1 Gdy DMA_2 skończy kopiować dane do komparatora, uruchom DMA_read, aby uzupełnić dane dla strumienia, następnie ponownie uruchom DMA_2 Gdy DMA_RESULT wypełni pamięć wynikami, uruchom DMA_write, aby zapisać wyniki do SDRAM, następnie ponownie uruchom DMA_RESULT
Wnioski Dzięki zastosowaniu „wirtualnego” podziału pamięci (adresami) możemy jednocześnie sortować i odczytywać / zapisywać dane! Całe sterowanie sortowaniem polega na odpowiednim uruchamianiu poszczególnych DMA wraz z wyliczonymi nowymi adresami!
Porównanie szybkości działania MB
Materiały dostępne na stronie Koła http://demain.zpt.tele.pw.edu.pl/ Publikacje 1 XII 2009