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!
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.
Hier ist eine grobe Liste, warum Latches in FPGAs vorhanden sind:
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.
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 .
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.
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.
Joe Hass
Martin Thomson
Daniel Weisehart