Warum haben FPGAs Latches, wenn sie fast nie verwendet werden?


7

Diese Frage ist eine Folgefrage der bestehenden Frage: "Wann werden Latches besser verwendet als Flip-Flops in einem fpga, das beides unterstützt?" .

Wenn die Verwendung von Latches in FPGAs auf seltenste oder seltenste Situationen beschränkt ist, warum haben FPGAs überhaupt Latches? Ich meine, die meisten FPGA-Designs verwenden es nicht. Warum sollten Sie dann FPGA-Hardware für eine solche Logik verschwenden?


Was lässt Sie denken, dass sie Hardware verschwenden? Ein Flip-Flop besteht nur aus zwei Latches, daher sollte es nicht zu schwierig sein, die Hälfte eines Flip-Flops als Latch zu verwenden.
Joe Hass

1
In den jüngsten Familien von Xilinx (Virtex 6 und 7) kann nur die Hälfte der Speicherelemente entweder als Latches oder als Flipflops konfiguriert werden. Davor waren es 100%. Soweit ich das beurteilen kann, hatte keines der jüngsten FPGAs von Altera irgendwelche Latches, und ich kann mich auch nicht an die älteren erinnern, die dies getan haben. Ich denke, es geht langsam weg!
Martin Thompson

Für die UltraScale- und UltraScale + -Familie von Xilinx heißt es im Architekturhandbuch: "Es gibt 16 Speicherelemente pro CLB-Slice. Alle können entweder als kantengetriggerte D-Flip-Flops oder als pegelsensitive Latches konfiguriert werden. Die Latch-Option ist oben oder untere Hälfte der CLB. Wenn die Latch-Option für ein Speicherelement ausgewählt ist, müssen alle acht Speicherelemente in dieser Hälfte entweder als Latches verwendet oder nicht verwendet werden. Wenn sie als Latch konfiguriert sind, ist der Latch transparent, wenn der CLB-Takteingang ( CLK) ist hoch. " Wie @JoeHass sagte: Es verschwendet keine Ressourcen, da Register als Latches neu konfiguriert werden.
Daniel Wisehart

Antworten:


5

Ich werde dies mit dem Vorbehalt versehen, dass ich in Bezug auf das Innenleben der jüngsten FPGA-Architekturen nicht so aktuell bin. Daher ist diese Antwort möglicherweise nicht angemessen. Abhängig davon, ob die FPGA-Tools den Entwurfsablauf unterstützen, werde ich diskutieren.

Es ist wahrscheinlich wahr, dass das Gesamtvolumen der auf den Markt gelieferten Rohtore wahrscheinlich auf Riegel basierende Designs sind. Dies ist auf das Überwiegen der Mikroprozessorbeiträge zur Gesamtzahl der Versandtransistoren zurückzuführen. Also ja, eine künstliche Maßnahme. Insgesamt gibt es relativ wenige Leute, die auf diese Weise entwerfen, aber die meisten Prozessoren verwenden ein Schema von:

Logikwolke -> Latch (+ ve Uhr) -> Logikwolke -> Latch (-ve Uhr) -> Semi-Ad-Infinitum wiederholen.

Was, wenn Sie es betrachten, das kanonische Format für einen Master-Slave FF ist, aber mit mehr Logik zwischen dem Master und dem Slave eingefügt.

Die überwiegende Mehrheit der Menschen verwendet in Bezug auf die Gesamtzahl der Designs (wie in Bezug auf die Anzahl der Designs) eine einzelne Taktdomänenflanke, die ausgelöst wird. Um Dally und Poulton (Digital Systems Engineering) zu zitieren: "Flankengetriggertes Timing wird jedoch selten in High-End-Mikroprozessoren und Systemdesigns verwendet, hauptsächlich weil es zu einer minimalen Zykluszeit führt, die vom Taktversatz abhängt." Die Verwendung von Latches, die von nicht überlappenden Zweiphasenuhren angetrieben werden, führt zu einem sehr robusten Timing, das weitgehend unempfindlich gegen Versatz ist. Dies erhöht die Komplexität des Entwurfs, da Signale aus einer Taktdomäne nicht gemischt werden können.

Der andere Nachteil ist, dass es selten in Schulen unterrichtet wird.

Wenn dies eine Frage zum digitalen Design von High-End-Systemen wäre. Das wäre deine Antwort. Wenn dies für FPGAs gilt - ich weiß es nicht genau, aber ich schlage vor, dass dies der Grund sein könnte.

Übrigens - ich würde dieses Buch jedem empfehlen, der es mit fortschrittlichem digitalem VLSI-Design ernst meint.

"Dally, William J. und John W." Poulton. Digital Systems Engineering. Cambridge University Press.


Könnten Sie ein Beispiel mit diesem Taktschema anführen? Ich weiß, dass ARM es nicht verwendet, und es verursacht Toolchain-Probleme (Einfügen der Scan-Kette usw.)
pjc50

INTEL, IBM und die Referenz stammen aus dem genannten Buch.
Platzhalter

Ich kann bestätigen, was rawbrawb sagt. In der Praxis haben wir zwei separate Taktsignale verwendet und sichergestellt, dass sie sich nicht überlappen. Dies beseitigte mögliche Haltezeitprobleme auf Kosten der Verteilung von zwei Uhren. Das Timing ist schwierig und ich habe es geschafft, mich beim ersten Mal in den Fuß zu schießen.
Joe Hass

Der ehrwürdige 6502 nutzte die Zweiphasentaktung mit gutem Erfolg. Die Verwendung nicht überlappender Taktphasen reduziert den Umfang der zum Zwischenspeichern erforderlichen Schaltungen und kann auch einige zeitliche Einschränkungen erleichtern. Ein sehr schönes Merkmal von Split-Clock-Designs ist, dass sie eine beliebige Menge an Taktversatz tolerieren können, ohne dass minimale Ausbreitungsverzögerungen in zwischengespeicherten Rückkopplungspfaden auftreten müssen. Das größte Problem bei ihnen ist, dass viele Werkzeuge nicht gut dafür ausgerüstet sind.
Supercat

6

Hier ist eine grobe Liste, warum Latches in FPGAs vorhanden sind:

  1. Manchmal ist es die einzige Lösung. Normalerweise bei der Anbindung an alte Standards und / oder Geräte.
  2. Obwohl FF besser ist, bestehen einige Leute darauf, Riegel zu verwenden. Diese Leute sind auch bereit, Geld für FPGAs auszugeben.

Und das ist alles, woran ich denken kann. In den letzten 10 Jahren habe ich einen Latch nur einmal verwendet und er diente als Schnittstelle zu einem PowerPC, bei dem für den Multiplex-Adress- / Datenbus ein Latch zum Aufheben des Multiplex erforderlich war.


0

Der Hauptzweck eines FPGA besteht darin, eine Vorrichtung in Silizium zu implementieren, die ein gewünschtes Verhalten implementiert; Manchmal muss ein Gerät einige Funktionen ausführen, während der Haupttakt heruntergefahren ist, oder auf Impulse reagieren, die im Verhältnis zur Taktperiode kurz sind. Nehmen wir als einfaches Beispiel an, man entwarf eine Platine mit einem diskreten 74HC373, den man eliminieren wollte, und hatte 17 Ersatzstifte an der CPLD (angenommen, die OE des 373 war niedrig geschnallt). Diese Pins sollten sich grundsätzlich wie folgt verhalten:

Jedes Mal, wenn Enable hoch ist und D0-D7 10 ns oder länger gültig war, ist Q0-Q7 gültig und spiegelt die Werte auf D0-D7 wider. Die Qn-Pins können als ungültig angesehen werden, jeder kann irgendetwas ausgeben, für die ersten 10 ns nach dem Aktivieren geht hoch, jedes Mal, wenn Dn ungültig ist oder sich ändert, und für 10 ns danach. Alle Q0-Q7, die gültig sind, wenn die Aktivierung niedrig wird, behalten ihren Wert bis zum nächsten Mal, wenn die Aktivierung hoch geht.

Beachten Sie, dass sich D0-D7 jederzeit relativ zur ansteigenden Flanke von Enable ändern kann. Daher kann die ansteigende Flanke von Enable nicht als Uhr verwendet werden. Beachten Sie auch, dass, da der Ausgang eines Flops erst einige Zeit nach einer Taktflanke gültig ist, Q0-Q7 jedoch zum Zeitpunkt der Aktivierung gültig sein müssen, wenn D0-D7 für die vorhergehenden 10 ns gültig war, der Abfall Die Flanke von Enable kann auch nicht als Uhr verwendet werden.

Während man theoretisch diskrete Gates verwenden könnte, um asynchrone Latching-Schaltungen aufzubauen, funktionieren solche Techniken in FPGAs nicht gut. Das Problem ist, dass eine solche Schaltung, um richtig zu funktionieren, einen oder mehrere Knoten haben muss, deren Ausbreitungsverzögerung garantiert größer als Null ist. Trotz der Tatsache, dass echte Gates fast immer eine positive Laufzeitverzögerung haben (bei sich langsam ändernden Logikpegeln kann sich der Ausgang eines Gates ändern, bevor sein Eingang vollständig geschaltet hat), können sich FPGA-Gates so verhalten, als hätten sie eine negative Laufzeitverzögerung. Wenn die falschen Knoten in einer Rückkopplungsschleife eine negative Verzögerung haben, funktioniert die Schaltung möglicherweise nicht wie beabsichtigt. Die Verwendung expliziter Verriegelungselemente, bei denen eine positive Rückkopplungsverzögerung garantiert ist, kann solche Probleme vermeiden.


0

Ich denke, die Verwirrung rührt von der Behauptung her, dass "die meisten FPGA-Architekturen sowohl Latches als auch Flip-Flops nativ unterstützen". Die meisten von ihnen enthalten ein Flip-Flop und ein ausreichendes Routing, sodass Sie die logischen Ressourcen verwenden können, um eine Schaltung zu erstellen, die sich als Latch verhält. Das folgende Schema zeigt eine vereinfachte, aber ziemlich übliche Struktur für eine einzelne Logikzelle in LUT-basierten FPGAs. Indem Sie einen Eingang für die Rückkopplungsfunktionalität mit MUX2 opfern und gleichzeitig MUX1 so einstellen, dass das Flipflop umgangen wird, können Sie einen Latch mit zwei Eingängen implementieren. Beachten Sie, dass diese Muxes im Allgemeinen Teil der Konfiguration sind und während des Betriebs nicht geändert werden können. Ein solcher Latch ist nicht so vorhersehbar oder schnell wie die Verwendung des synchronen Registers - insbesondere, wenn Sie nur einen asynchronen Satz oder Reset benötigen (normalerweise jeweils nur einen), den sie normalerweise haben.und Leistung. Es gibt jedoch viele Variationen des Designs, wie zum Beispiel den Cyclone IV, der andere Signale durch ein solches nicht verwendetes Register leiten kann, aber ich habe noch keine FPGA-Architektur gesehen, die selbst einen Latch bereitstellt. Wenn Sie eines kennen, sagen Sie es mir bitte.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Was die Verwendung der Latch-Logik betrifft, kann ich mir zwei Szenarien vorstellen. Erstens müssen Sie Ereignisse schneller als Ihre Uhr erkennen, z. B. Glitch-Marker in einem Logikanalysator hinzufügen (das Flipflop kann dies auf Kosten eines Set / Reset-Netzes tun). Zweitens muss eine Schicht von Registern umgangen werden, um eine Pipeline (in Zyklen gezählt) zu verkürzen, wenn die Frequenzskalierung niedrig genug ist, um eine tiefere Logik zu ermöglichen. Beides sind eher spezielle Situationen, für die FPGA-Tools im Allgemeinen nicht entwickelt wurden. Letzteres ist tatsächlich ein Bypass wie MUX1, kein Latch, verursacht jedoch wahrscheinlich eine Latch-Warnung, gerade weil die Tools dies nicht erwarten (und MUX1 nicht durch Logiksignale steuerbar ist), und eine mögliche Implementierung verwendet einen transparenten Latch .


1
Xilinx 'Pre "6" -Serie hatte alle Riegel. "6" und "7" haben 50% ihrer Register als Latches oder Flipflops konfigurierbar, der Rest sind nur Flipflops.
Martin Thompson

Ich stehe korrigiert! Ich dachte, ich wäre ziemlich vertraut mit der Spartan 3-Serie, aber tatsächlich zeigt der Text zu Speicherelementen in den CLBs die Unterstützung des Latch-Modus an, obwohl Symbole und Wahrheitstabellen nur für den synchronen Modus angezeigt werden, selbst im vollständigen Slice-Diagramm.
Yann Vernier

1
Ich würde nicht unbedingt an Latches denken, um eine Schicht von Registern zu "umgehen", sondern um zeitliche Einschränkungen zu lockern, damit nicht jede Stufe innerhalb einer Taktperiode abgeschlossen werden muss, sondern für die kombinierte Zeit eines Paares von Registern aufeinanderfolgende Stufen, die innerhalb von zwei Taktphasen abgeschlossen werden müssen (bei z. B. 50 MHz würde ein Gerät mit 2 ns Setup / Hold erfordern, dass jede Stufe 16 ns oder weniger beträgt; im Gegensatz dazu könnte ein Latch-basiertes Design mit einer Stufe überleben, die 25 ns dauerte, wenn vorhergehende und nachfolgende Stufen dauerte nur 5ns). Andererseits haben Sie mich an einen Punkt erinnert, den ich in meiner Antwort verpasst habe: ...
Supercat

Wenn man konventionelle Logik oder eine CPLD verwendet, um einen Latch wie Out = (D und E) oder (Q und! E) oder (D und Q) zu berechnen, kann D, wenn E niedrig ist, ohne Wirkung tun, was es will ( in einem FPGA kann eine LUT den Ausdruck jedoch als (D und E und Q) oder (D und E und! Q) oder (D und! E und Q) oder (! D und! E und Q). Wenn Q hoch und E niedrig ist, kann eine fallende Flanke auf D dazu führen, dass der Term (D und! E und Q) falsch wird, bevor (! D und! E und Q) wahr werden, was zu Störungen in Q führt Feedback, dieser Fehler könnte als neuer Zustand von Q verriegelt werden.
Supercat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.