Projektowanie systemów z procesorami DSP

| Technika

Jednym ze sposobów na zmniejszenie jednostkowego kosztu urządzenia jest wykorzystanie układów ASIC lub FPGA, które integrują w swojej strukturze wielu bloków funkcjonalnych. Przyczynia się to do zmniejszenia liczby elementów montowanych na płytce drukowanej. Mniej popularnym rozwiązaniem jest wykorzystanie procesora DSP, które omawiamy w artykule.

Projektowanie systemów z procesorami DSP

Koszt wytworzenia ASIC jest proporcjonalny do wielkości struktury półprzewodnikowej, uzysku oraz kosztów obudowy. W efekcie cena pojedynczego układu ASIC jest bardzo niska w zestawieniu ze standardowymi komponentami. Rozwiązania oparte o ASIC wymagają jednakże bardzo dużych nakładów inwestycyjnych, gdyż przygotowanie projektu wymaga czasu, typowo od 6 do 24 miesięcy. Wysokie są również koszty opracowania maski, które oscylują w granicy 250 tys. dolarów i więcej. Oprócz tego należy mieć na uwadze, że wprowadzenie zmian do projektu nie będzie łatwe ani tanie.

Alternatywnym rozwiązaniem w stosunku do ASIC są układy programowalne takie jak FPGA. Są one ogniwem pośrednim, umożliwiającym obniżenie kosztów inwestycyjnych, dzięki łatwości przygotowania oprogramowania w oparciu o np. język VHDL. W chwili przejścia na produkcję seryjną i po usunięciu wszystkich błędów z urządzenia możliwe jest przeniesienie projektu do układu ASIC z platformy FPGA bez dodatkowych nakładów pracy. Często okazuje się to dobrym wyjściem, gdyż nie zawsze urządzenie przechodzi do produkcji seryjnej i wstępna inwestycja w ASIC okazuje się nieopłacalna. Układy FPGA łączą się zatem z niskim ryzykiem biznesowym.

Duża elastyczność dzięki procesorom sygnałowym

Procesory sygnałowe DSP oraz zbliżone do nich mikrokontrolery sygnałowe DSC (Digital Signal Controller) pozwalają zachować dużą elastyczność opracowywanego urządzenia. Jest to szczególnie ważne w przypadku produktów, co do których nie ma jasno zdefiniowanych wymagań funkcjonalnych lub muszą być na bieżąco adaptowane do potrzeb rynku.

Procesory sygnałowe są przeznaczone głównie do rozwiązań małoseryjnych, ale umożliwiają łatwe wprowadzanie zmian. Dodatkowo możliwe jest przygotowanie kilku wersji produktu bazującego na jednej platformie sprzętowej, ale różniącego się oferowanymi możliwościami. Konsument płacąc więcej za produkt, dostaje urządzenie z oprogramowaniem, w którym zaimplementowano dodatkowe funkcje, których nie ma w wersji podstawowej.

Procesory sygnałowe wydają się być rozwiązaniem atrakcyjnym z kilku z względów. Po pierwsze, koszt wdrożenia takiego układu jest stosunkowo niski – często poniżej bariery 2 dol. za sztukę przy serii liczącej 10 tys. sztuk. Zwiększenie liczby wytwarzanych urządzeń prowadzi do dalszego obniżenia cen, nawet do poziomu 1 dol. za sztukę. Dla porównania cena jednostkowa układu FPGA kształtuje się na poziomie 30 dolarów, a może sięgać nawet setek dolarów. Kolejną zaletą procesorów DSP jest dostęp do języka wysokiego poziomu, takiego jak C/C++. Ma on długą tradycję, jest bardzo dobrze udokumentowany, przejrzysty i upraszcza pisanie aplikacji oraz ich późniejszą modyfikację.

Nie da się tego niestety powiedzieć o języku VHDL, przeznaczonym do układów FPGA, który jest znacznie mniej elastyczny. Ostatnią przewagą procesorów sygnałowych są dostępne dla nich systemy operacyjne czasu rzeczywistego (RTOS), takie jak DSPnano. Uwalniają one projektantów od konieczności pisania bibliotek dla procesora i umożliwiają łatwe wykorzystanie często stosowanych funkcji. Niektóre systemy operacyjne bazują na standardzie POSIX, co dodatkowo zmniejsza koszty, gdyż do minimum zostają ograniczone wydatki na szkolenia projektantów.

Ale czasem gorsza wydajność

W porównaniu z procesorami sygnałowymi implementacja projektu w układzie FPGA lub ASIC zwiększa dziesięciokrotnie wydajność przetwarzania oraz znacznie zmniejsza koszty urządzenia wykorzystującego zaawansowane algorytmy równoległego przetwarzania danych. Pomiary z wykorzystaniem benchmarku BDTI pokazały, że równoległe przetwarzanie danych na potrzeby sieci WiMAX lepiej jest zrealizować w oparciu o układ FPGA. W takim zastosowaniu znacznie przewyższa on procesory sygnałowe pod względem wydajności i ceny.

W tabeli 1 przedstawiono wyniki przeprowadzonego testu. Pokazuje on, że dedykowane rozwiązania sprzętowe prezentują się bardzo dobrze w porównaniu do uniwersalnych procesorów sygnałowych. Dobrze wypada również procesor picoChip przeznaczony do równoległego wykonywania zadań (Massively Parallel Processor – MPP). Nie jest on jednak tak elastyczny jak DSP i ma znacznie węższy zakres zastosowań. Wadą w jego przypadku jest konieczność skoncentrowania się na projekcie warstwy sprzętowej oraz programowej, więc przysparza on więcej problemów niż procesor DSP ze środowiskiem programistycznym opartym o POSIX.

Arytmetyka stało- czy zmiennoprzecinkowa?

Nie ma znaczenia, na jakiej platformie bazuje urządzenie: DSP, DSC, FPGA czy MPP – zawsze warto próbować realizować projekt w oparciu o arytmetykę stałoprzecinkową. Przyczynia się ona do zmniejszenia kosztów oraz oszczędza czas projektantów. Zdarzają się jednak wyjątki, takie jak urządzenia przeznaczone dla wojska, gdzie niska cena stanowi mniej znaczące kryterium, a system stałoprzecinkowy często okazuje się niepraktyczny, na przykład w systemach radarowych.

DSP i DSC – koniec przewagi w wydajności

Listing 1. Poglądowy kod startowy dla systemu DSPnano

W przeszłości procesory sygnałowe oraz mikrokontrolery sygnałowe (DSC) oferowały znacznie większą wydajność obliczeniową w stosunku do „zwykłych”, uniwersalnych mikrokontrolerów przy założeniu, że rozmiar szyny danych jest jednakowy, podobnie jak sygnał zegarowy i szybkość pamięci.

Znaczna różnica w wydajności wynikała głównie z obecności w DSP i DSC dedykowanych instrukcji MAC (mnożenie z akumulacją), które stanowią podstawę cyfrowego przetwarzania sygnałów. W DSP i DSC wykonanie jednej takiej instrukcji zajmowało tylko jeden cykl zegarowy, podczas gdy uniwersalne mikrokontrolery potrzebowały kilkunastu lub więcej cykli maszynowych.

Obecnie większość procesorów jest wyposażona w instrukcje mnożenia i akumulacji wykonywane w jednym takcie zegara. Przykładem może być ARM9E oraz PPC z Altivec. Klasyfikacja procesorów pomiędzy DSC i procesorami ogólnego przeznaczenia nie jest dziś klarowna i wszystko wskazuje na to, że granica ta będzie się dalej zacierać.

Ręcznie optymalizowane biblioteki

Algorytmy optymalizacji wbudowywane w kompilatory są nieustannie udoskonalane, jednakże daleko im do osiągnięcia poziomu, jaki reprezentuje wykwalifikowany inżynier. Optymalizacja jest złożonym procesem wymagającym dużej wiedzy o dostępnym zestawie instrukcji danego procesora, metodach optymalizacji pamięci podręcznej oraz liczby cykli zegarowych potrzebnych na wykonanie danej instrukcji.

Często doświadczenie wykorzystywane na etapie optymalizacji pochodzi z prób i błędów popełnionych w przeszłości. Są to cechy niemożliwe do powielenia w przypadku kompilatora. Różnice w wydajności są na tyle znaczące, że większość producentów dostarcza ręcznie optymalizowane biblioteki dla swoich układów zawierające często stosowane funkcje.

PicoChip

Procesory picoChip wykorzystują technikę masywnego przetwarzania równoległego (MPP – Massively Parallel Processor). Bazują one na wielordzeniowej jednostce obliczeniowej złożonej z 250 do 300 rdzeni 16-bitowych wykonanych w architekturze harwardzkiej. Wydajność przetwarzania danych może sięgać do 40GMACS (200GIPS).

Model programowania zakłada, że dla każdego rdzenia zostanie napisay osobny program w C lub asemblerze, z tym że dowolny rdzeń może wymienić dane z każdym innym rdzeniem. Przepływ informacji między jednostkami obliczeniowymi jest określany na etapie kompilacji, a nie dynamicznie w czasie pracy procesora (analogicznie do metody place & route spotykanej w wyższych poziomach abstrakcji przy projektowaniu układów FPGA).

Opis komunikacji między jednostkami może być zapisany w postaci sekwencji procesów komunikacyjnych (Communicating Sequential Processes) będących formalnym językiem zapisu interakcji w systemach z równoległym przetwarzaniem. Każdy proces może być mapowany do rdzenia, który jest w pełni niezależny od innych jednostek, a wszelkie interakcje zachodzą poprzez wymianę ściśle zdefiniowanych komunikatów oraz przepływ danych przez wewnętrzną sieć połączeń.

Warte wspomnienia jest, że architektura picoChip wspiera programowanie obiektowo orientowane. Przykładami innych architektur bazujących na MPP są: Ambric, Aspex, Cavium, ClearSpeed, Cradle, Stream, Tilera. Znaczący producenci półprzewodników (Texas Instruments oraz Freescale) rozpoczęli produkcję wielordzeniowych procesorów, ale obecnie mają one stosunkowo małą ich liczbą (typowo 3–8).

Procesory picoChip nie zostały wyspecjalizowane i mogą znaleźć zastosowanie w wielu aplikacjach związanych z cyfrowym przetwarzaniem sygnałów, jednakże producent skupił się na wspieraniu technologii bezprzewodowych. Znajdują one przede wszystkim zastosowanie w stacjach bazowych WiMAX oraz punktach dostępu do sieci bezprzewodowej (Access Point).

DSP i DSP wymagają dodatkowych bibliotek

Często projektanci błędnie sądzą, że wystarczające jest pobranie od producenta bibliotek udostępniających przestrzeń wejścia-wyjścia i implementujących algorytmy stosowane w DSP. W niektórych przypadkach jest to prawdą, ale nie zawsze, zwłaszcza w sytuacjach, gdy czas wprowadzenia produktu na rynek i jego wydajność stanowi największy priorytet. W takich przypadkach konieczne jest zaopatrzenie się w dodatkowe biblioteki.

Przykładem może być próba połączenia własnych algorytmów z tymi dostępnymi w bibliotekach producenta. Funkcje do cyfrowego przetwarzania sygnałów często wymagają danych wejściowych w postaci specyficznej struktury, a firmy półprzewodnikowe zazwyczaj nie dostarczają procedur dokonujących stosownej reorganizacji. Dobrą ilustracją poruszanego tu problemu jest częste odwoływanie się producentów do funkcji niedostępnych w standardowych bibliotekach.

RTOS oszczędza czas i pieniądze

System operacyjny czasu rzeczywistego (RTOS) rzadko jest wymagany w małych i prostych projektach. Jego obecność może być również zbędna w aplikacjach pracujących na nowoczesnych procesorach wyposażonych w wiele rdzeni, ponieważ zadania są statycznie rozdzielane pomiędzy poszczególne jednostki obliczeniowe. Są to jednak wyjątki od reguły.

Aplikacje przeznaczone dla procesorów DSP wymagają obsługi urządzeń wejścia-wyjścia. W wielu przypadkach przestrzeń ta zapewnia komunikację z różnorodnymi urządzeniami, których kontrolowanie za pomocą pojedynczych funkcji może być niewygodne i podatne na błędy. Przykładowo system kontroli może wymagać danych pochodzących z czujników temperatury, ciśnienia, pomiaru odległości, kierunku, prędkości, przyspieszenia i wielu innych. Dodatkowo może zachodzić potrzeba zaimplementowania mechanizmów odpowiedzialnych za monitoring i diagnostykę. System operacyjny zapewnia w takim przypadku logiczne zarządzanie danymi oraz obsługę procedur kontrolujących pracę wymienionych modułów.

Przykładem RTOS może być wspomniany wcześniej DSPnano dostarczający niezbędnych funkcji i infrastruktury pozwalającej na szybkie zaimplementowanie procesów zajmujących się obsługą popularnych zadań i zwalniający tym samym programistów z konieczności pisania ich od podstaw. Na rysunku 1 zawarto poglądowy kod startowydla systemu DSPnano.

DSPnano

System operacyjny czasu rzeczywistego DSPnano powstał na bazie otwartego standardu POSIX i jest kompletnym środowiskiem dla systemów wbudowanych. Otwarty kod źródłowy (open source) i niewielki rozmiar czynią go interesującą propozycją dla procesorów sygnałowych oraz kontrolerów sygnałowych, dla których został zoptymalizowany.

Dużą zaletą jest brak opłat związanych z licencją, dzięki czemu system ten pozostaje całkowicie darmowy i tym samym zmniejszeniu ulega cena końcowego produktu. Staranne dopracowanie wszystkich elementów oraz zintegrowane środowisko programistyczne sprawiają, że znacznie rosną szanse na osiągnięcie sukcesu pod względem technicznym i biznesowym w aplikacjach DSP.

DSPnano wspiera szereg platform 16-bitowych bazujących na procesorach sygnałowych, kontrolerach sygnałowych czy mikrokontrolerach ogólnego przeznaczenia i umożliwia łatwe przenoszenie kodu pomiędzy różnymi układami.

Wewnętrzna struktura systemu jest przejrzysta i intuicyjna. Warstwa fizyczna została wydzielona i jest dostarczana w postaci bibliotek obsługujących przestrzeń wejścia-wyjścia. Ideą przyświecającą projektantom systemu DSPnano było przyspieszenie wprowadzania końcowych produktów na rynek i wspieranie szerokiej gamy procesorów.

Elastyczną budowa umożliwia konstrukcję RTOS z uniwersalnych modułów i zapewnia w pełni zintegrowaną obsługę narzędzi producenta. Zwięzłe i przenośne interfejsy bazujące na standardzie POSIX i podobnych uniezależniają projektantów od rozwiązań jednej firmy. Wspomniany wcześniej kod źródłowy pozwala samodzielnie modyfikować funkcje systemu.

Cechy DSPnano:

  • szybka instalacja,
  • wymagane niewielkie doświadczenie programistów,
  • zintegrowane IDE,
  • swobodny i darmowy rozwój systemu dostęp do dużej liczby przykładów (prostych i zaawansowanych),
  • modułowa budowa z możliwością,
  • wymiany komponentów na pochodzące z innych źródeł,
  • programowanie wielowątkowe,
  • skalowalne jądro (minimalny rozmiar: 1KB),
  • zintegrowana obsługa urządzeń I/O (SPI, funkcje graficzne, ekran dotykowy, stos TCP/IP, UDP, ADC, DAC, PWM, CAN, USB, I²C),
  • ponad 150 funkcji wykorzystywanych w cyfrowym przetwarzaniu sygnałów.

Podsumowanie

Udany projekt oprócz dopracowanego oprogramowania wymaga również uwzględnienia czynników ekonomicznych. Decydują one o końcowej cenie urządzenia i pozwalają oszacować czas wprowadzenia produktu na rynek. Warto również pamiętać o udogodnieniach, takich jak systemy operacyjne czasu rzeczywistego czy gotowe biblioteki, gdyż prowadzą one do szybszego ukończenia pracy nad projektem, utrzymania przejrzystości kodu oraz upraszczają jego późniejszą modyfikację. Planując produkcję urządzenia, dobrze jest przeanalizować skalę produkcji i wybrać najlepszą platformę biorąc pod uwagę czas przygotowania projektu, wymagane doświadczenia i koszty związane z podjętym wyborem.

TABELA 1. Wyniki testu wydajności przetwarzania dla różnych struktur programowalnych
Procesor Częstotliwość
taktowania
Koszt procesora
(1000 sztuk)
Maks. obsługiwana
liczba kanałów
Koszt jednego
kanału
PicoChip PC102 160MHz 95 dol. 14 6 dol.
TI TMS320C6455 (bez koprocesora Viterbi) 1GHz 292 dol. 1,09 268 dol.
TI TMS320C6455 (szacowany wynik
z użyciem koprocesora)
1GHz 292 dol. <=1,8 >=162 dol.
Xilinx Virtex-4 FX140
Układ z sufiksem - 11 1286 dol. 432 3 dol.

Jakub Borzdyński