Inhaltsverzeichnis:

Das Binär-Dezimal-Match-Spiel - Gunook
Das Binär-Dezimal-Match-Spiel - Gunook

Video: Das Binär-Dezimal-Match-Spiel - Gunook

Video: Das Binär-Dezimal-Match-Spiel - Gunook
Video: আজব কক্সবাজার 😅 Bangla Funny video 2022 l Jibon Ahmed Niloy 2024, November
Anonim
Image
Image
Einrichten des Taktteilers
Einrichten des Taktteilers

Dieses anweisbare zeigt den Prozess und die Module, die erforderlich sind, um unser Binär-zu-Dezimal-Matching-Spiel zu erstellen. Innerhalb von 60 Sekunden werden Benutzer so viele zufällig generierte Dezimalzahlen auf der Sieben-Segment-Anzeige in Binärzahlen umwandeln und eingeben, indem sie die Schalter umschalten und mit einem Rateknopf absenden. Nach Abschluss wird ein Endergebnis angezeigt und dann zurückgesetzt, um erneut zu spielen.

Es ist von Vorteil, binäre und schnelle Reflexe zu verstehen, aber die Reset-Taste ist vorhanden, falls man es sofort erneut versuchen möchte.

Schritt 1: Einrichten des Taktteilers

Das Rückgrat dieses gesamten Projekts ergibt sich aus der korrekten Synchronisation aller Teile in diesem Gizmo. Unsere Finite State Machine verwendet die interne Uhr, aber die Sieben-Segment-Anzeige und der Timer müssen eine geänderte Version der Uhr verwenden.

Dieser "neue Takt" entsteht durch das Teilen des internen Takts durch eine gewünschte Periode, um eine bestimmte Frequenz zu erreichen, die für jede spezifische Komponente benötigt wird. Dies wurde in früheren Labors durchgeführt und aus Erfahrung wissen wir, dass der Timer die "Einser"-Ziffer auf 0,1 Hz eingestellt hat und die "Zehner"-Ziffer 1 Hz ist

Eingänge: ClkIn, Divisor (32 Bit)

Ausgänge: ClkOut

Schritt 2: Erstellen einer Finite-State-Maschine (FSM)

Erstellen einer Finite-State-Maschine (FSM)
Erstellen einer Finite-State-Maschine (FSM)
Erstellen einer Finite-State-Maschine (FSM)
Erstellen einer Finite-State-Maschine (FSM)
Erstellen einer Finite-State-Maschine (FSM)
Erstellen einer Finite-State-Maschine (FSM)

In unserer Finite-State-Maschine haben wir entschieden, dass fünf Zustände (Start, Display, Check, Score und End) mit fünf Eingaben (Start, Reset, Rate, Equal, Timeout) erforderlich sind. Die einzige Ausgabe in unserer Zustandsmaschine ist eine 3-Bit-Zahl, die darstellt, in welchem Zustand sich der Benutzer befindet (000, 001, 011, 101, 100) in Bezug auf die folgenden Zustände.

Denken Sie daran, dass eine Finite-State-Maschine die folgenden Funktionen nicht wirklich ausführt, sondern nur sagt, in welchem Zustand sich das Programm befindet und was. Was tatsächlich passiert, wird durch das nachfolgend erläuterte Top-Modul bestimmt.

Startstatus (000)

Im Startzustand beginnt der Benutzer, bis der Starteingang hoch ist. Dies ist auch der Zustand, der erreicht wird, wenn die Reset-Taste gedrückt wird.

Spielstatus (001)

Der Spielzustand ist der Beginn des Spiels, bei dem die Zufallszahl generiert wird und der Benutzer die Schalter umschaltet, um eine Eingabe zu erstellen. Sobald die Rate-Taste gedrückt wird, wird das Spiel in den Check-Zustand versetzt.

Status prüfen (011)

In diesem Zustand wird der Komparator verwendet, der die Werte der Benutzereingabe und der zufällig generierten Zahl vergleicht. Wenn die Einreichung korrekt ist, ist der gleiche Wert hoch und der FSM geht in den Score State; Wenn die Übermittlung jedoch falsch ist, kehrt der FSM in den Anzeigestatus zurück, bis die Übermittlung korrekt ist.

Dieser Check State passiert im Vergleich zu den anderen relativ schnell, da er nur so lange auftritt, wie der Check-Button gedrückt wird

Punktestand (101)

Da der Gleichwert hoch ist, war die Einreichung richtig. In diesem Zustand wird der Score-Wert um eins erhöht und eine neue Zahl zur Eingabe durch den Benutzer generiert. Diese neue Nummer bringt uns zurück zum Startzustand, wo der Benutzer die Schalter erneut umschalten wird.

Endzustand (100)

Sobald der Timer von 60 Sekunden abgelaufen ist, ist die Zeitüberschreitungseingabe hoch und der Benutzer erreicht den Endzustand, in dem das Endergebnis angezeigt wird. Der Reset-Eingang wird dann gedrückt und die FSM startet wieder im Startzustand.

Eingaben: Clk, rst, start, rate, equal, timeout

Ausgabe: Zustand (3 Bit)

Schritt 3: Mapping der Sieben-Segment-Anzeige

Abbildung der Sieben-Segment-Anzeige
Abbildung der Sieben-Segment-Anzeige
Abbildung der Sieben-Segment-Anzeige
Abbildung der Sieben-Segment-Anzeige
Abbildung der Sieben-Segment-Anzeige
Abbildung der Sieben-Segment-Anzeige

Die Sieben-Segment-Anzeige ist ein wichtiger Bestandteil des gesamten Projekts, da die ersten beiden Ziffern auf dem Bildschirm als Ausgabe des Zufallszahlengenerators verwendet werden, während die letzten beiden Ziffern der Timer sind. Obwohl wir im letzten Lab ein Beispiel für Ziffern auf dem Bildschirm implementiert haben, wurde es hexadezimal angezeigt. Um dieses Problem zu beheben, haben wir einen Konverter und einen Taktteiler verwendet, die unten näher erläutert werden.

Das Display zeigt alle Nullen an, bis das FSM in den Spielstatus wechselt; Im Endzustand sollte das Display jedoch nur die Punktzahl des Benutzers anzeigen.

Da wir alle vier Ziffern der Siebensegmentanzeige verwenden, müssen wir jede Anode schnell genug mit 300 Hz durchlaufen, um als immer leuchtend wahrgenommen zu werden.

Eingänge: Clk, Siebensegment

Ausgänge: Kathoden (7 Bit), Anoden (4 Bit)

Schritt 4: Erstellen des Komparators

Erstellen des Komparators
Erstellen des Komparators

Dieses Submodul wird im Prüfzustand verwendet, um die binär eingegebene 7-Bit-Schätzung mit dem tatsächlichen Dezimalwert zu vergleichen.

Wir hatten eine if-Anweisung, die sowohl Eingaben als auch zwei Ausgaben bewertete, je nachdem, ob der gleiche Wert hoch oder niedrig war. So wichtig dieses Modul auch ist, es ist bei weitem eines der einfacher zu entwerfenden Programme in diesem Projekt.

Eingänge: Schalter (8 Bit), Zahl (8 Bit)

Ausgang: EQ

Schritt 5: Einrichten eines Timers

Einrichten eines Timers
Einrichten eines Timers
Einrichten eines Timers
Einrichten eines Timers

Unser Timer besteht im Wesentlichen aus zwei verschiedenen Zählern, die mit unterschiedlichen Geschwindigkeiten ansteigen. Ein Zähler im Einser-Wert (die erste Sieben-Segment-Anzeige) und ein Zähler für den Zehner-Wert (zweite Stelle der Sieben-Segment-Anzeige). Jede Ziffer basiert auf der steigenden Flanke der Uhr, und sobald der Zähler 60 Sekunden erreicht, wird time_out hoch und das Spiel endet und kehrt in den Startzustand zurück.

Eingänge: Clk, state(3 bit), start

Ausgänge: Strom (8 Bit), Timeout

Schritt 6: Entwerfen des Pseudo-Zufallszahlengenerators

Entwerfen des Pseudo-Zufallszahlengenerators
Entwerfen des Pseudo-Zufallszahlengenerators

Eine andere alternative Methode für einen Zahlengenerator speziell für diesen Fall besteht darin, einen sich wiederholenden Zähler von 0-99 (in binär) zu verwenden, der die gezählte Zahl ausgibt, wenn der Eingang hoch ist, da dies die Verwendung eines LFSR überflüssig machen würde.

Die Zahl ändert sich bei jeder steigenden Flanke der internen Uhr (10 Nanosekunden) und durchläuft alle 100 Zahlen in einer Mikrosekunde. Immer wenn der Benutzer eine neue Nummer vom Nummerngenerator wünscht, gibt er die Nummer aus, auf der er war, Obwohl dieser Prozess nicht vollständig zufällig ist, ist die Wahrscheinlichkeit, verwandte Ergebnisse aus diesem Prozess zu finden, gering genug, um pseudo-zufällig zu sein.

Eingänge: Clk, changenum, equal

Ausgänge: Zahl (8 Bit)

Schritt 7: Erstellen eines Konverters

Konverter erstellen
Konverter erstellen

Eine notwendige Komponente ist der Converter, den wir verwendet haben, um Dezimalzahlen auf der Siebensegmentanzeige anstelle der ursprünglichen Hexadezimalzahl anzuzeigen. Obwohl beide Zahlen auf einer 7-Bit-Binärzahl basieren, haben wir ein ganzes Modul erstellt, das dazu bestimmt ist, hexadezimal in dezimal umzuwandeln.

Wenn unsere endgültige Ausgabe für die Punktzahl beispielsweise 0010001 (siebzehn) war, würde die Siebensegmentanzeige den Hexadezimalwert 11 anstelle der Dezimalzahl 17 anzeigen.

Eingabe: Numin(8 Bit)

Ausgabe: Numout (8 Bit)

Schritt 8: Alles im Spielmodul zusammenfügen

Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen
Alles im Spielmodul zusammenfügen

Für unsere Komponenten haben wir die notwendigen Schalter 0-6 verwendet, damit der Benutzer umschalten kann, wobei die drei Tasten als Benutzereingaben für Start, Reset und Rate dienen. Die Sieben-Segment-Anzeige und die Uhrkomponenten sind ebenfalls Komponenten, die wir aus früheren Labors erstellt haben, aber geändert werden mussten, um dieses Projekt zu erfüllen.

Wir haben dieses Projekt in die oben gezeigten sechs Module aufgeteilt, um das gesamte Gizmo in viele funktionierende Teile zu zerlegen. Die Art und Weise, wie sie verbunden sind, ist jedoch ziemlich kompliziert und wird aus dem beigefügten Black-Box-Bild gezeigt.

Während das Spiel läuft, leuchten 7 LEDs, um den Benutzer zu benachrichtigen, der zur Verwendung wechselt, und wenn das Spiel endet, haben wir auch LEDs so programmiert, dass sie blinken

Eingänge: Schalter (8 Bit), Clk, Reset, Start, Rate

Ausgänge: Kathoden (7 Bit), Anoden (4 Bit), LEDs (7 Bit)

Schritt 9: Zusätzliche Probleme aufgetreten

Obwohl in diesem Spiel nur sieben Schalter verwendet werden, ist dies im Code als 8-Bit-Zahl festgelegt. Wir haben dies getan, um einen bequemeren Komparator zu haben, der diese 8 Bits mit der 8-Bit-Zahl vergleicht, die wir vom Zufallszahlengenerator generiert haben.

Auch die Punktzahl bereitete uns anfangs einige Schwierigkeiten, da wir sie um einen Punkt erhöhen wollten, als die FSM im Punktestand war; Was jedoch stattdessen geschah, war, dass die Punktzahl so lange anstieg, wie der Zustand eingeschaltet war, was uns eine unangemessen hohe Punktzahl bescherte, mit der wir nicht umgehen konnten. Wir haben dies behoben, indem wir ein Impulssignal hinzugefügt haben, das mit der steigenden Flanke des Takts synchronisiert wurde, wie im Code in Schritt 8 zu sehen.

Schließlich brauchte der Timer viel Zeit zum Debuggen, da er unsere Sieben-Segment-Anzeige beim Herunterzählen verzerrte, also mussten wir den Countdown von 60 auf den Countdown von 0 ändern.

Schritt 10: Quelldateien und Einschränkungen

Wenn Sie lieber aus unseren Quelldateien ziehen möchten, anstatt Ihre eigenen zu erstellen, hier sind sie. Außerdem ist die Einschränkungsdatei enthalten.

Empfohlen: