Warum Mikrocontroller in FPGA implementieren?

16

Ich "untersuche" gerade FPGAs, was sie können, wie sie es tun usw.

An mehr als einer Stelle (hier zum Beispiel ) habe ich Projekte gesehen, die einen einfachen Mikrocontroller mit FPGA implementieren.

Also meine Frage:
Ich würde gerne wissen, wozu solche Implementierungen dienen? Warum sollte man einen in FPGA implementierten Mikrocontroller verwenden, anstatt ein Mikro an Bord zu haben? Was sind Vorteile? Und vielleicht auch was sind die Nachteile?

James C
quelle
Viele von diesen verwenden IP-Kerne in Dosen, aber das eigene Rollen kann eine großartige Lernerfahrung sein.
Chris Stratton
1
@ChrisStratton - Kannst du mehr erzählen oder einen Link über IP-Cores in Dosen posten? Ja, ich bin sicher, es kann eine großartige Lernerfahrung sein. Aber das ist einer der Gründe, warum ich diese Frage stelle. Ich frage mich, ob es mehr als nur eine Lernerfahrung ist.
James C
1
Die meisten Leute, die das tun, verwenden etwas wie Microblaze, Picobloze, Nios II usw. - dies sind im Grunde genommen Prozessordesigns "in einer Dose" (Bibliothek), die Sie lizenzieren und in Ihr Projekt einfügen können. Der Kontrast würde darin bestehen, dass Sie ihn selbst in einer HDL-Quelle entwickeln, möglicherweise anhand des Blockdiagramms, das in Ihrer typischen CS101-Vorlesung dargestellt wird. Es gibt eine Reihe interessanter Praktiken, um die Vorlesungszeichnung in funktionierende Hardware umzuwandeln.
Chris Stratton
1
Unter Open Cores finden Sie viele Beispiele für Open Source-CPU-Kerne.
RBerteig
3
Ich habe ein Beispiel. Wir hatten einen Mikrocontroller für ein altes Produkt veraltet. Wir konnten keinen geeigneten Ersatz-Mikrocontroller mit dem richtigen Mix an Peripheriegeräten finden. Durch die Verwendung eines FPGA mit einem eingebetteten Prozessor konnten wir unseren idealen Mix an Peripheriegeräten auf dem FPGA implementieren.
kkrambo

Antworten:

24

Leistungen:

  • Blitzschnelle Schnittstelle zwischen dem Mikrocontroller und jeder benutzerdefinierten Schnittstelle oder integrierten E / A-Logik.
  • Anpassbare Prozessor- und Debug-Schnittstellen
  • Außerdem ist die Steuerlogik oft einfacher als das Schreiben des Steuercodes mit beispielsweise VHDL

Nachteile:

  • Möglicherweise ist ein teureres FPGA erforderlich, um sowohl den Mikrocontroller als auch die benutzerdefinierte Logik anzupassen, im Vergleich dazu, dass nur die benutzerdefinierte Logik auf dem FPGA vorhanden ist
  • Möglicherweise schwieriger zu implementieren, insbesondere bei Speichern und wenn der Kern komplex ist, als ein fertiger Mikrocontroller auf einem separaten Chip.
PkP
quelle
3
Zusätzlicher Vorteil: einfacheres Design, ein Chip weniger.
DoxyLover
4
Zusätzlicher Nachteil: Lizenzierung von mehr IP
Mikhail
Wie wäre es mit Stromverbrauch als Nachteil?
Craig McQueen
@CraigMcQueen Es ist theoretisch möglich, einen Mikrocontroller in einem FPGA zu generieren, der noch nicht als eigenständige Hardware hergestellt wurde. In diesem Fall gibt es keinen zu vergleichenden Stromverbrauch. In jedem Fall ist es zu gerätespezifisch, um ein allgemeiner Nachteil zu sein.
Mast
Alles sehr gute Kommentare. Und nun, ich würde sagen, dass FPGAs im Allgemeinen einen hohen Stromverbrauch haben, da die logische Auslastung innerhalb einer Makrozelle normalerweise sehr weit von 100% entfernt ist. Dies wird ein wenig durch die Tatsache ausgeglichen, dass FPGAs ausgefeilte Techniken zur Minimierung des Stromverbrauchs verwenden können. Die Herstellungsprozesse (Technologien) können zwischen einem FPGA und einem Prozessor der gleichen Zeit sehr ähnlich sein. Prozessoren haben dedizierte Speicherblöcke sowie FPGAs. Ob diese Ihren Anforderungen entsprechen, hängt davon ab, wie viel Glück Sie haben, ein FPGA zu finden, das genau Ihren Anforderungen entspricht.
PkP
26

Wenn Ihr Projekt ein FPGA für die Grunzarbeit verwenden wird und es über die freie Kapazität verfügt, warum würden Sie dann auf die Kosten eines zusätzlichen Chips gehen, wenn Sie es einfach im FPGA implementieren können?

In vielen prozeduralen Steuerungsumgebungen kann es erheblich einfacher sein, das erforderliche Setup in einer Sprache wie C zu implementieren, als dies in VHDL oder Verilog zu versuchen. Durch Hinzufügen des Mikrocontrollers zum FPGA erhalten Sie das Beste aus beiden Welten - die Leistung von VHDL / Verilog usw. für die Logik- und Schnittstellensysteme und die Einfachheit einer prozeduralen Sprache für die zentralen Steuerungs- und Verwaltungssysteme.

Majenko
quelle
10
Der erste Satz dieser Antwort ist der Hauptgrund. Dies geschieht hauptsächlich, wenn Sie ohnehin bereits ein FPGA mit etwas freier Kapazität auf dem Board haben. (Mindestens) ein Chip weniger und weniger Board-Komplexität. Sie würden ein FPGA nicht einfach auf eine Platine setzen, um einen Mikrocontroller damit zu implementieren, aber wenn Sie bereits ein FPGA haben, können Sie auf diese Weise die Teilekosten und die Platinenkomplexität senken. Zumindest machen wir das deshalb.
Reirab
13

In Ergänzung zu den Antworten von Majenko und PkP:

Dieser Trend, eine CPU in das FPGA-Design einzubetten, hat zu mehreren heterogenen Systemen geführt, wie:

  • Xilinx 'Zynq-7000-Familie
  • Alteras Arria / Cyclon / Stratix-SoC-FPGAs
  • MicroSemis SmartFusion-FPGAs

Auf dem Markt ist auch ein Intel Atom + Altera FPGA-Chip erhältlich: http://www.altera.com/devices/processor/intel/e6xx/proc-e6x5c.html

Die meisten freien Mikrocontroller für FPGA leiden unter einer schlechten Werkzeugkettenunterstützung. Eingebettete ARM-CPUs bieten Trace- / Debug-Unterstützung, Compiler (GCC-Toolkette) und vollständige Linux-Unterstützung. Hier ist eine Umfrage, die auf der FPL 2014 vorgestellt wurde: http://dx.doi.org/10.1109/FPL.2014.6927482

Edit 1:
Es gibt auch die Klasse der PSoC-Geräte (Programmable System on Chip) von Cypress. Zu diesen Geräten gehören ein Mikrocontroller (M8C, 8051, ARM Cortex M0 oder Cortex M3) und klassische integrierte SoC-E / A-Controller oder -Geräte (I²C, SPI, Timer, CAN, DAC, ADC, OpAmp, ...) sowie ein programmierbares Modul Teil. Dieser Teil ist nicht so feinkörnig programmierbar wie klassische FPGAs, kann jedoch zur Implementierung zusätzlicher E / A-Controller oder eingebauter Hardwarebeschleuniger verwendet werden. Mit PSoC können Sie analoge Komponenten in Ihrem Design verwenden.
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

PSoC-Übersicht: PSoC

Paebbels
quelle
10

Wenn Sie nur einen Mikrocontroller benötigen und kein FPGA haben, ist es ungewöhnlich, ein FPGA mit Mikrocontroller-Firmware zu verwenden. Es wachsen jedoch nicht alle Projekte in diese Richtung. Viele Aufgaben benötigen eindeutig ein FPGA, stoßen aber schließlich auf eine Aufgabe, die für eine VHDL-Lösung wirklich nicht geeignet ist. Manchmal wird ein Problem am besten von einer Allzweck-CPU gelöst. Oder manchmal ist es umgekehrt: Einige Aufgaben sind einfach nicht für eine Allzweck-CPU geeignet - sie benötigen Parallelität.

Zu diesem Zeitpunkt haben Sie die Wahl. Sie können entweder einen zusätzlichen Chip zu Ihrem Gerät hinzufügen oder feststellen, dass auf dem FPGA, den Sie nicht verwenden, eine Reihe von Ersatzgates vorhanden sind. Lizenzieren Sie ein wenig IP, und Sie können in kürzester Zeit eine funktionierende Allzweck-CPU haben!

Ein weiteres interessantes Detail ist, dass Sie einige Mikrocontroller-Firmwares anpassen können. Ich kenne Projekte, die einen Power-PC eingebettet haben, aber alle für die Gleitkommaunterstützung erforderlichen Gates entfernt haben, und einen guten Teil der Verzweigungsvorhersage. Dadurch war es so klein, dass es neben der VHDL-basierten Firmware eingesetzt werden konnte.

Cort Ammon - Setzen Sie Monica wieder ein
quelle
9

Es gibt mehrere triftige Gründe, einen Mikroprozessor oder Mikrocontroller in einem FPGA zu instanziieren. Hier sind drei:

  1. Sie möchten nur etwas über die Funktionsweise eines Prozessors erfahren. Mit FPGAs können Sie auf unendliche Weise prüfen, was im Prozessor bei der Ausführung von Code geschieht. Dies ist nur zum Lernen.

  2. Sie implementieren ein großes System, das die Geschwindigkeiten eines FPGA auf Hardware-Ebene erfordert (schneller als die auf einem Mikroprozessor ausgeführte Software). Ihr Design erfordert jedoch eine komplexe Zustandsmaschine, die mithilfe von Software, die auf einem einfachen Prozessor wie dem Xilinx PicoBlaze ausgeführt wird, einfacher implementiert werden kann als in einem Hardware-FSM. Beachten Sie, dass ein PicoBlaze mit den neuesten FPGA-Prozesstechnologien bis zu 240 MHz arbeiten kann und der PicoBlaze-Prozessor alle zwei Taktzyklen einen Befehl ausführt, sodass Sie eine schnelle, konsistente Zustandsmaschine erhalten, die einfach in der Software programmiert werden kann.

  3. Wenn Sie (2) erweitern, benötigen Sie eine Zustandsmaschine, die Interrupts verarbeiten kann. Prozessoren sind dafür sehr gut geeignet, da sie bereits wissen, wie sie den Zustand vor und nach dem Warten des Interrupts sicher speichern und wiederherstellen.

Hier ist eine Einschränkung: Wenn Sie einen schnellen Prozessor mit einem Standardbefehlssatz und einem großen Entwicklungsumfeld benötigen, benötigen Sie einen schnellen Hardcore-Prozessor wie die beiden ARM Cortex-A9 in einem Xilinx Zynq SoC. Die FPGA-Struktur im Zynq SoC ermöglicht es Ihnen weiterhin, mehr Prozessorkerne in programmierbarer Logik zu instanziieren, aber der ARM Cortex-A9 kann Standardbetriebssysteme wie Linux und Standard-IDEs wie Android ausführen.

Zwischen dem ARM Cortex-A9 und PicoBlaze gibt es viele Softprozessoren, die Sie mit programmierbarer Logik aus vielen Quellen implementieren können. Einige Leute lieben es, ihre eigenen Prozessoren zu rollen, und das ist eine großartige pädagogische Aktivität. Mikroprozessoren benötigen jedoch Softwareentwicklungstools, und das Erstellen / Debuggen dieser Tools erfordert einen um Größenordnungen höheren Aufwand als das Erstellen des Prozessors. Sie müssen immer den möglichen Nutzen eines benutzerdefinierten Mikroprozessors gegen die Zeit und den Aufwand abwägen, die zum Erstellen / Debuggen des Prozessorkerns und der Tools erforderlich sind.

Vollständige Offenlegung: Ich arbeite für Xilinx, aber ich bin mir ziemlich sicher, dass FPGAs nicht immer die Lösung sind. Wenn ein 50-Cent-Mikrocontroller das kann, ist das besser. FPGAs und Zynq-SoCs eignen sich für Projekte, bei denen über die Fähigkeiten von Mikrocontrollern hinaus ein hohes Gewicht erforderlich ist.

Steven Leibson
quelle
Herzlich willkommen, Steven!
PkP
1
Gute Antwort, aber wer braucht eine Zustandsmaschine, die mit Unterbrechungen umgehen kann? Interrupts sind ein notwendiges Übel für Fetch-Decode-Execute-Prozessoren, da für die Verarbeitung des externen Stimulus ausschließlich der Prozessor zum Ausführen des ISR erforderlich ist. In einem FPGA wird der externe Stimulus in einem separaten Logikblock behandelt, während die Zustandsmaschine ebenfalls weiterläuft. Keine Notwendigkeit zum Speichern und Wiederherstellen des Status. Grundsätzlich sind Interrupts eine unvollständige Lösung für ein Problem, das HDL überhaupt nicht hat.
Ben Voigt
Sie sind natürlich richtig für Hardware-implementierte Zustandsautomaten, Ben. Sie können den "Interrupt" -Pin immer als einen weiteren State-Machine-Eingang verdrahten. Viele komplexe Zustandsautomaten sind jedoch einfacher zu verstehen, wenn sie mit einem Prozessor ausgeführt werden, auf dem C ausgeführt wird, oder zumindest für einige Entwickler verständlicher. Dann brauchen Sie eine Unterbrechung.
Steven Leibson
2

Manchmal können Sie ein FPGA verwenden, weil Sie Software auf einem veralteten und nicht verfügbaren physischen Prozessor haben, den Sie wiederherstellen möchten. Dies ist zwar nicht pin-kompatibel (obwohl DIP-artige Halterungen zu sehen sind), ermöglicht es Ihnen jedoch, zyklengenau zu arbeiten. Eine reine Software-Emulation auf einem Commodity-Mikroprozessor dürfte es nicht sein. Zum Beispiel apple2fpga

shuckc
quelle