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

Diese Frage ist eine Folgefrage der bestehenden Frage: "Wann ist die Verwendung von Latches besser als Flip-Flops in einem FPGA, das beides unterstützt" .

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

Was lässt Sie glauben, 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.
Die jüngsten Familien von Xilinx (Virtex 6 und 7) haben nur die Hälfte ihrer Speicherelemente, die entweder als Latches oder Flipflops konfiguriert werden können ... Davor waren es 100 % von ihnen. Soweit ich das beurteilen kann, hatte keiner der neueren FPGAs von Altera irgendwelche Latches, und ich kann mich auch nicht erinnern, dass die älteren dies getan hätten. Ich denke es geht langsam weg!
Für die UltraScale- und UltraScale+-Familie von Xilinx heißt es im Architekturleitfaden: „Es gibt 16 Speicherelemente pro CLB-Slice. Alle können entweder als flankengetriggerte D-Typ-Flip-Flops oder als pegelempfindliche Latches konfiguriert werden. Die Latch-Option ist „per top or“. unteren Hälfte des 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 ungenutzt gelassen werden. Bei Konfiguration als Latch ist das Latch transparent, wenn der CLB-Takteingang ( CLK) ist hoch." Wie @JoeHass sagte: Es werden keine Ressourcen verschwendet, da Register als Latches neu konfiguriert werden.

Antworten (5)

Ich beginne dies mit der Einschränkung, dass ich nicht so auf dem Laufenden bin, was die inneren Abläufe neuerer FPGA-Architekturen angeht. Diese Antwort ist also möglicherweise nicht angemessen. abhängig davon, ob die FPGA-Tools den Design-Flow unterstützen, den ich besprechen werde.

Es ist wahrscheinlich wahr, dass das Gesamtvolumen der auf den Markt gebrachten Rohtore wahrscheinlich auf Riegeln basiert. Dies liegt an dem Überwiegen der Beiträge von Mikroprozessoren zur Gesamtzahl von Versandtransistoren. 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 clock) -> Logikwolke -> Latch (-'ve clock) -> semi ad-infinitum wiederholen.

Wenn Sie es sich ansehen, ist das das kanonische Format für einen Master-Slave-FF, aber mit mehr Logik zwischen Master und Slave.

Die überwiegende Mehrheit der Menschen verwendet in Bezug auf die Gesamtentwürfe (wie in der Anzahl der Entwürfe) eine einzelne Taktdomänenkante, die getriggert 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 zweiphasigen, nicht überlappenden Takten angesteuert werden, führt zu einem sehr robusten Timing, das weitgehend unempfindlich gegenüber Versatz ist. Dies erhöht die Komplexität des Designs, Signale aus einer Taktdomäne können nicht gemischt werden.

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

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

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

"Dally, William J. und John W." Poulton. Digitale Systemtechnik. Cambridge University Press.

Können Sie ein Beispiel mit diesem Taktschema nennen? Ich weiß, dass ARM es nicht verwendet und es verursacht Toolchain-Probleme (Einfügen von Scan-Ketten usw.)
INTEL, IBM und die Referenz stammt aus dem genannten Buch.
Ich kann bestätigen, was rawbrawb sagt. In der Praxis haben wir zwei getrennte Taktsignale verwendet und dafür gesorgt, dass sie sich nicht überlappen. Dies eliminiert alle möglichen Haltezeitprobleme auf Kosten der Verteilung von zwei Takten. Das Timing ist schwierig und ich habe es geschafft, mir beim ersten Mal in den Fuß zu schießen.
Der ehrwürdige 6502 nutzte die zweiphasige Taktung mit guter Wirkung; Die Verwendung nicht überlappender Taktphasen reduziert die Menge an Schaltungen, die zum Latchen erforderlich sind, und kann auch einige Zeitbeschränkungen verringern. Ein sehr nettes Merkmal von Split-Clock-Designs ist, dass sie eine beliebige Menge an Clock-Skew tolerieren können, ohne minimale Ausbreitungsverzögerungen in irgendwelchen gelatchten Rückkopplungspfaden haben zu müssen. Das größte Problem mit ihnen ist, dass viele Tools nicht gut ausgestattet sind, um mit ihnen umzugehen.

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

  1. Manchmal ist es die einzige Lösung. Normalerweise bei Schnittstellen zu alten Standards und/oder Geräten.
  2. Obwohl FF besser ist, bestehen einige Leute darauf, Latches 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 nur einmal einen Latch verwendet, und zwar als Schnittstelle zu einem PowerPC, bei dem der gemultiplexte Adress-/Datenbus einen Latch zum Entmultiplexen benötigte.

Ich denke, die Verwirrung rührt von der Behauptung her, dass "die meisten FPGA-Architekturen von Haus aus sowohl Latches als auch Flip-Flops unterstützen". Die meisten von ihnen enthalten ein Flip-Flop und ein ausreichendes Routing, sodass Sie die Logikressourcen verwenden können, um eine Schaltung zu erstellen, die sich wie ein Latch verhält. Das folgende Schema zeigt eine vereinfachte, aber ziemlich übliche Struktur für eine einzelne Logikzelle in LUT-basierten FPGAs. Indem Sie mit MUX2 einen Eingang für die Rückkopplungsfunktion 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 solches Latch ist nicht so vorhersehbar oder schnell wie die Verwendung des synchronen Registers - insbesondere, wenn Sie nur ein asynchrones Setzen oder Zurücksetzen (normalerweise jeweils nur eines) benötigen, was sie normalerweise haben.und Leistung. Es gibt jedoch viele Variationen des Designs, wie z. B. den Cyclone IV, der andere Signale durch ein solches unbenutztes Register leiten kann, aber ich habe noch keine FPGA-Architektur gesehen, die selbst einen Latch bereitstellt. wenn du einen kennst, sag es mir bitte.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

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 der Verwendung eines Set / Reset-Netzes tun). Zweitens wird eine Ebene von Registern umgangen, um eine Pipeline (in Zyklen gezählt) zu verkürzen, wenn die Frequenzskalierung niedrig genug wird, um eine tiefere Logik zu ermöglichen. Beides sind ziemlich spezielle Situationen, für die FPGA-Tools im Allgemeinen nicht ausgelegt sind. Letzteres ist genau wie MUX1 ein Bypass, 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 ein transparentes Latch .

Die Pre-6-Serie von Xilinx hatte alle Verriegelungen. "6" und "7" haben 50% ihrer Register, die als Latches oder Flipflops konfigurierbar sind, der Rest sind nur Flipflops.
Ich stehe korrigiert! Ich dachte, ich wäre mit der Spartan 3-Serie ziemlich vertraut, aber der Text zu den Speicherelementen in den CLBs weist tatsächlich auf die Unterstützung des Latch-Modus hin, obwohl Symbole und Wahrheitstabellen nur für den synchronen Modus angezeigt werden, selbst im vollständigen Slice-Diagramm.
Ich würde nicht unbedingt an Latches denken, um eine Registerebene zu "umgehen", sondern Zeitbeschränkungen zu lockern, sodass nicht jede Stufe innerhalb einer Taktperiode abgeschlossen werden muss, sondern für die kombinierte Zeit eines beliebigen Paares von aufeinanderfolgende Stufen innerhalb von zwei Taktphasen abzuschließen (bei z. B. 50 MHz würde ein Gerät mit 2 ns Setup/Hold jede Stufe 16 ns oder weniger erfordern; im Gegensatz dazu könnte ein Latch-basiertes Design mit einer Stufe überleben, die 25 ns dauerte, wenn es vorangegangene und nachfolgende Stufen dauerte dauerte nur 5ns). Andererseits haben Sie mich an einen Punkt erinnert, den ich in meiner Antwort übersehen habe: ...
Wenn man herkömmliche Logik oder ein CPLD verwendet, um ein Latch wie Out=(D und E) oder (Q und !E) oder (D und Q) zu berechnen, dann kann D, wenn E niedrig ist, tun, was es will, ohne irgendwelche Auswirkungen ( sogar kurzzeitig) auf Q. 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 an D dazu führen, dass der Term (D und !E und Q) falsch wird, bevor (!D und !E und Q) wahr werden, was zu einem Glitch bei Q führt Feedback, dieser Glitch könnte als neuer Status von Q gespeichert werden. Ups.

Der Hauptzweck eines FPGA besteht darin, in Silizium ein Gerät zu implementieren, das ein bestimmtes gewünschtes Verhalten implementiert; Manchmal erfordert dies, dass ein Gerät einige Funktionen ausführt, während die Hauptuhr abgeschaltet ist, oder auf begrenzte Weise auf Impulse reagiert, die im Verhältnis zur Taktperiode kurz sind. Nehmen wir als einfaches Beispiel an, man entwerfe eine Platine mit einem diskreten 74HC373, den man eliminieren möchte, und habe 17 Ersatzstifte auf seinem CPLD (angenommen, /OE auf dem '373 war niedrig). Diese Pins sollten sich grundsätzlich wie folgt verhalten:

Jedes Mal, wenn Enable hoch ist und D0-D7 mindestens 10 ns lang gültig waren, sind Q0-Q7 gültig und geben die Werte auf D0-D7 wieder. Die Qn-Pins können als ungültig angesehen werden, jeder kann irgendetwas ausgeben, für die ersten 10 ns, nachdem Enable hoch geht, jedes Mal, wenn Dn ungültig ist oder sich ändert, und für 10 ns danach. Jeder von Q0–Q7, der gültig ist, wenn Enable auf Low geht, behält seinen Wert, bis Enable das nächste Mal auf High geht.

Beachten Sie, dass D0-D7 sich jederzeit relativ zur ansteigenden Flanke von Enable ändern dürfen. Daher kann die steigende Flanke von Enable nicht als Takt verwendet werden. Beachten Sie auch, dass der Ausgang eines Flops erst einige Zeit nach einer Taktflanke gültig ist, Q0-Q7 jedoch in dem Moment gültig sein müssen, in dem Enable auf Low geht, wenn D0-D7 für die vorangegangenen 10 ns gültig waren, das Fallen Flanke von Enable kann auch nicht als Takt verwendet werden.

Während man theoretisch diskrete Gates verwenden könnte, um asynchrone Latch-Schaltkreise aufzubauen, funktionieren solche Techniken in FPGAs nicht gut. Das Problem besteht darin, dass jede selbsthaltende Rückkopplungsschleife einen oder mehrere Knoten enthalten muss, deren Ausbreitungsverzögerung garantiert größer als null ist, damit eine solche Schaltung richtig funktioniert. Trotz der Tatsache, dass echte Gatter fast immer eine positive Laufzeitverzögerung haben (bei langsam wechselnden Logikpegeln kann sich der Ausgang eines Gatters ändern, bevor sein Eingang vollständig umgeschaltet hat), ist es möglich, dass sich FPGA-Gatter 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 von expliziten Verriegelungselementen, die garantiert eine positive Rückkopplungsverzögerung haben, kann solche Probleme vermeiden.

@MicroservicesOnDDD: Besser?

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

Ich stimme zu, dass sie fast nie verwendet werden. Aufgrund meiner persönlichen Erfahrung beim Schreiben von FPGA-Designs in den letzten 14 Jahren muss ich noch gezielt eine Verriegelung in einem meiner Designs erstellen.

Allerdings wäre ich wirklich enttäuscht, wenn ich tatsächlich eine erstellen müsste und sie nicht auf dem Gerät implementiert werden könnte. Das ist also der Grund.

Außerdem würde ich sagen, dass das Einsetzen der Riegel in Bezug auf die Hardware fast kostenlos ist. Wenn wir uns beispielsweise ein FPGA der 7er-Serie von Xilinx ansehen, besteht jeder Slice aus vier Nachschlagetabellen mit 6 Eingängen. Jede Nachschlagetabelle hat zwei Flip-Flops an ihrem Ausgang.

Ich habe keine offiziellen Nummern für diese Geräte, aber das Flip-Flop am Ausgang kann je nach Implementierung 6-12 Transistoren aufnehmen. Die Nachschlagetabelle könnte fast 1000 Transistoren aufnehmen.

Die Hardwarekosten eines Flip-Flops oder Latches sind also fast gleich Null im Vergleich zur Gesamtzahl der Transistoren.