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.