Ein "Latch" unterscheidet sich von einem "Flip-Flop" darin, dass ein FF seinen Ausgang nur als Reaktion auf eine Taktflanke ändert. Ein Latch kann seine Ausgabe als Reaktion auf etwas anderes als eine Uhr ändern. Zum Beispiel hat ein SR-Latch einen Set- und einen Reset-Eingang und wenn einer von beiden aktiv ist, kann sich der Ausgang ändern. Wobei ein SR-FF nur auf ein Setzen oder Zurücksetzen reagiert, wenn es auch eine Taktflanke gibt.
In einem FPGA soll Ihre Logik vollständig synchron sein. Dies bedeutet, dass alle Speicherelemente (wie z. B. FFs) von einer einzigen Taktquelle getaktet werden. Alles, was asynchron zu dieser Uhr ist, muss sehr sorgfältig behandelt werden, da sonst Zeitsteuerungsfehler auftreten.
Ein Latch ist grundsätzlich ein asynchrones Speicherelement. Es hat keinen Takteingang und kann daher nicht mit einer Uhr synchronisiert werden. Ich sollte beachten, dass es FFs mit asynchronem Reset und Reset-Eingängen gibt, und diese sollten mit der gleichen Sorgfalt wie normale Latches behandelt werden.
Das Eingehen auf alle Zeitprobleme, die Latches verursachen können, geht weit über das hinaus, was hier behandelt werden kann. Lassen Sie mich jedoch ein Beispiel geben:
Angenommen, Sie haben einen SR-Latch und möchten, dass dieser jedes Mal gesetzt wird, wenn ein 8-Bit-Zähler einen bestimmten Wert erreicht. Ich bin nicht sicher, wie der Verilog-Code lauten würde, aber in VHDL lautet der Code: set <= '1' when count = "11010010" else '0'; Das eingestellte Signal geht an den Set-Eingang unseres SR-Latch.
Die Logik, die erzeugt wird, ist rein kombinatorisch; Eine Mischung aus And-Gates, Or-Gates und Invertern (oder LUTs). Aber die Signalwege durch diese kombinatorische Logik sind nicht immer perfekt und das "gesetzte" Signal könnte Störungen aufweisen. Der Signalweg durch eine bestimmte Gruppe von Gattern kann länger dauern als bei einer anderen Gruppe, sodass der eingestellte Ausgang für einen kurzen Moment aktiv wird, bevor der Ausgang in den Endzustand übergeht.
Diese Ausgangsstörung könnte dazu führen, dass unser SR-Latch gesetzt wird, obwohl dies nicht der Fall war. Wenn wir von einem SR-Latch zu einem SR-FF wechseln, der mit demselben Takt wie der Zähler getaktet ist, wartet der SR-FF einen ganzen Taktzyklus, bevor er den Zustand ändert. Im Wesentlichen wartet es darauf, dass sich das eingestellte Signal einstellt, bevor es angezeigt wird.
Wenn die Pfade durch die kombinatorische Logik für das eingestellte Signal nur unterschiedlich geroutet werden (was zu unterschiedlichen Verzögerungen führt), ändert sich auch das Glitch-Verhalten. Die Logik könnte gut funktionieren, aber da Sie etwas völlig Unabhängiges geändert haben, wird diese Logik anders geroutet, und der Fehler tritt auf. Temperatur und Spannung ändern auch das Signal-Timing und können somit das Störimpulsverhalten ändern.
Dies ist unsicher im Timing, weshalb Sie Latches in Ihrer Logik vermeiden sollten. FFs sind viel sicherer zu bedienen. Dies ist der Grund, warum Ihr Compiler Sie vor Latches warnt, da es leicht ist, fälschlicherweise ein Latch zu erstellen, und Sie es wahrscheinlich sowieso nicht wollen.
Natürlich sind manchmal Verriegelungen erforderlich. Sie müssen sie nur sehr selten verwenden, nur wenn dies unbedingt erforderlich ist, und dann müssen Sie die Logik richtig entwerfen, damit keine Störungen möglich sind.