Um ehrlich zu sein, ist die Grenze zwischen den beiden heute fast verschwunden und es gibt Prozessoren, die als beides klassifiziert werden können (zum Beispiel AD Blackfin).
Allgemein gesagt:
Mikrocontroller sind ganzzahlige mathematische Prozessoren mit einem Interrupt-Subsystem. Einige verfügen möglicherweise über Hardware-Multiplikationseinheiten, andere über keine usw. Sie wurden speziell für einfache Berechnungen und hauptsächlich zur Steuerung anderer Geräte entwickelt.
DSPs sind Prozessoren, die für die Streaming-Signalverarbeitung optimiert sind. Sie verfügen häufig über spezielle Anweisungen, die häufige Aufgaben beschleunigen, z. B. das Multiplizieren und Akkumulieren in einer einzigen Anweisung. Sie haben auch oft andere Vektor- oder SIMD-Anweisungen. In der Vergangenheit waren sie keine Interrupt-basierten Systeme und wurden mit Nicht-Standard-Speichersystemen betrieben, die für ihren Zweck optimiert waren, wodurch ihre Programmierung erschwert wurde. Sie wurden normalerweise für den Betrieb in einer großen Schleife entwickelt, die einen Datenstrom verarbeitet. DSPs können als Ganzzahl-, Festkomma- oder Gleitkommaprozessoren ausgeführt werden.
Wenn Sie in der Vergangenheit Audiostreams und Videostreams verarbeiten und eine schnelle Motorsteuerung ausführen wollten, sollten Sie sich einen DSP zulegen.
Wenn Sie einige Tasten steuern, eine Temperatur messen, ein Zeichen-LCD ausführen und andere ICs steuern möchten, die Dinge verarbeiten, würden Sie einen Mikrocontroller verwenden.
Heutzutage gibt es meistens Allzweckprozessoren mit Mikrocontrollern, die entweder DSP-ähnliche Befehle enthalten oder mit On-Chip-Co-Prozessoren, um mit Streaming-Daten oder anderen DSP-Operationen umzugehen. Reine DSPs werden nur noch in bestimmten Branchen verwendet.
Der Prozessormarkt ist viel breiter und verschwommener als früher. Zum Beispiel betrachte ich einen ARM cortex-A8 SoC kaum als Mikrocontroller, aber er passt wahrscheinlich zur Standarddefinition, insbesondere in einem PoP-Paket.
BEARBEITEN: Ich habe mir vorgenommen, ein wenig zu erklären, wann / wo ich DSPs verwendet habe, selbst in den Tagen der Anwendungsprozessoren.
Ein kürzlich von mir entwickeltes Produkt war die Audioverarbeitung mit X Eingangskanälen und X Ausgangskanälen pro 'Zone'. Die beabsichtigte Verwendung des Produkts bedeutete, dass es oft dort saß und jahrelang die Audiokanäle verarbeitete, ohne dass jemand es berührte. Die Audioverarbeitung bestand aus verschiedenen akustischen Filtern und Funktionen. Das System war auch "hot-plug-fähig" mit der Möglichkeit, einige unabhängige "Zonen" in einer Box hinzuzufügen. Es wurden insgesamt 3 PCB-Designs (Hauptplatine, Rückwandplatine und Einsteckmodul) und die Rückwandplatine 4 Einsteckmodule unterstützt. Ein ziemlich lustiges Projekt, da ich es alleine gemacht habe, musste ich das Systemdesign, den Schaltplan, das PCB-Layout und die Firmware machen.
Jetzt hätte ich das Ganze mit einem einzigen sperrigen ARM-Kern erledigen können. Ich benötigte nur etwa 50 MIPS DSP-Arbeit für 24-Bit-Festkommazahlen pro Zone. Aber weil ich wusste, dass dieses System extrem lange funktionieren würde, war es wichtig, dass es niemals klickt oder knallt oder ähnliches. Ich entschied mich für die Implementierung mit einem DSP mit geringem Stromverbrauch pro Zone und einem einzelnen PIC-Mikrocontroller, der die Rolle des Systemmanagements spielte. Auf diese Weise würde der DSP, selbst wenn eine der uC-Funktionen abstürzt, möglicherweise ein DDOS-Angriff auf seinen Ethernet-Port, einfach weiter tuckern und es ist wahrscheinlich, dass niemand etwas davon merkt.
Der Mikrocontroller spielte also die Rolle des zweizeiligen LCD, einiger Tasten, der Temperaturüberwachung und der Lüftersteuerung (es gab auch einige Audioverstärker mit relativ hoher Leistung auf jeder Platine) und bediente sogar eine AJAX-artige Webseite über Ethernet. Es verwaltete auch die DSPs über eine serielle Verbindung.
Das ist eine Situation, in der selbst in den Tagen, in denen ich einen einzelnen ARM-Kern für alles hätte verwenden können, das Design einen dedizierten Signalverarbeitungs-IC vorschrieb.
Andere Bereiche, in denen ich auf DSPs gestoßen bin:
* High-End-Audio - Sehr hochwertige Receiver und Misch- und Verarbeitungsgeräte in Konzertqualität
* Radarverarbeitung - Ich habe auch ARM-Kerne für diese in Low-End-Apps verwendet.
* Sonar-Verarbeitung
* Echtzeit-Computer Vision
Die unteren und mittleren Bereiche des Audio- / Video- / ähnlichen Bereichs wurden größtenteils von Anwendungsprozessoren übernommen, die eine Allzweck-CPU mit Co-Proc-Offload-Engines für verschiedene Anwendungen kombinieren.
Viele digitale Signalprozessoren enthalten eine Vielzahl von Funktionen, die bei "normalen" Prozessoren nicht vorhanden sind:
Beachten Sie, dass viele DSPs separate Busse haben, damit beide Operanden eines Multiplikations-Akkumulators gleichzeitig abgerufen werden können. Ich habe noch nie einen Nicht-DSP gesehen, der das kann. Ich kenne zwar kein Merkmal, das einem Chip als DSP "fehlen" muss, aber zusätzlicher Siliziumraum, der zum Abrufen von Doppeloperanden erforderlich ist, wird für keinen anderen allgemeineren Zweck verwendet.
quelle
Eine Sache, die die anderen nicht erwähnt haben, ist das Verhalten beim numerischen Überlauf. In normalen Prozessoren springt dies normalerweise vom Maximalwert zum Minimalwert.
Für die DSP-Nutzung gibt es häufig zumindest die Option, stattdessen die Sättigung zu verwenden. Das heißt, beim Überlauf bleibt der Wert auf dem Maximalwert, wodurch weniger Verzerrungen auftreten und das Verhalten analoger Schaltungen besser nachgeahmt wird.
quelle
Der größte Unterschied zwischen DSP und dem Standard-uController besteht in der Multiplikations-Akkumulationsfunktion (MAC) des DSP, über die uC nicht verfügt. Dies ist nützlich, wenn Sie eine echte digitale Signalverarbeitung wie FFT durchführen möchten (ein Beispiel). Das Ausführen einer FFT in einem Standard-Mikrocontroller dauert im Vergleich zur Ausführung auf einem MAC des DSP sehr lange.
Die Verarbeitung von I2C- und seriellen Signalen entspricht nicht der Verarbeitung von Wellenformen in einem DSP. Eine völlig andere Art der Verarbeitung, da serielle Signale nur Bit-Banging sind.
Hier ist eine ähnliche Diskussion in einem DSP-Forum: DSP vs. Mikroprozessor
quelle
Was DSPs auszeichnete, war ihre Optimierung für arithmetische Operationen, insbesondere Multiplikation, obwohl es heutzutage nicht ungewöhnlich ist, dass Mikrocontroller mit Multiplikations- und Divisionsanweisungen ausgestattet sind. Die Signalverarbeitung mit DSP-Chips kann immer noch von Vorteil sein, da einige von ihnen Hardware-Unterstützung für Festkomma-Mathematik bieten (z. B. die 'IQ'-Bibliothek des TI TMS320), wohingegen Mikros eher nur ganzzahlige Einheiten enthalten.
Persönlich würde ich, wenn ich mich für ein Design zwischen den beiden entscheiden muss, versuchen zu kategorisieren, ob die Anwendung sich wiederholende Berechnungen mit nur gelegentlicher Modusänderungslogik erfordert oder nur kurze Abfolgen von Berechnungen durchführen muss, wenn dies erforderlich ist. Ersteres wäre der DSP, letzteres ein Mikro.
Und dann gibt es natürlich lustige Dinge wie das OMAP, die beides haben. = P
quelle
Ein weiteres mögliches Merkmal des MAC-Befehls ist das automatische Inkrementieren der Register, die auf Multiplikanden zeigen. Ich habe einen Zilog-DSP programmiert, der den (16-Bit-Festkomma-) Clarkspur-Kern verwendet. Es handelte sich um eine Variante der Harvard-Architektur mit drei Bussen, mit denen gleichzeitig auf drei Speicherbereiche zugegriffen werden konnte: Anweisungsspeicher, Datenbank 1 und Datenbank 2. Mit einem Datenstrom in einer Speicherbank und Koeffizienten in der anderen Führen Sie einen FIR-Filter mit einem Einzelzyklusbefehl pro MAC / Zeiger-Inkrementierungsoperation durch. In C sieht die einzelne Anweisung folgendermaßen aus:
Akku + = rambank1 [r1 ++] * rambank2 [r2 ++];
Und natürlich wird diese Anweisung für jeden Koeffizienten wiederholt.
Ebenfalls nicht erwähnt, weisen DSPs (zumindest die älteren, die ich verwendet habe) im Allgemeinen eine RISC-Architektur auf und sind mit vielen oder den meisten Befehlen konstruiert, die in einem einzigen Zyklus (oder in der gleichen Anzahl von Zyklen) ausgeführt werden. Dies ermöglicht die Programmierung einer deterministischen Interrupt-Antwort (eine feste Taktanzahl zwischen der aktiv werdenden Interrupt-Leitung und dem ersten ausgeführten Befehl im ISR), während die meisten anderen Prozessoren auf Interrupts in einer variablen Anzahl von Taktzyklen reagieren, je nachdem, zu welcher Zeit Punkt in einem Mehrzyklusbefehl tritt der Interrupt auf. Durch die feste Ausführungszeit wird bei sich wiederholenden Ausgaben ein Jitter von mehreren Uhrzeiten vermieden.
Zum Vergleich des OP von Microchip Pic und DSPic war es meines Erachtens bei der Einführung von DSPic hauptsächlich ein Pic mit einem MAC-Befehl und ein paar weiteren zusätzlichen Funktionen, die einen Mikrocontroller, der Signalverarbeitungsfunktionen ausführt, sicherlich beschleunigen können, aber (Aufgrund des Fehlens einer der anderen diskutierten Funktionen) könnte es sein, dass die Terminologie dahingehend erweitert wird, dass sie als DSP bezeichnet wird. Der MSP430 ist auch in Versionen mit einem Hardware-MAC erhältlich, aber niemand nennt DAS einen DSP.
Ich erinnere mich, dass ich vor 10 bis 15 Jahren gelesen habe, dass Mainstream-Prozessoren von Intel MAC und ähnliche Befehle für die "native" Signalverarbeitung hinzufügten (anstelle von Erweiterungskarten mit dedizierten DSP-Prozessoren, die in den 1990er-Jahren für die Audioproduktion üblich waren) - einige davon kostengünstig PC-Bus-Modems mit 56.000 Einwahlnummern waren nur A / D- und D / A-Wandler und verließen sich auf den Hauptprozessor, um die Codierungs- und Decodierungsfunktionen für das Modem-Signal auszuführen. Medienanwendungen wie Videoschnitt / -codierung / -decodierung sowie Audioaufzeichnung / -produktion werden durch DSP-Anweisungen erheblich beschleunigt.
quelle
<g>
In den Anfängen von C wurden die Inkrement- und Dekrementoperatoren so konzipiert, dass sie direkt in einzelne Hardwareanweisungen auf dem PDP übersetzt werden.