Wie entwerfe ich eine getaktete synchrone Zustandsmaschine für ein Zahlenschloss?

Ich brauche Hilfe bei der Erledigung einer Aufgabe, ich stecke bei einigen Dingen fest. Da ich in diesem Thema auf endlichen Maschinen sehr neu bin.

Ich habe versucht, das Zustandsdiagramm, die Zustandstabelle, die Übergangstabelle, die K-Map-Werte und die K-Maps (Karnaugh - Map) selbst zu erstellen. Vieles davon ist jedoch unvollständig, weil ich nicht weiß, wie ich weitermachen soll.

Alle Hinweise oder Hilfe sind willkommen; Ich bitte nicht um Antworten, sondern nur um Anleitung, ich habe es jetzt eine ganze Woche lang versucht, aber es immer noch nicht geschafft, dies abzuschließen.

Sie können meine Aufgabe unten lesen. Und in meinen Zeichnungen sind gelb hervorgehobene Fragen, die zeigen, wo ich feststecke oder wo ich die größten Schwierigkeiten habe, eine Lösung zu finden.

Aufgabe: Entwerfen Sie eine getaktete synchrone Zustandsmaschine für ein Zahlenschloss mit zwei Eingängen (X und Y) und einem Ausgang (Z).

Der Eingang 'X' wird verwendet, um den Sequenzeintrag zu initialisieren. Der Eingang 'Y' wird verwendet, um die Binärsequenz zum Entsperren einzugeben. Der Ausgang 'Z' wird eingeschaltet, wenn und nur wenn die Binärfolge nach der Initialisierung in der richtigen Reihenfolge eingegeben wird, und muss eingeschaltet bleiben, solange der X-Eingang hoch bleibt.

Dieses Kombinationsschloss funktioniert wie folgt. Der Eingang 'X' muss in der vorangegangenen Taktperiode von Low auf High gewechselt sein und soll danach High bleiben (Initialisierung). Die Eingabe der ersten Binärziffer muss erfolgen, bevor der nächste Taktzyklus beginnt, und die Eingabe der verbleibenden Ziffern erfolgt bei den nachfolgenden Takten.

Wenn eine falsche Sequenz eingegeben wird, ist eine Neuinitialisierung erforderlich, um mit der Eingabe der richtigen Sequenz zu beginnen.Geben Sie hier die Bildbeschreibung ein

Meine Tabellen und Zeichnungen für diese Aufgabe:

Zustandsdiagramm

Zustandstabelle und Übergangstabelle

K-Map-Werte

K-Karten

AKTUALISIEREN!

ZustandsdiagrammZustandstabelle

ZustandstabelleZustandsdiagramm

Bevor Sie zu weit gehen, beachten Sie, dass das Timing-Diagramm den Code zeigt, der LSB-zuerst am Y-Eingang eingegeben wird. Ihr Zustandsdiagramm verarbeitet es zuerst mit MSB.
+1 für eine tolle Frage. Dies ist ein Paradebeispiel dafür, wie Hausaufgabenfragen gestellt werden sollten.
Der „lustige“ Teil beim Schreiben der Entscheidungstabelle besteht darin, dass Sie eine spärliche Übergangstabelle haben; Die meisten möglichen Kanten im Diagramm sind egal! Ich habe solche Synthesen gerne automatisierten Compilern für all meine jüngsten Arbeiten an Zustandsmaschinen an den Kopf geworfen. . .
@ user2943160: Ja, aber das verfehlt den Sinn der Frage, nämlich ein detailliertes Verständnis dessen zu entwickeln, was das Synthese-Tool tatsächlich für Sie tut.
Ich denke, dass der Initialisierungszustand unerwünscht und falsch ist. Sobald Sie 'x' so hoch abgetastet haben, sollen die nächsten Zustände sofort die richtige (oder nicht) 'y'-Sequenz abtasten. Aufgrund des Initialisierungszustands fehlt Ihnen der erste 'y'-Wert.
@ user2943160 Wie in "egal" meinst du "x"? Das ist gut, und ich bin immer noch ein wenig verwirrt darüber, wie ich meine Übergangstabelle ausfüllen soll. Wäre es das Richtige, meine Zustände in Binär umzuwandeln? Wie 0000 für Sperre, 0001 für Leerlauf und etc.
@DaveTweed Ich verstehe, also sollte ich meinen Binärcode in seiner Rückwärtsreihenfolge (LSB zuerst) halten, wenn ich das Zustandsdiagramm erstelle? Danke für den Tipp.
@VladimirCravero, du bist genau richtig, ausgezeichneter Beitrag von OP, habe auch +1 gegeben, um ermutigt zu werden.
@ClaudioAviChami Ich bin verwirrt, was die Frage fow stellt, wenn es um "x muss in seiner vorherigen Taktperiode von niedrig nach hoch gehen. Und wie die Eingabe der ersten Binärziffer erfolgen muss, bevor der nächste Taktzyklus beginnt". Soll ich also einfach untätig bleiben und zur nächsten Anweisung unlock 1 with x=0 gehen, dann geht unlock 1 zu unlock 2 mit xy = 11?
Erste Zustände: IDLE -> (x=1) -> UNL1 -> (xy = 11) -> UNL2 -> (xy = 10) ... usw
Dieses Problem ist ein eklatanter Fall, in dem es viel sinnvoller ist, das Problem mit einem Datenpfad im Hinterkopf zu betrachten. In der Zusammenfassung erfordert es mehr oder weniger genau ein Schieberegister und einen Komparator als seinen Datenpfad. Fügen Sie einige Glue-Logik- und Steuersignale hinzu und verwalten Sie diese Steuersignale dann mit einer Zustandsmaschine. Aber ich verstehe, dass es als lehrreiche Übung gedacht ist, und solche Hardware sollte durch rigorose Anwendung herkömmlicher sequentieller Schaltungsdesign-Methoden aus der Synthese "herausfallen". Vielleicht soll es einen Fall veranschaulichen, in dem Bottom-up-Design "der harte Weg" ist.
@ClaudioAviChami Auch (zumindest der Vollständigkeit halber) benötigt Ihr Zustandsdiagramm wahrscheinlich eine Möglichkeit, auf unbestimmte Zeit im Unlock-Zustand zu bleiben, wenn X hoch bleibt, oder? Haben Sie in diesem Zusammenhang alle möglichen Eingabekombinationen als ausgehende Kanten von jedem Zustand in Ihrem Diagramm abgedeckt (ich denke möglicherweise nicht)? Das heißt, technisch gesehen sollte jeder Zustand XY=00,01,10,11 auf einer ausgehenden Kante berücksichtigt haben (selbst wenn diese Kante in denselben Zustand zurückkehrt).
@vicatcu Könntest du das bitte erklären? Mein Englischverständnis ist schlecht und es verwirrt mich sehr mit dem Zustandsdiagramm "Eingang 'X' muss in der vorherigen Taktperiode von Low auf High gewechselt sein und sollte danach High bleiben (Initialisierung). Die Eingabe der ersten Binärziffer muss vorher erfolgen der nächste Taktzyklus beginnt und die Eingabe der verbleibenden Ziffern erfolgt bei den nachfolgenden Takten."
@ClaudioAviChami Danke. Ich frage mich nur, wo x gleich Null ist? da x zuerst 0 und dann 1 sein muss.
@Omuse, wie ich diese Aussage gelesen habe, ist, dass Eingang Y ignoriert werden sollte, bis am X-Eingang ein Übergang von 0 auf> 1 erfolgt. Wenn X einen 1->0-Übergang hat, bevor eine Übereinstimmung gefunden wird, wird die Überprüfung auf eine Übereinstimmung abgebrochen.
@vicatcu Danke, jetzt macht es Sinn. Ich habe mein Zustandsdiagramm und meine Zustandstabelle oben aktualisiert.

Antworten (1)

Geben Sie hier die Bildbeschreibung einHier ist eine Teilversion der Tabelle, die Sie erstellen müssen. Es gibt insgesamt 64 Reihen. Sie bestimmen das Q3*(Q3+) und die anderen, indem Sie überlegen, was der nächste Zustand ist, wenn ich im aktuellen Zustand bin und X, Y betrachte.

Nehmen Sie zum Beispiel Zeile 2: Aktueller Status 0000 (RESET) und X = 1, Y = 0. Dies bedeutet, dass der nächste Status 0001 (UNLOCK) ist. Auch Z ist 0, wenn ich im Zustand 0000 bin.

Sie erhalten dann die Ausgangslogik für Q0*, indem Sie alle Einsen in Ihrer Spalte Q0* nehmen. Zum Beispiel habe ich jetzt (\ bedeutet "nicht")

Q0*= \Q3\Q2\Q1\Q0X\Y + \Q3\Q2\Q1\Q0XY + \Q3\Q2\Q1Q0\X\Y + etc...

Sie können diesen Ausdruck dann höchstwahrscheinlich vereinfachen. Sie werden Karnaugh-Tabellen nicht wirklich erstellen können, da es 4 Zustandsbits und 2 Einträge = 6 Dimensionen gibt. Ich schlage vor, dass Sie die kanonische Methode für die Logik verwenden, wie ich es gerade erklärt habe.

Weitere Informationen finden Sie hier: https://en.wikipedia.org/wiki/Canonical_normal_form