FPGAs vs. Mikrocontroller [geschlossen]

Ich habe an der Arduino-Familie (insbesondere dem Sanguino) gearbeitet, ein paar einfache Geräte und ein einfaches Fototrop gebaut. Ich bin daher ziemlich vertraut mit Mikrocontrollern - insbesondere Atmels. Ich bin neugierig zu wissen, wie sich FPGAs von Standard-Mikrocontrollern unterscheiden. Ich habe einen technischen Hintergrund (C/C++-Programmierung) und würde mich daher über technische Antworten freuen. Denken Sie nur daran, dass ich ein Neuling (relativ zu meiner SW-Erfahrung) im Elektronikbereich bin. :)

Ich bin diese Abfrage durchgegangen und sie war gut, aber ich suche nach weiteren tieferen Details.

Danke! Suschrut.

Nachtrag - Gibt es gute Beispiele in der realen Welt, die hybride Architekturen verwenden, dh FPGAs mit Mikrocontrollern kombinieren?
Sushrut J. Mair – Im Allgemeinen, wenn Sie ein FPGA haben und ein Mikro benötigen, wird das Mikro im FPGA implementiert.
Ja, falscher Name, einverstanden. Ich habe jedoch nach realen Fällen gesucht, in denen sowohl FPGAs als auch MCUs zum Entwerfen eines Systems verwendet werden. Die Idee ist, dass der FPGA-Teil des Designs verwendet wird, um „evolvierbares“ H/W zu implementieren, das auf sich ändernde Eingaben in das System reagiert und sich verändert, während die logische Kernverarbeitung von der MCU durchgeführt wird.

Antworten (5)

Das Entwerfen für ein FPGA erfordert eine Hardwarebeschreibungssprache (HDL). HDLs sind absolut nichts wie C. Während ein C-Programm eine sequentielle Reihe von Anweisungen ist und sich selbst verzerren muss, um eine parallele Ausführung zu erreichen, beschreibt eine HDL eine gleichzeitige Schaltung und muss sich selbst verzerren, um eine sequentielle Ausführung zu erreichen. Es ist eine ganz andere Welt und wenn Sie versuchen, eine Schaltung in einem FPGA zu bauen, während Sie wie ein Softwareentwickler denken, wird es wehtun.

Eine MCU ist zeitlich begrenzt. Um mehr Arbeit zu leisten, benötigen Sie mehr Prozessorzyklen. Uhren haben sehr reale Grenzen in Bezug auf ihre Frequenzen, daher ist es leicht, an eine Rechenwand zu stoßen. Ein FPGA ist jedoch platzbeschränkt. Um mehr Arbeit zu leisten, fügen Sie einfach weitere Schaltungen hinzu. Wenn Ihr FPGA nicht groß genug ist, können Sie ein größeres kaufen. Es ist sehr schwierig, eine Schaltung zu bauen, die nicht in das größte FPGA passt, und selbst wenn Sie dies tun, gibt es App-Hinweise, die beschreiben, wie FPGAs in Reihe geschaltet werden können.

FPGAs konzentrieren sich viel mehr auf die parallele Ausführung. Manchmal müssen Sie sich Gedanken darüber machen, wie lange die ISR Ihrer MCU braucht, um den Interrupt zu bedienen, und ob Sie in der Lage sein werden, Ihre harten Echtzeitgrenzen zu erreichen. In FPGA laufen jedoch ständig viele Finite State Machines (FSM). Sie sind wie "Femto-Controller", wie kleine Wolken aus Steuerlogik. Sie laufen alle gleichzeitig, sodass Sie sich keine Sorgen machen müssen, einen Interrupt zu verpassen. Möglicherweise haben Sie einen FSM als Schnittstelle zu einem ADC, einen anderen FSM als Schnittstelle zum Adress-/Datenbus eines Mikrocontrollers, einen weiteren FSM zum Streamen von Daten an einen Stereo-Codec, noch einen weiteren FSM zum Puffern des Datenflusses vom ADC zum Codec ... Sie müssen einen Simulator verwenden, um sicherzustellen, dass alle FSMs harmonisch singen.

FPGAs sind der feuchte Traum eines PCB-Layout-Designers. Sie sind extrem konfigurierbar. Sie können viele verschiedene Logikschnittstellen (LVTTL, LVCMOS, LVDS usw.) mit unterschiedlichen Spannungen und sogar Treiberstärken haben (Sie benötigen also keine Reihenabschlusswiderstände). Die Stifte sind austauschbar; Haben Sie jemals einen MCU-Adressbus gesehen, bei dem die Pins um den Chip herum verstreut waren? Ihr PCB-Designer muss wahrscheinlich eine Reihe von Durchkontaktierungen fallen lassen, nur um alle Signale korrekt miteinander zu verbinden. Mit einem FPGA kann der PCB-Designer die Signale dann in praktisch jeder geeigneten Reihenfolge in den Chip einspeisen, und dann kann das Design an die FPGA-Toolkette zurückkommentiert werden.

FPGAs haben auch viele schöne, ausgefallene Spielzeuge. Einer meiner Favoriten ist der Digital Clock Manager in Xilinx-Chips. Sie speisen ihn mit einem Taktsignal, und er kann daraus vier weitere ableiten, indem er eine Vielzahl von Frequenzmultiplikatoren und -teilern verwendet, alle mit einem makellosen Tastverhältnis von 50 % und 100 % in Phase ... und er kann sogar den Taktversatz berücksichtigen entsteht durch Laufzeitverzögerungen außerhalb des Chips!

EDIT (Antwort auf Nachtrag):

Sie können einen "weichen Kern" in einem FPGA platzieren. Sie verdrahten buchstäblich einen Mikrocontroller-Schaltkreis, oder vielmehr lassen Sie wahrscheinlich den Schaltkreis eines anderen in Ihr Design fallen, wie PicoBlaze oder MicroBlaze von Xilinx oder Nios von Altera. Aber wie die C->VHDL-Compiler sind diese Kerne im Vergleich zur Verwendung eines FSM und eines Datenpfads oder eines tatsächlichen Mikrocontrollers tendenziell etwas aufgebläht und langsam. Die Entwicklungstools können den Designprozess auch erheblich komplexer machen, was eine schlechte Sache sein kann, wenn FPGAs bereits extrem komplexe Chips sind.

Es gibt auch einige FPGAs, in die „harte Kerne“ eingebettet sind, wie die Virtex4-Serie von Xilinx, die einen echten, dedizierten IBM PowerPC mit FPGA-Fabric um sich herum haben.

EDIT2 (Antwort auf Kommentar):

Ich glaube, ich verstehe jetzt ... Sie fragen nach dem Anschluss einer diskreten MCU an ein FPGA. dh zwei getrennte Chips. Dafür gibt es gute Gründe; Die FPGAs mit harten Kernen und diejenigen, die groß genug sind, um anständige weiche Kerne zu unterstützen, sind normalerweise Monster mit vielen hundert Pins, die am Ende ein BGA-Gehäuse erfordern, was die Schwierigkeit beim Entwerfen einer Leiterplatte leicht um den Faktor 10 erhöht.

C ist jedoch viel einfacher, sodass MCUs definitiv ihren Platz in der Zusammenarbeit mit einem FPGA haben. Da es einfacher ist, C zu schreiben, könnten Sie das „Gehirn“ oder den zentralen Algorithmus in der MCU schreiben, während das FPGA Teilalgorithmen implementieren kann, die möglicherweise beschleunigt werden müssen. Versuchen Sie, Dinge, die sich ändern, in den C-Code zu packen, weil es einfacher ist, sie zu ändern, und lassen Sie das FPGA dedizierteres Zeug, das sich nicht oft ändert.

MCU-Designtools sind auch einfacher zu verwenden. Es dauert mehrere Minuten, bis die Designtools die FPGA-Bitdatei erstellt haben, selbst bei etwas einfachen Designs, aber komplexe MCU-Programme dauern normalerweise einige Sekunden. Mit der MCU kann viel, viel weniger schief gehen, daher sind sie auch einfacher zu debuggen ... Ich kann nicht genug betonen, wie komplex FPGAs sein können. Sie müssen wirklich das Datenblatt für das haben, das Sie haben, und Sie sollten versuchen, jede Seite davon zu lesen. Ich weiß, es sind ein paar hundert Seiten ... mach es trotzdem.

Der beste Weg, sie anzuschließen, ist die Verwendung einer MCU mit externem Adress- und Datenbus. Dann können Sie die FPGA-Schaltungen einfach in die MCU speicherzuordnen und Ihre eigenen "Register" hinzufügen, die jeweils ihre eigene Adresse haben. Jetzt kann das FPGA benutzerdefinierte Peripheriegeräte hinzufügen, wie z. B. einen 32-Bit-Timer, der alle 4 Bytes auf einmal zwischenspeichern kann, wenn das erste Byte gelesen wird, um Überläufe zwischen 8-Bit-Lesevorgängen zu verhindern. Sie können es auch als Klebelogik verwenden, um mehr Peripheriegeräte von anderen Chips wie einen separaten ADC zu speicherzuordnen.

Schließlich sind einige MCUs für die Verwendung mit einem „externen Master“ wie einem FPGA ausgelegt. Cypress stellt einige USB-MCUs her, die einen 8051 enthalten, aber beabsichtigt ist, dass die USB-Daten beispielsweise von einem FPGA produziert/konsumiert werden.

Das ist eine gute Info, danke. Ich habe von C/C++ zu HDL-Compilern gehört. Hast du sie überhaupt probiert?
Sie sind ... in Ordnung. Für einen einzelnen Logikblock ist es nicht so schlimm. Aber ich würde kein ganzes Design über diese Art von Compiler schreiben. Sie sind nicht sehr effizient, weil die Sprachen so unglaublich unterschiedlich sind ... Sie müssen spezielle Konventionen verwenden, sie nehmen nicht einfach irgendeinen alten ANSI-C-Code.
Danke, das ist nützlich. Ich habe das Entwicklungskit XP2 Brevia von Lattice Semiconductor bestellt. Ich beabsichtige, einige HDL-zu-C-Compiler auszuprobieren, sobald ich mit den grundlegenden FPGA-Designkonzepten vertraut bin.
Ich habe gerade die Antwort auf meinen Nachtrag in der ursprünglichen Abfrage gesehen. Danke - sagen Sie also, dass praktisch (zumindest mit der heutigen Technologie) eine Hybridarchitektur aus einer Standard-MCU + einem FPGA sehr wenig Mehrwert hat, um in realen Situationen wirklich verwendbar zu sein?
Genial. Danke ajs410. Ich hoffe, dass ich ein paar Wochen damit verbringen kann, mich in FPGAs hochzuladen, bevor ich mich mit den aufregenden Hybrid-Arch-Möglichkeiten befasse!

"Beispiele in der realen Welt ... die Kombination von FPGAs mit Mikrocontrollern?"

Im Prinzip kann ein ausreichend großes FPGA allein alles tun, was ein FPGA plus ein Mikrocontroller können – vielleicht durch die Implementierung einer Soft-CPU innerhalb des FPGA. In der Praxis hat ein bestimmtes Leistungsniveau oft niedrigere Teilekosten und erfordert weniger Strom, wenn es mit einem FPGA und einem separaten Mikrocontroller implementiert wird, als mit FPGAs allein (oder nur MCUs). Hier sind einige der bekannteren Geräte mit integrierten FPGAs und Mikrocontrollern:

  • Die Elphel-Kamera ; Elphel Project Wiki hat ein Xilinx (R) Spartan 3e 1200K Gates FPGA und einen ETRAX FS Prozessor, auf dem GNU/Linux läuft.
  • Das TS-7500 verfügt über ein 5000-LUT-Lattice-FPGA und eine 250-MHz-Cavium-ARM9-CPU, die Linux ausführen kann.
  • Das Balloon-Board verfügt über ein Xilinx Spartan FPGA und eine ARM-CPU
  • Einige Teeny-Weeny-Linux-SBCs enthalten sowohl ein FPGA als auch eine CPU
  • Das Wiki des Armadeus-Projekts dokumentiert einige Boards, die sowohl mit einem Xilinx Spartan-3 FPGA als auch mit einer 400-MHz-ARM9-CPU ausgestattet sind.
  • Das Blackfin Handy Board enthält sowohl ein Xilinx Spartan 3e FPGA als auch einen 600 MHz Analog Devices Blackfin® ADSP-BF537 Prozessor. (Es hat keine MMU, daher kann es kein vollständiges Linux ausführen, aber es kann uClinux ausführen).
  • Der "Minimig" (Mini-Amiga) enthält ein Xilinx Spartan-3 FPGA, eine M68000-CPU und eine kleine PIC-MCU als fungierenden Disc-Controller.

Oft werden FPGAs speziell für Aufgaben verwendet, die ein Mikrocontroller nicht effizient erledigen kann, wie z. B. hochgradig parallele Operationen oder Operationen mit geringer Latenz, Betrieb in mehreren Taktdomänen oder benutzerdefinierte Logik mit Hardwaregeschwindigkeit. Als solche übernehmen sie die schwere Arbeit, und Sie benötigen selten eine MCU als zentralen Bestandteil des Designs – sie können in Verwaltungspositionen versetzt werden, z. B. zum Laden des Konfigurationsbitstroms. Ein Beispiel dafür ist der PIC oder ARM im Minimig , der die Speicherschnittstelle implementiert.

Einige Produkte verwischen jedoch die Grenzen. Einige Beispiele:

  1. Größere FPGAs haben in der Regel harte CPUs eingebaut (größere Projekte brauchen sie oft sowieso), genauso wie sie RAM und Multiplikatorblöcke haben
  2. Einige Mikrocontroller zielen auf Parallelbetrieb ab (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Einige Chips sind als Hybride ausgelegt (Cypress PSoC, Atmel FPSLIC)

Ausgehend von einem zwingenden Programmierhintergrund ist es eine ziemliche Anpassung an das Design in Hardware, da Sie die Vorteile von FPGAs nutzen müssen. Sie werden die Erfahrung jedoch auch anderswo nützlich finden.

Es gibt keinen wirklichen Unterschied zwischen einer MCU wie einem AVR und einer, die in ein FPGA programmiert ist. Die OpenCores-Site enthält VHDL-Code für einen AVR , der in einem FPGA verwendet werden kann. Sie können es studieren und sehen, wie es funktioniert, und es sogar selbst in einem Simulator ausprobieren, ohne ein geeignetes FPGA-Board zu kaufen.

Oft finde ich, dass FPGAs für die gleiche MCU mit einer langsameren Taktrate laufen müssen, oder sie werden deutlich teurer. Im teureren Fall können Sie problemlos zusätzliche Hardware zwischen dem Controller und den externen Pins implementieren, was sich oft durchaus lohnt.
Wenn ohnehin ein FPGA im System benötigt wird, ist die MCU „kostenlos“.

Mikrocontroller sind digitale Schaltungen, die Befehle aus ihrem Programmspeicher sequentiell einen Befehl nach dem anderen ausführen. Die digitale Hardwareschaltung eines Mikrocontrollers ist fest und die Verbindungen zwischen verschiedenen Gattern, aus denen die digitale Schaltung besteht, sind dauerhaft und auf das Silizium geätzt. Wobei FPGAs als ein Pool digitaler Gates gedacht werden können (in Wirklichkeit sind stattdessen Luts vorhanden), die über programmierbare Verbindungen verfügen. Jetzt kann jede digitale Schaltung (sogar ein Mikrocontroller) auf dem FPGA hergestellt werden, indem die Verbindungen programmiert werden.