Ich schicke dir gleich den Anfang eines Artikel zu FPGAs. Extrahiere hieraus bitte die wichtigen Informationen und mache mir daraus Lernkarten (Vorderseite: Frage; Rückseite: kurze Antwort).
Hier der Text:

FPGA
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)

FPGA ist die Abkürzung für "Field Programmable Gate Array".

Es handelt es sich dabei um programmierbare digitale Bausteine mit denen eine Vielzahl von Schaltungen realisiert werden können. 

Aufbau
Grundelemente

Ein FPGA besteht, ähnlich wie ein CPLD, aus vielen Logikelementen, hauptsächlich FlipFlops (FF) und davor gelagerten kombinatorischen Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener Logikgatter (FPGAs der Firma Actel), die über elektronische "Schalter" entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können oder es handelt sich um sogenannte LUTs (Look-Up-Table), mit denen die Logikfunktion explizit realisiert wird.

Eine LUT kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die FlipFlops dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.

Die logischen Schalter und Speicher sind in den meisten FPGAs durch SRAM-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen Flash-ROM-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zu einigen Sekunden, bevor er voll betriebsbereit ist.

Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.

FPGAs mit nichtflüchtigem Speicher basieren auf EEPROM-, Flash-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.
I/O Anschlüsse

FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards, um mit den unterschiedlichen Digitalbausteinen im Markt kommunizieren zu können.
Pegelstandards

Es existieren je nach FPGA-Familie verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL, GTP) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung. Für hohe Taktraten wird sowohl für Daten als auch die Takte der LVDS IO-Standard verwendet. Hier sind zwei komplementäre Buffer in unmittelbarer Nachbarschaft angeordnet.
Signalrichtung

Innerhalb eines FPGAs gibt es nur eine Datenrichtung, d.h. der Ausgang eines Elementes kann nur mit Eingängen verbunden werden, da die FPGA-typischen Optimierungen nur so sinnvoll anwendbar sind. Rückwärtspfade zwischen internen Modulen müssen daher parallel und ausdrücklich aufgebaut werden. Bei den Ports hingegen kann zwischen den Optionen Eingang, Ausgang und Hochohmig gewählt werden. Die dazu benötigten Tristatebuffer werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand "Z" zugewiesen wird. Alternativ kann er explizit als Element eingefügt werden. Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Verzögerungsgliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.
Terminierung

Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, Terminierung wird ebenfalls unterstützt.
Test und Inbetriebnahme

Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der JTAG-Schnittstelle z. B. die Pins zum Einlesen der Konfigurationsdaten. Zudem befinden sich hinter vielen IO-Pads sog. Boundary Scan Zellen.
Takteingänge

Einige wenige Pins (2 - 8) sind zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare Buffer direkt auf Taktnetze / PLLs. Bei leistungsfähigen großen Applikationen mit mehreren Takten müssen diese genutzt werden, da nur eine begrenzte Zahl von DCMs (Digital Clock Manager) zur Verfügung steht und benachbarte IO-Pins genutzt werden müssen. Für hohe Taktraten werden LVDS-Eingänge verwendet.
Verwendung

Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des Verilog/VHDL Codes mit angegeben werden. Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1500 I/Os, die kleinsten bieten ca. 50 User-I/O. Oft werden nur BGA und QFP Gehäuse (bis ca. 240 Pins) angeboten. Umgekehrt kann innerhalb einer Gehäusefamilie hochmigriert werden, d.h. bei gleichbleibendem Pinout, kann ein komplexerer FPGA eingesetzt werden. Das Layout muss dann nicht verändert werden, um eine Schaltung mit mehr Funktionen auszustatten.
Besondere Funktionsblöcke

Neben den LUTs und den FlipFlops beinhalten FPGAs komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente, die es überhaupt erst gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Aufgrund der gestiegenen Anforderungen geht man immer mehr dazu über, häufig benötigte Schaltungsteile fast in Hardware zu integrieren.
DSP-Elemente

Für rechenintensive Designs, z. B. in der Signalverarbeitung, enthalten inzwischen praktisch alle FPGAs dedizierte Multiplizierer auf dem Chip, die in sehr kurzer Zeit, z.B. auch einem einzigen Taktzyklus, breite Multiplikationen durchführen können. Diese müssen daher nicht mehr in Logik aufgebaut werden. Aktuelle MUL-Elemente können z.B. 18x25 Bit in einem Schritt multiplizieren. Außerdem treten noch Carry-Chains, Akkumulatoren und Speicher-FFs hinzu, um direkt lokal schnelle Summierer und Zähler realisieren zu können.
Block-RAMs

Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren RAM-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport RAM-Blöcke von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.
Taktgeneratoren

Zur Erzeugung der internen Takte sind PLLs (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen eine Kombination aus statischen Taktmultiplizierer DLLs (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere Takte abgeleitet werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt bei gleicher Frequenz um eine einstellbare Phase verschoben erzeugt werden. Typische Anwendungen sind die Kompensation von Eingangsbufferverzögerungen, die Ansteuerung von DDR-RAMs oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch Taktung FPGA/CPLD.
CPU im FPGA

Microprozessoren sind auch in FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen deutlich einfacher, schneller und zielführender zu programmieren, da die Strukturen festgelegt und damit bekannt sind. Insbesondere bei langsamen sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird gerne auf eine klassische CPU zurückgegriffen, weil ein eventueller Zeitnachteil wegfällt, aber das Testen des Systems vereinfacht wird. Die CPUs sind teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert.

Als Programmspeicher werden die FPGA-internen RAM-Blöcke oder externe Speicher (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.
Hardcores

Manche FPGAs haben dazu einen oder mehrere Prozessorkerne als HardCores physikalisch auf dem Chip integriert, entweder als Chipstruktur auf dem FPGA-kern selbst oder als gebondeter Chip im selben Gehäuse. So findet man z.B. AVR bei Atmels FPSLIC, PowerPC bei Xilinx' Virtex bzw Dual ARM A9 bei Xilinx' Zynq oder ARM Cortex-M3 bei Actel (Microsemi) SmartFusion, bzw. Dual ARM-CPUs bei Altera. Diese Kerne sind mehr oder weniger funktionell identisch mit den externen Modellen und oftmals mit denselben Werkzeugen zu programmieren und zu testen, d.h. man kann ein komplettes System extern entwickeln und dann auf den FPGA bringen.
Softcores

Auf der anderen Seite gibt es auch SoftCores (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von ACTEL), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese SoftCores beliebig oft instanziiert und auch in der Funktion konfiguriert werden, um sie zu optimieren. Es gibt eine Vielzahl verschiedener SoftCores. Einige sind sehr klein und platzsparend realisiert, damit kann man auch auf vergleichsweise kleinen aktuellen FPGAs problemlos eine 32bit-RISC-CPU integrieren. Der Nutzen der Softcores liegt vor allem darin, daß man vorhandene physische CPUs platzsparend integrieren und alte Systeme beschleunigen kann. Ferner können einfache Interfacefunktionen, die schon in SW vorliegen ohne Portierung in VHDL genutzt werden.