Die Frage:
Wann werden Latches in einem FPGA, der beide unterstützt, besser verwendet als Flip-Flops?
Hintergrund:
Es ist ein bekanntes Prinzip, dass bei FPGAs pegelsensitive transparente Latches vermieden werden sollten und ausschließlich kantensensitive Flip-Flops verwendet werden sollten. Die meisten FPGA-Architekturen unterstützen sowohl Latches als auch Flip-Flops.
Der allgemeine Ratschlag - auch von FPGA-Anbietern - lautet, auf Latches zu achten oder niemals Latches usw. zu verwenden. Es gibt sehr gute Gründe für diesen Ratschlag, dessen Einzelheiten allgemein bekannt sind. Die meisten Ratschläge lauten jedoch "Verwenden Sie keine Riegel, wenn Sie nicht wissen, dass Sie sie benötigen".
Ich bin ein erfahrener FPGA-Designer, und im Laufe der Jahre wurde mir jedes Mal, wenn ich dachte , dass ich einen Riegel brauche, klar, dass es einen besseren Weg gibt, dies mit Flip-Flops zu tun. Ich bin daran interessiert, Beispiele zu hören, bei denen die Verwendung von Riegeln eindeutig besser ist.
Wichtige Notiz:
Latches vs. Flip-Flops bringen die Leute oft in Aufruhr. 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 NOT-Latches darlegen, darlegen, warum Flip-Flops besser sind als Latches, darüber sprechen, wie Latches in Nicht-FPGA-Zielen besser sind, usw., wären völlig unangebracht.
Antworten:
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 Meinung als Tatsache als Antwort. Davon abgesehen ist hier meine Meinung:
Ich finde, wie Sie, oft bessere Möglichkeiten, Flip-Flops zu verwenden, um Latches zu vermeiden. Die daraus 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. Ich kann beispielsweise eine Schnittstelle zu einem Prozessorbus herstellen, für den Latches erforderlich sind, um die gewünschten Spezifikationen zu erfüllen. Da ich die CPU oder den Bus nicht neu gestalten kann, stecke ich mit der Verriegelung fest.
In den letzten 13 Jahren war dies das einzige Mal, dass ich Verschlüsse brauchte.
quelle
Flip-Flops sind Latches oft vorzuziehen, da sie nur vier Race-Bedingungen / -Beschränkungen haben:
Wenn diese Bedingungen erfüllt sind, ist die Ausgabe eines Flip-Flops vollständig "sauber" und frei von Wonkiness. Ferner ist die Zeitsteuerung eines Flip-Flops in gewissem Sinne "digital": Wenn Zeiteinschränkungen erfüllt sind, ändert sich die Ausgabe nur innerhalb eines vorhersagbaren Fensters nach einer aktiven Taktflanke, unabhängig von der Eingangszeitsteuerung. Der Effekt von kaskadierenden Flip-Flops ist somit unabhängig von der Tiefe vorhersehbar. Im Gegensatz dazu ist das Timing eines Latch-Ausgangs viel "analoger". Eine Verzögerung des Signals in einem Latch kann eine Verzögerung des Signalausgangs verursachen. Selbst wenn die eigenen Bedingungen des Latchs erfüllt sind, kann diese Verzögerung nachgeschaltete Probleme verursachen.
Ich würde die Verwendung von Latches in Fällen empfehlen, in denen das erforderliche Verhalten der Ausgänge eines Chips am sinnvollsten von einem modelliert werden kann. Beispielsweise soll sich die eigene Hardware wie ein Seriell-Parallel-Wandler verhalten, bei dem zwischen der ansteigenden und der abfallenden Flanke des ersten Takts nach einer Rahmensynchronisation 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 Flip-Flops und einer rein kombinatorischen Logik entwerfen, die ein solches Verhalten ergibt, vorausgesetzt, die Zeitbedingungen werden erfüllt, aber eine solche Schaltung wäre mehr Es ist komplizierter als das Verwenden von Latches und es ist anfälliger, sich merkwürdig zu verhalten, wenn zeitliche Einschränkungen nicht eingehalten werden.
quelle
Bei meiner Arbeit musste ich manchmal Latches im FPGA implementieren, aber es war immer eine "letzte Ausweg" -Lösung. Typische Anwendungen waren Verbindungen mit asynchronen Schnittstellen oder Bussen, wenn ich keinen Takt mit ausreichender Geschwindigkeit sicherstellen konnte, um eine ordnungsgemäße Abtastung und Synchronisation der Bus- und Steuersignale zu gewährleisten.
Das Hauptproblem ist, dass der Latch ein asynchroner Block ist. Daher müssen Sie, dass die kombinatorischen Funktionen gewährleisten , die für die Eingangssignale zu erzeugen Latch sind Rennen -frei. Andernfalls können Störimpulse auftreten , die einrasten und zu Gefahren in Ihrem System führen können.
Um Rennen zu vermeiden, müssen Sie diese Kombinationsfunktion auf eine spezielle redundante Weise implementieren. Leider (in diesem speziellen Fall ;-), sonst ist es eine sehr gute Eigenschaft) optimieren die FPGA-Synthese-Tools Ihr Design, indem sie jegliche Redundanz beseitigen. 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 das Attribut "keep" für intern in Ihrem Latch verwendete Signale auf "true" setzen). .
quelle
In Bezug auf das Timing:
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 Verzögerungen bei kombinierten Pfaden durch Ausleihen von Zeit aus den kürzeren Pfadverzögerungen in den nächsten Stufen kompensieren. Dadurch können wir die Verzögerungen reduzieren und die Leistung des Designs steigern.
quelle