Inhaltsverzeichnis:

VHDL-Ein-Minuten-Stoppuhr - Gunook
VHDL-Ein-Minuten-Stoppuhr - Gunook

Video: VHDL-Ein-Minuten-Stoppuhr - Gunook

Video: VHDL-Ein-Minuten-Stoppuhr - Gunook
Video: EE2902 stopwatch in vhdl 2024, November
Anonim
Image
Image

Dies ist ein Tutorial zum Erstellen einer einminütigen Stoppuhr mit VHDL und einem Basys 3-Board. Ein solches Gerät ist ideal für Spiele, bei denen jeder Spieler maximal eine Minute Zeit hat, um seinen Zug zu machen. Die Stoppuhr zeigt Sekunden und Millisekunden auf der Siebensegmentanzeige genau an, beginnend bei 0 Sekunden und 0 Millisekunden, bis zu 60 Sekunden und 0 Millisekunden. Außerdem werden zwei Tasten verwendet: die mittlere Taste zum Starten, Stoppen und Fortsetzen des Timers und die rechte Taste zum Neustarten des Timers. Vergleicht man das Gerät Seite an Seite mit der eingebauten Stoppuhr eines Smartphones, fällt die Genauigkeit der Uhr auf.

Schritt 1: Besorgen Sie sich Hardware/Software

Blockschaltbild
Blockschaltbild

1. Basys 3 Artix-7 FPGA Trainer Board von Digilent mit Micro-USB zu USB Kabel

2. Vivado 2016.2 Designsuite von Xilinx

Schritt 2: Blockdiagramm

Diese Schaltung ist verhaltensorientiert aufgebaut und verwendet eingebaute Xilinx-Komponenten, kann aber auch strukturell beschrieben werden, wie das obige allgemeine Strukturdiagramm zeigt. Aus dem Diagramm ist ersichtlich, dass die Schaltung von zwei Frequenzteilern angesteuert wird. Einer der Frequenzteiler läuft mit 1 Centisekunde und treibt den Kathodenzähler an, die als Zahlen auf der Siebensegmentanzeige verwendet werden. Der zweite Frequenzteiler läuft mit 240 Hz und wird verwendet, um den Anodenzähler anzutreiben, der sich durch die Anoden dreht, damit alle Zahlen auf der Sieben-Segment-Anzeige korrekt angezeigt werden. Der Encoder übernimmt die Kathodenlogik vom Kathodenzähler und die Anodenlogik vom Anodenzähler und codiert sie an die Kathode und Anode des Ausgangs, die die Siebensegmentanzeige ausführen. Die Funktion dieses Encoders besteht darin, dass sich der Kathodenausgang jedes Mal ändert, wenn sich der Anodenausgang ändert. Der Kathodenausgang kann nicht unabhängig vom Zähler betrieben werden, da die Anoden durch die 4 separaten Ziffern rotieren müssen.

Schritt 3: Projektmodul

Zuerst wird ein Prozessblock für CEN erstellt, so dass ENABLE umschaltet, wenn ein Tastendruck erkannt wird. Dies dient als Stopp/Start des Kathodenzählers.

Im nächsten Prozessblock werden die Centisekunden- und 240-Hz-Taktsignale so eingestellt, dass ihre jeweiligen Zähler jedes Mal um 1 steigen, wenn der interne 100-MHz-Takt eine steigende Flanke erreicht. Sobald der Zentisekundenzähler 500000 erreicht, wird er auf 0 zurückgesetzt. In der Zwischenzeit wird der 240-Hz-Zähler zurückgesetzt, sobald der Zähler 41667 erreicht.

Für den Kathodenabschnitt des Codes wird die Kathodenzählung angehalten, wenn ENABLE '0' ist. Wird während dieser Zeit die Reset-Taste gedrückt, werden alle Zähler auf „0000“zurückgesetzt. Wenn ENABLE '1' ist, wird die Kathodenzählung fortgesetzt, bis die Kathodenzählung 60,00 erreicht, bei der es das Stoppsignal auf '1' auslöst. Das Stoppsignal führt zurück zum CEN-Prozessblock und bewirkt, dass ENABLE '0' ist, während das Stoppsignal '1' ist und sich nicht ändert, bis die Reset-Taste gedrückt wird.

Schließlich wird die Siebensegmentanzeige eingerichtet, indem die 4 Anoden korrekt mit jeder ihrer 8 Kathoden verbunden sind, um ihre jeweiligen Ziffern 0-9 gleichzeitig anzuzeigen.

Schritt 4: Einschränkungen

Einschränkungen
Einschränkungen

Diese Constraint-Datei verbindet die spezifizierten Ein- und Ausgänge von VHDL mit den notwendigen physischen Teilen des Basys-Boards. Zu den Komponenten gehören bei diesem Projekt die vier Anoden und jede ihrer acht Kathoden für die Siebensegmentanzeige, den internen 100-MHz-Takt, die mittlere Taste und die rechte Taste.

Schritt 5: Testen

Nachdem Sie den Code fertiggestellt haben, können Sie nun das FPGA über das USB-Kabel programmieren. Die Siebensegmentanzeige sollte 0,00 anzeigen. Testen Sie, ob die Tasten funktionieren, indem Sie die mittlere Taste drücken, um den Timer zu starten, bis er 60,00 erreicht und stoppt; jederzeit dazwischen können Sie die mittlere Taste erneut drücken, um sie zu pausieren. Nach dem Anhalten können Sie den Timer durch Drücken der rechten Taste auf 0,00 zurücksetzen. Wenn alles richtig funktioniert, herzlichen Glückwunsch, Sie haben gerade einen Ein-Minuten-Timer gebaut!