Was passiert, wenn ein FPGA „programmiert“ wird?

Soweit ich weiß, besteht der Prozess der Programmierung eines FPGA aus zwei Teilen:

  1. Codieren Sie die Hardwarebeschreibung in Bits, die der FPGA verstehen kann (dh schreiben Sie etwas HDL und kompilieren Sie es).
  2. Laden Sie das kompilierte HDL auf das FPGA.

Meine Frage ist: "Was macht der FPGA mit dem kompilierten HDL?". Im Moment betrachte ich FPGAs als "formbare Hardware", bei der Drähte und Logikgatter nach Belieben geformt werden können. Eines der schönen Dinge ist, dass die Formbarkeit dauerhaft ist: FPGAs können umprogrammiert werden.

Wie interpretieren FPGAs kompiliertes HDL? Wie wird die dauerhafte Formbarkeit erreicht?

Es ist eigentlich nicht dauerhaft - der FPGA-Bitstrom muss jedes Mal, wenn Strom angelegt wird, aus dem EEPROM neu geladen werden. CPLDs haben dieses Problem nicht, und einige FPGAs haben ein eingebautes EEPROM, das ihren Bitstream bei jedem Einschalten lädt.
Ich denke, er meint "Formbarkeit ist dauerhaft", dh das Programm selbst ist nicht dauerhaft.

Antworten (4)

Deiner anderen Frage nach zu urteilen, bist du ein Xilinx-Typ. Ich empfehle daher dringend, das Datenblatt für Ihren Xilinx-Chip zu besorgen und zum Kapitel Funktionsbeschreibung zu gehen. Für den Spartan 3-Chip, den ich verwende, sind es 42 Seiten Spaß beim Lesen. Es beschreibt genau, welche Komponenten sich in einem FPGA befinden – IOBs, CLBs, Slices, LUTs, Block-RAM, Multiplikatoren, Digital Clock Manager, Clock Network, Interconnect und einige sehr grundlegende Konfigurationsinformationen. Sie müssen diese Informationen verstehen, wenn Sie wissen möchten, wie ein "kompiliertes HDL" aussieht.

Sobald Sie mit der Architektur Ihres FPGAs vertraut sind, können Sie diesen Prozess verstehen. Zuerst wird Ihr HDL-Design durch die Synthese-Engine geleitet, die Ihr HDL im Wesentlichen in RTL umwandelt. Dann verarbeitet der Mapper die Ergebnisse aus der Synthese, indem er sie auf die verfügbaren Teile der FPGA-Architektur „abbildet“. Dann führt der Router Place And Route (PAR) durch, der herausfindet, wohin diese Teile gehen und wie sie verbunden werden. Schließlich werden die Ergebnisse von PAR in eine BIT-Datei umgewandelt. Typischerweise wird diese BIT-Datei dann auf irgendeine Weise transformiert, damit sie in einen Flash-Chip geladen werden kann, damit das FPGA beim Einschalten automatisch programmiert werden kann.

Diese Bitdatei beschreibt das gesamte FPGA-Programm. Beispielsweise bestehen die CLBs in einem Spartan 3 aus Slices, die aus LUTs bestehen, die nur 16-Adressen-1-Bit-SRAMs sind. Eine Sache, die die BIT-Datei enthalten wird, ist also genau, welche Daten in jede Adresse des SRAM gehen. Eine andere Sache, die die BIT-Datei enthält, ist, wie jeder Eingang der LUT mit der Verbindungsmatrix verdrahtet ist. Die BIT-Datei enthält auch die Anfangswerte, die in den Block-RAM gehen. Es wird beschrieben, was mit den Setz- und Rücksetzpins jedes Flipflops in jedem Slice verbunden ist. Es wird beschrieben, wie die Übertragskette verbunden ist. Es wird die logische Schnittstelle für jeden IOB (LVTTL, LVCMOS, LVDS usw.) beschreiben. Es werden alle integrierten Pull-up- oder Pull-down-Widerstände beschrieben. Im Grunde alles.

Bei Xilinx wird der Speicher des FPGA gelöscht, wenn die Konfiguration eingeleitet wird (dh PROG_B wird geltend gemacht). Sobald der Speicher gelöscht ist, geht INIT_B hoch, um anzuzeigen, dass die Phase abgeschlossen ist. Die BIT-Datei wird dann entweder über JTAG oder die Flash-Chip-Schnittstelle geladen. Sobald das Programm geladen ist, wird das Global Set/Reset (GSR) gepulst, wodurch alle Flip-Flops in ihren Anfangszustand zurückgesetzt werden. Der DONE-Pin geht dann auf High, um anzuzeigen, dass die Konfiguration abgeschlossen ist. Genau einen Taktzyklus später wird das Global Three-State Signal (GTS) freigegeben, wodurch Ausgänge angesteuert werden können. Genau einen Taktzyklus später wird die globale Schreibfreigabe (GWE) freigegeben, wodurch die Flip-Flops beginnen können, den Zustand als Reaktion auf ihre Eingaben zu ändern. Beachten Sie, dass sogar dieser abschließende Konfigurationsprozess abhängig von Flags, die in der BIT-Datei gesetzt sind, leicht umgeordnet werden kann.

BEARBEITEN:

Ich sollte auch hinzufügen, dass der Grund, warum das FPGA-Programm nicht permanent ist, darin besteht, dass die Logikstruktur aus flüchtigem Speicher (z. B. SRAM) besteht. Wenn also das FPGA an Leistung verliert, wird das Programm vergessen. Deshalb benötigen sie zB Flash-Chips als nichtflüchtigen Speicher für das FPGA-Programm, damit es geladen werden kann, wenn das Gerät eingeschaltet wird.

Das Kompilieren des HDL führt zu einem Bitmuster, das angibt, welche Verbindungen innerhalb des FPGA aktiviert werden sollen. Das FPGA muss das HDL nicht mehr interpretieren. Das Bitmuster wird in einen Flash/EEPROM eines seriellen Laders programmiert, und beim Booten wird dieses Muster in das FPGA verschoben, wodurch die erforderlichen Verbindungen hergestellt werden.

SYNTHESE bedeutet drei Phrasen 1. Netzlistengenerierung 2. Gate-Level-Optimierung 3. Technologie-Mapping.

Das Ergebnis der Kompilierung ist ein Bitstrom (buchstäblich ein Strom von Bits), der nach dem Einschalten geladen wird. Dies verschiebt sich durch das FPGA, das in einigen Speicherzellen (Latches) gespeichert wird. Diese Zellen sind mit verschiedenen logischen Einheiten, Multiplexern, Nachschlagetabellen, RAM-Blöcken, Routing-Matrizen verbunden und bilden das, was die "Konfiguration" genannt wird. Sobald der Bitstrom geladen ist, beginnt das FPGA zu arbeiten – die Bits in den Konfigurations-Latches „sagen“ jedem kleinen Teil des FPGA, wie es zu arbeiten hat.

EDIT 24. April 2012: Die von mir erwähnten Flip-Flops sind nicht für die Nachschlagetabellen oder deren Konfiguration. Wie @ajs410 sagte, befinden sich diese im RAM, was noch weniger Transistoren sind. Die Flip-Flops dienen zur Speicherung der Daten aus der LUT, wenn diese Speicherung aktiviert ist.

Wie viel der Schaltung in einem typischen FPGA besteht aus tatsächlicher Logik und Routing, und wie viel ist Programmierunterstützung?
Technisch gesehen sind die "Speicherzellen" Flip-Flops, keine Latches. Dh sie sind flankengetriggert.
@BrianCarlton: Werden Flip-Flops wirklich für alle Programmspeicherzellen verwendet? Nach meinem Verständnis benötigen Flip-Flops etwas in der Größenordnung von 12-16 MOSFETs pro Bit; im Gegensatz dazu erfordern andere vollstatische Techniken zum Zwischenspeichern von Daten nur 5–8.
Eine LUT besteht typischerweise aus SRAM. Die Flip-Flops sind an den Ausgang des SRAM angeschlossen.
@supercat: Ich habe gehört, dass 90% eines FPGAs Routing sind ... der Rest ist Logik und Konfiguration - ich kann jedoch keine Referenz schnell finden :(

Der Standardbegriff für ein FPGA ist „Konfiguration“ und nicht „Programmierung“. Das FPGA ist normalerweise ein SRAM-basiertes Gerät. Ein SRAM speichert Bits, die angeben, welche Verbindungen innerhalb der "Logikstruktur" des Geräts gebildet und unterbrochen werden. Wenn die Konfiguration auftritt, wird ein Strom von Bits an das FPGA gesendet, das in diesen SRAM schreibt. Wenn das SRAM-basierte FPGA ausgeschaltet wird, werden die SRAM-Daten gelöscht und wenn das FPGA eingeschaltet wird, muss es erneut konfiguriert werden.

Jetzt wissen Sie, es gibt verschiedene Methoden zum "Konfigurieren" und FPGA, und daher existieren verschiedene Formate von Dateien, die diesen "Bitstrom" enthalten. Letztendlich sind die Struktur dieser Dateien und Details darüber, wie genau das FPGA konfiguriert ist, Eigentum des Herstellers und diese Informationen werden niemals weitergegeben. Das allgemeine Prinzip bleibt jedoch bei allen FPGAs gleich.