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

28

Ich muss mich zwischen einem Kurs für fortgeschrittene Mikrocontroller und einem Kurs für fortgeschrittene FPGAs entscheiden.

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

Können Sie Anwendungen / Produkte / Projekte entwickeln, bei denen ein Mikrocontroller oder DSP nicht ausreicht, und warum?

Kameras? Hochgeschwindigkeitskameras? High-Speed-Bildverarbeitung?

Jolle
quelle
4
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.
Dzarda
Die Unterscheidung, 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 gehe davon aus, dass Sie dies verstehen, und ich muss mich nun genau fragen, was Sie fragen.
Phil Frost
Ich suche nach Anwendungen, bei denen ein Mikrocontroller in den meisten Fällen nicht ausreicht oder bei denen ein FPGA die naheliegende Wahl wäre.
Jolle
4
Welches haben Sie in Ihrem Einführungskurs leichter verstanden? Wählen Sie dann die fortgeschrittene Variante für die andere, da Sie (vielleicht) die einfachere Variante selbst lernen können.
woliveirajr

Antworten:

21

Siehe auch FPGAs vs Microcontroller

Ein gutes Beispiel ist die schnelle Bild- oder Videoverarbeitung. Oder die Verarbeitung von "Bildern", die keine einfachen optischen Bilder sind, z. B. Radar- oder Lasersysteme.

Entscheidend sind die Anforderungen an Durchsatz und Latenz . Ein Mikrocontroller kann einen Interrupt (sehr grob) einmal pro Mikrosekunde bedienen. Es kann nur einen Interrupt gleichzeitig bedienen. Wenn Sie es aufwändig verarbeiten müssen, können Sie nur eine begrenzte Anzahl von Services in einer bestimmten Zeit ausführen.

Mit einem FPGA können Sie im Allgemeinen sofort auf ein Eingangsereignis reagieren (also auf den nächsten Taktzyklus). Sie können viele Verarbeitungseinheiten gleichzeitig haben. Wenn Sie wissen, dass Ihr Filter 20 Zyklen dauert, ist dies völlig unabhängig von allen anderen Vorgängen.

Hochparallele, ganzzahlintensive Berechnungen eignen sich am besten für FPGAs, insbesondere wenn komplexe Datenabhängigkeiten vorliegen. Sie haben jedoch nicht viel Speicher an Bord. Sie können der Seite etwas DRAM hinzufügen, allerdings auf Kosten der Latenz.

Möglicherweise möchten Sie auch eine für die Peripheriegeräte oder einen digitalen Hochgeschwindigkeitsbus. Sie können HDMI nicht in einen Mikrocontroller einbinden oder aus ihm entfernen. Sie können keine PCI-Karte um eine herum erstellen.

pjc50
quelle
16

Nun, ich bearbeite HD-Videos in Echtzeit in FPGAs. Einiges von dem, was ich mache, könnte in einem GPU-Chip erfolgen, 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 erzielen. Ein Projekt, an dem ich vielleicht bald arbeite, umfasst die Objekterkennung in einem Videostream. Die vorbereitenden Schritte (Rauschunterdrückung, Normalisierung, Flankenerkennung usw.) werden am besten im FPGA ausgeführt, aber die übergeordnete Logik, die entscheidet, welche Low-Level-Features Teile der zu erkennenden Objekte sind, wird am besten auf einer CPU ausgeführt (entweder) innerhalb oder außerhalb des FPGA).

Letztendlich möchten Sie sich in beiden Bereichen auskennen, es ist also nur eine Frage, welchen Sie zuerst machen.

Dave Tweed
quelle
14

Kurz gesagt, FPGAs eignen sich gut, wenn Sie eine kleine Menge von Daten verarbeiten müssen, und CPUs eignen sich gut, wenn Sie eine große Menge von Daten verarbeiten müssen.

Ein HDMI-Videostream enthält viele Daten. Dies kann im allgemeinen Videofall von einer CPU, einer GPU oder einem ASIC ausgeführt werden. Wenn Sie jedoch ein wenig daran arbeiten müssen (z. B. ein Overlay hinzufügen), können Sie ein FPGA auswählen.

Ein Audiostream enthält nicht viele Daten. Wenn Sie jedoch eine Spracherkennung durchführen müssen, ziehen Sie eine CPU einem FPGA vor.

Während Sie in einer CPU softwaredefiniertes Radio betreiben können, können Sie mit einem FPGA einen viel größeren Teil des Spektrums einfacher bearbeiten als in einer CPU.

Während Sie einen Tastatur-Controller aus einem FPGA machen könnten, wird ein Mikrocontroller billiger, verbraucht weniger Strom und ist einfacher zu entwickeln als ein FPGA mit fortschrittlicher Tastatur-Software (Makros, Spielefunktionen, Remapping).

Natürlich können Sie mit Kompromissen alles Mögliche tun, aber wenn Sie beides beherrschen, können Sie die Kompromisse kompetenter abwägen und die höheren Kosten für Teile oder die Entwicklungszeit vermeiden, die Ihnen bei der Auswahl des Produkts entstehen falsche Lösung für ein gegebenes Problem.

Adam Davis
quelle
12

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

Ein FPGA führt die Logik aus, da seine Hardware-Gates dazu logisch 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 wie in einem Mikro in einem FPGA zu erstellen und zu debuggen. Daher verwenden Sie ein FPGA, wenn zusätzliche Geschwindigkeit und geringe Latenz erforderlich sind.

Olin Lathrop
quelle
8

Eine noch nicht erwähnte Anwendung ist die Mikroelektronik oder das Design von MCU / CPU / GPU / ASIC-Chips. Diese Chips werden häufig als Prototypen erstellt, indem sie in HDL entworfen und dann in einem FPGA implementiert werden. Dies macht 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 Herstellung des tatsächlichen Siliziums im Prozessor oder ASIC erforderlich ist.

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 eine ARM / 8051 / etc. Softcore- und beliebige Softcore-Peripheriegeräte, die Sie benötigen, und entwerfen im Wesentlichen Ihren eigenen benutzerdefinierten Mikrocontroller, der in einem FPGA implementiert ist. Wenn Sie dann über die Ressourcen verfügen, können Sie diese in Ihren eigenen Mikrocontroller integrieren.

Wenn Sie sich für diese Art von Anwendung interessieren, schauen Sie bei OpenCores nach, was möglich ist.

embedded.kyle
quelle
6

Wir bauen Radargeräte (meistens mit synthetischer Apertur), die in großem Umfang FPGAs verwenden. Ich denke 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 sind für alle Zeitanforderungen in Nanosekunden FPGAs oder ASICs erforderlich.

LeoR
quelle
5

Ein Mikrocontroller kann nur Daten sequentiell verarbeiten, jeweils einen Befehl. Wenn Sie also einen sehr kostspieligen Vorgang ausführen, möchten Sie Ihre Berechnung möglicherweise irgendwie parallelisieren. Die Verarbeitung von Audio / Video ist ein gutes Beispiel dafür. Um diesem Bedarf gerecht zu werden, wurden digitale Signalprozessoren entwickelt, die bestimmte Aufgaben parallel ausführen können, aber nicht verallgemeinert genug sind, um einen beliebigen Algorithmus zu implementieren, sodass diese Prozessoren für viele Aufgaben, jedoch nicht für alle Aufgaben funktionieren. Ein FPGA ist eine verallgemeinerte Hardware. Da Sie im Wesentlichen das Design Ihrer eigenen Hardware definieren und dann auf das FPGA herunterladen können, kann jeder erdenkliche Algorithmus implementiert werden, vorausgesetzt, er verfügt über genügend Ressourcen.

Ein konkretes Beispiel: Ken Perlin schlägt eine Hardware-Implementierung seines Simplex-Rauschalgorithmus vor. Es kann relativ schnell mit einer herkömmlichen CPU oder einem Mikrocontroller ausgeführt werden, kann aber mit benutzerdefinierter Hardware superschnell ausgeführt werden. Da ich bezweifle, dass ein DSP dafür geeignet ist, ist ein FPGA am einfachsten. 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

Leerer Stern
quelle
5

Eine Antwort, die nicht hier 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, kann ein Mikrocontroller die Daten einfach nicht schnell genug verarbeiten. Eine typische DAQ-FPGA-Karte 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 andere Anwendung ist das Paket-Routing, beispielsweise ein Gerät, das eine (oder mehrere) XAUI- Ethernet-Schnittstellen verwaltet, die mit jeweils 10 Gbit / 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 handhaben.

Stanri
quelle
4

Der Hauptgrund, warum Mikroprozessoren und Mikrocontroller mit einer vergleichsweise geringen Anzahl von Schaltkreisen so viel leisten können, liegt darin, dass das Mikro nur 1.000 Mal pro Sekunde eine komplexe Berechnung durchführen muss und 20 Mikrosekunden benötigt (das Mikro arbeitet also an der Berechnung 2) % der Zeit), die meiste Hardware, die für diese Berechnung verwendet werden würde, kann die restlichen 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.

Der Schaltungsaufwand in einem FPGA ist häufig mit dem eines Mikrocontrollers vergleichbar (FPGAs variieren in der Größe um einige Größenordnungen, ebenso wie Mikrocontroller, aber die Bereiche überlappen sich). Im Gegensatz zu einem Mikrocontroller, dessen Schaltungselemente so angeschlossen werden, dass sie für viele nicht gleichzeitige Aufgaben verwendet werden können, ist ein FPGA so konzipiert, dass Teile seiner Schaltung "ganztägig" für verschiedene Aufgaben verwendet werden. Wenn ein Mikrocontroller die Anzahl der an 100 Eingängen auftretenden Impulse zählen soll, ist er auf das Zählen von Impulsen beschränkt, die langsam genug sind, damit der Controller sie einzeln nacheinander verarbeiten kann - wenn alle Eingänge pulsieren könnten Unabhängig davon hätte selbst eine schnelle Steuerung Probleme, mehr als einige tausend Impulse pro Sekunde und Eingang zu zählen. Im Gegensatz,

Superkatze
quelle
1

FPGAs implementieren Hardware-Logikschaltungen oder Funktionsblöcke, theoretisch können sie alles implementieren, was Sie wollen. Und diese Blöcke werden gleichzeitig ausgeführt, und es ist unwahrscheinlich, dass eine herkömmliche MCU Zeile für Zeile programmiert. Daher ist die Leistung von FPGA viel besser als die von MCU, aber es müssen HDL- oder VHDL-Sprachen bekannt sein, die sich in Syntax, Stil und Konzept von der Programmiersprache unterscheiden.


Wie gesagt, es kann alles implementieren, daher ist es nicht überraschend, dass Sie eine MCU mit Funktionsblock implementieren können, um Ihre Entwicklung mit hoher Leistung zu vereinfachen. Es gibt einen von Xilinx bereitgestellten Funktionsblock für die eingebettete MCU, Microblaze. Daher können Sie auch Embedded-System-Programme im FPGA ausführen.


Beispielsweise möchten Sie einen programmierbaren Audio-Equalizer implementieren, und der umfangreichste Rechenteil wie FFT kann durch Funktionsblöcke implementiert werden, anstatt eine Softwareberechnung auszuführen. Einige der einfachen Aufgaben wie LCD, E / A-Schnittstelle können jedoch von der MCU ausgeführt werden. Mit FPGA können Sie MCU-Embedded-System- und Hardware-Funktionsblöcke gleichzeitig verwenden.

Lee Timothy
quelle