Wann ist die Verwendung von Latches besser als von Flip-Flops in einem FPGA, das beides unterstützt?

Die Frage:

Wann ist die Verwendung von Latches besser als von Flip-Flops in einem FPGA, das beides unterstützt?

Hintergrund:

Es ist ein bekanntes Prinzip, dass pegelsensitive transparente Latches in FPGAs vermieden werden sollten und ausschließlich flankensensitive Flip-Flops verwendet werden sollten. Die meisten FPGA-Architekturen unterstützen nativ sowohl Latches als auch Flip-Flops.

Der allgemeine Rat – sogar von den FPGA-Anbietern – lautet, auf Latches zu achten oder niemals Latches usw. zu verwenden. Es gibt sehr gute Gründe für diesen Rat, dessen Einzelheiten alle bekannt sind. Die meisten Ratschläge lauten jedoch: "Verwenden Sie keine Verriegelungen, es sei denn, Sie wissen , dass Sie sie brauchen".

Ich bin ein erfahrener FPGA-Designer, und jedes Mal, wenn ich dachte, ich wüsste , dass ich einen Riegel brauche, wurde mir schnell klar, dass es mit Flip-Flops einen besseren Weg gibt, dies zu tun. Ich bin daran interessiert, Beispiele dafür zu hören, wann die Verwendung von Riegeln eindeutig besser ist.

Wichtiger Hinweis:

Latches vs. Flip-Flops regen die Leute oft auf. Mich interessiert nur die Antwort auf die Frage. Antworten, die den Unterschied zwischen Latches und Flip-Flops erklären, Gründe für die Verwendung von Latches NICHT verwenden, erläutern, warum Flip-Flops besser sind als Latches, darüber sprechen, wie Latches in Nicht-FPGA-Zielen besser sind usw., wären völlig off-topic.

Wenn Sie ein FPGA verwenden, um eine vorhandene Schaltung, die Latches verwendet, genau nachzuahmen?

Antworten (4)

Ihre Frage lautet im Grunde: "Wann wissen Sie, dass Sie Verriegelungen benötigen?" Was, wie Sie angedeutet haben, eine subjektive Frage ist. Erwarten Sie mehr Meinungen als Fakten als Antworten. Davon abgesehen hier meine Meinung:

Ich finde wie Sie oft bessere Möglichkeiten, Flip-Flops zu verwenden und so Latches zu vermeiden. Die resultierende Logik ist oft eleganter und robuster. Aber es gibt Zeiten, in denen ich nicht genug Kontrolle über die Logik habe, um Latches zu vermeiden. Zum Beispiel könnte ich eine Schnittstelle zu einem Prozessorbus haben, der Latches benötigt, um die gewünschten Spezifikationen zu erfüllen. Da ich die CPU oder den Bus nicht umgestalten kann, stecke ich mit dem Latch fest.

In den letzten 13+ Jahren war das das einzige Mal, dass ich Riegel brauchte.

Danke für die Antwort. Ich speichere Ihre Antwort mental unter "obligatorische Abwärtskompatibilität", was völlig vernünftig erscheint. =)

Flip-Flops sind Latches oft vorzuziehen, da sie nur vier Rennbedingungen/Einschränkungen haben:

  1. Setup-Zeit zwischen einer Änderung des Dateneingangs und einer folgenden aktiven Taktflanke, und
  2. Haltezeit zwischen einer Taktflanke und der nächsten Änderung an der Dateneingabe;
  3. minimale aktive Taktdauer;
  4. minimale inaktive Taktdauer.

Wenn diese Einschränkungen erfüllt sind, ist die Ausgabe eines Flip-Flops vollständig "sauber" und frei von Wackeln. Ferner ist das Timing eines Flip-Flops gewissermaßen "digital": Vorausgesetzt, dass Timingbeschränkungen eingehalten werden, ändert sich der Ausgang nur innerhalb eines vorhersagbaren Fensters nach einer aktiven Taktflanke, ungeachtet des Eingangstimings. Die Wirkung kaskadierender Flip-Flops ist somit unabhängig von der Tiefe vorhersagbar. Im Gegensatz dazu ist das Timing eines Latch-Ausgangs viel "analoger". Eine Verzögerung des in einen Latch gehenden Signals kann eine Verzögerung des herauskommenden Signals verursachen. Selbst wenn die eigenen Beschränkungen des Zwischenspeichers eingehalten werden, kann diese Verzögerung stromabwärts Probleme verursachen.

Ich würde die Verwendung von Latches in Fällen empfehlen, in denen das erforderliche Verhalten der Ausgänge eines Chips am vernünftigsten durch einen modelliert werden kann. Beispielsweise soll sich die eigene Hardware wie ein Seriell-zu-Parallel-Wandler verhalten, bei dem zwischen den ansteigenden und abfallenden Flanken des ersten Takts nach einer Frame-Synchronisation der erste Ausgang dem Eingang folgt; zwischen den ansteigenden und abfallenden Flanken des zweiten Takts folgt der zweite Ausgang dem Eingang usw. Man könnte eine Schaltung unter Verwendung von Flipflops und rein kombinatorischer Logik entwerfen, die ein solches Verhalten ergeben würde, vorausgesetzt, dass Zeitbeschränkungen eingehalten werden, aber eine solche Schaltung wäre mehr komplizierter als eine, die Latches verwendet, und würde eher dazu neigen, sich seltsam zu verhalten, wenn Zeitbeschränkungen nicht eingehalten würden.

„Antworten, die den Unterschied zwischen Latches und Flip-Flops erklären, Gründe für die Verwendung von Latches NICHT verwenden, erläutern, warum Flip-Flops besser sind als Latches, darüber sprechen, wie Latches in Nicht-FPGA-Zielen besser sind usw., wären völlig off-topic ."
@supercat Nun, zumindest der zweite Teil Ihrer Antwort hat eine relevante Antwort auf die Frage. =) Danke.
@Majenko: Vielleicht hätte ich eher "einfacher zu bedienen" als "bevorzugt" sagen sollen; Mir ging es nicht darum, zu argumentieren, dass man Latches wann immer möglich vermeiden sollte, sondern vielmehr darauf hinzuweisen, dass jemand, der Latches verwendet, sich der Komplexität bewusst sein muss.
@supercat, kannst du dein Beispiel bitte mit einem kurzen Wavetrace verdeutlichen?

Bei meiner Arbeit musste ich manchmal Latches im FPGA implementieren, aber es war immer eine "letzte Möglichkeit". Zu den typischen Anwendungen gehörten Verbindungen mit asynchronen Schnittstellen oder Bussen, wenn ich keinen Takt mit ausreichender Geschwindigkeit gewährleisten konnte, um eine ordnungsgemäße Abtastung und Synchronisation der Bus- und Steuersignale sicherzustellen.

Das Hauptproblem besteht darin, dass das Latch ein asynchroner Block ist. Daher müssen Sie sicherstellen, dass die kombinatorischen Funktionen, die Eingangssignale für das Latch erzeugen, wettlauffrei sind . Andernfalls können sie Glitches erzeugen , die verriegelt werden und Gefahren in Ihrem System verursachen können.

Um Races zu vermeiden, müssen Sie diese kombinatorischen Funktionen auf spezielle redundante Weise implementieren. Leider (in diesem speziellen Fall ;-), ansonsten ist es eine sehr gute Eigenschaft) optimieren die FPGA-Synthesewerkzeuge Ihr Design und entfernen alle Redundanzen. Wenn Sie also ein Latch in FPGA implementieren möchten, müssen Sie es "von Hand" implementieren und vor Optimierung schützen (z. B. müssen Sie in VHDL möglicherweise das Attribut "keep" auf "true" für Signale setzen, die intern in Ihrem Latch verwendet werden). .

-1 Das OP hat ausdrücklich gefragt, wann Sie Latches verwenden sollten , und die Leser ausdrücklich gebeten, keine weiteren Gründe anzugeben, warum Latches nicht verwendet werden sollten.

In Bezug auf den Zeitpunkt:

Wenn wir Flip-Flops in einem Design verwenden, hängt die Leistung von den längsten kombinatorischen Pfadverzögerungen ab.

Wenn wir Latches anstelle von Flip-Flops verwenden, können wir die längsten Combo-Pfadverzögerungen kompensieren, indem wir uns in den nächsten Stufen Zeit von den kürzeren Pfadverzögerungen leihen. Damit können wir die Verzögerungen reduzieren und die Leistung des Designs steigern.

-1. Es ist besser, es mit einer Mehrzyklusbeschränkung richtig zu analysieren und den "asynchronen" Teil über zwei Zyklen laufen zu lassen. Siehe z. B. Seite 7-30 von altera.co.uk/literature/hb/qts/qts_qii53018.pdf