Qual è la differenza tra un DSP e un microcontrollore standard?


84

Comprendo che un DSP è ottimizzato per l'elaborazione del segnale digitale, ma non sono sicuro di come ciò influisca sul compito di scegliere un circuito integrato. Quasi tutto ciò che faccio con un microcontrollore comporta l'elaborazione di segnali digitali!

Ad esempio, confrontiamo il popolare Microchip dsPIC30 o 33 DSP e la loro altra offerta a 16 bit, il microcontrollore per uso generico PIC24. Il dsPIC e il PIC possono essere configurati per avere la stessa memoria e velocità, hanno insiemi periferici simili, capacità A / D simili, conteggi dei pin, assorbimento di corrente, ecc. L'unica grande differenza che appare nell'elenco di Digikey è la posizione del oscillatore. Non posso dire la differenza guardando i prezzi (o qualsiasi altro campo, per quella materia).

Se voglio lavorare con un paio di sensori esterni usando vari protocolli (I2C, SPI, ecc.), Fare alcune conversioni A / D, archiviare alcuni dati su un flash seriale, rispondere ad alcuni pulsanti e inviare i dati a un carattere LCD e su un FT232 (un sistema incorporato abbastanza generico), quale chip dovrei usare? Non sembra che il DSP rimarrà indietro rispetto al PIC in alcun modo, e offre questo misterioso "Motore DSP". Il mio codice fa sempre matematica e di tanto in tanto ho bisogno di virgola mobile o numeri frazionari, ma non so se trarrò beneficio dall'uso di un DSP.

Un confronto più generale tra DSP di un altro fornitore e microcontrollori sarebbe ugualmente utile; Sto solo usando questi come punto di partenza per la discussione.

Risposte:


64

Ad essere onesti la linea di demarcazione tra i due è quasi scomparsa al giorno d'oggi e ci sono processori che possono essere classificati come entrambi (AD Blackfin per esempio).

Parlando in generale:

I microcontrollori sono processori matematici interi con un sottosistema di interrupt. Alcuni possono avere unità di moltiplicazione hardware, altri no, ecc. Il punto è che sono progettati per la matematica semplice e principalmente per controllare altri dispositivi.

I DSP sono processori ottimizzati per l'elaborazione del segnale in streaming. Spesso hanno istruzioni speciali che accelerano le attività comuni come moltiplicare-accumulare in una singola istruzione. Spesso hanno anche altre istruzioni vettoriali o SIMD. Storicamente non erano sistemi basati su interruzioni e operavano con sistemi di memoria non standard ottimizzati per il loro scopo rendendoli più difficili da programmare. Di solito erano progettati per funzionare in un unico grande ciclo elaborando un flusso di dati. I DSP possono essere progettati come processori a numero intero, a virgola fissa o a virgola mobile.

Storicamente se si volesse elaborare flussi audio, flussi video, eseguire un controllo rapido del motore, tutto ciò che richiedeva l'elaborazione di un flusso di dati ad alta velocità si dovrebbe guardare a un DSP.

Se volessi controllare alcuni pulsanti, misurare una temperatura, far funzionare un LCD a caratteri, controllare altri circuiti integrati che stanno elaborando cose, useresti un microcontrollore.

Oggi, per lo più, trovi processori di tipo microcontrollore per scopi generici con istruzioni simili a DSP o con co-processori su chip per gestire i dati di streaming o altre operazioni DSP. Non vedi più i DSP puri usati molto, tranne in settori specifici.

Il mercato dei processori è molto più ampio e sfocato rispetto al passato. Ad esempio, difficilmente considero un SoC ARM cortx-A8 un microcontrollore, ma probabilmente si adatta alla definizione standard, specialmente in un pacchetto PoP.

EDIT: Ho pensato di aggiungere un po 'per spiegare quando / dove ho usato i DSP anche ai tempi dei processori di applicazioni.

Un prodotto recente che ho progettato stava elaborando audio con X canali di input e X canali di output per "zona". L'uso previsto per il prodotto significava che spesso sarebbe rimasto seduto lì a fare le sue cose, elaborando i canali audio per anni senza che nessuno lo toccasse. L'elaborazione audio consisteva in vari filtri e funzioni acustici. Inoltre, il sistema era "hot plugable" con la possibilità di aggiungere un certo numero di "zone" indipendenti in un'unica casella. Era composto da 3 progetti PCB (scheda madre, backplane e modulo plug-in) e il backplane supportava 4 moduli plug-in. Piuttosto un progetto divertente mentre lo stavo facendo da solo, ho avuto modo di progettare il sistema, lo schema, il layout del PCB e il firmware.

Ora avrei potuto fare il tutto con un singolo core ARM ingombrante, avevo solo bisogno di circa 50MIPS di lavoro DSP su numeri a virgola fissa a 24 bit per zona. Ma poiché sapevo che questo sistema avrebbe funzionato per un tempo estremamente lungo e sapevo che era fondamentale che non facesse mai clic o si aprisse o qualcosa del genere. Ho scelto di implementarlo con un DSP a bassa potenza per zona e un singolo microcontrollore PIC che ha svolto il ruolo di gestione del sistema. In questo modo, anche se una delle funzioni uC si arrestasse in modo anomalo, forse un attacco DDOS sulla sua porta Ethernet, il DSP continuerebbe felicemente a perdere tempo e probabilmente nessuno lo saprebbe mai.

Quindi il microcontrollore ha svolto il ruolo di far funzionare il display LCD a 2 caratteri, alcuni pulsanti, il monitoraggio della temperatura e il controllo della ventola (c'erano anche alcuni amplificatori audio di potenza abbastanza elevata su ciascuna scheda) e ha persino servito una pagina Web in stile AJAX via Ethernet. Ha anche gestito i DSP tramite una connessione seriale.

Quindi questa è una situazione in cui anche nei giorni in cui avrei potuto usare un singolo core ARM per fare tutto, il design ha dettato un IC di elaborazione del segnale dedicato.

Altre aree in cui mi sono imbattuto in DSP:

* Audio di fascia alta - Ricevitori di fascia molto alta e strumenti di miscelazione ed elaborazione di qualità per concerti

* Elaborazione radar - Ho usato anche core ARM per questo nelle app di fascia bassa.

* Elaborazione del sonar

* Computer vision in tempo reale

Per la maggior parte, le estremità basse e medie dello spazio audio / video / simile sono state rilevate da processori applicativi che combinano una CPU per scopi generici con motori offload coprocessore per varie applicazioni.


1
Un'altra aggiunta forse. In un'applicazione con circa 80 linee I / O e 12 ingressi analogici ora stiamo usando un singolo microcontrollore con un FPGA collegato per gestire i flussi I / O. Soluzioni come questa stanno diventando più comuni. Stiamo usando questo sistema: embeddedarm.com/products/board-detail.php?product=ts-7800 per velocizzare lo sviluppo per un breve time-to-market e devo dire che funziona molto bene (ovviamente il prezzo di un prodotto del genere potrebbe non essere adatto per applicazioni con un prezzo di vendita / valore atteso inferiore.) - Wouter Simons 33 secondi fa
Wouter Simons

Non tutti i microcontrollori hanno interruzioni. Nelle applicazioni mission-critical non vengono mai utilizzate. Caso in questione: il controller Viper utilizzato negli aerei da combattimento.
Stevenvh,

15

Molti processori di segnali digitali includono una varietà di funzioni non presenti nei processori "ordinari":

  1. La capacità di eseguire un accumulo moltiplicato, con entrambi gli operandi prelevati dalla RAM, al ritmo di un ciclo per coppia di operandi.
  2. La capacità di eseguire una qualche forma di indirizzamento 'modulo' o 'wrapping', in modo da consentire l'uso ripetuto di un buffer senza dover utilizzare il codice manuale per garantire il wrapping dei puntatori. Il 3205x, ad esempio, ha un registro 'buffer start' e 'buffer end'; se il codice tenta di incrementare o decrementare un registro puntatore che punta a "inizio buffer", il processore caricherà il puntatore con "fine buffer". Il 3205x ha anche una modalità di riporto inverso, dove propagazione di addizioni di indirizzi portano MSB a LSB, piuttosto che viceversa; questo consente l'indirizzamento modulo-N se N è una potenza di 2, sebbene le cose vengano memorizzate in sequenza confusa.
  3. La capacità di specificare che un'istruzione deve essere eseguita "n" volte senza che sia necessario recuperarla. Alcuni processori come l'8088 includono questo per alcune istruzioni, ma molti DSP lo consentono su molte istruzioni.
  4. La possibilità di specificare che un blocco di codice debba essere eseguito ripetutamente, fino a "n" volte, senza necessità di diramazioni. Prima di ogni recupero del codice, il contatore del programma viene verificato rispetto al registro "loop-end"; se corrisponde e il looping è abilitato, il contatore del programma verrà ricaricato con "loop-start" (altrimenti aumenterà). Se 'loop-count' è zero, il looping sarà disabilitato; in caso contrario, il conteggio dei loop verrà ridotto.

Si noti che molti DSP disporranno di bus separati per consentire il recupero simultaneo di entrambi gli operandi di un accumulo multiplo; Non ho mai visto un non-DSP che potesse farlo. Mentre non sono a conoscenza di alcuna caratteristica che un chip deve "mancare" per essere un DSP, lo spazio extra di silicio necessario per consentire il recupero di doppio operando è lo spazio di silicio che non viene utilizzato per altri scopi più generalmente utili.


Avevo familiarità con il moltiplicare-accumulare, ma l'indirizzamento del modulo e l'esecuzione ripetuta di codice senza fetch erano caratteristiche che non conoscevo.
Kevin Vermeer,

1
Hai molte risposte fantastiche, ed è bello lavorare su domande vecchie e nuove. Esaminerei e valuterei tutte le tue risposte se non fosse per gli algoritmi di rilevamento delle frodi e il limite di ripetizione giornaliero . Aspettatevi qualche giorno, però! Continuate così!
Kevin Vermeer,

@reemrevnivek: Sono contento che tu abbia trovato utili le mie risposte. Come ho notato, il design per il doppio-recupero del moltiplicare-accumulare è una funzionalità che non ho visto sui processori non DSP. Il ARM fa un buon lavoro con operazioni che richiedono l'indirizzamento multiplo e il modulo (usando un indirizzo efficace ad es. (R0 + (R1 >> 24)) per una tabella da 256 byte) ma un ARM tipico richiederebbe quattro istruzioni per fare ciò un DSP lo fa in un ciclo.
supercat

MAC è un'istruzione a tre operandi a <- a + b * c non due.
Trismegistos,

@Trismegistos: un'operazione MAC ripetuta N-item coinvolgerà un totale di 2N + 1 operandi. Non è necessario recuperare l'accumulatore prima di ogni articolo e conservarlo successivamente. Mentre i processori con un'aggiunta multipla non ripetuta possono avere tre operandi, un MAC ripetuto recupera solo due operandi per ciclo.
supercat

13

Una cosa che gli altri non hanno menzionato è il comportamento sull'overflow numerico. Nei processori normali questo di solito passa dal valore massimo al valore minimo.

Per l'utilizzo di DSP spesso esiste almeno un'opzione per utilizzare la saturazione . Cioè, in caso di overflow il valore rimane al valore massimo, che produce meno distorsione e imita meglio il comportamento dei circuiti analogici.


9

La più grande differenza tra DSP e uController standard è la funzione di accumulo multiplo (MAC) del DSP che uC non ha. Questo è utile se si desidera eseguire la vera matematica di elaborazione del segnale digitale come FFT (un esempio). Fare una FFT in un microcontrollore standard richiederà molto tempo rispetto all'esecuzione su un MAC del DSP.

L'elaborazione di segnali I2C e seriali non è la stessa dell'elaborazione di forme d'onda in un DSP. Elaborazione completamente diversa in corso poiché i segnali seriali sono solo bit-bang.

Ecco una discussione simile su un forum DSP : DSP vs. microprocessore


Ho visto un accumulatore nello schema a blocchi DSP, ma non sapevo cosa facesse. Buono a sapersi! Comprendo che I2C e seriale non sono gli stessi dell'elaborazione delle forme d'onda quando si inviano dati ASCII, ma alcune periferiche (accelerometri ad accesso seriale, A / D esterno, GPS, ecc.) Codificano le forme d'onda nei loro flussi di dati. nel DSP in qualche modo!
Kevin Vermeer,

3
la maggior parte dell'elaborazione del segnale è composta matematicamente da matrici e / o vettori moltiplicanti insieme. Il processo di fare ciò comporta molti calcoli di tipo risposta = a b + c d + e * f. Su una CPU senza un MAC che richiede molte istruzioni, con un MAC può essere molte volte più veloce.
Segna il

1
Questo commento è completamente sbagliato. Non tutti, ma molti MCU includono moltiplicatori hardware con funzioni MAC. Questo non ha nulla a che fare con una distinzione tra DSP e MCU. Sì, è più probabile che i DSP abbiano un MAC rispetto a un MCU, ma ci sono differenze molto più fondamentali rispetto a questa piccola funzionalità.

2
Se torni l'orologio indietro di 15 anni, non vedi quasi nessun MCU con questa funzione. Se estrai il MAC o funzionalità equivalente dal DSP, puoi onestamente dire che hai un DSP? Certamente non vorrei comprarne uno se non lo avessi o qualcosa di simile. Ci sono differenze di architettura quando entri in Harvard contro von Neuman e l'accesso alla memoria, ma stavo dando una risposta semplice senza entrare in una lunga spiegazione dettagliata. Penso che tu sia troppo duro con il tuo commento dicendo "Flat out WRONG". Ti invitiamo a pubblicare una risposta che discuti sulla profondità che ritieni debba essere coperta.
Jay Atkinson,

@adrian: il tuo commento è completamente sbagliato Se una MCU ha una funzione MAC, sarà commercializzata come DSP.
Johan.A,

5

Ciò che distingueva i DSP era la loro ottimizzazione per le operazioni aritmetiche, in particolare la moltiplicazione, anche se in questi giorni non è raro che i microcontrollori siano dotati di istruzioni sulla moltiplicazione e sulla divisione. Potrebbe esserci ancora un vantaggio nel fare l'elaborazione del segnale con chip DSP, in quanto alcuni di essi hanno un supporto hardware per la matematica a punto fisso (ad esempio, la lib "IQ" di TI TMS320s), mentre i micro hanno più probabilità di includere solo unità intere.

Personalmente, di fronte alla scelta tra i due per un progetto, proverei a categorizzare se l'applicazione richiedeva calcoli ripetitivi con solo la logica di cambio di modalità occasionale, o ha solo bisogno di eseguire brevi sequenze di calcoli quando necessario. Il primo sarebbe il DSP, il secondo un micro.

E poi, naturalmente, ci sono cose divertenti come l'OMAP che hanno entrambe. = P


1
Penso di capire la differenza di intenti (il tuo secondo paragrafo), ma non sono sicuro del perché lo farei quando i micro non hanno abilità matematiche simili a DSP e i DSP hanno insiemi periferici simili a micro. Come ho detto nel mio OP, dsPIC33 e PIC24 possono avere un set di funzionalità quasi identiche e un prezzo identico. Correggimi se sbaglio, ma mentre il DSP ha strutture di elaborazione ripetitive, non penso che il PIC24 (o qualsiasi altro micro che ho visto) abbia alcun vantaggio rispetto a un DSP nei cambi di modalità, come un doppio pipeline o FLASH più veloce.
Kevin Vermeer,

@reemrevnivek: quindi stai dicendo, perché non scegliere sempre solo un DSP?
JustJeff,

@JustJeff: Sì, è esattamente quello che sto dicendo.
Kevin Vermeer,

1

Un'altra possibile caratteristica che l'istruzione MAC può avere è l'incremento automatico dei registri che puntano a moltiplicatori. Ho programmato un DSP Zilog che utilizzava il core Clarkspur (punto fisso a 16 bit). Era una variante dell'architettura di Harvard con tre bus, che consentiva l'accesso simultaneo a tre aree di memoria: memoria di istruzioni, banco di ram di dati 1 e banco di ram di dati 2. Con un flusso di dati in un banco di ram e coefficienti nell'altro, si poteva eseguire un filtro FIR con un'istruzione a ciclo singolo per operazione di incremento del puntatore MAC /. In C la singola istruzione è simile a:

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

E naturalmente questa istruzione viene ripetuta per ciascun coefficiente.

Inoltre, non sottolineato in precedenza, i DSP (almeno quelli più vecchi che ho usato) sono generalmente architettura RISC e sono progettati con molte o la maggior parte delle istruzioni eseguite in un singolo ciclo (o nello stesso numero di cicli). Ciò consente di programmare la risposta di interruzione deterministica (un conteggio di clock fisso tra la linea di interruzione attiva e la prima istruzione nell'ISR eseguita), mentre la maggior parte degli altri processori risponde agli interrupt in un numero variabile di cicli di clock, a seconda di quale punto in un'istruzione multi-ciclo si verifica l'interrupt. Il tempo di esecuzione fisso elimina il jitter multiplo del tempo nelle uscite ripetitive.

Al confronto del PO tra Microchip Pic e DSPic, ho capito quando è stato introdotto DSPic che era principalmente solo un Pic con un'istruzione MAC e alcune altre funzionalità aggiunte, che può certamente accelerare un microcontrollore che svolge funzioni di elaborazione del segnale, ma (a causa della mancanza di una qualsiasi delle altre caratteristiche discusse) potrebbe spingere la terminologia a chiamarlo DSP. MSP430 è disponibile anche nelle versioni con un MAC hardware, ma nessuno lo chiama DSP.

Ricordo 10 o 15 anni fa leggendo che i processori mainstream di Intel stavano aggiungendo MAC e istruzioni simili per eseguire l'elaborazione del segnale "nativo" (anziché su schede di espansione con processori DSP dedicati, che erano comuni per la produzione audio negli anni '90) - alcuni economici I modem bus PC dialup 56k erano solo convertitori A / D e D / A e si affidavano al processore principale per eseguire le funzioni di codifica e decodifica del segnale modem, quindi c'era una richiesta per un uso più efficiente del processore proprio lì. Gli usi dei media come l'editing / codifica / decodifica video e la registrazione / produzione audio sono notevolmente accelerati dalle istruzioni di tipo DSP.


Non c'è niente di nuovo sotto il sole. <g>All'inizio di C, gli operatori di incremento e decremento erano progettati per essere tradotti direttamente in singole istruzioni hardware sul PDP.
Pete Becker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.