Warum müssen wir asynchrone Eingänge in FSM synchronisieren?

8

Ich habe gerade digitale Elektronik gelernt. Ich weiß, dass es Gates gibt, die logische Funktionen 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-Maschine (zum Beispiel eine Ampel) erstellen. Im Unterricht sprachen wir über dieses spezielle Ampelbeispiel und es gab eine Diskussion darüber, welche Probleme auftreten, wenn wir eine Start / Stopp-Taste hinzufügen würden (Signal an die Ampel, dass ein Fußgänger auf grünes Licht wartet).

Die Schlussfolgerung war, dass diese Schaltfläche eine asynchrone Eingabe sein würde. Wir müssen ein Flip-Flop vor die Zustandsmaschine stellen, damit diese Eingabe 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 bei der Synchronisation helfen? Ich habe in mehreren Artikeln über "Metastabilität" gelesen, aber ich verstehe es immer noch nicht

Vielen Dank

Eren
quelle

Antworten:

6

Wie Sie bereits verstehen, ist Ihre Ampelsteuerungs-Zustandsmaschine eine Synchronmaschine. Das heißt, es wird von einem Takt so gesteuert, dass alle kombinatorischen Logikänderungen stattfinden und sich lange genug vor der nächsten Taktflanke auf stabile Werte einstellen, um die erforderlichen Rüstzeiten zu erreichen.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

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 ein endgültiger Wert ausgewählt wird. Es kann sogar mit einer hohen Frequenz zwischen logischer Eins und logischer Null schwingen, was einen beträchtlichen Stromfluss und eine beträchtliche Erwärmung verursacht.

Geben Sie hier die Bildbeschreibung ein

Daher muss jede asynchrone Eingabe in eine Zustandsmaschine irgendwann synchronisiert werden, damit das System wie erwartet funktioniert. Dies bedeutet jedoch nicht unbedingt, dass Sie dem System IMMER einen weiteren Latch hinzufügen müssen.

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

Wenn jedoch der Eingang mehrere Gatter speist, die unterschiedlich sind. 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 schlechten Dingen passieren.

Dies kann anhand Ihres einfachen Beispiels veranschaulicht werden. Hinweis: Wenn sich die Metastabilität bei REG1 nicht vor der nächsten Uhr eingestellt hat, kann dies dazu führen, dass sowohl der WALK als auch die Ampel gleichzeitig eingeschaltet werden oder sich keiner einschaltet.

schematisch

simulieren Sie diese Schaltung

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

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

Möglicherweise fragen Sie jedoch: "Aber leidet DIESER Riegel nicht unter demselben Problem?" und natürlich wäre die Antwort ja, das tut es. Der Trick dabei ist jedoch, dass diese potenzielle Metastabilität an einem Punkt in der Schaltung auftritt, an dem es nicht darauf ankommt, 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 Eingaben zu qualifizieren.

Beachten Sie jedoch, dass Metastabilität eine Wahrscheinlichkeitssache ist. Obwohl sich die meisten Verriegelungen aufgrund unterschiedlicher Fertigungstoleranzen sehr schnell von der Seite lösen, besteht die Möglichkeit, dass sie für einige Zeit instabil bleiben. Je länger die Lücke zwischen den Taktimpulsen ist, desto höher ist die Wahrscheinlichkeit, dass sie sich gesetzt haben. Wenn Ihre Systemuhr eine hohe Frequenz hat, ist es daher ratsam, sie aufzuteilen, um die Vorverriegelung durchzuführen, um mehr Einschwingzeit zu ermöglichen. Selbst dann gibt es jedoch keine Garantien.

Ein letzter Gedanke. Ich erwähnte, dass es die Möglichkeit von durch Metastabilität induzierten hohen Strömen und Erwärmung gibt, wenn ein zufälliger externer Eingang synchronisiert wird. Leider können Sie nur sehr wenig tun, um diese und lange Metastabilitätsprobleme zu beheben, außer asynchrone Eingangsschaltungen zu entfernen.

Trevor_G
quelle
Vielen Dank! Der zusätzliche Takt von einem Takt vom Flip-Flop verlängert also die Zeit, bis sich die Metastabilität stabilisiert hat? Warum sollten wir am Ende eines FSM ein Flip-Flop setzen?
Eren
@Eren Ja fügt Zeit hinzu und gibt ihm logischerweise einen sicheren Ort, um sich synchron zu verhalten. Im Allgemeinen möchten Sie, dass sich alle Ausgänge gleichzeitig ändern. Daher sollte die letzte Stufe normalerweise ein Flip-Flop oder genauer gesagt ein "Latch" -Ausgang sein, damit die Ausgänge alle synchron sind.
Trevor_G
1
gab Ihnen + 1 für mehrere Tore, aber auf das Vertrauen, dass Sie Ihre letzten Absätze korrigieren. Die Metastabilität im Sync-Latch ist ebenfalls wichtig, da diese in die Schaltung übertragen werden kann. Es gibt keine Heilung für Metastabilität. Sie können die Wahrscheinlichkeit jedoch auf eine verschwindend kleine Wahrscheinlichkeit reduzieren, indem Sie länger vor der endgültigen Entscheidung warten. Um eine Reduzierung der Taktrate zu vermeiden, erfolgt dies normalerweise durch Pipelining zusätzlicher D-Flops davor. Sobald die Wahrscheinlichkeit eines Fehlers im Zeitalter des Universums für 1 Milliarde Schaltkreise mit maximaler Taktrate auf einmal gesunken ist, halten die meisten Leute die Metastabilität für "geheilt"
Neil_UK
@Neil_UK yup, ich habe versucht, das zu sagen, ohne das OP zu sehr zu verwirren. Noch in Arbeit. Ich muss allerdings für den Tag aussteigen. Vielen Dank.
Trevor_G
1
Metastabilität ist ein Trottel in solchen Diskussionen. In der Realität schlägt die von Ihnen beschriebene Situation, in der Sie mehrere Eingaben über die Taktgrenze speisen, viel häufiger fehl als Metastabilitätsereignisse. 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 und nach der ansteigenden Flanke ein anderes Flip-Flop erreichen kann. Ich mache diese Unterscheidung, weil Metastabilität nur in Fällen ein Problem ist, in denen Sie nur sehr wenig Spiel haben, während Routing-Versatz immer ein Problem ist.
Jalalipop
3

Ein Problem bei asynchronen Designs ist das Vorhandensein von Rennen oder Gefahren. Nehmen wir zum Beispiel in dieser Schaltung an, lassen Sie zunächst A = 1, B = 0 und C = 1, und so ist D stabil und bei 1 festgelegt.

Geben Sie hier die Bildbeschreibung ein

Nun lassen Sie B auf 1 geändert und C auf 0 geändert im selben Moment . Es ist offensichtlich, dass D bei 1 bleibt. In realen Schaltungen sind jedoch Ausbreitungsverzögerungen und Drahtverzögerungen von Bedeutung. Daher ist es sehr wahrscheinlich, dass die Änderung von C das ODER-Gatter schneller erreicht, als sich die Änderung von B durch das UND-Gatter zum ODER-Gatter ausbreitet. Das Ergebnis ist, dass D kurz auf 0 gezogen wird, bevor es wieder in seinen stabilen Zustand 1 übergeht. Dies wird als Rennen oder Gefahr bezeichnet. Dieser momentane Fehler kann jede nach D vorhandene Schaltung auslösen, und dieser unerwünschte Übergang breitet sich über die gesamte Schaltung aus. 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 D-Flip-Flops hinzufügen. Damit unsere Schaltung jetzt nur noch stabile Eingänge an Taktflanken speichert, berechnet den Ausdruck, speichert D und gibt ihn erst bei der nächsten Taktflanke aus. Dies stellt sicher, dass sich in unserer Schaltung keine derartigen Störungen in den Ein- oder Ausgängen ausbreiten, vorausgesetzt, dass alle Eingänge zu Flip-Flops die Einrichtungs- und Haltezeit erfüllen.

Dies ist der Hauptgrund, warum synchrone Designs trotz der Geschwindigkeit, die asynchrone Designs bieten, bevorzugter sind.

Mitu Raj
quelle
Vielen Dank! Ich habe nur noch eine Frage, ob das in Ordnung ist. Das Hinzufügen der Flip-Flops vor den Eingängen und nach den Ausgängen führt zu einer Verschiebung von zwei Taktzyklen. Wird die Schaltung Probleme für unsere Zustandsmaschine verursachen? Es gab eine Analogie, bei der Person A bis 7 zählte und Person B fragte, ob sie richtig gezählt habe. B wird es analysieren und mit "Ja" antworten. Wenn wir ein Flip-Flop vor uns hätten und nach der Ausgabe würde die Antwort "Ja" Person A erreichen, wenn sie bereits bei 9 ist. Ich sehe nicht, wie dies neben der Latenz Probleme verursachen würde
Eren
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 wird FSM normalerweise entworfen.
Mitu Raj
Ja, das ist die Verzögerung, die durch Flip-Flop verursacht wird, aber das hat keinen Einfluss auf die Funktionalität.
Mitu Raj