Warum Mikrocontroller in FPGA implementieren?

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

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

Also meine Frage:
Ich würde gerne wissen, was der Zweck solcher Implementierungen ist? Warum einen in FPGA implementierten Mikrocontroller verwenden, anstatt einen Mikro an Bord zu haben? Was sind Vorteile? Und vielleicht auch, was sind Nachteile?

Viele davon verwenden vorgefertigte IP-Kerne, aber das Rollen Ihrer eigenen kann eine großartige Lernerfahrung sein.
@ChrisStratton - Können Sie mehr erzählen oder einen Link zu vorgefertigten IP-Kernen 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.
Die meisten Leute, die es tun, verwenden so etwas wie Microblaze, Picobloze, Nios II usw. - das sind im Grunde Prozessordesigns "in einer Dose" (Bibliothek), die Sie lizenzieren und in Ihr Projekt einfügen können. Der Gegensatz wäre, selbst einen in HDL-Quelle zu entwickeln, vielleicht anhand des Blockdiagramms, das in Ihrer typischen CS101-Vorlesung präsentiert wird. Es gibt eine Reihe interessanter praktischer Aspekte, mit denen man sich auseinandersetzen muss, wenn man die Vorlesungszeichnung in funktionierende Hardware umwandelt.
Unter Open Cores finden Sie viele Beispiele für Open-Source-CPU-Kerne.
Ich habe ein Beispiel. Wir hatten einen Mikrocontroller, der für ein altes Produkt veraltet war. Wir konnten keinen passenden Ersatz-Mikrocontroller mit der richtigen Mischung an Peripheriegeräten finden. Durch die Verwendung eines FPGA mit einem eingebetteten Prozessor konnten wir unsere ideale Mischung von Peripheriegeräten auf dem FPGA implementieren.

Antworten (6)

Leistungen:

  • blitzschnelle Schnittstelle zwischen dem Mikrocontroller und jeder benutzerdefinierten Schnittstelle oder E/A-Logik auf dem Chip.
  • Anpassbare Prozessor- und Debug-Schnittstellen
  • auch oft einfachere Steuerlogik als das Schreiben des Steuercodes mit, sagen wir, VHDL

Nachteile:

  • Möglicherweise ist ein teureres FPGA erforderlich, um sowohl den Mikrocontroller als auch die kundenspezifische Logik unterzubringen, im Vergleich dazu, nur die kundenspezifische Logik auf dem FPGA zu haben
  • Möglicherweise schwieriger zu implementieren, insbesondere bei Speichern und wenn der Kern komplex ist, als ein fertiger Mikrocontroller auf einem separaten Chip.
Zusatznutzen: einfacheres Design, ein Chip weniger.
Zusätzlicher Nachteil: Lizenzierung von mehr IP
Was ist mit dem Stromverbrauch als Nachteil?
@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 vergleichbaren Stromverbrauch. In jedem Fall ist es zu gerätespezifisch, um eine allgemeine Vor-/Nachteil zu sein.
Alles sehr gute Kommentare. Und nun, ich würde sagen, dass FPGAs im Allgemeinen einen großen Stromverbrauch haben, weil die Logikauslastung normalerweise sehr weit von 100 % innerhalb einer Makrozelle entfernt ist. Dies wird ein wenig durch die Tatsache ausgeglichen, dass FPGAs ausgeklügelte Energieminimierungstechniken verwenden können. Die Herstellungsprozesse (Technologien) können zwischen einem FPGA und einem Prozessor der gleichen Ära ziemlich ähnlich sein. Prozessoren haben dedizierte Speicherblöcke sowie FPGAs. Ob diese Ihren Anforderungen entsprechen, hängt davon ab, wie glücklich Sie sind, ein FPGA zu finden, das genau Ihren Anforderungen entspricht.

Wenn Ihr Projekt ein FPGA für die Grundarbeit verwenden wird und es über die freie Kapazität verfügt, warum sollten Sie dann die Kosten für einen zusätzlichen Chip auf sich nehmen, wenn Sie es einfach in das FPGA implementieren können?

Für viele prozedurale Steuerungsumgebungen kann es wesentlich einfacher sein, das erforderliche Setup in einer Sprache wie C zu implementieren, als es in VHDL oder Verilog zu versuchen. Durch Hinzufügen des Mikrocontrollers zum FPGA erhalten Sie das Beste aus beiden Welten – die Leistungsfähigkeit von VHDL/Verilog usw. für die Logik- und Schnittstellensysteme und die Einfachheit einer prozeduralen Sprache für die Kernsteuerungs- und Verwaltungssysteme.

Der erste Satz dieser Antwort ist der Hauptgrund. Dies geschieht hauptsächlich dann, wenn Sie sowieso bereits ein FPGA mit etwas freier Kapazität auf der Platine haben. (Mindestens) ein Chip weniger und weniger Platinenkomplexität. Sie würden kein FPGA auf ein Board packen, nur um damit einen Mikrocontroller zu implementieren, aber wenn Sie bereits ein FPGA haben, ist es eine gute Möglichkeit, die Teilekosten und die Komplexität des Boards zu reduzieren. Zumindest tun wir das deshalb.

Ergänzend zu den Antworten von Majenko und PkP:

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

  • Die Zynq-7000-Familie von Xilinx
  • Arria/Cyclon/Stratix SoC-FPGAs von Altera
  • SmartFusion-FPGAs von MicroSemi

Es gibt auch einen Intel Atom + Altera FPGA-Chip auf dem Markt: http://www.altera.com/devices/processor/intel/e6xx/proc-e6x5c.html

Die meisten freien Mikrocontroller für FPGA leiden unter einer schlechten Toolchain-Unterstützung. Eingebettete ARM-CPUs verfügen über Trace-/Debug-Unterstützung, Compiler (gcc-Toolkette) und volle Linux-Unterstützung. Hier ist eine Umfrage, die auf der FPL 2014 präsentiert wurde: http://dx.doi.org/10.1109/FPL.2014.6927482

Bearbeiten 1:
Es gibt auch die Klasse der PSoC-Geräte (Programmable System on Chip) von Cypress. Diese Geräte umfassen einen Mikrocontroller (M8C, 8051, ARM Cortex M0 oder Cortex M3) und klassische SoC-integrierte E/A-Controller oder -Geräte (I²C, SPI, Timer, CAN, DAC, ADC, OpAmp, ...) und einen programmierbaren Teil. Dieser Teil ist nicht so detailliert programmierbar wie klassische FPGAs, aber er kann verwendet werden, um zusätzliche I/O-Controller zu implementieren oder Hardwarebeschleuniger zu bauen. Mit PSoC können Sie analoge Komponenten in Ihrem Design verwenden.
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

PSoC-Übersicht: (Quelle: electronicdesign.com )PSoC

Wenn Sie nur einen Mikrocontroller benötigen und kein FPGA haben, wäre es ungewöhnlich, ein FPGA mit Mikrocontroller-Firmware zu verwenden. Allerdings wachsen nicht alle Projekte in diese Richtung. Viele Aufgaben haben einen klaren Bedarf an einem FPGA, stoßen aber irgendwann auf eine Aufgabe, die wirklich nicht für eine VHDL-Lösung geeignet ist. Manchmal wird ein Problem einfach am besten von einer Allzweck-CPU gehandhabt. Oder manchmal ist es umgekehrt: Einige Aufgaben sind einfach nicht für eine Allzweck-CPU geeignet – sie brauchen Parallelität.

Zu diesem Zeitpunkt haben Sie die Wahl. Sie können Ihrem Gerät entweder einen zusätzlichen Chip hinzufügen oder feststellen, dass Sie auf dem FPGA, das Sie nicht verwenden, eine Reihe von Ersatzgates haben. 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 Gatter und einen guten Teil der Verzweigungsvorhersage entfernt haben. Dadurch wurde es klein genug, um Seite an Seite mit der VHDL-basierten Firmware zu passen.

Es gibt mehrere triftige Gründe für die Instanziierung eines Mikroprozessors oder Mikrocontrollers in einem FPGA. Hier sind drei:

  1. Sie möchten nur etwas über die Funktionsweise eines Prozessors erfahren. FPGAs bieten Ihnen unendliche Möglichkeiten, um zu untersuchen, was im Inneren des Prozessors passiert, während dieser Code ausführt. Das ist nur zum Lernen.

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

  3. Wenn Sie (2) erweitern, benötigen Sie eine Zustandsmaschine, die Interrupts verarbeiten kann. Prozessoren sind dafür wirklich gut, weil sie bereits wissen, wie sie den Zustand vor und nach der Bedienung des Interrupts sicher speichern und wiederherstellen können.

Hier ist eine Einschränkung: Wenn Sie einen schnellen Prozessor mit einem Standardbefehlssatz und einem großen Entwicklungsökosystem wollen, dann wollen Sie einen schnellen Hardcore-Prozessor wie die beiden ARM Cortex-A9s in einem Xilinx Zynq SoC. Die FPGA-Fabric im Zynq SoC ermöglicht es Ihnen immer noch, mehr Prozessorkerne in programmierbarer Logik zu instanziieren, aber die ARM Cortex-A9s können 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 rollen gerne ihre eigenen Prozessoren und das ist eine großartige pädagogische Aktivität. Mikroprozessoren benötigen jedoch Softwareentwicklungstools, und das Erstellen/Debuggen dieser Tools erfordert um Größenordnungen mehr Aufwand als das Erstellen des Prozessors selbst. Sie müssen den möglichen Nutzen eines benutzerdefinierten Mikroprozessors immer 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, bin mir aber ziemlich sicher, dass ich nicht gesagt habe, dass FPGAs immer die Lösung sind. Wenn ein 50-Cent-Mikrocontroller die Arbeit erledigen kann, ist es besser, ihn zu verwenden. FPGAs und Zynq-SoCs sind für Projekte gedacht, die schwere Lasten erfordern, die über die Fähigkeiten von Mikrocontrollern hinausgehen.

Herzlich willkommen, Stefan!
Gute Antwort, aber wer braucht eine Zustandsmaschine, die Interrupts verarbeiten kann? Interrupts sind ein notwendiges Übel für Prozessoren zum Abrufen, Decodieren und Ausführen, da das Handhaben des externen Stimulus die ausschließliche Verwendung des Prozessors erfordert, um die ISR auszuführen. 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 Zustands. Grundsätzlich sind Interrupts eine unvollkommene Lösung für ein Problem, das HDL überhaupt nicht hat.
Sie haben natürlich Recht mit Hardware-implementierten Zustandsmaschinen, Ben. Sie können den "Interrupt"-Pin immer als weiteren State-Machine-Eingang verdrahten. Viele komplexe Zustandsautomaten sind jedoch einfach verständlicher, wenn sie mit einem Prozessor implementiert werden, auf dem C ausgeführt wird, oder zumindest für einige Entwickler verständlicher. Dann brauchen Sie eine Unterbrechung.

Manchmal verwenden Sie möglicherweise ein FPGA, weil Sie Software haben, die auf einem längst veralteten und nicht verfügbaren physischen Prozessor läuft, den Sie wiederbeleben möchten. Obwohl es nicht pinkompatibel ist (obwohl Halterungen im DIP-Stil gesehen wurden), können Sie damit zyklusgenau sein. Eine reine Software-Emulation auf einem handelsüblichen Mikroprozessor ist dies wahrscheinlich nicht. Zum Beispiel apple2fpga