FPGA's vs Microcontroller [geschlossen]


36

Ich habe an der Arduino-Familie (speziell dem Sanguino) gearbeitet, ein paar einfache Geräte und ein einfaches Phototrop gebaut. Ich fühle mich daher ziemlich wohl mit Mikrocontrollern - speziell Atmels. Ich bin gespannt, wie sich FPGAs von Standard-Mikrocontrollern unterscheiden. Ich habe einen technischen Hintergrund (C / C ++ Programmierung) und würde daher gerne technische Antworten bekommen. Denken Sie nur daran, dass ich ein Neuling im Bereich Elektronik bin (relativ zu meiner Erfahrung mit Software). :)

Ich habe diese Abfrage durchgesehen und sie war gut, aber ich suche nach tieferen Details.

Vielen Dank! Sushrut.


Nachtrag - Gibt es in der Praxis gute Beispiele, die Hybridarchitekturen verwenden, also FPGAs mit Mikrocontrollern kombinieren?
Sushrut J Mair

Sushrut J Mair - Wenn Sie im Allgemeinen ein FPGA haben und ein Mikro benötigen, wird das Mikro im FPGA implementiert .
Connor Wolf

Ja, gefälschter Name, vereinbart. Ich suchte jedoch nach realen Fällen, 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 'entwickelbares' H / W zu implementieren, das reagiert und sich verändert, wenn Eingaben in das System geändert werden, während die logische Kernverarbeitung von der MCU durchgeführt wird.
Sushrut J Mair

Antworten:


48

Für den Entwurf eines FPGA ist eine Hardwarebeschreibungssprache (HDL) erforderlich. HDLs sind absolut nichts wie C. Während ein C-Programm eine sequentielle Folge von Befehlen ist und sich verzerren muss, um eine parallele Ausführung zu erzielen, beschreibt eine HDL eine gleichzeitige Schaltung und muss sich verzerren, um eine sequentielle Ausführung zu erzielen. Es ist eine ganz andere Welt, und wenn Sie versuchen, eine Schaltung in einem FPGA aufzubauen, während Sie wie ein Softwareentwickler denken, wird dies schaden.

Eine MCU ist zeitlich begrenzt. Um mehr Arbeit zu erledigen, benötigen Sie mehr Prozessorzyklen. Uhren haben sehr reale Grenzen für ihre Frequenzen, so dass es leicht ist, eine Rechenwand zu treffen. Ein FPGA ist jedoch räumlich begrenzt. Um mehr Arbeit zu erledigen, fügen Sie einfach mehr Schaltkreise hinzu. Wenn Ihr FPGA nicht groß genug ist, können Sie einen größeren kaufen. Es ist sehr schwierig, eine Schaltung zu erstellen, die nicht in das größte FPGA passt, und selbst wenn dies der Fall ist, finden Sie in den App-Hinweisen Beschreibungen, wie FPGAs in Reihe geschaltet werden.

FPGAs konzentrieren sich viel mehr auf die parallele Ausführung. Manchmal müssen Sie sich Gedanken darüber machen, wie lange der ISR Ihrer MCU dauert, um den Interrupt zu bearbeiten, und ob Sie in der Lage sind, Ihre harten Echtzeitgrenzwerte zu erreichen. In einem FPGA laufen jedoch ständig viele Finite-State-Machines (FSM). Sie sind wie "Femto-Controller", wie kleine Wolken der Steuerlogik. Sie laufen alle gleichzeitig, sodass Sie sich keine Sorgen machen müssen, einen Interrupt zu verpassen. Möglicherweise verfügen Sie über ein FSM für die Schnittstelle zu einem ADC, ein weiteres FSM für die Schnittstelle zum Adress- / Datenbus eines Mikrocontrollers, ein weiteres FSM für das Streamen von Daten zu einem Stereocodec und ein weiteres FSM für das Puffern des Datenflusses vom ADC zum Codec Sie müssen einen Simulator verwenden, um sicherzustellen, dass alle FSMs in Harmonie singen.

FPGAs sind der feuchte Traum eines PCB-Layout-Designers. Sie sind extrem konfigurierbar. Sie können über viele verschiedene Logikschnittstellen (LVTTL, LVCMOS, LVDS usw.) mit unterschiedlichen Spannungen und sogar Treiberstärken verfügen (Sie benötigen also keine Serienabschlusswiderstände). Die Stifte sind austauschbar; Haben Sie jemals einen MCU-Adressbus gesehen, bei dem die Stifte auf dem Chip verteilt waren? Ihr Leiterplattenentwickler muss wahrscheinlich eine Reihe von Durchkontaktierungen entfernen, um alle Signale korrekt zusammenzufügen. Mit einem FPGA kann der Leiterplattenentwickler die Signale dann in nahezu beliebiger Reihenfolge in den Chip einspeisen. Anschließend kann das Design in die FPGA-Toolchain übernommen werden.

FPGAs haben auch viele schöne, ausgefallene Spielzeuge. Einer meiner Favoriten ist der Digital Clock Manager in Xilinx-Chips. Sie speisen ein Taktsignal ein und es können vier weitere mit einer Vielzahl von Frequenzvervielfachern und -teilern eingespeist werden, alle mit einem unverfälschten Tastverhältnis von 50% und einer Phasenverschiebung von 100% entsteht durch Ausbreitungsverzögerungen außerhalb des Chips!

BEARBEITEN (Antwort auf Nachtrag):

Sie können einen "Softcore" in ein FPGA einfügen. Sie verkabeln buchstäblich einen Mikrocontroller-Schaltkreis oder lassen wahrscheinlich einen anderen Schaltkreis in Ihr Design einfließen, z. B. PicoBlaze oder MicroBlaze von Xilinx oder Altera's Nios. Aber wie die C-> VHDL-Compiler sind diese Kerne im Vergleich zur Verwendung eines FSM und eines Datenpfads oder eines tatsächlichen Mikrocontrollers etwas aufgebläht und langsam. Die Entwicklungstools können auch den Entwurfsprozess erheblich verkomplizieren, was eine schlechte Sache sein kann, wenn FPGAs bereits äußerst 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 enthält.

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. Bei den FPGAs mit harten Kernen und denjenigen, die groß genug sind, um vernünftige weiche Kerne zu unterstützen, handelt es sich in der Regel um Monster mit vielen hundert Pins, für die ein BGA-Gehäuse erforderlich ist, was die Schwierigkeit beim Entwerfen einer Leiterplatte leicht um den Faktor 10 erhöht.

C ist jedoch viel einfacher, sodass MCUs definitiv mit einem FPGA zusammenarbeiten. Da es einfacher ist, C zu schreiben, schreiben Sie möglicherweise das "Gehirn" oder den zentralen Algorithmus in die MCU, während das FPGA möglicherweise zu beschleunigende Unteralgorithmen implementieren kann. Versuchen Sie, Dinge, die sich ändern, in den C-Code einzufügen, da es einfacher ist, sie zu ändern, und lassen Sie das FPGA als dedizierten Typ zu, der sich nicht oft ändert.

MCU-Designtools sind auch einfacher zu verwenden. Es dauert einige Minuten, bis die Designtools die FPGA-Bitdatei erstellt haben, selbst bei einfachen Designs. Komplexe MCU-Programme benötigen jedoch in der Regel einige Sekunden. Es gibt viel, viel weniger Probleme mit der MCU, daher sind sie auch einfacher zu debuggen ... Ich kann nicht verstehen, 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 einer externen Adresse und einem Datenbus. Dann können Sie einfach die FPGA-Schaltkreise in die MCU einspeichern und Ihre eigenen "Register" hinzufügen, die jeweils ihre eigene Adresse haben. Jetzt kann der FPGA benutzerdefinierte Peripheriegeräte hinzufügen, wie z. B. einen 32-Bit-Timer, der alle 4 Bytes gleichzeitig speichert, wenn das erste Byte gelesen wird, um einen Überlauf zwischen 8-Bit-Lesevorgängen zu verhindern. Sie können es auch als Klebelogik verwenden, um mehr Peripheriegeräte von anderen Chips wie einem separaten ADC zu speichern.

Schließlich sind einige MCUs für die Verwendung mit einem "externen Master" wie einem FPGA ausgelegt. Cypress stellt einige USB-MCUs her, in denen sich eine 8051 befindet. Es ist jedoch beabsichtigt, dass die USB-Daten z. B. von einem FPGA erzeugt / verarbeitet werden.


Das sind gute Infos, danke. Ich habe von C / C ++ zu HDL-Compilern gehört. Hast du sie überhaupt ausprobiert?
Sushrut J Mair

Sie sind ... okay. Für einen einzelnen Logikblock ist es nicht schlecht. Aber ich würde nicht ein ganzes Design durch diese Art von Compiler schreiben. Sie sind nicht zu effizient, weil die Sprachen so unglaublich unterschiedlich sind. Sie müssen spezielle Konventionen verwenden, sie akzeptieren nicht nur alten ANSI C-Code.
Ajs410

Danke, das ist nützlich. Ich habe das XP2 Brevia-Entwicklungskit von Lattice Semiconductor bestellt. Ich beabsichtige, einige HDL-C-Compiler auszuprobieren, sobald ich mit den grundlegenden FPGA-Designkonzepten vertraut bin.
Sushrut J Mair

Ich habe gerade die Antwort auf meinen Nachtrag in der ursprünglichen Anfrage gesehen. Vielen Dank. Wollen Sie damit sagen, dass eine Hybridarchitektur aus einer Standard-MCU und einem FPGA (zumindest mit der heutigen Technologie) nur einen sehr geringen Mehrwert hat, um in realen Situationen wirklich verwendet werden zu können?
Sushrut J Mair

Genial. Danke ajs410. Ich hoffe, ein paar Wochen damit zu verbringen, mich in fpga's hochzufahren, bevor ich in die aufregenden Hybrid-Arch-Möglichkeiten eintauche!
Sushrut J Mair

10

"Beispiele aus der Praxis ... FPGAs mit Mikrocontrollern kombinieren?"

Grundsätzlich kann ein ausreichend großes FPGA alles, was ein FPGA plus ein Mikrocontroller kann - möglicherweise durch Implementierung einer Soft-CPU im FPGA. In der Praxis hat ein bestimmtes Leistungsniveau häufig geringere Teilekosten und erfordert weniger Strom, wenn es mit einem FPGA und einem separaten Mikrocontroller implementiert wird als mit FPGAs allein (oder MCUs allein). Hier sind einige der bekanntesten Geräte mit integrierten FPGAs und Mikrocontrollern:

  • Die Elphel-Kamera ; Das Elphel Project Wiki verfügt über ein Xilinx® Spartan 3e 1200K-FPGA und einen ETRAX FS-Prozessor unter GNU / Linux.
  • Der TS-7500 verfügt über ein 5000-LUT-Lattice-FPGA und eine 250-MHz-Cavium-ARM9-CPU, auf der Linux ausgeführt werden kann.
  • Das Balloon Board verfügt über ein Xilinx Spartan FPGA und eine ARM-CPU
  • Einige kleine Linux-SBCs enthalten sowohl ein FPGA als auch eine CPU
  • Das Armadeus-Projekt-Wiki dokumentiert ein paar Boards, die sowohl mit einem Xilinx Spartan-3-FPGA als auch einer 400-MHz-ARM9-CPU bestückt sind.
  • Das Blackfin Handy Board enthält sowohl ein Xilinx Spartan 3e-FPGA als auch einen Blackfin® ADSP-BF537-Prozessor mit 600 MHz für analoge Geräte. (Es hat keine MMU, kann also kein vollständiges Linux ausführen, aber es kann uClinux ausführen).
  • Das "Minimig" (Mini-Amiga) enthält ein Xilinx Spartan-3-FPGA, eine M68000-CPU und eine kleine PIC-MCU als Disc-Controller.

4

Oft werden FPGAs speziell für Aufgaben eingesetzt, die ein Mikrocontroller nicht effizient ausführen kann, z. B. für hochparallele Vorgänge oder Vorgänge mit geringer Latenz, für den Betrieb in mehreren Taktdomänen oder für benutzerdefinierte Logik mit Hardwaregeschwindigkeit. Als solche erledigen sie das schwere Heben, und Sie brauchen selten eine MCU, um im Design eine zentrale Rolle zu spielen - sie werden möglicherweise zu Verwaltungspositionen verschoben, z. B. zum Laden des Konfigurationsbitstroms. Ein Beispiel hierfür ist der PIC oder ARM im Minimig , der die Speicherschnittstelle implementiert.

Einige Produkte verwischen jedoch die Linien. Einige Beispiele:

  1. In größeren FPGAs sind in der Regel harte CPUs eingebaut (in größeren Projekten werden diese oft benötigt), ebenso wie RAM- und Multiplikatorblöcke
  2. Einige Mikrocontroller zielen auf Parallelbetrieb ab (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Einige Chips sind als Hybride konzipiert (Cypress PSoC, Atmel FPSLIC)

Ausgehend von einem zwingenden Programmierhintergrund ist es eine ziemliche Anpassung des Hardware-Designs, wenn Sie die Vorteile von FPGAs nutzen möchten. Sie werden die Erfahrung jedoch auch an anderer Stelle nützlich finden.


1

Es gibt keinen wirklichen Unterschied zwischen einer MCU wie einem AVR und einer in einem FPGA programmierten. Die OpenCores-Site verfügt über 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 in einem Simulator ausprobieren, ohne ein geeignetes FPGA-Board zu kaufen.


1
Oft stelle ich fest, dass FPGAs für dieselbe MCU mit einer langsameren Taktrate ausgeführt werden müssen, oder sie sind erheblich teurer. Im teureren Fall können Sie problemlos zusätzliche Hardware zwischen dem Controller und den externen Pins implementieren, was sich oftmals lohnt.
Kortuk

Wird im System trotzdem ein FPGA benötigt, ist die MCU "frei".
Leon Heller

1

Mikrocontroller sind digitale Schaltungen, die Befehle aus ihrem Programmspeicher nacheinander ausführen. Die digitale Hardwareschaltung eines Mikrocontrollers ist fest und die Verbindungen zwischen verschiedenen Gattern, aus denen die digitale Schaltung besteht, sind permanent und auf dem Silizium geätzt. Wo als FPGAs können als Pool von digitalen Gates gedacht werden (in der Realität obwohl stattdessen Luts vorhanden sind), die programmierbare Verbindungen haben. Jetzt kann jede digitale Schaltung (sogar ein Mikrocontroller) auf dem FPGA durch Programmieren der Verbindungen hergestellt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.