Wann können FPGAs verwendet werden und Mikrocontroller/DSPs nicht?

Ich muss zwischen einem Kurs über fortgeschrittene Mikrocontroller und einem Kurs über fortgeschrittene FPGAs wählen.

Ich hatte Einführungskurse in beiden Fächern, und was mich jetzt beunruhigt, ist, dass ich bereits ziemlich gut in der Firmware-Entwicklung für Mikrocontroller bin und nicht sehe, welche Produkte/Projekte ich mit einem FPGA machen kann und nicht mit einem Mikrocontroller/DSP.

Können Sie sich einige Anwendungen/Produkte/Projekte vorstellen, bei denen ein Mikrocontroller oder DSP nicht ausreichen würde, und warum?

Kameras? Hochgeschwindigkeitskameras? Highspeed-Bildverarbeitung?

Die Hauptgründe sind so ziemlich 1. 100% deterministische Reaktionen, 2. massives Potenzial für Parallelität. Viele Designs enthalten jedoch eine Sort-Core- CPU im FPGA, da es viel einfacher ist, verrückte Logik für einen Prozessor zu programmieren als für Hardware.
Die Unterscheidung zwischen dem, was mit jedem Gerät möglich ist, ist nicht sehr klar. Jeder hat Vorteile und es gibt Lösungen für Probleme auf beiden Seiten. Ich habe an Einführungskursen teilgenommen, ich gehe davon aus, dass Sie das verstehen, also muss ich mich fragen, was Sie genau fragen.
Ich suche nach Anwendungen, bei denen ein Mikrocontroller in den meisten Fällen nicht ausreichen würde oder wo ein FPGA die naheliegende Wahl wäre.
Welche fandest du in deinem Einführungskurs leichter verständlich? Wählen Sie dann auf der anderen Seite die Fortgeschrittene, da Sie die einfachere (vielleicht) selbst lernen können.

Antworten (10)

Siehe auch FPGAs vs. Mikrocontroller

Ein gutes Beispiel ist die Hochgeschwindigkeits-Bild- oder Videoverarbeitung. Oder die Verarbeitung von „Bildern“, die keine einfachen optischen Bilder sind, wie z. B. radar- oder laserbasierte Systeme.

Die wichtigsten zu berücksichtigenden Punkte sind Durchsatz- und Latenzanforderungen . Ein Mikrocontroller kann (ganz grob) einmal pro Mikrosekunde einen Interrupt bedienen. Es kann nur einen Interrupt gleichzeitig bedienen. Wenn Sie es aufwändig verarbeiten müssen, schränkt das die Anzahl der in einer bestimmten Zeit zu wartenden ein.

Mit einem FPGA können Sie im Allgemeinen sofort auf ein Eingangsereignis reagieren (na ja, beim nächsten Taktzyklus). Sie können viele Verarbeitungseinheiten parallel haben. Wenn Sie wissen, dass Ihr Filter 20 Zyklen benötigt, ist das völlig unabhängig von anderen Vorgängen.

Hochparallele Ganzzahl-intensive Berechnungen funktionieren am besten auf FPGAs, insbesondere wenn komplexe Datenabhängigkeiten vorhanden sind. Sie haben jedoch nicht viel Onboard-Speicher; Sie können etwas DRAM an der Seite hinzufügen, jedoch auf Kosten der Latenz.

Vielleicht möchten Sie auch einen für die Peripheriegeräte oder für einen digitalen Hochgeschwindigkeitsbus. Sie können HDMI nicht in einen Mikrocontroller hinein- oder herausbiten. Sie können keine PCI-Karte um eine herum bauen.

Nun, ich verarbeite HD-Videos in Echtzeit in FPGAs. Einiges von dem, was ich tue, könnte in einem GPU-Chip ausgeführt werden, aber nicht auf einem Mikrocontroller oder DSP. Das FPGA ist flexibler.

Viele Systeme kombinieren FPGAs und MCUs/DSPs, um das Beste aus beiden Welten zu erhalten. Ein Projekt, an dem ich möglicherweise bald arbeite, betrifft die Objekterkennung in einem Videostream. Die vorbereitenden Schritte (Rauschunterdrückung, Normalisierung, Kantenerkennung usw.) werden am besten im FPGA durchgeführt, aber die Logik auf höherer Ebene, die entscheidet, welche Merkmale auf niedriger Ebene Teile der zu erkennenden Objekte sind, wird am besten auf einer CPU durchgeführt (entweder innerhalb oder außerhalb des FPGA).

Letztendlich möchten Sie sich in beiden Bereichen auskennen, also ist es wirklich nur eine Frage, welche Sie zuerst tun.

Kurz gesagt, FPGAs sind gut, wenn Sie ein wenig Verarbeitung mit vielen Daten durchführen müssen, und CPUs sind gut, wenn Sie viel Verarbeitung mit wenigen Daten durchführen müssen.

Ein HDMI-Videostream ist eine Menge Daten. Im allgemeinen Videofall kann dies durch eine CPU, GPU oder ASIC erfolgen, aber wenn Sie ein wenig daran arbeiten müssen (z. B. ein Overlay hinzufügen), können Sie ein FPGA wählen.

Ein Audiostream enthält nicht viele Daten, aber wenn Sie eine Spracherkennung darauf durchführen müssen, werden Sie eine CPU einem FPGA vorziehen.

Während Sie softwaredefinierten Funk in einer CPU ausführen können, können Sie mit einem FPGA einfacher als in einer CPU mit einem viel größeren Teil des Spektrums umgehen.

Während Sie aus einem FPGA einen Tastatur-Controller machen könnten, ist ein Mikrocontroller billiger, verbraucht weniger Strom und ist einfacher zu entwickeln für fortgeschrittene Tastatursoftware (Makros, Spielfunktionen, Remapping) als ein FPGA.

Natürlich können Sie mit Kompromissen in jedem von ihnen alles machen, aber wenn Sie beide beherrschen, können Sie die Kompromisse kompetenter abwägen und vermeiden die höheren Kosten für Teile oder die Entwicklungszeit, die Ihnen bei der Auswahl entstehen würden falsche Lösung für ein bestimmtes Problem.

Im Allgemeinen verwenden Sie einen Mikrocontroller, wenn er die Arbeit erledigen kann. Ein Mikrocontroller führt die Logik aus, indem er sequentielle Anweisungen ausführt.

Ein FPGA führt die Logik aus, da seine Hardware-Gatter logisch dafür verdrahtet sind. Das bedeutet, dass es Dinge viel schneller erledigen kann, und eine Reihe solcher Dinge gleichzeitig. Es ist im Allgemeinen komplizierter und schwieriger, dieselbe Logik in einem FPGA wie in einem Mikro zu erstellen und zu debuggen, daher verwenden Sie ein FPGA, wenn die zusätzliche Geschwindigkeit und niedrige Latenz erforderlich sind.

Eine Anwendung, die ich noch nicht erwähnt habe, ist die Mikroelektronik oder das Design von MCU/CPU/GPU/ASIC-Chips selbst. Diese Chips werden häufig als Prototypen erstellt, indem sie in HDL entworfen und dann in einem FPGA implementiert werden. Dadurch sind sie einfacher, billiger und schneller zu testen und zu modifizieren, bevor schließlich das HDL verwendet wird, um das Layout zu erstellen, das für die Produktion des eigentlichen Siliziums im Prozessor oder ASIC benötigt wird.

Ein Kommentator erwähnte dies in Form von Soft-Core-Chips (obwohl sie einen Tippfehler hatten und sie Sort-Core-Chips nannten). Sie können einen ARM/8051/etc. Softcore und was auch immer für Softcore-Peripheriegeräte Sie benötigen, und entwerfen Sie im Wesentlichen Ihren eigenen benutzerdefinierten Mikrocontroller, der in einem FPGA implementiert ist. Vorausgesetzt, Sie haben die Ressourcen, könnten Sie dies in Ihren eigenen Mikrocontroller einbauen lassen.

Wenn Sie diese Art von Anwendung interessiert, schauen Sie sich OpenCores an, um zu sehen, was möglich ist.

Ein Mikrocontroller kann Daten nur sequentiell verarbeiten, eine Anweisung nach der anderen. Wenn Sie also eine sehr teure Operation haben, möchten Sie Ihre Berechnung vielleicht irgendwie parallel machen. Die Verarbeitung von Audio/Video ist ein gutes Beispiel dafür. Um diesen Bedarf zu decken, wurden digitale Signalprozessoren entwickelt, die bestimmte Aufgaben parallel ausführen können, aber sie sind nicht verallgemeinert genug, um einen beliebigen Algorithmus zu implementieren, so dass diese Prozessoren für viele Aufgaben, aber nicht für alle Aufgaben funktionieren. Ein FPGA ist ein verallgemeinertes Stück Hardware. Da Sie im Wesentlichen das Design Ihrer eigenen Hardware definieren und dann auf das FPGA herunterladen können, kann es jeden erdenklichen Algorithmus implementieren, sofern es über genügend Ressourcen verfügt.

Ein konkretes Beispiel: Ken Perlin schlägt eine Hardwareimplementierung seines Simplex-Noise-Algorithmus vor. Es kann relativ schnell mit einer herkömmlichen CPU oder einem Mikrocontroller durchgeführt werden, kann aber mit benutzerdefinierter Hardware superschnell gemacht werden. Da ich bezweifle, dass ein DSP dafür funktionieren würde, wäre das Einfachste ein FPGA. Der schwierige Weg wäre natürlich, einen tatsächlichen, physischen Chip für Sie herstellen zu lassen, was unglaublich teuer ist. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf

Wir bauen Radarinstrumente (meistens mit synthetischer Apertur), die FPGAs ausgiebig verwenden. Ich glaube nicht, dass die engen Timing-Anforderungen von einem Mikrocontroller einfach erfüllt werden könnten. Ich glaube, dass viele LIDAR-Instrumente auch FPGAs verwenden.

Grundsätzlich benötigt alles, wo Timing-Anforderungen im Nanosekundenbereich liegen, FPGAs oder ASICs.

Der grundlegende Grund dafür, dass Mikroprozessoren und Mikrocontroller mit einer vergleichsweise kleinen Menge an Schaltkreisen so viel erreichen können, ist, dass, wenn der Mikro nur 1.000 Mal pro Sekunde eine komplexe Berechnung durchführen muss und dies 20 Mikrosekunden dauert (der Mikro arbeitet also an der Berechnung 2 % der Zeit), kann der größte Teil der Hardware, die für diese Berechnung verwendet würde, in den verbleibenden 98 % der Zeit für andere Zwecke verwendet werden. Mikrocontroller können daher eine bescheidene Menge an Hardware verwenden, um eine sehr große Anzahl unterschiedlicher Funktionen auszuführen, solange die Funktionen nicht gleichzeitig benötigt werden.

Die Menge an Schaltungen in einem FPGA ist oft mit der eines Mikrocontrollers vergleichbar (FPGAs variieren in der Größe um einige Größenordnungen, ebenso wie Mikrocontroller, aber die Bereiche überschneiden sich). Im Gegensatz zu einem Mikrocontroller, dessen Schaltungselemente so verbunden werden, dass sie für viele nicht gleichzeitige Aufgaben verwendet werden können, wird ein FPGA so konzipiert, dass Teile seiner Schaltung „Vollzeit“ verschiedenen Aufgaben gewidmet sind. Wenn man möchte, dass ein Mikrocontroller die Anzahl der Impulse zählt, die an jedem der 100 Eingänge auftreten, wäre er darauf beschränkt, Impulse zu zählen, die langsam genug sind, dass der Controller sie einzeln nacheinander verarbeiten kann - wenn alle Eingänge pulsieren könnten Unabhängig davon hätte sogar ein schneller Controller Probleme, mehr als ein paar tausend Impulse pro Sekunde pro Eingang zu zählen. Im Gegensatz,

Eine Antwort, die hier nicht enthalten ist, ist die Datenerfassung. Wenn Sie einen ADC verwenden möchten, um ein Signal (z. B. ein HF-Signal) mit 200 MHz abzutasten und zu verarbeiten, ist ein Mikrocontroller einfach nicht in der Lage, die Daten schnell genug zu verarbeiten. Ein typisches DAQ-FPGA-Board empfängt, filtert, führt eine DDC durch und leitet die HF-Daten mit einer viel niedrigeren Frequenz an eine CPU weiter. FPGAs können auch FFTs und Kanalisierungsoperationen auf dem HF-Spektrum durchführen.

Eine weitere Anwendung ist das Paket-Routing, beispielsweise ein Gerät, das eine (oder mehrere) XAUI -Ethernet-Schnittstellen verwaltet, die jeweils mit 10 Gb/s arbeiten. Diese FPGAs filtern und planen Paketwarteschlangen für verschiedene Ziele. Ein Mikrocontroller/eine herkömmliche CPU wäre nicht in der Lage, die Bandbreite dieser Schnittstellen zu bewältigen.

FPGA implementiert eine Hardware-Logikschaltung oder einen Funktionsblock, theoretisch kann es alles implementieren, was Sie wollen. Und diese Blöcke laufen gleichzeitig, unwahrscheinlich, dass eine herkömmliche MCU die Programmierung Zeile für Zeile ausführt. Daher ist die Leistung von FPGA viel besser als MCU, aber es erfordert die Kenntnis der HDL- oder VHDL-Sprache, die sich in Bezug auf Syntax, Stil und Konzept von der Programmiersprache unterscheidet.


Wie gesagt, es kann alles implementieren, daher ist es nicht verwunderlich, dass Sie eine MCU mit Funktionsblock implementieren können, um Ihre Entwicklung mit hoher Leistung zu erleichtern. Es gibt einen Funktionsblock, der von Xilinx für eingebettete MCUs namens Microblaze bereitgestellt wird. Daher können Sie auch eingebettete Systemprogramme im FPGA ausführen.


Sie möchten beispielsweise einen programmierbaren Audio-Equalizer implementieren, und der aufwendigste Berechnungsteil wie FFT kann durch einen Funktionsblock implementiert werden, anstatt eine Softwareberechnung auszuführen. Aber einige der einfachen Aufgaben wie LCD, E/A-Schnittstelle können von der MCU erledigt werden. Und FPGA ermöglicht es Ihnen, MCU-eingebettete System- und Hardware-Funktionsblöcke gleichzeitig zu haben.