Inhaltsverzeichnis:
- Schritt 1: Materialien
- Schritt 2: Black-Box-Diagramm
- Schritt 3: Anschließen des externen Lautsprechers
- Schritt 4: Strukturdiagramm
- Schritt 5: Finite State Machine (FSM)-Diagramm
Video: Konkurrenz-Summer-System - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Das in diesem Projekt entwickelte kompetitive Summersystem funktioniert ähnlich wie die Summersysteme, die bei den regionalen und nationalen Science-Bowl-Wettbewerben verwendet werden. Dieses Projekt wurde durch meine dreijährige Mitarbeit im Science-Bowl-Team meiner High School inspiriert. Wir hatten schon immer den Wunsch, das Lockout-Summersystem mit einem 5-Sekunden- und 20-Sekunden-Timer nachzubauen.
Um einige Hintergrundinformationen zum Buzzer-System zu geben, sind die Science-Bowl-Buzzer so programmiert, dass sie maximal 8 Spieler aufnehmen können (mit 8 separaten Summern). Sobald ein Summer gedrückt wurde, leuchtet der Summer der ersten Person auf, um anzuzeigen, welcher Spieler die Frage erhält. Der Rest der Spieler wird "gesperrt", was bedeutet, dass ihre Summer nicht reagieren, bis der Moderator das Summersystem zurücksetzt.
Nachdem der Moderator die Fragen gelesen hat, wird er einen Knopf drücken, um den Countdown-Timer zu starten, der auf der Sieben-Segment-Anzeige angezeigt wird. Nach einer „Wurf-Up“-Frage kann der Moderator durch Drücken der rechten Taste den Countdown von 5 Sekunden starten. Währenddessen kann der Moderator nach einer "Bonus"-Frage die linke Taste drücken, um den Countdown von 20 Sekunden zu starten. Sobald der Timer Null erreicht, zeigt ein akustischer Summer an, dass die Zeit abgelaufen ist.
Um das System und den Countdown-Timer zurückzusetzen, kann der Moderator die mittlere Taste drücken. Um den Lockout-Mechanismus und die Player-LEDs zurückzusetzen, müssen die Schalter für Player 1 und Player 2 auf Low stehen.
Schritt 1: Materialien
Sie benötigen Folgendes:
- Basys3-Board (oder gleichwertiges FPGA-Board)
- Micro-B-USB-Kabel
- Lautsprecher (ich habe einen passiven Lautsprecher verwendet)
- 2 Drähte
- Software zur Implementierung auf dem FPGA (ich habe Vivado verwendet)
- Competitive Buzzer System-Datei
Schritt 2: Black-Box-Diagramm
Das Blackbox-Diagramm zeigt die Ein- und Ausgänge, die in diesem Summersystem verwendet werden.
EINGÄNGE:
player1, player2 Diese Eingänge sind mit zwei Schaltern auf der Basys3-Platine verbunden. Der Einfachheit halber werden die Schalter ganz links und ganz rechts verwendet.
reset Die mittlere Taste wird verwendet, um die Reset-Taste darzustellen.
count_down_20_sec Die linke Schaltfläche wird verwendet, um die 20-Sekunden-Timer-Schaltfläche darzustellen.
count_down_5_sec Die rechte Schaltfläche wird verwendet, um die 20-Sekunden-Timer-Schaltfläche darzustellen. Um sicherzustellen, dass sowohl der 20-Sekunden- als auch der 5-Sekunden-Timer startet, halten Sie die Taste gedrückt, bis die Siebensegmentanzeige den Timer anzeigt.
CLK Das FPGA-Board erzeugt einen Takt, der mit einer Frequenz von 10 ns läuft.
AUSGÄNGE:
Lautsprecher Der Lautsprecherausgang ist mit einem externen Summer oder Lautsprecher verbunden. Sie müssen den Lautsprecher an die JA pmod-Ports des Basys3-Boards anschließen. Dieser Schritt wird im Folgenden beschrieben.
speaker_LED Dieser Ausgang ist mit einer LED in der Mitte der Platine verbunden und zeigt nur an, wenn der Lautsprecherausgang des FPGA hoch ist. Sie können dies zum Testen Ihres externen Lautsprechers verwenden. Beachten Sie, dass einige der pmod-Ports möglicherweise nicht gut funktionieren. Sie können also verschiedene ausprobieren und anhand der LED überprüfen, ob der Lautsprecher eingeschaltet sein sollte.
SEGMENTE Dieser Ausgang ist mit den acht Einzelsegmenten der Siebensegmentanzeige inklusive Dezimalpunkt verbunden.
DISP_EN Dieser Ausgang ist mit den vier Anoden der Siebensegmentanzeige verbunden.
player_LED Dieser Ausgang ist ein 2-Bündel-Signal, das mit den LEDs über den Player1- und Player2-Schaltern verbunden ist. Der erste Spieler, der seinen entsprechenden Schalter umlegt, wird durch die LED angezeigt. Beachten Sie, dass nicht beide LEDs gleichzeitig leuchten können.
Schritt 3: Anschließen des externen Lautsprechers
Um den externen Lautsprecher an die Basys3-Platine anzuschließen, nehmen Sie Ihre beiden Drähte und schließen Sie sie wie in der obigen Abbildung gezeigt an. Die weiße Linie verbindet den Minuspol des Lautsprechers mit dem Masseanschluss auf der Platine. Die rote Linie verbindet den Pluspol des Lautsprechers mit dem pmod-Port JA10 auf der Platine.
Die Einschränkungsdatei ist so konzipiert, dass jeder Port von JA1 bis JA10 funktionieren sollte. Einige Pins auf der Platine reagieren jedoch nicht. Wenn JA10 also nicht funktioniert, können Sie die anderen Ports ausprobieren.
Schritt 4: Strukturdiagramm
Das obige Bild zeigt das Strukturdiagramm des konkurrierenden Summersystems einschließlich aller Komponenten, aus denen das Hauptmodul besteht. Ihre Beschreibungen sind wie folgt:
player_lockout_LED1 Die Player-Lockout-LED-Komponente ist ein endlicher Automat, der One-Hot-Codierung verwendet. Es hat vier Eingänge: Player1, Player2, Reset und CLK. Es enthält einen 2-Bit-Bundle-Ausgang player_LED. Die Ein- und Ausgänge der Komponente player_lockout_LED1 sind alle direkt mit den gleichnamigen Ein- und Ausgängen des Hauptmoduls verbunden.
Buzzer_tone1 Die Buzzer-Komponente basiert auf diesem Code, der in einem Forum veröffentlicht wurde
stackoverflow.com/questions/22767256/vhdl-… Es wurde jedoch modifiziert, um einen Dauerton mit einer Frequenz von 440 Hz (A-Note) auszugeben. Der Freigabeeingang ist mit einem Summer_enable-Signal verbunden, das ein Ausgang der down_counter_FSM1-Komponente ist.
clk_div1 Die Taktteilerkomponente ist eine modifizierte Version des Taktteilers von Professor Bryan Mealy, der auf PolyLearn bereitgestellt wird. Es verlangsamt den Takt, so dass die Ausgabeperiode 1 Sekunde beträgt.
down_counter_FSM1 Der Abwärtszähler ist ein FSM, der darauf ausgelegt ist, bis Null herunterzuzählen. Die beiden möglichen Startzeiten sind 20 oder 5, die durch die Benutzereingabe ausgewählt werden. Es gibt '1' aus, wenn der Timer Null erreicht hat, um anzuzeigen, dass die Zeit abgelaufen ist. Dieser Ausgang dient als Freigabe für die Summertonkomponente. Der Zähler gibt auch ein 8-Bit-Bündelsignal aus, das eine 8-Bit-BCD sendet, die an den Segmentdecoder gesendet wird. Ein weiterer Ausgang ist der counter_on, der ebenfalls mit dem valid-Eingang des Segmentdecoders verbunden ist.
sseg_dec1 Die Sieben-Segment-Decoder-Komponente wird auf PolyLearn bereitgestellt und wurde von Professor Bryan Mealy geschrieben. Es verwendet einen vom down_counter_FSM1 bereitgestellten BCD-Eingang und gibt das dezimale Äquivalent auf der Siebensegmentanzeige aus. Wenn der Zähler eingeschaltet ist, ist der gültige Eingang hoch. Dadurch kann der Decoder die Dezimalzahl auf der Siebensegmentanzeige anzeigen. Wenn der Zähler ausgeschaltet ist, ist der gültige Eingang niedrig. Die Siebensegmentanzeige zeigt dann nur noch vier Striche an.
Schritt 5: Finite State Machine (FSM)-Diagramm
Die Sensitivitätsliste für den endlichen Automaten enthält Spieler1, Spieler2, Reset und die Uhr. Der FSM-Ausgang ist ein 2-Bit-Bundle player_LED, das mit zwei LEDs auf der Basys3-Platine verbunden ist. Die Finite State Machine zeigt die folgenden drei Zustände:
ST0 ist der Startzustand. In diesem Zustand sind die beiden LEDs ausgeschaltet. Der FSM bleibt in diesem Zustand, wenn sowohl Spieler1 als auch Spieler2 Low sind. Ein asynchroner Reset setzt den Zustand ebenfalls auf ST0. Wenn der Schalter Spieler1 auf hoch eingestellt ist, ist der nächste Zustand ST1. Wenn der Schalter Spieler2 auf hoch eingestellt ist, ist der nächste Zustand ST2.
ST1 ist der Zustand, für den die Player1-LED leuchtet. Die FSM bleibt bei jeder Eingabe in diesem Zustand. Dies bedeutet, dass selbst wenn der Player2-Schalter unmittelbar nach dem Hochschalten des Player1-Schalters auf High gesetzt wird, er in ST1 bleibt. Nur der asynchrone Reset kann den nächsten Zustand auf ST0 setzen.
ST2 ist der Zustand, für den die Player2-LED leuchtet. Ähnlich wie bei ST! bleibt der FSM bei jedem Eingang in diesem Zustand, auch wenn der Player1-Schalter direkt nach dem Player2-Schalter auf High gestellt wird. Auch hier kann nur der asynchrone Reset den nächsten Zustand auf ST0 setzen.