Skład grupy. |
Indeks |
Rok Akad. |
Kierunek / specjalność |
Nr Stan. lab. |
|
|
III
III |
Elektronika/Aparatura Elektroniczna Elektronika/EZI |
|
Cel ćwiczenia
Celem ćwiczenia jest pojęcie znaczenia kodu asemblerowego oraz sposobów jego wykorzystania przy tworzeniu projektów na procesorach DSP. Wykonanie ćwiczenia pozwoli na poznanie zależności panujących pomiędzy kodem asemblerowym a kodem w języku C , a także na zapoznanie z zależnościami czasowymi charakteryzującymi funkcje napisane w obu kodach. Ostatecznym skutkiem powinno być zyskanie umiejętności zastosowania oraz sposobu użycia asemblera.
Przebieg ćwiczenia
a)Początkowym etapem ćwiczenia było stworzenie nowego projektu zgodnie z wcześniejszymi doświadczeniami , oraz dołączenie do niego niezbędnych plików zamieszczonych na stronie laboratorium , a dedykowanych dla ćwiczenia asembler. Analogicznie do doświadczeń z poprzednich laboratoriów stanowisko pracy zostało poprawnie skonfigurowane.
b)W oknie „console” możemy zaobserwować , że nasz projekt zawiera implementacje filtru FIR o 51 współczynnikach oraz składa się z 6 wyszczególnionych etapów. Każdy z etapów ma za zadanie przetworzenie w inny sposób sygnału muzycznego z odtwarzacza mp3 oraz podanie go na wyjście(głośniki).Analiza poszczególnych etapów działania programu ukazuje nam różnice pomiędzy nimi. Pierwszy etap - nie wprowadza żadnych zmian ,przenosi próbki z wejścia na wyjście. Drugi etap - jest oparty na filtrze FIR zaimplementowanym w języku C dla zegara PPL równego 100 MHz. Trzeci etap - powtórnie realizuje filtr FIR w języku C , zmienia jednak częstotliwość na 40 MHz. Czwarty etap - również opiera się na filtrze FIR , jednak tutaj użyty został kod asemblerowy ,a częstotliwość wynosi 100 MHz. Piąty etap - napisany w asemblerze , ze zmianą częstotliwości na 12 MHz. Szósty etap wykorzystuje asemblerową wersję funkcji myfunction() do odpowiedniego przetworzenia sygnału.
c)Następnym etapem pracy było poddanie analizie każdego z 6 opisanych wyżej etapów. Etapy przy każdej z częstotliwości PPL działają zgodnie z założeniami , oznacza to , że filtrują dany sygnał( z wyjątkiem jednego etapu).
„Jeden z etapów przetwarzania TMS320C5515 USB odbywa się z szybkością wynoszącą połowę oczekiwanej szybkości. Który? Dlaczego tak się dzieje?”
Jest to etap trzeci. Etap ten charakteryzuje się opóźnieniem sygnału w tym przypadku oznacza to , że wykonywany jest o połowę wolniej niż wskazywałaby na to spodziewana szybkość wykonania. Aby spróbować odnaleźć powód takiej sytuacji , przez grupę została użyta opcja „clock”. Za pomocą tej opcji , zbadano liczbę instrukcji ,niezbędną do realizacji jednego przebiegu pętli filtru FIR zaimplementowanego w języku C. Zgodnie z instrukcją liczba instrukcji powinna wynieść 1923 i właśnie taka liczba z została otrzymana. Analogiczny pomiar dla filtru zaimplementowanego w asemblerze wyniósł 68.Jeżeli 40 MHz w zakresie taktowania daje nam 1/40 µs to przy 1923 instrukcjach otrzymamy wartość 1923*1/40 co w przybliżeniu da nam 48 µs. Obliczona wartość pozwala zauważyć ,że jeżeli przy taktowaniu kodeka 48 KHz czas jednego przebiegu to 20,8 µs to przetwarzanie jest dwukrotnie dłuższe. Doświadczalnie zauważone zostało , że dźwięk na wyjściu według obu członków grupy jest zniekształcony.
d)Kontynuując pracę , grupa stanęła przed zadaniem zmiany częstotliwości taktowania PPL. Zmiany wyżej wymienionej częstotliwości taktowania , pozwoliły wysnuć wnioski odnośnie dopuszczalnych zmian pozwalających na poprawne przetwarzanie sygnału zarówno dla filtrów zaimplementowanych w język C jak i w asemblerze. Dopuszczalne wartości wymienione w instrukcji to - 1,2,12,40,60,75,98 oraz 100.Badanie wykazało , że częstotliwość taktowania dla języka C możemy zniżyć do 75 MHz zachowując poprawność działania filtrów. Odnośnie filtrów zaimplementowanych w asemblerze , granica to przesuwa się bardzo znacząco. Dopiero częstotliwość taktowania 12 MHz znacząco wpływa na jakość filtru(doświadczenia słuchowe). Funkcja myfunction() działa poprawnie do 12 MHZ , dla częstotliwości 2 MHz nie funkcjonuje ona poprawnie , tak samo jak filtr asemblerowy. Częstotliwość 1 MHz jest zabójcza dla wszystkich etapów , łącznie z pierwszym realizującym zwykłe przekazanie próbek.
e)Odpowiedzi na resztę pytań zawartych w instrukcji.
O ile szybszy jest filtr FIR zaimplementowany w asemblerze w porównaniu do jego odpowiednika w C?Wyciągając wnioski z wcześniejszych obliczeń dla częstotliwości 40 MHz(filtr w języku C), oraz porównując go do języka asemblerowego ,widzimy , że wartość 48 µs analogicznie w asemblerze wynosi w przybliżeniu 2 µs. Jest więc to stosunek szybkości 1x24 na korzyść asemblera.
W jaki sposób możesz zaimplementować własną funkcję asemblerową?
Jeśli uda nam się poprawnie zaimplementować kod w języku asemblera , samo dołączenie funkcji jest już trywialne. Zgodnie z doświadczeniami płynącymi z wykonywanego ćwiczenia wystarczy dołączyć nasz plik z rozszerzeniem .asm charakterystycznym dla języka asemblera(w ćwiczeniu funkcje C (.c) zastąpiliśmy funkcją asemblerową(.asm)).
W jaki sposób możesz określić, czy funkcję lepiej zaimplementować w języku asemblerowym, czy raczej pozostawić w C?
Analiza zasadności zastąpienia funkcji napisanej w języku C funkcją asemblerową , oparta musi być na naszych potrzebach czasowych , gdyż funkcje w języku asemblerowym są dużo szybsze. Biorąc pod uwagę prędkość wykonywania funkcji asemblerowej musimy zwrócić uwagę na dużo większą złożoność napisania funkcji wykonującej te same działania w języku asemblera niż w języku C. Jeśli potrzebujemy zysku na czasie wykonywania programu ,a możemy pozwolić sobie na poświęcenie większej ilości czasu na napisanie funkcji w języku asemblera oraz stworzeniu paru niedogodności wynikających z zastosowania asemblera , to jego zastosowanie jest zasadne.
Wnioski
Język asemblera jest bardzo ważny w zagadnieniu optymalizacji programów wykorzystujących procesory sygnałowe. Programista powinien rozważyć wszystkie za i przeciw nim zdecyduje się na zastąpienie funkcji napisanej w języku C na funkcje asemblerową. W decyzji powinny pomóc mu założenia prędkościowe oraz optymalizacyjne dotyczące projektu oraz własne możliwości czasowe ,a także umiejętności zwłaszcza w zakresie pisania kodu w języku asemblera. Wykonanie ćwiczenia pozwoliło nam poznać kolejne przydatne opcje proponowane nam przez środowisko programistyczne CSS. Niewątpliwie nabycie umiejętności w zakresie użytku języka asemblerowego , pozwala twórcy na większą kontrolę swojego programu oraz umożliwia zwiększenie wydajności programu.
4). Wyposażenie/aparatura
Sprzęt laboratoryjny wykorzystany podczas realizacji:
komputer ze środowiskiem programistycznym CSS
płytka testowa
kabel USB
odtwarzacz mp3
głośniki
|
Asembler |
5 |
Autor sprawozdania |
Temat ćwiczenia |
Nr ćwicz. |
Laboratorium procesorów sygnałowych 19.12.2014/Piątek 13:15
1
|
|
|
Autor sprawozdania |
Temat ćwiczenia |
Nr ćwicz. |
Laboratorium procesorów sygnałowych data: ..........................