Wie rekonfigurieren sich FPGAs basierend auf den Wünschen der Benutzer? [geschlossen]

Ich habe das Buch "Code" gelesen und ich liebe seine Erklärung auf niedriger Ebene, wie CPUs funktionieren.

Jetzt suche ich nach einer ähnlichen Erklärung für FPGAs.

Das Problem, um das ich mich nicht kümmern kann, ist: Wie ändert sich das FPGA in seinen Verbindungen zwischen den Logikgattern?

Ich vermute, dass irgendwo Bits gespeichert werden, die ändern, welche verbunden sind.

Aber wie wird die Hardwaresprache VHDL/Verilog in das FPGA gepusht?

Viele Multiplexer, wahrscheinlich mit Pass Gates implementiert und von SRAMs gesteuert. Das Programmieren neuer Werte in die SRAMs ändert die Gerätekonfiguration.
Wie kommen die Werte in die SRAMs?
Noch wichtiger, wie kommt es vom SRAM zum Pass Gate?
1. Lesen Sie in der Herstellerdokumentation nach, wie Sie Ihr Gerät programmieren. Es ist im Grunde nur ein Haufen Logik, um einen seriellen oder parallelen Datenstrom zu nehmen und ihn zum Programmieren der SRAMs zu verwenden. 2. Grundsätzlich ist jede einzelne Zelle des SRAM mit dem verdrahtet, was sie steuern muss.

Antworten (2)

Jedes Bit in einem Bitstrom fungiert als: eine Multiplexer/Demultiplexer-Auswahl, ein Speicherelement für eine LUT, ein Durchgangstransistor-Steuerbit (Routing) oder ein Aktivieren/Deaktivieren eines Merkmals des FPGA.

e.g. you may have a bit sequence of 1001001110000111, giving a k-map of:
      cd
      00 01 11 10
ab 00  1  0  1  0  - 1001 first 4-bits of sequence above
   01  0  0  1  1
   11  0  1  1  1
   10  1  0  0  0
which corresponds to a LUT equation of y = ~b&~c&~d | b&c | ~a&c&d | a&b&d

Für das FPGA-Routing würde die FPGA-Hardware Durchgangstransistoren (oder basierend auf Leseverstärkern) enthalten, um Routing-Verbindungen zu deaktivieren, sodass ein Konfigurations-SRAM-Bit aus der Bitstream-Datei verwendet würde, um diese Verbindung zu steuern.

Dasselbe gilt für jede andere Funktion des FPGA, ein Bit oder mehrere Bits aktivieren/deaktivieren oder wählen etwas aus.

Es ist ein bisschen kompliziert und beinhaltet eine Menge Software.

Zunächst schreiben Sie Code in einer Hardwarebeschreibungssprache wie Verilog oder VHDL. Zusammen mit zeitlichen und räumlichen Beschränkungen bilden diese den Input der FPGA-Toolchain-Software. Die Toolchain ist eine Reihe von Softwareprogrammen, die die HDL-Beschreibung des Designs in ein binäres Format umwandeln, das für das von Ihnen verwendete FPGA spezifisch ist. Die gleiche grundlegende Sequenz wird für das Design von ASICs verwendet, obwohl sie viel komplexer ist und viele weitere Anpassungen vorgenommen werden können, da es wesentlich mehr Flexibilität bei den Möglichkeiten gibt, die Sie auf einem ASIC tun können.

Der erste Schritt in der Toolchain heißt „Synthese“. Der Software-'Synthesizer' bearbeitet die HDL und wandelt sie in eine generische Netzliste um. Dieser Vorgang ähnelt in gewisser Weise dem, was in einem Compiler wie gcc vor sich geht. Präprozessor- und Syntheseanweisungen im Code werden während der Ausarbeitung durchgeführt, ebenso wie einige grundlegende Optimierungen (Berechnung konstanter Werte, konstante Ausbreitung innerhalb von Modulen, Entfernung getrennter/nicht verwendeter Komponenten usw.). Die Ausgangsnetzliste ist eine Darstellung eines Schaltplans und enthält logische Grundelemente (Gatter, Multiplexer, RAMs usw.), die mit "Netzen" verbunden sind. Diesen Grundelementen können auch Zeit- und Platzierungsbeschränkungen als Metadaten angehängt werden.

Nach der Synthese wird das Design optimiert und abgebildet. Die Optimierung umfasst die Reorganisation und Vereinfachung der Logik für kleinere Flächen und kürzere Pfade. Beim Mapping werden generische Primitive durch Primitive ersetzt, die von dem spezifischen FPGA unterstützt werden, das Sie verwenden (Block-RAM-Instanzen, Flip-Flops, LUTs usw.). Der Zuordnungsschritt bestimmt auch, wie die Logikgatter in die Nachschlagetabellen aufgeteilt werden, die das FPGA verwendet, um die Logik zu implementieren. Die Ausgabe des Mappers ist ebenfalls eine Netzliste, jedoch mit gerätespezifischen Primitiven anstelle von generischen.

Auf die Kartierung folgt die Platzierung. Das FPGA enthält nicht festgeschriebene Logikressourcen, die von Ihrem Design verwendet werden können – Schlagen Sie Tabellen, Flipflops, RAMs usw. nach. Der Placer entscheidet, welche spezifischen Instanzen auf dem physischen FPGA für jede Instanz in der abgebildeten Netzliste verwendet werden. Diese Informationen sind im Allgemeinen als Metadaten in der Netzliste enthalten. Der Placer versucht, verbundene Komponenten nahe beieinander zu positionieren, damit sie mit den kürzestmöglichen Wegen verbunden werden können, damit die zeitlichen Einschränkungen erfüllt werden können.

Nach dem Platzieren folgt das Routing. Die Routing-Software nimmt die platzierte Netzliste und ermittelt, welche Drähte im Routing-Netzwerk für jedes Netz in der Netzliste zu verwenden sind. Dies kann bei einem komplizierten Design mit Hunderttausenden von Drähten lange dauern. Der Placer berücksichtigt auch Zeiteinschränkungen, um sicherzustellen, dass die Verbindungen, die er herstellt, es dem Chip ermöglichen, mit der in den Zeiteinschränkungen angegebenen Taktgeschwindigkeit zu laufen.

Auf die Platzierung folgt in der Regel eine statische Timing-Analyse. Die Timing-Analyse betrachtet alle Pfade durch die Logik und berechnet, wie lange es dauert, bis sich Signale über diese Pfade ausbreiten, wenn sie platziert und geroutet wurden. Detaillierte Timing-Informationen, einschließlich der erforderlichen Einrichtungs- und Haltezeiten von internen Flip-Flops, Block-RAMs und anderen Komponenten sowie Verzögerungen durch alle LUTs und Routing-Netzwerksegmente, werden vom Hersteller gemessen und in die Toolchain aufgenommen. Diese Informationen werden verwendet, um sicherzustellen, dass das Design auf dem FPGA korrekt funktioniert.

Nachdem die Timing-Analyse bestanden ist, sind die letzten Schritte die Entwurfsregelprüfung und die Bitstromerzeugung. Design Rule Checking stellt sicher, dass die verschiedenen Komponenten richtig konfiguriert sind. Es ist ein viel komplizierterer Prozess bei ASIC-Designs als bei FPGAs. Die Bitstream-Generierung ist der letzte Schritt und wandelt das platzierte und geroutete Design in einen Satz von Konfigurationsbefehlen für das FPGA um. Der FPGA-Bitstrom teilt dem FPGA mit, wie seine internen Routing-Komponenten, PLLs, Flip-Flops, IO-Bänke, Block-RAMs usw. zu konfigurieren sind, um das Design zu implementieren.

Nun zum FPGA selbst ... es gibt viele gute Informationen in verschiedenen Online-Tutorials und in den Gerätehandbüchern. Ich würde empfehlen, die PDF-Handbücher für ein FPGA herunterzuladen und einen Blick auf die Abbildungen zu werfen. Ein anständiges Beispiel wäre Xilinx UG384, das Handbuch für die konfigurierbare Logik auf dem Xilinx Spartan-6 FPGA. Auf den Seiten 9, 10 und 11 enthält das Handbuch ziemlich detaillierte Diagramme einiger verschiedener Logik-Slice-Typen. Das Wesentliche ist, dass grundsätzlich jede Logikkomponente (LUT/RAM, Flip-Flops) sowohl im Betriebsmodus als auch im Anfangswert konfiguriert werden kann. Die LUT im SLICEM kann beispielsweise als eine LUT, ein Single- oder Dual-Port-RAM oder -ROM oder ein Schieberegister konfiguriert werden, wobei alle anfänglichen Inhalte aus dem Konfigurationsbitstrom geladen werden. Die Ausgangs-Flip-Flops können als Flip-Flops oder Latches konfiguriert werden, auch mit aus dem Bitstrom konfigurierbarem Anfangswert. Alle Multiplexer, die nicht von einem eingezogenen Signal angesteuert werden, werden durch den Konfigurationsbitstrom eingestellt (A/B/C/DMUX-Ausgänge, Flip-Flop-D-Eingang, LUT-DI1-Eingang usw.). Auf Seite 36 finden Sie auch einige Details zu den Interconnect-Ressourcen.

OK super. Aber der Bitstream ist das, worauf ich neugierig bin. Wie funktioniert es, das FPGA zu ändern? Ich suche nach einer Erklärung auf Hardwareebene.