Wybór procesora do zastosowań multimedialnych

| Technika

Wybór procesora do zastosowań multimedialnych jest złożonym zadaniem. Podjęcie dobrej decyzji wymaga analizy rynku, odpowiedniej wiedzy i oceny wymagań aplikacji. Podczas selekcji warto rozpocząć od odpowiedzi na kilka pomocniczych pytań. Należy zapoznać się z możliwościami rdzenia i dodatkowego wyposażenia i zastanowić, jaką moc może rozpraszać zastosowany układ. Wybór urządzenia o architekturze znanej wielu programistom może wydawać się oczywisty. Projektanci zaznajomieni z danym procesorem posiadają zasób wiedzy i doświadczenia. Czasami zachodzi potrzeba wprowadzenia zmian do urządzenia, które zostało wcześniej wdrożone do sprzedaży. Ponadto istniejące oprogramowanie może być użyte ponownie po wprowadzeniu modyfikacji, aby skrócić czas oczekiwania na produkt finalny.

Wybór procesora do zastosowań multimedialnych

Nie zawsze jest to możliwe, bo najczęściej nowe projekty wymagają większej mocy obliczeniowej niż poprzednie wersje urządzeń. Przyrost mocy uzyskuje się głównie dzięki zastosowaniu nowszych układów elektronicznych. Przykładem mogą być rdzenie zoptymalizowane pod kątem przetwarzania strumienia audio. Jednakże, kiedy zajdzie konieczność dekodowania obrazów szybko okaże się, że ich wydajność jest zbyt mała.

Jaka powinna być wydajność systemu?

Rys. 1. Wymagania stawiane przez różne zadania obsługiwane przez nowoczesne urządzenia

Pytanie o wydajność systemu odnosi się bezpośrednio do architektury procesora. Przed przystąpieniem do pierwszych testów prototypu, należy określić wymaganą liczbę instrukcji przypadających na sekundę, liczbę operacji wykonywanych w jednym cyklu maszynowym oraz sprawność obliczeniową rdzenia. Pod rozwagę należy wziąć dwóch procesorów jednocześnie. Dodanie drugiej jednostki obliczeniowej podnosi nie tylko szybkość pracy całego urządzenia, ale także umożliwia elastyczny podział zadań pomiędzy dwie jednostki. W niektórych sytuacjach rozwiązanie to może okazać się bardziej energooszczędne niż w przypadku jednego procesora, ale taktowanego z dwa razy większą częstotliwością.

Dobrym sposobem oceny wydajności jest uruchomienie w systemie prototypowym specjalnego testu. Pozwoli on zweryfikować, czy system pracujący w trybie rzeczywistym (real-time processing) będzie wymagał zwiększenia wydajności. Dodatkowo ułatwi odpowiedź na pytanie, czy obecna konfiguracja wystarczy do obsługi nowych lub rozszerzonych funkcji.

Jak testować wydajność?

Istnieje wiele testów, które można wykorzystać do porównania i oceny wydajności. Różni producenci mierzą ją na różne sposoby, co uniemożliwia dokonanie obiektywnego porównania. Co więcej, istnieje wiele możliwości implementacji procedur testowych. Utrudnia to ocenę wydajności badanych układów. Szacowanie szybkość przetwarzania można więc prowadzić na kilka sposobów. Pierwszym z nich jest skorzystanie z usług niezależnych organizacji, które przygotowują testy dla określonej grupy produktów. Przykładowo Berkeley Design Technologies (BDTI) ma procedury do porównywania szybkości przetwarzania sygnałów i dostarcza rozwiązania ułatwiające wybór optymalnej konfiguracji. Podobnie Embedded Microprocessor Benchmark Consortium (EEMBC) dostarcza algorytmów mierzących wydajność całego systemu. Drugim sposobem jest porównywanie dokumentacji producenta, tj. specyfikacji, not aplikacyjnych i przykładowego kodu. Trudne będzie jednak odnalezienie dwóch producentów, którzy uruchomili na swoich procesorach podobne testy - każdy z nich stara się wyróżnić własny wyrób na tle konkurencji, uwypuklając mocne strony i ukrywając słabe. W algorytmach stosuje się uproszczenia lub nierzeczywiste założenia, np. zbyt duży pobór mocy (związany z wysoką częstotliwością taktowania rdzenia). Warto szukać producentów dostarczających wyczerpujących wyjaśnień o sposobie prowadzenia testów. Innym sposobem jest samodzielne przygotowanie, prostych testów. Dostarczą one wiarygodnych informacji o szybkości przetwarzania danych, dostępie do pamięci i ograniczeniach procesora. Przykładowe testy mogą być napisane w C/C++, skompilowane z włączoną optymalizacją i pracować jak benchmark. Inny sposób, to ustawienie kanału DMA do pracy z układami peryferyjnymi, które będą wykorzystane w docelowym systemie i mierzenie czasu, jaki jest potrzebny na przesłanie danych. Jednocześnie powinny pracować co najmniej dwa układy, aby ocenić, czy możliwa jest ich równoległe działanie.

Trzeba mieć na uwadze fakt, że czasami lekka modyfikacja algorytmów, polegająca na usunięciu niektórych obostrzeń prowadzi do ogromnych różnić w wydajności. Przykładem może być emulacja obliczeń zmiennoprzecinkowych na procesorach stałoprzecinkowych zgodna ze standardem IEEE 854. Pełna implementacja tego standardu pociąga za sobą duże zużycie pamięci oraz czasu jednostki obliczeniowej. Pominięcie pewnych detali, takich jak np. sposobu reprezentacji liczb specjalnych pozwala poprawić znacząco wyniki benchmarków, co w minimalnym stopniu wpływa na wyniki obliczeń.

Rys. 2. Przykładowy zestaw deweloperski

Częstym błędem jest zaniżanie szacunków dotyczących przepustowości wymaganej przez system. Właściwa analiza wymaga zsumowania wszystkich strumieni danych, jakie są przetwarzane przez procesor. Przykładowo, w dekoderze wideo, pierwszym strumieniem są dane wczytywane celem zdekodowania. Następnie należy rozważyć sposób przemieszczania danych w systemie. Może to pociągać za sobą konieczność buforowania przy przesyłaniu pomiędzy pamięcią wewnętrzną i zewnętrzną. Na końcu należy uwzględnić strumień danych, który musi być skierowany do urządzenia wyjściowego, takiego jak np. monitor.

Po przeanalizowaniu szerokości pasma danych należy uwzględnić w specyfikacji urządzenia dopuszczalny czas opóźnienia pamięci DRAM, szybkość pracy wewnętrznej magistrali procesora, itp.

Projektant powinien zapoznać się także z zestawem urządzeń peryferyjnych, które zintegrowano wewnątrz procesora i upewnić się, że są one dobrane optymalnie do potrzeb projektowanego systemu. Pozwoli to zaoszczędzić czas i środki finansowe. W czasie rozwoju urządzenia może zaistnieć konieczność wprowadzenia zmian do projektu, więc warto wybierać procesor oferujący bogaty i elastyczny zestaw układów peryferyjnych.

Kwestia mobilności

Urządzenia zasilane bateryjnie wymagają uwzględnienia szeregu dodatkowych czynników. Konieczne jest zastosowanie energooszczędnego procesora w możliwie małej obudowie. Częstym dylematem jest uzyskanie kompromisu pomiędzy wydajnością a niskim zużyciem energii. Procesory nieprzystosowane do działania w przenośnych urządzeniach multimedialnych muszą zostać odrzucone, bo zużywają nadmierne ilości prądu ograniczając powodując zbyt szybkie rozładowanie baterii.

Wybór dobrego źródła zasilania nie jest sprawą prostą, gdyż trzeba uwzględnić gęstość energii ogniwa, wagę urządzenia, odstęp pomiędzy wymaganymi ładowaniami i bezpieczeństwo użytkowania.

Typy obliczeń

Obliczenia prowadzone przez procesory można podzielić na dwie zasadnicze kategorie: zmiennoprzecinkowe oraz stałoprzecinkowe. W ogólności rodziny układów stałoprzecinkowych są szybsze, tańsze i lepiej wykorzystują energię, podczas gdy procesory zmiennoprzecinkowe oferują większą precyzję oraz szeroki, dynamiczny zakres reprezentowanych liczb – czyli stosunek pomiędzy największą i najmniejsza liczbą, jaka może być reprezentowana w obliczeniach.

Obecnie procesory stałoprzecinkowe pracują z tak dużymi prędkościami, że możliwa jest emulacja obliczeń zmiennoprzecinkowych, co pozwala zachować niski koszt aplikacji oraz mniejsze zapotrzebowania na energię.

Funkcjonalność i oprogramowanie

W przypadku zakładania możliwości zmiany oprogramowania i w efekcie zmiany funkcji urządzenia warto wykorzystać układy programowalne, np. procesory DSP, MCU lub FPGA. Pozwoli to przystosować aplikację do nowych wymagań użytkowników, np. poprzez dodanie obsługi nowszego standardu kodowania obrazu. Mając pewność, że żadna zmiana nie będzie potrzebna projektant może zdecydować się na zamknięcie projektu w układzie ASIC.

Ważne jest też, by ustalić, czy urządzenie będzie miało system operacyjny. Jako OS (Operating System) określa się program, który obsługuje urządzenia I/O, zarządza plikami, zapewnić równoległą pracę kilku podprogramów, kontroluje uruchomione procesy i nadzoruje ich pracę. Projektanci mają skłonność do faworyzowania określonego systemu, więc wybór procesora DSP może być uzależniony od możliwości obsługi danego systemu operacyjnego. Ma to szczególne uzasadnienie w przypadku fragmentów programu, które były przystosowane uprzednio danego sytemu.

Wybór systemu operacyjnego wymaga rozważenia kilku czynników, takich jak dostępna dokumentacja i kody źródłowe, wielozadaniowość lub zapewnienie jednoczesnego dostępu wielu użytkowników. W niektórych wypadkach wystarczające będą systemy uproszczone, które zapewniają jedynie obsługę podstawowych czynności. Wiele aplikacji nie wymaga w ogóle systemu operacyjnego.

Istotny jest także dobry wybór narzędzi programistycznych, który może przyczynić się do drastycznego zwiększenia produktywności i skrócenia czasu potrzebnego na rozwój i testowanie aplikacji. Należy uwzględnić zarówno od potrzeby programistów jak i specyfikę tworzonej aplikacji. Wiele firm jest w posiadaniu bibliotek opracowanych na przestrzeni lat, które mogłyby zostać użyte w kolejnych opracowaniach.

Zagadnienie narzędzi programistycznych zyskuje na znaczeniu w przypadku pracy z nową rodziną procesorów. Przykładowo, zastosowanie kompilatora C/C++ pozwala łatwo przenosić kod z jednej platformy na inną i odpowiednio optymalizować pliki wynikowe za pomocą ustawień kompilatora. Prowadzi to do szybszego osiągnięcia postawionych celów bez konieczności żmudnego zagłębiania się w architekturę i język maszynowy docelowego procesora. Oczywiście nadal konieczna będzie znajomość budowy konkretnej rodziny.

Najpoważniejszym problemem związanym z przenoszeniem oprogramowania na inny procesor jest unikalność układów peryferyjnych. W każdym urządzeniu pracują one inaczej i są konfigurowane na inne sposoby. Przestaje to być problemem, gdy dla danego procesora zostaną stworzone odpowiednie procedury, czyli sterowniki, które pozwalają pisać algorytmy niezależnie od układów peryferyjnych.

Rozpoczynając pracę z nową rodziną procesorów warto zwrócić uwagę, czy istnieją moduły programowe pozwalające na wspomaganie projektowania przy pomocy programów takich jak Matlab, Simulink czy też LabView. Ułatwiają one generację kodu na podstawie abstrakcyjnie zapisanych algorytmów. Dodatkowo produkty te znacznie skracają czas pomiędzy przygotowaniem prototypu a wdrożeniem finalnego urządzenia na rynek.

Czas przygotowania prototypu

Niezwykle ważna jest także dostępność sprzętowych zestawów rozwojowych. Pozwalają one zapoznać się z możliwościami wybranych układów bez konieczności samodzielnego przygotowania platformy testowej. Przeoczenie tej dogodności będzie wymagać poświęcenia dodatkowego czasu ze strony zespołu projektantów. Należy sprawdzić, czy możliwe jest połączenie kilku zestawów testowych razem, aby przetestować działanie układów pochodzących od różnych producentów. Przykładowo firmy takie jak Micron czy Omnivision oferują sensory optyczne wykonane w technologii CMOS. Dostępne są m. in. razem z niezbędnymi elementami tworzącymi przykładowy system testowy. Należy zastanowić się, czy możliwe będzie podłączenie takiego zestawu do budowanej aplikacji. Funkcjonalność i złożoność takich modułów jest różna i mogą być one wyposażone np. w pamięć programu, pamięć RAM, źródło sygnału zegarowego, stosowne stabilizatory itp. Ich przydatność jest bardzo duża, gdyż pozwala skupić się na poznawaniu możliwości konkretnego układu bez straty czasu na projektowanie systemu do prowadzenie testów.

Koszt całego systemu

Następnym problemem wymagającym głębszego zastanowienia jest koszt całego systemu i jego analiza. Pierwszym czynnikiem jest cena samego procesora, jednak nie jest to sprawa prosta. Niektóre z układów zawierają więcej zintegrowanych elementów niż inne, przez co pozwalają zaoszczędzić koszty związane z zakupem dodatkowych układów zewnętrznych. Na ceną wpływa również obudowa układu scalonego. Niektóre z nich mogą być prawidłowo podłączone dopiero po zastosowaniu wielowarstwowych płytek drukowanych.

Także i wydajność układu, która wpływa na cenę może być traktowana jako dodatkowa zaleta, która w przyszłości pozwoli zmniejszyć koszty aktualizacji oprogramowania modułu, a nawet jako zabezpieczenie przed złym oszacowaniem wymogów co do mocy obliczeniowej aplikacji.

Przed podjęciem decyzji o wyborze konkretnego procesora warto sprawdzić, czy jego producent sprzedaje również inne komponenty. Zazwyczaj dobrym rozwiązaniem jest stosowanie układów pochodzących od jednego wytwórcy. Daje to pewność, że wszystkie elementy systemu będą ze sobą poprawnie współpracować i umożliwia uzyskanie skuteczniejszej pomocy ze strony sprzedawcy. Jeszcze jeden czynnik zachęcający do takich praktyk, to możliwość otrzymania korzystnych rabatów z tytułu większego zamówienia.

Rodzaje układów

Rys. 3. Popularne układy peryferyjne i odpowiadające im mikroprocesory

Poza opisywanymi dotąd kwestiami należy także zdecydować, jakiego typu jednostka obliczeniowa ma być wykorzystana. Do wyboru dostępne są:

  • Application-Specific Integrated Circuit (ASIC)
  • Application-Specific Standard Product (ASSP)
  • Układy programowalne (FPGA)
  • Mikrokontrolery (MCU)
  • Cyfrowe procesory sygnałowe (DSP)
  • Układy hybrydowe – połączenie MCU i DSP

Układy ASIC są fizycznymi realizacjami projektów przygotowanych specjalnie pod kątem konkretnej aplikacji. Charakteryzują się dużą wydajnością i specjalizacją. Mogą być optymalizowane pod kątem zużywanej energii lub szybkości przetwarzania danych. Po przygotowaniu prototypowego produktu i sprecyzowaniu wymagań, możliwe jest wdrożenie danego rozwiązania w postaci ASIC. Obniża to koszty jednostkowe dużej serii urządzeń. Ma to znaczenie zwłaszcza dla urządzeń przeznaczonych na masowy rynek konsumencki.

ASSP jest odpowiednikiem ASIC przeznaczonym do konkretnej grupy produktów i sprzedawanym wielu producentom danego sektora rynku. Poprzez swoją uniwersalność jest bardziej złożonym produktem i zazwyczaj zawiera więcej bloków funkcjonalnych. Jest preferowany głównie przez firmy, które nie mogą pozwolić sobie na przygotowanie samodzielnego projektu. Cena i rozmiary obu tych technologii są porównywalne.

Do zalet ASIC i ASSP zalicza się bardzo dobre wykorzystanie możliwości układów i szybkość pracy. Elementy peryferyjne są dobierane indywidualnie. Brak zbędnych modułów, takich jak np. kontrolera Ethernet w odtwarzaczu MP3 pozwala zachować optymalne zużycie energii. Ceną za to jest utrata elastyczności systemu – po wykonaniu układu ASIC nie można w nim już nic zmienić i przystosować produktu do nowych wymagań rynkowych – np. do obsługi nowych metod kompresji. W związku z tym, wszelkie błędy w ASIC lub ASSP prowadzą do ogromnych strat finansowych.

Obserwowane obecnie dynamiczne zmiany na rynku urządzeń multimedialnych nie zachęcają do stosowania układów ASIC. Wciąż pojawiają się nowsze i lepsze algorytmy przetwarzania obrazów i dźwięku, które nie mogłyby być zaimplementowane w już istniejących ASIC i ASSP.

Osiągnięcie wysokiej wydajności, niskiego zużycia energii i małych wymiarów wymaga zastosowania nowoczesnych procesów technologicznych. Niestety jest to związane z rosnącym kosztem przygotowania procesu. Koszty masek dla układów wykonywanych w technologii 65 i 90nm sięgają miliona dolarów. Ogromne nakłady finansowe, połączone z długim czasem oczekiwania na rozpoczęcie produkcji hamują stosowanie układów ASIC w systemach multimedialnych. Skłania to projektantów do szukania rozwiązań bardziej elastycznych i umożliwiających przeprogramowanie urządzenia.

FPGA

Układy FPGA pozwalają na skrócenie czasu pracy nad systemem, dostępności dużej liczby bibliotek z gotowymi blokami funkcjonalnymi przeznaczonymi do przetwarzania sygnałów. Wydajność układów programowalnych jest zbliżona do ASIC, gdyż projektant ma możliwość optymalizowania fizycznego połączenia bramek dla określonego zadania. FPGA umożliwiają również równoległe przetwarzanie kilku strumieni danych poprzez zdublowanie bloków funkcjonalnych, co jest niemożliwe w procesorach sygnałowych i mikrokontrolerach.

Układy programowalne mają również swoje wady. Wśród których należy wymienić większą cenę, większy rozmiar oraz wzrost zapotrzebowania na energię. W związku z tym, układy FPGA są rzadko stosowane jako główna jednostka obliczeniowa w przenośnym urządzeniu multimedialnym. Znajdują za to szerokie zastosowanie w prototypach lub systemach, gdzie cena i zużycie energii nie są sprawą kluczową.

Układy programowalne, ze względu na swoją budowę, upraszczają realizację interfejsów komunikacyjnych z układami pracującymi w urządzeniu multimedialnym. Zadanie to staje się jeszcze prostsze w przypadku popularnych standardów, do których dostępne są odpowiednie biblioteki. Nieocenioną zaletą FPGA jest także możliwość bezpośredniego przeniesienia projektu do postaci ASIC.

Mikrokontrolery

Mikrokontrolery, czyli MCU są wykorzystywane głównie jako układy kontrolne i sterujące. Są zoptymalizowane do wykonywaniu kodu składającego się z wielu instrukcji warunkowych, z częstym wywoływaniem podprogramów. Oprogramowanie pisane jest zwykle w języku C/C++ z optymalizacją kodu wynikowego.

Mikrokontrolery różnią się między sobą częstotliwością taktowania, która może sięgać kilkuset megaherców oraz szerokością magistrali – od 4 bitów do 32 bitów. Rozwiązania 32-bitowe stają się dominujące w systemach wbudowanych. Szybko rosnąca popularność układów 32-bitowych wynika z ograniczenia rdzeni 8-bitowych, które mają znacznie mniejszą wydajność. Konieczna jest emulacji rejestrów 32-bitowych za pomocą 4 rejestrów 8-bitowych, a stosowne przeliczenia pochłaniają cenny czas. Niemożliwe jest prowadzenie obliczeń w czasie rzeczywistym, wymaganych np. w systemach wizyjnych.

Warto zauważyć, że rdzenie 8-bitowe nie znikną szybko z rynku, bo mają szereg cennych zalet, takich jak bardzo niska cena, mała obudowa, niskie zużycie energii oraz kod wymagający niewielkiej ilości pamięci. Znajdują zastosowanie np. w samochodach i kamerach. Często zawierają zintegrowane moduły, takie jak pamięć Flash, kontrolery sieci Ethernet, liczniki, przetworniki A/C, CAN, PWM itp. Ułatwia to realizację różnorodnych zadań.

Alternatywą są mikrokontrolery 16-bitowe. Ich koszt jest, w przybliżeniu, dwukrotnie większy niż układów 8-bitowych, ale pozwalają na znacznie szybsze przetwarzanie danych i większą integrację układów peryferyjnych. Dodatkowo charakteryzują się niskim poborem prądu w stanie oczekiwania oraz oferują większą pamięć programu niż mikrokontrolery 8-bitowe. Okazuje się niestety, że ich wydajność nie jest wystarczająca do pracy w systemach multimedialnych, a sprawę komplikuje dodatkowo mały zakres adresowania układów zewnętrznych. Konieczna jest jednak kompleksowa zmiana kodu przy przenoszeniu oprogramowania z platformy 8-bitowej na 16-bitową i, co oczywiste, wymiana narzędzi projektowych. Ceny układów 16-bitowych i 32-bitowych są obecnie na zbliżonym poziomie, w przeciwieństwie do wydajności. Wszystkie te czynniki powodują, że projektanci wolą od razu sięgnąć po moc płynącą z 32-bitowej architektury, niż eksperymentować z rozwiązaniami 16-bitowymi.

Rys. 4. Obecne tendencje co do liczby i kosztu MAC w DSP

Należy zwrócić uwagę na fakt, że implementacja niektórych modułów jest praktycznie niemożliwa w mikrokontrolerach 8- lub 16-bitowych. Przykładem może być pełna obsługa protokołu sieci Ethernet, która przy użyciu rejestrów 8- czy 16-bitowych jest utrudniona, bo był on projektowany z myślą o procesorach 32-bitowych.

Wartym odnotowania jest fakt, że mikrokontrolery 32-bitowe charakteryzują się najczęściej lepszym wykorzystaniem pamięci programu i bardziej elastycznym modelem programowania. Zbędne staje się żmudne pisanie kodu w asemblerze, co pozwala programistom skupić się na implementacji algorytmów w języku wyższego poziomu uniezależniając się w znacznym stopniu od architektury użytego procesora. Oczywiście możliwe jest również napisanie krytycznych wydajnościowo fragmentów kodu w asemblerze. Takie podejście obniża koszt tworzenia i modyfikacji oprogramowania. Uproszczone zostaje również ewentualne przenoszenie kodu z jednej platformy sprzętowej na inną.

W zastosowaniach multimedialnych mikrokontroler może wykonywać wiele różnorodnych zadań. W najprostszych systemach jego rola sprowadza się jedynie do dekodowania strumienia video, wyświetlania obrazów oraz obsługi uproszczonych standardów kompresji obrazu i wideo, takich jak MPEG 4 Simple Profile, ale już raczej nie H.264. W bardziej złożonych urządzeniach wymagany będzie specjalizowany procesor DSP zapewniający obsługę wyższych rozdzielczości i zaawansowanych algorytmów kompresji. Mikrokontroler może wtedy pełnić rolę układu nadzorczego, sterującego pracą całego urządzenia, obsługiwać dedykowany system operacyjny i zarządzać zadaniami realizowanymi przez urządzenie. Dodatkowo może obsługiwać interfejs użytkownika.

DSP

Cyfrowe procesory sygnałowe (DSP – Digital Signal Processor) są odpowiedzią na ograniczenia stawiane przez mikrokontrolery. DSP są wyspecjalizowane do wykonywania krótkich, wydajnych pętli programowych. Ich głównym celem jest szybkie wykonywanie operacji mnożenia i sumowania. Idealnie nadają się do szybkich operacji na liczbach umieszczonych w pamięci procesora, co jest często spotykane w zastosowaniach multimedialnych. Osiągniecie tak dobrych rezultatów wymaga napisania efektywnego kodu w asemblerze. Optymalizacja programu pod kątem zajmowanej pamięci nie jest tu sprawą kluczową, gdyż algorytmy stosowane w DSP są zwięzłe i stosunkowo krótkie.

Procesory sygnałowe mogą bardzo często pracować z dużą częstotliwością zegarową i w związku z tym ich wydajność jest wyrażana w milionach instrukcji MAC, jakie mogą być wykonane w czasie jednej sekundy. Operacja mnożenia i sumowania (MAC – Multiply and Accumulate) jest stosowana w filtrach cyfrowych, algorytmach FFT (Fast Fourier Transform) i podobnych. Często spotykaną praktyką jest integrowanie w jednym układzie scalonym więcej niż jednego rdzenia, co prowadzi do znaczącego podniesienia całkowitej wydajności. Na rys. 6 ukazano obecną tendencję na rynku procesorów sygnałowych. Można zauważyć, że złożoność obliczeniowa tych układów cały czas się zwiększa, a cena (w przeliczeniu na jednostkę MAC) obniża się.

Połączenie DSP + MCU

W świecie multimediów sam procesor DSP jest niewystarczający. Jest on zoptymalizowany do wykonywania operacji matematycznych, a nie zarządzania zadaniami takimi jak obsługa portów, komunikacji czy systemów sterowania. Najczęściej zachodzi konieczność zintegrowania w urządzeniu mikrokontrolera, który zajmie się obsługa systemu operacyjnego i interfejsu użytkownika.

Istnieje kilka możliwości rozwiązania tego problemu. Najbardziej intuicyjne jest zbudowanie urządzenia wyposażonego w oba te układy, tzn. specjalizowany procesor DSP oraz mikrokontroler. Pomijając zwiększone rozmiary i wagę takiego urządzenia oraz wzrost kosztów, jest to najbardziej elastyczne rozwiązanie. Umożliwia niezależny wybór układów i najlepsze dopasowanie ich do założonych celów. Możliwe jest zastosowanie układu scalonego, w którym zintegrowano dwie niezależne jednostki przetwarzające dane: mikrokontroler i procesor DSP.

Rys. 5. Schemat blokowy przykładowego układu hybrydowego

Korzyści ze stosowania dwóch osobnych układów zaczynają się ukazywać już na etapie przygotowania oprogramowania. Programistów można podzielić na dwie grupy: jedna będzie odpowiedzialna za rozwój kodu dla mikrokontrolera, a druga za kod dla procesora sygnałowego. Oprócz umożliwienia każdemu projektantowi indywidualnego wyboru zadania, w którym ma większe doświadczenie, zapewniona jest pełna rozdzielność oprogramowania. Aplikacja dla DSP może być szczegółowo dopracowana w asemblerze, z uwzględnieniem architektury procesora i wszelkich zaawansowanych zabiegów programistycznych. Oprogramowanie mikrokontrolera może być za to pisane w języku wysokiego poziomu, pozwalając skupić się programistom na implementacji algorytmów i przyjaznego interfejsu użytkownika, bez utraty czasu na optymalizację wydajności. Znika ryzyku, że zadania wykonywane w czasie rzeczywistym będą interferowały z krytycznymi czasowo algorytmami przetwarzania sygnałów.

Niestety urządzenie oparte na takiej architekturze nie jest wystarczająco elastyczne, aby można było z czasem zwiększać jego funkcjonalność. Warto zauważyć, że konieczne będzie zapewnienie zespołowi programistów osobnych narzędzi projektowych, co skomplikuje środowisko programistyczne.

Powstawanie coraz szybszych mikrokontrolerów 32-bitowych pozwala traktować je jako uproszczone procesory DSP, co wiąże się głównie z możliwością wykonania dużej liczby operacji MAC w jednej sekundzie. Jest to uproszczone rozwiązanie, które może sprawdzić się w prostszych algorytmach przetwarzania sygnałów. Rozwiązanie to nie jest idealne i nie będzie odpowiednie do wszystkich zastosowań. Niemniej z powodzeniem można w tej postaci zrealizować osobisty odtwarzacz MP3 oparty na 32-bitowym procesorze ARM, taktowanym częstotliwością 72MHz. Niestety procesor ten nie wystarczy do odtwarzania filmów wysokiej rozdzielczości.

Procesory hybrydowe

Procesor hybrydowy jest połączeniem mikrokontrolera i procesora DSP (rys. 7). Nie jest to typowy procesor sygnałowy z możliwością realizacji zadań takich jak obsługa interfejsu użytkownika czy systemu operacyjnego. Jest to zwyczajny mikrokontroler z dodatkowym modułem DSP zintegrowanym w rdzeniu. Często sprowadza się to do wyposażenia układu w sprzętowy blok MAC, który znacząco przyspiesza operacje mnożenia i sumowania. Jest on zoptymalizowany do prowadzenia obliczeń w czasie rzeczywistym na potrzeby aplikacji multimedialnych oraz realizacji różnorodnych zadań, np. opartych o instrukcje warunkowe.

Procesory hybrydowe łącza zalety obu rozwiązań: dużą częstotliwość taktowania rdzenia, małe zużycie energii w przeliczeniu mW/MMACS oraz łatwość programowania w języku wysokiego poziomu. W porównaniu do rozdzielonych rdzeni DSP i MCU, hybrydy pozwalają zaoszczędzić miejsce na płytce drukowanej, obniżyć koszty całego systemu i zmniejszyć złożoność projektu upraszczając proces tworzenia oprogramowania. Wymagane będzie tylko jedno narzędzie programistyczne, a projektantom wystarczy przyswojenie jednego zestawu instrukcji. Rozwój i utrzymanie kodu będą prostsze, gdyż będzie to jeden projekt składający się ze spójnie połączonych bibliotek, a nie dwa osobne przedsięwzięcia. Dodatkowo wystarczy pojedynczy interfejs API (Application Programming Interface), jednego zestawu sterowników, jeden debugger, jeden programator, jeden linker, jeden kompilator itd. Przyspiesza to powstawanie oprogramowania, a dzięki obecności rdzenia MCU kompilatory są bardziej przyjazne dla programistów.

System operacyjny nie jest konieczny, ale bywa pomocny w przetwarzaniu sygnałów i kontroluje wykonywane zadania. Osiągnięcie założonej wydajności obliczeniowej wymaga ustalenia priorytetów zadań oraz przerwań z kontekstowym przełączaniem pomiędzy sprzętowym stosem a wskaźnikiem ramki. Taka konstrukcja oprogramowania zapewnia dwie korzyści płynące z połączenia DSP i MCU: kontrolę z poziomu systemu operacyjnego oraz przetwarzanie sygnałów w czasie rzeczywistym.

Podsumowanie

Istnieje szeroki zestaw kryteriów determinujący wybór optymalnego procesora dla zastosowań multimedialnych. W niniejszym opracowaniu zawarto przykładowe wytyczne, którymi można się kierować wybierając układ z szerokiej oferty rynkowej. Warto pamiętać, że dobry wybór jest możliwy dopiero po zrozumieniu mocnych i słabych punktów każdego z rozwiązań. Pozwoli to idealnie dopasować procesor do wymagań końcowej aplikacji.

Jakub Borzdyński