Jaka jest różnica między DSP a standardowym mikrokontrolerem?

84

Rozumiem, że DSP jest zoptymalizowany pod kątem cyfrowego przetwarzania sygnałów, ale nie jestem pewien, jak to wpływa na zadanie wyboru układu scalonego. Prawie wszystko, co robię z mikrokontrolerem, obejmuje przetwarzanie sygnałów cyfrowych!

Na przykład porównajmy popularny Microchip dsPIC30 lub 33 DSP i ich inną 16-bitową ofertę, mikrokontroler ogólnego zastosowania PIC24. DsPIC i PIC można skonfigurować tak, aby miały tę samą pamięć i prędkość, mają podobne zestawy peryferyjne, podobne możliwości A / D, liczbę pinów, aktualny pobór itp. Jedyną główną różnicą, która pojawia się na liście Digikey, jest lokalizacja oscylator. Nie potrafię odróżnić, patrząc na ceny (lub inne pole, jeśli o to chodzi).

Jeśli chcę pracować z kilkoma zewnętrznymi czujnikami przy użyciu różnych protokołów (I2C, SPI itp.), Wykonaj niektóre konwersje A / D, zapisz niektóre dane na szeregowej pamięci flash, odpowiedz na niektóre przyciski i wypchnij dane do postaci Z którego układu należy korzystać? LCD i FT232 (dość ogólny system osadzony)? Nie wydaje się, aby DSP w jakikolwiek sposób pozostawał w tyle za PIC i oferuje ten tajemniczy „silnik DSP”. Mój kod zawsze robi matematykę i od czasu do czasu potrzebuję liczb zmiennoprzecinkowych lub ułamkowych, ale nie wiem, czy skorzystam z DSP.

Równie przydatne byłoby bardziej ogólne porównanie procesorów DSP innego dostawcy z mikrokontrolerami; Po prostu używam ich jako punktu wyjścia do dyskusji.

Kevin Vermeer
źródło

Odpowiedzi:

64

Szczerze mówiąc, granica między nimi prawie już minęła i istnieją procesory, które można zaklasyfikować jako oba (na przykład AD Blackfin).

Ogólnie rzecz biorąc:

Mikrokontrolery to całkowite procesory matematyczne z podsystemem przerwań. Niektóre mogą mieć sprzętowe jednostki zwielokrotniające, niektóre nie, itp. Chodzi o to, że są one zaprojektowane do prostej matematyki i głównie do sterowania innymi urządzeniami.

DSP to procesory zoptymalizowane do przetwarzania sygnałów strumieniowych. Często mają specjalne instrukcje, które przyspieszają typowe zadania, takie jak mnożenie w jednej instrukcji. Często mają też inne instrukcje wektorowe lub SIMD. Historycznie nie były to systemy oparte na przerwie i działały z niestandardowymi systemami pamięci zoptymalizowanymi pod kątem ich przeznaczenia, co utrudnia ich programowanie. Zwykle były zaprojektowane do pracy w jednej dużej pętli przetwarzającej strumień danych. Procesory DSP mogą być zaprojektowane jako procesory liczb całkowitych, stałoprzecinkowych lub zmiennoprzecinkowych.

Historycznie, jeśli chciałbyś przetwarzać strumienie audio, strumienie wideo, wykonywać szybką kontrolę silnika, wszystko, co wymagało przetwarzania strumienia danych z dużą prędkością, wyglądałoby na DSP.

Jeśli chcesz kontrolować niektóre przyciski, mierzyć temperaturę, uruchamiać znakowy wyświetlacz LCD, sterować innymi układami scalonymi, które przetwarzają rzeczy, możesz użyć mikrokontrolera.

Obecnie najczęściej znajdują się procesory mikrokontrolera ogólnego przeznaczenia z wbudowanymi instrukcjami podobnymi do DSP lub z koprocesorami chipowymi do obsługi przesyłania strumieniowego danych lub innych operacji DSP. Nie widzisz już, że czyste DSP są często używane, z wyjątkiem określonych branż.

Rynek procesorów jest znacznie szerszy i bardziej niewyraźny niż kiedyś. Na przykład prawie nie uważam, by kora ARM-A8 SoC była mikrokontrolerem, ale prawdopodobnie pasuje ona do standardowej definicji, szczególnie w pakiecie PoP.

EDYCJA: Pomyślałem, że dodam trochę, aby wyjaśnić, kiedy / gdzie korzystałem z DSP nawet w czasach procesorów aplikacji.

Niedawno zaprojektowany przeze mnie produkt przetwarzał dźwięk z X kanałami wejściowymi i X kanałami wyjściowymi na „strefę”. Przeznaczenie produktu oznaczało, że często siedział tam i robił swoje, przetwarzając kanały audio przez lata bez dotykania go. Przetwarzanie dźwięku składało się z różnych filtrów akustycznych i funkcji. System był również „podłączalny na gorąco” z możliwością dodania pewnej liczby niezależnych „stref” w jednym pudełku. Było to w sumie 3 projekty PCB (płyta główna, płyta montażowa i moduł wtykowy), a płyta montażowa obsługiwała 4 moduły wtykowe. Całkiem fajny projekt, ponieważ robiłem to solo, musiałem zaprojektować system, schemat, układ płytki drukowanej i oprogramowanie układowe.

Teraz mogłem zrobić wszystko z jednym nieporęcznym rdzeniem ARM, potrzebowałem tylko około 50MIPS pracy DSP na 24-bitowych stałych punktach na strefę. Ale ponieważ wiedziałem, że ten system będzie działał przez bardzo długi czas, i wiedziałem, że bardzo ważne jest, aby nigdy nie klikał, nie wyskakiwał ani nic takiego. Zdecydowałem się wdrożyć go z DSP o niskiej mocy na strefę i jednym mikrokontrolerem PIC, który pełnił rolę zarządzania systemem. W ten sposób nawet jeśli jedna z funkcji uC ulegnie awarii, być może atak DDOS na jego port Ethernet, DSP z przyjemnością po prostu dalej będzie się odtrącać i prawdopodobnie nikt nigdy się nie dowie.

Mikrokontroler odegrał więc rolę wyświetlania 2-liniowego wyświetlacza LCD, niektórych przycisków, monitorowania temperatury i sterowania wentylatorem (na każdej płycie znajdowały się również wzmacniacze audio o dość dużej mocy), a nawet obsługiwał stronę internetową w stylu AJAX przez sieć Ethernet. Zarządzał również procesorami DSP za pośrednictwem połączenia szeregowego.

Jest to więc sytuacja, w której nawet w czasach, w których mogłem użyć jednego rdzenia ARM do zrobienia wszystkiego, projekt podyktował dedykowany układ przetwarzania sygnałów.

Inne obszary, w których wpadłem na DSP:

* High End audio - bardzo wysokiej klasy odbiorniki i sprzęt do miksowania i przetwarzania koncertowego

* Przetwarzanie radaru - Użyłem do tego również rdzeni ARM w aplikacjach niskiej jakości.

* Przetwarzanie sonaru

* Wizja komputera w czasie rzeczywistym

W przeważającej części niskie i średnie końce przestrzeni audio / wideo / podobnej zostały przejęte przez procesory aplikacyjne, które łączą procesor ogólnego przeznaczenia z silnikami odciążającymi co-proc dla różnych aplikacji.

znak
źródło
1
Być może kolejny dodatek. W aplikacji z około 80 liniami we / wy i 12 wejściami analogowymi używamy teraz jednego mikrokontrolera z połączonym układem FPGA do obsługi strumieni we / wy. Takie rozwiązania stają się coraz bardziej powszechne. Korzystamy z tego systemu: embeddedarm.com/products/board-detail.php?product=ts-7800, aby przyspieszyć programowanie w krótkim czasie wprowadzenia na rynek i muszę powiedzieć, że działa bardzo dobrze (oczywiście cena taki produkt może nie być odpowiedni do aplikacji o niższej cenie sprzedaży / oczekiwanej wartości.) - Wouter Simons 33 sekundy temu
Wouter Simons
Nie wszystkie mikrokontrolery mają zakłócenia. W aplikacjach o znaczeniu krytycznym nigdy nie są używane. Przykład: kontroler Viper używany w samolotach myśliwskich.
stevenvh
15

Wiele cyfrowych procesorów sygnałowych zawiera szereg funkcji nie spotykanych w „zwykłych” procesorach:

  1. Zdolność do wykonywania operacji wielokrotnego akumulowania, przy czym oba operandy są pobierane z pamięci RAM, w tempie jednego cyklu na parę operandów.
  2. Możliwość wykonania jakiejś formy adresowania „modulo” lub „zawijanie”, aby umożliwić wielokrotne używanie bufora bez konieczności ręcznego kodowania w celu zapewnienia zawijania wskaźników. Na przykład 3205x ma rejestr „początek bufora” i „koniec bufora”; jeśli kod spróbuje zwiększyć lub zmniejszyć rejestr wskaźnika wskazujący na „początek bufora”, procesor załaduje wskaźnik „końcem bufora”. 3205x ma również tryb przenoszenia wstecznego, w którym dodawanie adresów propaguje przenoszenie MSB do LSB, a nie odwrotnie; pozwala to na adresowanie modulo-N, jeśli N jest potęgą 2, chociaż rzeczy są przechowywane w pomieszanej sekwencji.
  3. Możliwość określenia, że ​​instrukcja ma być wykonywana „n” razy bez konieczności ponownego pobierania. Niektóre procesory, takie jak 8088, zawierają to dla kilku instrukcji, ale wiele procesorów DSP pozwala na to dla wielu instrukcji.
  4. Możliwość określenia, że ​​blok kodu ma być wykonywany wielokrotnie, aż do „n” razy, bez potrzeby rozgałęziania. Przed każdym pobraniem kodu licznik programu jest sprawdzany względem rejestru „końca pętli”; jeśli pasuje, a zapętlenie jest włączone, licznik programu zostanie ponownie załadowany z „zapętleniem” (w przeciwnym razie zwiększy się). Jeśli „liczba pętli” wynosi zero, zapętlenie zostanie wyłączone; w przeciwnym razie „liczba pętli” zostanie zmniejszona.

Należy zauważyć, że wiele procesorów DSP będzie miało osobne magistrale, aby umożliwić jednoczesne pobieranie obu argumentów operacji wielokrotnego gromadzenia; Nigdy nie widziałem takiego oprogramowania, które mogłoby to zrobić. Chociaż nie jestem świadomy żadnej funkcji, której układ musi „brakować”, aby być DSP, dodatkowa przestrzeń krzemowa wymagana do umożliwienia pobierania podwójnego argumentu to przestrzeń krzemowa, która nie jest wykorzystywana do innych bardziej ogólnie użytecznych celów.

supercat
źródło
Znałem wielokrotne gromadzenie, ale adresowanie modulo i wielokrotne wykonywanie kodu bez pobierania były cechami, których nie znałem.
Kevin Vermeer,
1
Masz wiele świetnych odpowiedzi i fajnie jest pracować zarówno nad starymi, jak i nowymi pytaniami. Przejrzałbym i głosowałbym za wszystkimi twoimi odpowiedziami, gdyby nie algorytmy wykrywania oszustw i codziennego ograniczenia liczby powtórzeń . Spodziewaj się jednak kilku dni! Kontynuuj niesamowitą pracę!
Kevin Vermeer,
@reemrevnivek: Cieszę się, że moje odpowiedzi są przydatne. Jak zauważyłem, projekt podwójnego pobierania z wielokrotnym gromadzeniem jest funkcją, której nie widziałem w procesorach innych niż DSP. ARM wykonuje dobrą robotę z operacjami wymagającymi wielokrotnego gromadzenia i adresowania modulo (przy użyciu efektywnego adresu np. (R0 + (R1 >> 24)) dla 256-bajtowej tabeli), ale typowy ARM wymaga czterech instrukcji, aby zrobić to, co DSP robi to w jednym cyklu.
supercat,
MAC jest instrukcją trzech argumentów a <- a + b * c nie dwoma.
Trismegistos,
@Trismegistos: Powtarzana operacja MAC dla N-pozycji będzie wymagała łącznie 2 N + 1 operandów. Nie ma potrzeby pobierania akumulatora przed każdym przedmiotem i przechowywania go później. Podczas gdy procesory z niepowtarzającym się dodawaniem wielokrotnym mogą mieć trzy argumenty, powtórz MAC pobierze tylko dwa argumenty na cykl.
supercat
13

Jedną rzeczą, o której inni nie wspominali, jest zachowanie przy przepełnieniu numerycznym. W normalnych procesorach zwykle zawija się od wartości maksymalnej do wartości minimalnej.

W przypadku użycia DSP często istnieje przynajmniej opcja użycia nasycenia . Oznacza to, że przy przepełnieniu wartość pozostaje na wartości maksymalnej, co powoduje mniejsze zniekształcenie i lepiej naśladuje zachowanie obwodów analogowych.

starblue
źródło
9

Największą różnicą między DSP a standardowym uControllerem jest funkcja wielokrotnego gromadzenia danych (MAC), której nie ma uC. Jest to cenne, jeśli chcesz wykonać prawdziwą matematykę cyfrowego przetwarzania sygnałów, taką jak FFT (jeden przykład). Wykonanie FFT w standardowym mikrokontrolerze zajmie dużo czasu w porównaniu do wykonania na MAC na DSP.

Przetwarzanie I2C i sygnałów szeregowych to nie to samo, co przetwarzanie przebiegów w DSP. Trwa zupełnie inny rodzaj przetwarzania, ponieważ sygnały szeregowe są po prostu bitowe.

Oto podobna dyskusja na forum DSP : DSP vs. Mikroprocesor

Jay Atkinson
źródło
Widziałem akumulator na schemacie blokowym DSP, ale nie wiedziałem, co to zrobiło. Dobrze wiedzieć! Rozumiem, że I2C i szeregowy to nie to samo, co przetwarzanie przebiegów podczas przesyłania danych ASCII, ale niektóre urządzenia peryferyjne (akcelerometry z dostępem szeregowym, zewnętrzne A / D, GPS itp. Kodują przebiegi w swoich strumieniach danych. jakoś do DSP!
Kevin Vermeer
3
większość przetwarzania sygnałów składa się matematycznie z mnożenia macierzy i / lub wektorów razem. Proces ten prowadzi do wielu odpowiedzi = obliczeń typu a b + c d + e * f. Na procesorze bez MAC wymagającym wielu instrukcji, z MAC może być wiele razy szybszy.
Mark
1
Ten komentarz jest całkowicie NIEPRAWIDŁOWY. Nie wszystkie, ale wiele MCU zawiera multiplikatory sprzętowe z funkcjami MAC. Nie ma to nic wspólnego z rozróżnieniem DSP vs. MCU. Tak, DSP częściej mają MAC niż MCU, ale istnieją znacznie bardziej podstawowe różnice niż ta niewielka funkcja.
2
Jeśli cofniesz zegar o 15 lat, nie zobaczysz prawie żadnych MCU z tą funkcją. Jeśli wyjmiesz MAC lub równoważną funkcję z DSP, czy możesz szczerze powiedzieć, że masz DSP? Na pewno nie chciałbym go kupić, jeśli go nie miałbym lub czegoś podobnego. Istnieją różnice w architekturze, gdy wchodzisz w Harvard vs. von Neuman i dostęp do pamięci, ale dałem prostą odpowiedź bez długiego szczegółowego wyjaśnienia. Myślę, że jesteś zbyt ostry w swoim komentarzu, mówiąc „Flat out WRONG”. Zachęcamy do opublikowania odpowiedzi na temat głębokości, którą Twoim zdaniem należy uwzględnić.
Jay Atkinson,
@adrian: Twój komentarz jest całkowicie NIEPRAWIDŁOWY. Jeśli MCU ma funkcję MAC, będzie sprzedawany jako DSP.
Johan.A
5

Tym, co wyróżniało DSP, była ich optymalizacja pod kątem operacji arytmetycznych, zwłaszcza mnożenia, choć w dzisiejszych czasach mikrokontrolery są wyposażone w instrukcje mnożenia i dzielenia. Przetwarzanie sygnału za pomocą układów DSP może nadal mieć przewagę, o ile niektóre z nich mają sprzętową obsługę matematyki w punktach stałych (np. Lib TI TMS320 „IQ”), podczas gdy mikroskopy częściej zawierają tylko liczby całkowite.

Osobiście, mając do czynienia z wyborem między tymi dwoma projektami, staram się kategoryzować, czy aplikacja wymagała powtarzalnych obliczeń z tylko logiką zmiany trybu okazjonalnego, czy też musi tylko wykonywać krótkie sekwencje obliczeń, gdy zajdzie taka potrzeba. Pierwszy to DSP, drugi to mikro.

I oczywiście są fajne rzeczy, takie jak OMAP, które mają oba. = P

JustJeff
źródło
1
Wydaje mi się, że rozumiem różnicę zamiarów (twój drugi akapit), ale po prostu nie jestem pewien, dlaczego miałbym to zrobić, gdy mikrosfery nie mają zdolności matematycznych podobnych do DSP, a DSP mają mikropodobne zestawy peryferyjne. Jak powiedziałem w moim OP, dsPIC33 i PIC24 mogą mieć prawie identyczny zestaw funkcji i identyczną cenę. Popraw mnie, jeśli się mylę, ale chociaż DSP ma powtarzalne funkcje przetwarzania, nie sądzę, że PIC24 (lub jakikolwiek inny mikro, na który patrzyłem) ma jakąkolwiek przewagę nad DSP w zmianie trybu, jak podwójny potok lub szybszy FLASH.
Kevin Vermeer
@reemrevnivek: więc mówisz, dlaczego nie zawsze po prostu wybrać DSP?
JustJeff,
@JustJeff: Tak, dokładnie to mówię.
Kevin Vermeer
1

Jeszcze inną możliwą cechą instrukcji MAC może być automatyczna inkrementacja rejestrów, które wskazują na wiele ścieżek. Zaprogramowałem DSP Zilog, który korzystał z (16-bitowego punktu stałego) rdzenia Clarkspur. Była to odmiana architektury Harvarda z trzema magistralami, umożliwiająca dostęp do trzech obszarów pamięci jednocześnie: Pamięć instrukcji, bank danych ram 1 i bank danych ram 2. Ze strumieniem danych w jednym banku ram i współczynnikami w drugim można było wykonaj filtr FIR z jedną instrukcją pojedynczego cyklu na operację przyrostu MAC / wskaźnika. W C pojedyncza instrukcja wygląda następująco:

Akumulator + = rambank1 [r1 ++] * rambank2 [r2 ++];

I oczywiście instrukcja ta jest powtarzana dla każdego współczynnika.

Również nie wspomniano wcześniej, DSP (przynajmniej te starsze, których używałem) są ogólnie architekturą RISC i są zaprojektowane z wieloma lub większością instrukcji wykonywanych w jednym cyklu (lub w tej samej liczbie cykli). Pozwala to na zaprogramowanie deterministycznej odpowiedzi na przerwanie (stała liczba zegara między aktywną linią przerwania a pierwszą instrukcją w wykonanym ISR), podczas gdy większość innych procesorów reaguje na przerwania w zmiennej liczbie cykli zegara, w zależności od tego, co w instrukcji wielocyklowej następuje przerwanie. Stały czas wykonania eliminuje jitter wielokrotności zegara w powtarzalnych wyjściach.

Porównując Microchip Pic i DSPic przez OP, zrozumiałem, kiedy wprowadzono DSPic, że był to głównie Pic z instrukcją MAC i kilkoma innymi dodatkowymi funkcjami, które z pewnością mogą przyspieszyć mikrokontroler wykonujący funkcje przetwarzania sygnału, ale (ze względu na brak innych omówionych funkcji) być może przesuwa terminologię, aby nazwać ją DSP. MSP430 jest również dostępny w wersjach ze sprzętowym MAC, ale nikt nie nazywa TEGO DSP.

Pamiętam, że 10-15 lat temu czytałem, że główne procesory Intel dodawały MAC i podobne instrukcje dotyczące „natywnego” przetwarzania sygnału (zamiast na kartach rozszerzeń z dedykowanymi procesorami DSP, które były popularne w produkcji audio w latach 90.) - niektóre niedrogie Modemy PC z modemem 56k były tylko konwerterami A / D i D / A i polegały na głównym procesorze, który wykonywał funkcje kodowania i dekodowania sygnału modemu, więc było zapotrzebowanie na bardziej wydajne wykorzystanie procesora. Zastosowania takie jak edycja / kodowanie / dekodowanie wideo, a także nagrywanie / produkcja audio są znacznie przyspieszone przez instrukcje typu DSP.

użytkownik23081
źródło
Pod słońcem nie ma nic nowego. <g>Już we wczesnych dniach C operatory inkrementacji i dekrementacji zostały zaprojektowane w taki sposób, aby mogły zostać bezpośrednio przetłumaczone na pojedyncze instrukcje sprzętowe na PDP.
Pete Becker,