Warum müssen wir asynchrone Eingaben in FSM synchronisieren?

Ich habe neu digitale Elektronik gelernt. Ich weiß, dass es Gatter gibt, die Logikfunktionen ausführen, ich habe etwas über RS-Latch, D-Latch und Master-Slave-D-Flip-Flop gelernt. Jetzt, da ich Logikfunktionen ausführen und Zustände speichern kann, kann ich eine Finite-State-Machine (z. B. Ampel) erstellen. Im Unterricht haben wir über dieses spezielle Ampelbeispiel gesprochen und darüber diskutiert, welche Probleme entstehen würden, wenn wir einen Start/Stopp-Knopf hinzufügen würden (Signal an der Ampel, dass ein Fußgänger auf grünes Licht wartet).

Die Schlussfolgerung war, dass dieser Knopf ein asynchroner Eingang wäre, wir müssen ein Flipflop vor die Zustandsmaschine setzen, damit dieser Eingang zuerst synchronisiert werden kann.

Was ich nicht verstehe ist, was ist das Problem mit den asynchronen Eingaben? Warum müssen wir es synchronisieren? Und warum sollte ein Flip-Flop vor der Zustandsmaschine oder hinten beim Synchronisieren helfen? Ich habe mehrere Artikel gelesen, in denen es um "Metastabilität" geht, aber ich verstehe es immer noch nicht.

Danke vielmals.

Antworten (2)

Wie Sie bereits wissen, ist Ihre Ampelsteuerungs-Zustandsmaschine eine Synchronmaschine. Das heißt, es wird von einem Takt so angesteuert, dass alle kombinatorischen Logikänderungen stattfinden und lange genug vor der nächsten Taktflanke auf stabile Werte einschwingen, um die erforderlichen Einstellzeiten einzuhalten.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Geben Sie hier die Bildbeschreibung ein

Wenn sich die Daten innerhalb dieser Einrichtungszeit ändern, ist die endgültige Ausgabe nicht nur unvorhersehbar, sondern kann aufgrund der Metastabilität tatsächlich eine Weile um einen Zwischenwert schweben oder tanzen, bevor sie einen endgültigen Wert auswählt. Es kann sogar mit hoher Frequenz zwischen logisch Eins und logisch Null oszillieren, was einen erheblichen Stromfluss und eine Erwärmung verursacht.

Geben Sie hier die Bildbeschreibung ein

Daher muss jede asynchrone Eingabe an eine Zustandsmaschine irgendwann synchronisiert werden, damit das System so funktioniert, wie Sie es erwarten. Das bedeutet jedoch nicht unbedingt, dass Sie dem System IMMER eine weitere Verriegelung hinzufügen müssen.

Wenn der Eingang nur zu einem einzigen "nächsten Tor" weitergeht UND der Zustand des Eingangs unabhängig von allen anderen Eingängen ist, dann spielt es wirklich keine Rolle, ob das Signal zu spät bei der Partei ankommt. Grundsätzlich müssen Sie fragen ... "Wenn wir die Eingabe für einen Taktzyklus verpassen, spielt es eine Rolle?"

Wenn jedoch der Eingang mehrere Gates speist, ist das anders. Die nächsten Gatter können unterschiedliche Logikpegel sehen und einen fehlerhaften Zustand an den nächsten Latch weitergeben. Grundsätzlich kann eine Vielzahl von schlimmen Dingen passieren.

Das lässt sich an deinem einfachen Beispiel verdeutlichen. Beachten Sie, dass, wenn sich die Metastabilität bei REG1 nicht vor der nächsten Uhr eingestellt hat, dies dazu führen kann, dass sowohl das GEHEN als auch die Ampel zur gleichen Zeit eingeschaltet werden, oder dass keine von beiden eingeschaltet werden kann.

schematisch

Simulieren Sie diese Schaltung

Wenn eine asynchrone Eingabe eine Beziehung zu einer anderen asynchronen Eingabe hat, von der Sie erwarten, dass sie zur gleichen Zeit erfolgt, wird die zweite Eingabe möglicherweise erkannt, die erste jedoch nicht.

In beiden Fällen müssen Sie dem Eingang ein Synchronisierungs-Latch hinzufügen, um das Signal-Timing mit dem Takt der Zustandsmaschine in Einklang zu bringen. Beachten Sie, dass dies eine Taktzyklusverzögerung oder eine halbe Taktzyklusverzögerung hinzufügt, wenn Sie die andere Flanke des Taktsignals verwenden.

Sie fragen sich jedoch vielleicht: "Aber leidet DIESE Verriegelung nicht unter demselben Problem?" und natürlich wäre die Antwort ja, das tut es. Aber der Trick dabei ist, diese potentielle Meta-Stabilität an einem Punkt in der Schaltung passieren zu lassen, wo es keine Rolle spielt, wie ich oben hervorgehoben habe.

Das Finden dieses Punktes kann bei abhängigen Eingaben problematisch sein. Normalerweise muss zusätzliche Logik hinzugefügt werden, um diese Eingänge zu qualifizieren.

Beachten Sie jedoch, dass Metastabilität eine Wahrscheinlichkeitssache ist. Obwohl die meisten Verschlüsse aufgrund von Unterschieden in den Herstellungstoleranzen sehr schnell an einer Seite brechen, besteht die Möglichkeit, dass sie für eine ganze Weile instabil bleiben. Je länger die Lücke zwischen den Taktimpulsen ist, desto höher ist die Wahrscheinlichkeit, dass sie sich stabilisiert hat. Wenn Ihr Systemtakt eine hohe Frequenz hat, ist es daher ratsam, ihn herunterzuteilen, um den Pre-Latch auszuführen, um mehr Einschwingzeit zu ermöglichen. Aber selbst dann gibt es keine Garantien.

Ein letzter Gedanke. Ich erwähnte, dass es beim Synchronisieren einer zufälligen externen Eingabe die Möglichkeit von durch Metastabilität induzierten hohen Strömen und Erwärmungen gibt. Leider können Sie nur sehr wenig tun, um diese und lange Metastabilitätsprobleme zu beheben, außer asynchrone Eingangsschaltungen zu entfernen.

Danke dir! Der zusätzliche Taktzyklus des Flip-Flops fügt also Zeit hinzu, damit sich die Metastabilität stabilisiert? Außerdem, warum sollten wir am Ende eines FSM einen Flip-Flop anbringen?
@Eren Ja fügt Zeit hinzu und gibt ihr logischerweise einen sicheren Ort, um sich in den Synchronismus einzuleben. Im Allgemeinen möchten Sie, dass sich alle Ausgänge gleichzeitig ändern. Die letzte Stufe sollte also normalerweise ein Flip-Flop oder genauer gesagt ein "Latch" -Ausgang sein, damit die Ausgänge alle synchron sind.
hat dir +1 für mehrere Tore gegeben, aber im Vertrauen darauf, dass du deine letzten Absätze korrigierst. Auch die Metastabilität im Sync-Latch ist von Bedeutung, da diese in die Schaltung geleitet werden kann. Metastabilität ist nicht heilbar. Sie können die Wahrscheinlichkeit jedoch auf eine verschwindend geringe Wahrscheinlichkeit reduzieren, indem Sie mit der endgültigen Entscheidung länger warten. Um eine Verringerung der Taktrate zu vermeiden, wird dies normalerweise durch Pipelining zusätzlicher D-Flops davor erreicht. Sobald die Fehlerwahrscheinlichkeit auf einmal im Zeitalter des Universums für 1 Milliarde Schaltkreise bei maximaler Taktrate gesunken ist, halten die meisten Leute Metastabilität für „geheilt“.
@Neil_UK ja, ich habe versucht, das zu sagen, ohne das OP zu sehr zu verwirren. Noch in Arbeit. Muss aber für den Tag aussteigen. Vielen Dank.
Metastabilität ist in solchen Diskussionen ein Buhmann. In Wirklichkeit wird die von Ihnen beschriebene Situation, in der Sie mehrere Eingänge über die Taktgrenze speisen, viel häufiger fehlschlagen, als Sie Metastabilitätsereignisse erhalten. Routing-Verzögerungen können in der Größenordnung von Nanosekunden verzerrt sein, was bedeutet, dass eine Änderung der Daten ein Flip-Flop vor der ansteigenden Flanke des Empfangstakts erreichen kann und ein anderes Flip-Flop nach der ansteigenden Flanke erreichen kann. Ich mache diese Unterscheidung, weil Metastabilität nur in Fällen ein Problem darstellt, in denen Sie sehr wenig Schlupf haben, während Routing-Schrägheit immer ein Problem ist.
@jalalipop in der Tat, das ist eine ganz andere Dose Würmer. ;)

Ein Problem bei asynchronen Designs ist das Vorhandensein von Rennen oder Gefahren. Sagen Sie zum Beispiel in dieser Schaltung, lassen Sie A = 1, B = 0 und C = 1 anfangs und so ist D stabil und auf 1 festgelegt.

Geben Sie hier die Bildbeschreibung ein

Lassen Sie nun B auf 1 und C im selben Moment auf 0 wechseln . Es ist offensichtlich, dass D auf 1 bleiben wird. Aber in realen Schaltungen spielen Ausbreitungsverzögerungen und Leitungsverzögerungen eine Rolle. Daher ist es sehr wahrscheinlich, dass die Änderung von C das ODER-Gatter schneller erreicht, als die Änderung von B sich über das UND-Gatter zum ODER-Gatter ausbreitet. Das Ergebnis ist, dass D kurzzeitig auf 0 gezogen wird, bevor es wieder in seinen stabilen Zustand 1 übergeht. Dies wird als Rennen oder Gefahr bezeichnet. Dieser momentane Störimpuls kann jede Schaltung auslösen, die nach D vorhanden ist, und dieser unerwünschte Übergang wird durch die gesamte Schaltung propagiert. Dies führt zu unerwünschter Verlustleistung und möglicherweise zu Funktionsfehlern.

Um diese Probleme zu vermeiden, können wir die Ein- und Ausgänge registrieren, indem wir vor allen Eingängen A, B, C und nach dem Ausgang D ein D-Flip-Flop hinzufügen. Damit speichert unsere Schaltung jetzt nur stabile Eingänge bei Taktflanken, berechnet den Ausdruck, speichert D und gibt ihn nur in der nächsten Taktflanke aus. Dies stellt sicher, dass keine solchen Störungen in Ein- oder Ausgängen in unserer Schaltung verbreitet werden, vorausgesetzt, dass alle Eingänge zu Flip-Flops die Setup- und Haltezeit erfüllen.

Dies ist der Hauptgrund, warum synchrone Designs trotz der Geschwindigkeit, die asynchrone Designs bieten, bevorzugt werden.

Danke sehr! Ich habe nur noch eine Frage, ob das ok ist. Das Hinzufügen der Flipflops vor den Eingängen und nach den Ausgängen bewirkt eine Verschiebung um zwei Taktzyklen. Wird die Verschiebung unserer Zustandsmaschine Probleme bereiten? Es gab eine Analogie mit Person A, die bis 7 zählt und Person B fragt, ob sie richtig gezählt hat. B analysiert es und antwortet mit "Ja". Wenn wir ein Flip-Flop vorne hätten und nach der Ausgabe die Antwort "Ja" erreichen würde, wenn Person A bereits bei 9 ist. Ich sehe nicht, wie dies außer Latenz irgendwelche Probleme verursachen würde
Nach dem Zwischenspeichern der Eingänge in einem Taktzyklus erhalten wir den Ausgang im nächsten Taktzyklus selbst. Die Funktionalität bleibt gleich. Zustandsübergang in jedem Taktzyklus. So ist FSM normalerweise aufgebaut.
Ja, das ist die durch das Flip-Flop verursachte Verzögerung, aber das beeinträchtigt die Funktionalität nicht.