begreifbar machen.
DE
Hardware, keine Befehle.
Verfolgen Sie, wie dieselben Eingänge unabhängige Logikzellen erreichen.
3D-Ansicht fokussiert · A–D Eingänge · Leertaste Takt · R Zurücksetzen · L Beschriftung · 1–6 Kapitel · Esc gibt frei
3D-Darstellung ist nicht verfügbar
Die Logik-Bedienelemente, die Wahrheitstabellen und die Signalverläufe bleiben verfügbar.
Beginnen Sie mit einem Fünf-Minuten-Experiment
Schalten Sie im Volladdierer A, B und C um. SUM ist ihre Parität; CARRY ist High, wenn mindestens zwei davon High sind. Ein Takt ist nicht nötig. Öffnen Sie Blick in die LUT, um zu sehen, welches gespeicherte Bit die Eingänge auswählen. Ändern Sie ein Speicherbit: Damit haben Sie eine Schaltung umkonfiguriert, nicht einen Dateneingang verändert.
Laden Sie danach die 2-stufige Pipeline, öffnen Sie Ein Bit merken und geben Sie Taktimpulse. Beide Register tasten ihre D-Werte an derselben Flanke ab. Das zweite Register übernimmt den vorherigen Ausgang des ersten Registers – nicht einen Wert, den diese Flanke gerade erst erzeugt. Schalten Sie CE aus, um den Zustand zu halten. SRST ist synchron und hat Vorrang vor CE.
Was eine LUT tatsächlich ist
Bei einer LUT mit vier Eingängen lautet die Adresse I0 + 2·I1 + 4·I2 + 8·I3. Es gibt 16 gespeicherte Bits. INIT[address] ist das kombinatorische Ergebnis. Der sichtbare Baum 16→8→4→2→1 ist ein logisch äquivalentes Netz aus 15 Multiplexern mit zwei Eingängen. I0 wählt innerhalb von Paaren; I1, I2 und I3 wählen zunehmend größere Gruppen aus. Diese Erklärung unterstellt kein bestimmtes Transistorlayout. Der Baum zeigt die Auswahl, die sich aus den eingetroffenen LUT-Eingängen ergibt; seine internen Gatter werden nicht einzeln mit Verzögerung simuliert. F ändert sich nach einer zusammengefassten LUT-Verzögerung von 620 ps.
Zum Beispiel implementiert 0x6666 I0 XOR I1; 0x9696 implementiert die Parität von drei Eingängen; 0xE8E8 implementiert eine Mehrheitsfunktion mit drei Eingängen. Die oberen acht Einträge wiederholen sich, wenn eine Funktion I3 ignoriert. Der LUT-Speicherinhalt bleibt unverändert, während sich die Dateneingänge ändern.
Was ist konfigurierbar – und was nicht?
Die Konfiguration bestimmt die LUT-Bits, die Eingangsquellen und ob der nach außen geführte Ausgang einer Zelle F oder das registrierte Q verwendet. Die Multiplexer und die Metallverdrahtung existieren bereits im gefertigten Chip; die Konfiguration wählt ihr Verhalten. Das Routing-Mikroskop stellt dies abstrakt als eine gewählte Quelle je Ziel dar. Echte Bausteine haben begrenzte, familienspezifische Leitungen, Schalterverbindungen und Routing-Einschränkungen statt einer universellen Crossbar.
Die 16 Zellen des Labors haben je eine LUT4 und ein optionales, positiv flankengesteuertes DFF. Ein echter konfigurierbarer Logikblock fasst meist mehrere Logikelemente zusammen; Namen, LUT-Größen sowie Packungs- und Teilungsregeln unterscheiden sich je nach Familie. Manche FPGAs verwenden größere oder aufteilbare LUTs. Auch die Konfigurationstechnologien von FPGAs unterscheiden sich: Schließen Sie nicht daraus, dass jedes FPGA einen flüchtigen SRAM-Konfigurationsspeicher verwendet.
Die digitale Engine
Die Engine rechnet in ganzzahligen Pikosekunden mit eingereihten Signalereignissen, Transportverzögerungen auf der Verdrahtung und einer Trägheitsverzögerung in der LUT. Die Routing-Verzögerung nicht konstanter Verbindungen beträgt 260 ps + 140 ps × Manhattan hops + added route delay. Fest angebundene Konstanten haben keine modellierte Routing-Verzögerung. Die LUT-Verzögerung beträgt 620 ps, Clock-to-Q 220 ps, Setup und Hold 200 ps bzw. 120 ps. Dies sind erklärende Zahlen, keine Spezifikationen eines bestimmten Chips.
An einer gemeinsamen idealen steigenden Flanke werden alle D-Eingänge abgetastet, bevor sich irgendein Q ändert. Die Rückkopplung des Zählers ist daher synchron. Rein kombinatorische Rückkopplungsschleifen werden abgelehnt. X bedeutet, dass ein digitaler Wert nicht garantiert ist: Ein unbekannter LUT-Eingang ergibt nur dann ein bekanntes Ergebnis, wenn alle passenden Tabelleneinträge übereinstimmen. Eine Setup- oder Hold-Verletzung erzeugt einen konservativen unbekannten Zustand. Die Engine sagt weder eine analoge Metastabilitätsspannung noch deren probabilistische Auflösung voraus.
Taktimpuls plant einen vollständigen Impuls an einer künftigen Grenze des 12-ns-Taktrasters ein, nachdem der aktuelle Zustand seine Setup-Zeit hatte. Ungenutzte Rastergrenzen zwischen Benutzeraktionen können übersprungen werden; dies ist eine interaktive Testbench, kein ständig laufender Oszillator. Takt starten reiht solche Impulse fortlaufend ein. Nächstes Ereignis hält die automatische Ausbreitung an und rückt um einen Simulationszeitstempel vor. Die Signalverlaufsanzeige und der VCD-Export enthalten tatsächlich aufgezeichnete Modellzustände, keine illustrativen Sinuswellen. Die Anzeige führt einen fortlaufenden Verlauf von bis zu 4000 Momentaufnahmen zu Ereigniszeitpunkten.
Timing ist ein explizites, separates Arbeitsblatt
Das Timing-Kapitel verändert weder die Live-Schaltung noch ihren Signalverlauf. Es prüft einen hypothetischen Register-zu-Register-Pfad mit illustrativen Min/Max-Eckwerten. Setup verwendet die späteste Ankunft: tCQ(max) + route(max) + N·tLUT(max). Die Frist dafür ist T + capture−launch skew − uncertainty − setup. Hold verwendet die früheste Ankunft und verlangt, dass sie capture−launch skew + uncertainty + hold übersteigt. Positiver Capture-Skew hilft dem Setup und schadet dem Hold. Eine niedrigere Taktfrequenz allein behebt keine Hold-Verletzung an derselben Flanke.
Das Arbeitsblatt verwendet tCQ max/min = 0,22/0,10 ns und tLUT max/min = 0,62/0,18 ns. Ein konservativer Unsicherheitszuschlag von 0,10 ns wird bei jeder Prüfung separat angesetzt. Eine angezeigte Frequenzgrenze, die nur auf Setup beruht, ist keine Timing-Garantie für das gesamte Design. Das Arbeitsblatt lässt Taktrekonvergenz, Timing-Ausnahmen, Multicycle-Pfade, Analysen mit mehreren Takten und herstellerspezifische Timing-Eckwerte außer Acht.
Konfiguration und der kleine Compiler
Der boolesche Mapper akzeptiert höchstens vier Variablen sowie NICHT, UND, XOR, ODER und Klammern. Er analysiert einen Ausdruck, wertet alle 16 Fälle aus und bildet diese Funktion exakt auf eine LUT4 ab. Er weist eine feste Zelle des Lehrmodells und vier Eingangsverbindungen zu. Er synthetisiert kein beliebiges Verilog, löst keine echte Routing-Überlastung, führt keine timinggetriebene Platzierung durch und erzeugt keinen Hersteller-Bitstream. Das erzeugte RTL beschreibt die aktuell konfigurierte Netzliste des Labors, einschließlich des synchronen Resets und nicht blockierender Registerzuweisungen. Ob FPGA-Register initialisiert werden können, hängt von Zielbaustein und Werkzeug ab.
Das Programmieren eines Worts, das Ändern einer Verbindung oder die Wahl zwischen registriertem Ausgang und Bypass gilt als Rekonfiguration des gesamten Modells: Der Takt stoppt, Simulation und Signalverlaufshistorie beginnen neu, Q wird auf 0 initialisiert, und die gewählten Pegel der primären Eingänge bleiben erhalten. Dies ist keine Simulation partieller Rekonfiguration im laufenden Betrieb. JSON-Projektdateien speichern die Schaltung und die primären Eingänge, nicht den analogen oder momentanen Simulationszustand.
Dedizierte Blöcke und Modellgrenzen
Die BRAM- und DSP-Spalten sind architektonischer Kontext; sie lassen sich untersuchen, sind aber in den mitgelieferten Logik-Netzlisten nicht instanziiert. Dedizierte Carry-Ketten beschleunigen in vielen realen Architekturen die Arithmetik. Addierer und Zähler nutzen hier bewusst LUT-Logik, um den booleschen Mechanismus offenzulegen; sie erheben keinen Anspruch auf eine optimierte Abbildung auf Carry-Ketten.
Nicht modelliert werden Transistorverhalten, Leistungsaufnahme, Wärme, Signalintegrität, analoge Metastabilität, elektrische I/O-Standards, detaillierter Skew im Taktbaum, die Wahrscheinlichkeit von SRAM-Upsets, Geschwindigkeitsklassen von Bausteinen und Pinbelegungen von Herstellern. Abstände zwischen den Ebenen, gehäuseähnliche Pads und Abmessungen sind illustrativ. Wer diesen JavaScript-Simulator ausführt, betreibt kein FPGA: Er bildet die angegebene digitale Semantik in Software nach.
Bedienung und Barrierefreiheit
Ziehen zum Drehen, Umschalt+Ziehen oder Ziehen mit der rechten Maustaste zum Verschieben, mit zwei Fingern zoomen. Wählen Sie Oben für eine orthografische Draufsicht. Klicken Sie auf eine Logikzelle, ein LUT-Bit oder einen Routing-Kreuzungspunkt. Alle bearbeitbaren Schaltungsparameter sind auch über normale Formularelemente erreichbar. Solange die 3D-Ansicht den Fokus hat, zoomt Scrollen, die Pfeiltasten drehen die Ansicht, A–D schalten die primären Eingänge um, die Leertaste reiht einen Taktimpuls ein, R setzt die Simulation zurück, 1–6 wechseln das Kapitel, L blendet Beschriftungen ein oder aus, ? öffnet diesen Leitfaden und Esc gibt die Ansicht frei. Das Labor nutzt natives WebGL 2 und berechnet jedes Signal in diesem Browser.
Technische Primärquellen
Architekturkonzepte und Timing-Gleichungen wurden anhand der folgenden Quellen geprüft. Externe Links öffnen sich in einem neuen Tab.
Warum es dedizierten Speicher gibt
Eine LUT speichert eine kleine Wahrheitstabelle, und manche FPGA-LUTs lassen sich auch als verteilter Speicher konfigurieren. Größere Puffer, FIFOs und Tabellen lassen sich effizienter mit dedizierten Block-RAM-Ressourcen umsetzen. Echte Blöcke haben festgelegte Kapazitäten, Datenbreiten, Port-Modi, Schreibfreigaben, ein bestimmtes Lese-Timing und ein definiertes Verhalten beim gleichzeitigen Lesen und Schreiben.
Eine andere Rolle für Bits
In diesem Labor definieren die INIT-Bits einer LUT eine boolesche Funktion. In einem laufenden Speicherdesign greifen Adressen, Daten und Schreibfreigaben auf Benutzerdaten zu. Beide Verwendungen dürfen nicht mit den Konfigurationsbits verwechselt werden, die den Betriebsmodus des RAM wählen oder seine Ports verbinden.
Wählen Sie die bernsteinfarbenen LUT-Zellen, um zum simulierten Datenpfad zurückzukehren. Dieses visuelle Modell erfindet weder BRAM-Latenz noch Kollisionsverhalten bei Dual-Port-Zugriffen noch gespeicherte Benutzerdaten.
Ein Multiplizierer muss nicht viele LUTs belegen
Viele FPGA-Familien enthalten dedizierte Arithmetikblöcke für Operationen wie Multiplikation und Multiplizieren-Akkumulieren. Sie können Pipeline-Register, Addierer, Operanden-Multiplexer und Kaskadenverbindungen enthalten. Breite, Vorzeichenbehandlung, unterstützte Operationen und Timing sind bausteinspezifisch.
Von der HDL zur passenden Ressource
Ein Synthesewerkzeug kann aus arithmetischem RTL einen DSP-Block ableiten, wenn Zielbaustein, Operandenbreiten und Syntheseeinstellungen es zulassen. Eine kleinere Funktion kann es stattdessen in LUTs umsetzen. Mehr Hardwareressourcen können gleichzeitig arbeiten; Durchsatz und Latenz hängen dennoch von Taktung, Pipelining und Datentransport ab.
Dieses Lernlabor legt bewusst kleine LUT-basierte Funktionen offen. Es behauptet nicht, dass seine schematische DSP-Spalte ein simuliertes Arithmetik-Primitiv eines Herstellers sei.
Speichern Sie Ihre konfigurierten LUT-Wörter, Verbindungen, Registereinstellungen und die Pegel der primären Eingänge. Signalverläufe und der momentane Registerzustand gehören nicht zu einer Konfigurationsdatei.
Übertragbare Konfiguration
Eine lesbare, validierte JSON-Datei im FABRIC-Format. Kein Hersteller-Bitstream.
Lokaler Speicherstand im Browser
Nur in diesem Browser gespeichert. Die Verfügbarkeit hängt von der Speicherrichtlinie des Browsers ab.
Aufgezeichnete Signalaktivität
Exportieren Sie den aktuellen Verlauf der Ereigniszeiten im Standardformat Value Change Dump (Zeitskala 1 ps).
Lesbare Hardwarebeschreibung
Erzeugt aus der tatsächlich programmierten Netzliste, nicht aus einem noch nicht übernommenen Ausdrucksentwurf.
In der aktuellen Ausgabe
Abonnenten öffnen jedes neue Exponat am Erscheinungstag. Ein kostenloses DigiSim-Konto öffnet dieses ab dem {memberDate}; ohne Konto öffnet es sich am {anonymousDate}.
Anmelden oder registrierenTarife ansehenDas Exponat ist nicht verfügbar. Die Wiedergabe pausiert. Zum erneuten Versuch neu laden.