Durchgerechnetes Beispiel: ein Sequenzdetektor
← Alle Artikel

Durchgerechnetes Beispiel: ein Sequenzdetektor

6 Min

Ein Muster in einem Bitstrom erkennen

Das Beispiel der Ampel läuft vollständig von selbst ab; ein Sequenzdetektor reagiert stattdessen auf einen externen Bitstrom, ein Bit pro Takt, und muss genau den Moment erkennen, in dem ein Zielmuster — sagen wir die 3-Bit-Folge 1-0-1 — gerade eingetroffen ist, egal wie es mit anderen Bits davor und danach durchmischt ist.

Ein Zustand pro „wie viel Fortschritt bisher"

Jeder Zustand repräsentiert, wie viel der Zielsequenz bisher übereinstimmt: S0 (kein Fortschritt), S1 (eine führende 1 gefunden), S2 (1-0 gefunden), wonach die Übereinstimmung abgeschlossen wird und je nachdem, was als Nächstes eintrifft, zurück nach S0 oder S1 gewechselt wird. Eine 0 in S1 führt nach S2; eine 1 in S2 schließt die Übereinstimmung ab. Entscheidend ist, dass sich Treffer überlappen dürfen: Der Abschluss von 1-0-1 aus S2 landet zurück in S1, nicht in S0, da genau diese letzte 1 auch der Beginn des nächsten Treffers sein könnte.

01101 → Treffer0S0S1S2

Warum das ein Mealy-Automat sein muss, kein Moore-Automat

Der ganze Sinn liegt darin, den Treffer genau in dem Moment zu melden, in dem das entscheidende Bit eintrifft, im selben Takt — genau die Reaktion im selben Takt, die einen Mealy-Automaten definiert: Ausgang = f(Zustand, Eingang), nicht nur Ausgang = f(Zustand). Eine Moore-Version könnte ihren Ausgang erst einen vollen Takt anheben, nachdem das Muster bereits abgeschlossen war.

Probieren Sie es selbst

Bauen Sie im Schaltungseditor das 2-Bit-Zustandsregister und die Folgezustands-/Ausgangslogik für den 1-0-1-Detektor — drei Zustände passen bequem in 2 Bit —, steuern Sie einen Bitstrom über einen INPUT-Schalter jeweils eine CLOCK-Flanke zur Zeit ein, und bestätigen Sie, dass der Ausgang genau in dem Moment hochgeht, in dem das dritte Bit eines 1-0-1-Musters eintrifft, einschließlich überlappender Treffer wie 1-0-1-0-1.

Einen Sequenzdetektor im Schaltungseditor bauen →