Πίνακας περιεχομένων:
- Βήμα 1: Εισαγωγή
- Βήμα 2: Υλικά
- Βήμα 3: Σχέδιο μαύρου κουτιού διαγράμματος ανώτατου επιπέδου
- Βήμα 4: CLKDivide
- Βήμα 5: Shift Process Block
- Βήμα 6: Μηχανή πεπερασμένης κατάστασης
- Βήμα 7: Έλεγχος αποκλεισμού διαδικασίας εμφάνισης με επίπεδο
- Βήμα 8: Έλεγχος ταχύτητας LED με επίπεδο
- Βήμα 9: Συναρμολόγηση υλικού
- Βήμα 10: Διασκεδάστε
Βίντεο: Παιχνίδι αντίδρασης FPGA: 10 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Από τους Summer Rutherford και Regita Soetandar
Βήμα 1: Εισαγωγή
Για το τελευταίο μας έργο για το CPE 133, σχεδιάσαμε ένα παιχνίδι αντίδρασης σε VHDL για έναν πίνακα Basys3. Αυτό το παιχνίδι μπορεί να συγκριθεί πολύ με το arcade παιχνίδι "Stacker" όπου ο παίκτης πρέπει να ρίξει τα μπλοκ την κατάλληλη στιγμή. Ο πίνακας Basys3 είναι συνδεδεμένος με ένα breadboard, το οποίο διαθέτει τα εναλλασσόμενα LED. Αυτά τα φώτα LED εναλλάσσονται σε συγκεκριμένη συχνότητα, ανάλογα με το επίπεδο. Αυτό το παιχνίδι χρησιμοποιεί το διαχωριστή ρολογιού και την τετραψήφια οθόνη 7 τμημάτων, καθώς και μια μηχανή πεπερασμένης κατάστασης. Όταν η συσκευή αναπαραγωγής ενεργοποιήσει τον σωστό διακόπτη καθώς ανάβει το μεσαίο LED, ο παίκτης θα προχωρήσει στο επόμενο επίπεδο του παιχνιδιού, αυξάνοντας τη συχνότητα των εναλλασσόμενων LED. Αυτό καθιστά κάθε διαδοχικό επίπεδο πιο δύσκολο από το προηγούμενο επίπεδο. Όταν η συσκευή αναπαραγωγής χτυπήσει επιτυχώς το επίπεδο 7, το υψηλότερο επίπεδο, ένα μήνυμα θα εμφανιστεί στην οθόνη τμήματος και όλα τα LED θα αναβοσβήνουν ταυτόχρονα και θα σβήνουν.
Βήμα 2: Υλικά
Τα υλικά που θα χρειαστείτε είναι:
- Πίνακας Digilent Basys3 με καλώδιο micro USB
- Breadboard
- 5 LED
- 5 αντιστάσεις (χρησιμοποιήσαμε 220 ohm)
- 11 καλώδια βραχυκυκλωτήρων
- Υπολογιστής με Vivado
Βήμα 3: Σχέδιο μαύρου κουτιού διαγράμματος ανώτατου επιπέδου
Όπως μπορείτε να δείτε, το διάγραμμα μπλοκ ανώτερου επιπέδου ξεκινά με την λήψη των απαιτούμενων ρολογιών από την υπομονάδα μας, ClkDivide. Αυτά τα ρολόγια εισάγονται στα διάφορα μπλοκ διεργασιών. Ουσιαστικά, το παιχνίδι πρέπει να αναγνωρίσει ότι όταν ένας χρήστης ανοίξει σωστά τον διακόπτη, τα LED πρέπει να αρχίσουν να εναλλάσσονται γρηγορότερα και η οθόνη πρέπει να ανέβει ένα επίπεδο. Το μπλοκ διάγραμμα μπορεί να φαίνεται λίγο τρελό, αλλά αυτό συμβαίνει επειδή υπάρχουν πολλά σήματα που δημιουργούνται σε μια συγκεκριμένη διαδικασία και στη συνέχεια αυτό το σήμα ορίζει ένα άλλο σήμα σε ένα άλλο μπλοκ διεργασίας.
Στο τέλος, οι μόνες εισόδους που παίρνει το παιχνίδι είναι το ρολόι εισόδου στον πίνακα Basys3 που λειτουργεί στα 100 Mhz, επτά διακόπτες στον πίνακα Basys3 και το κουμπί επαναφοράς. Αυτό που εξάγεται είναι η άνοδος για την οθόνη των επτά τμημάτων, τα επτά τμήματα για την οθόνη και τα LED.
Βήμα 4: CLKDivide
Αυτή η υπομονάδα διαίρεσης ρολογιού δημιούργησε ένα πιο αργό ρολόι ανάλογα με την τιμή που αντιστοιχίσαμε σε αυτό στο κύριο αρχείο μας. Χρησιμοποιήσαμε αυτήν την υπομονάδα για τον προσδιορισμό Clk400, PushClk και newlck. Αυτή η υπομονάδα παίρνει ένα ρολόι και ένα διαχωριστικό 32 bit ως εισόδους. Εμφανίζεται ένα βραδύτερο ρολόι. Υπάρχει ένα μπλοκ διαδικασίας για το διαχωριστικό και το επιβραδυνόμενο ρολόι. Στη διαδικασία υπάρχει μια προσωρινή μεταβλητή, την οποία ονομάσαμε count, η οποία μετράει μία κάθε φορά που χτυπάει μια αυξανόμενη άκρη του εισερχόμενου ρολογιού. Μόλις φτάσει στον διαιρούμενο αριθμό, το επιβραδυνόμενο ρολόι άλλαξε και ο μετρητής επανέρχεται στο μηδέν.
Βήμα 5: Shift Process Block
Το μπλοκ διαδικασίας Shift ελέγχει την εναλλασσόμενη κίνηση και την ταχύτητα των LED. Στη λίστα ευαισθησίας βρίσκονται τα σήματα newclk και Stop. Η διακοπή προκαλεί μια σύντομη καθυστέρηση όταν ο χρήστης περάσει το επίπεδο. Εάν το Stop δεν είναι υψηλό, τότε τα LED εναλλάσσονται κανονικά με βάση την ταχύτητα του newclk. Αυτό το εναλλασσόμενο μοτίβο ελέγχεται από δύο μεταβλητές: Παρακολούθηση και καταμέτρηση. Η καταμέτρηση καθορίζει ποια λυχνία LED πρέπει να είναι αναμμένη, ενώ η διαδρομή καθορίζει εάν η μέτρηση πρέπει να μετρά πάνω ή κάτω. Υπάρχει ένα άλλο σήμα, Τελικό, που ισχύει μόνο όταν το Επίπεδο είναι "111", υποδεικνύοντας ότι ο παίκτης έχει κερδίσει το παιχνίδι. Το τελικό εναλλάσσεται μεταξύ 0 και 1 κάθε άκρου ρολογιού για να ανάβουν και να σβήνουν συνεχώς τα LED. Αυτό είναι απλώς ένα οπτικό στοιχείο για την τελική οθόνη.
Αυτή η διαδικασία αλλαγής είναι το ιδανικό μέρος για να ξεκινήσετε για αυτό το έργο. Εάν μπορείτε να κάνετε τα LED σας να εναλλάσσονται σωστά και με συνέπεια, τότε από εδώ πρέπει απλώς να προσθέσετε τη συμπεριφορά κατά την ισοπέδωση!
Βήμα 6: Μηχανή πεπερασμένης κατάστασης
Δημιουργήσαμε ένα μηχάνημα πεπερασμένης κατάστασης για να υπαγορεύσουμε τη συμπεριφορά όταν πατάτε το διακόπτη εισόδου ή το κουμπί επαναφοράς. Κάθε κατάσταση είναι ένα "επίπεδο" και εάν ο διακόπτης είναι ενεργοποιημένος σε λάθος χρόνο ή πατηθεί επαναφορά, το επίπεδο επιστρέφει πίσω στο "000". Διαφορετικά, εάν ο διακόπτης είναι σωστά ενεργοποιημένος, τότε το επίπεδο ανεβαίνει μέχρι να φτάσει στην τελική κατάσταση, "111" και εμφανίζεται η τελική οθόνη. Το FSM βασίζεται στα δύο μπλοκ διεργασιών sync_proc και comb_proc. Το Sync_proc χρησιμοποιεί το ρολόι που ονομάσαμε PushClk. Αυτό το ρολόι ελέγχει πόσο γρήγορα η επόμενη κατάσταση γίνεται η παρούσα κατάσταση. Αυτό το ρολόι πρέπει να είναι αρκετά γρήγορο. επιλέξαμε μια ταχύτητα που ήταν περίπου δύο φορές μεγαλύτερη από την υψηλότερη ταχύτητα LED.
Εφαρμόσαμε αυτόν τον κώδικα χρησιμοποιώντας ένα FSM για τα επίπεδα. Ωστόσο, μετά από αυτό το έργο συνειδητοποιήσαμε ότι μια πιο αποτελεσματική χρήση ενός FSM θα μπορούσε να ήταν η κατάσταση αντίστροφης μέτρησης, η κατάσταση επαναφοράς ή η κατάσταση παραμονής. Εάν δεν πιέζεται τίποτα, είναι στην κατάσταση παραμονής. Εάν πατηθεί η επαναφορά ή η συσκευή αναστατωθεί, είναι σε κατάσταση επαναφοράς. Εάν πιεστεί σωστά, βρίσκεται σε κατάσταση αντίστροφης μέτρησης. Υπάρχουν πολλοί άλλοι τρόποι χρήσης ενός FSM και σε αυτό το παιχνίδι!
Βήμα 7: Έλεγχος αποκλεισμού διαδικασίας εμφάνισης με επίπεδο
Το επίπεδο ελέγχει το μπλοκ διαδικασίας εμφάνισης. Οι μεταβλητές στη λίστα ευαισθησίας είναι Level, Reset και Clk400. Η οθόνη των 7 τμημάτων ξεκινά με την εμφάνιση του «1» για το πρώτο επίπεδο. Μετράει μέχρι το 7 κάθε φορά που ο χρήστης περνά ένα επίπεδο για να δείξει στον χρήστη σε ποιο επίπεδο βρίσκεται. Μόλις ο χρήστης περάσει το επίπεδο 7, εμφανίζει "COOL" για να δηλώσει ότι ο παίκτης έχει κερδίσει το παιχνίδι. Αυτή η οθόνη "COOL" λειτουργεί με ρολόι 400 Hz που ονομάσαμε Clk400. Εάν πατήσετε Reset, η οθόνη επιστρέφει στο "1."
Βήμα 8: Έλεγχος ταχύτητας LED με επίπεδο
Τέλος, το Level ελέγχει την ταχύτητα των LED. Το επίπεδο είναι το μόνο σήμα στη λίστα ευαισθησίας. Το D1 είναι το σήμα που μπαίνει στη διαδικασία Clock Divider για να πάρει newclk. Κάθε φορά που αλλάζει το επίπεδο ή αλλάζει η κατάσταση, το μπλοκ διαδικασίας "Ταχύτητα". Αυτή η διαδικασία καθορίζει την τιμή του D1. Υπάρχουν 8 καθορισμένες τιμές του D1 που επιλέξαμε με βάση το πόσο γρήγορα θέλουμε να εκτελείται κάθε επίπεδο. Το D1 γίνεται μικρότερο κάθε φορά που αυξάνεται το επίπεδο έτσι ώστε το newclk να τρέχει γρηγορότερα.
Βήμα 9: Συναρμολόγηση υλικού
Συνδέσαμε το breadboard στο Basys3 με έναν από τους συνδέσμους pmod. Έξι από τις θύρες pmod χρησιμοποιήθηκαν για να συνδέσετε έναν σύνδεσμο αρσενικού σε αρσενικό, ένας για τη γείωση και οι άλλοι πέντε για τα 5 LED. Τοποθετήσαμε επίσης μια αντίσταση για κάθε LED. Αυτές οι αντιστάσεις είναι 220Ω και αποτρέπουν το βραχυκύκλωμα και την καύση των LED. Αν και κάθε LED έχει κάποια αντίσταση, η αντίσταση δεν είναι αρκετή για να εμποδίσει την τάση από την πηγή.
Βήμα 10: Διασκεδάστε
Αυτό το παιχνίδι είναι πολύ εύκολο να παιχτεί. Ο παίκτης ξεκινά από τον ακροδεξιό διακόπτη 1 του πίνακα, V17. Πρέπει να αναποδογυρίσουν το διακόπτη ψηλά όταν η μεσαία λυχνία LED είναι αναμμένη. Στη συνέχεια μετακινούν έναν διακόπτη προς τα αριστερά και κάνουν το ίδιο πράγμα! Αν ο παίκτης φτάσει μέχρι το τέλος, θα καταλήξει στον έβδομο διακόπτη, W14. Αν νικήσουν το παιχνίδι, θα δουν μια πραγματικά διασκεδαστική εμφάνιση!
Κάτι που πρέπει να σημειωθεί είναι ότι κατά τη δημιουργία αυτού του παιχνιδιού οι ταχύτητες εξαρτώνται απόλυτα από εσάς! Εάν οι ταχύτητες που έχουμε επιλέξει είναι πολύ αργές, μη διστάσετε να το επιταχύνετε και να το κάνετε ακόμα πιο δύσκολο! Επίσης, δεν υπάρχει καθορισμένος αριθμός επιπέδων. Εάν θέλετε να το κάνετε να έχει ακόμα περισσότερα επίπεδα, υπάρχουν τροποποιήσεις που πρέπει να γίνουν στο FSM και τα μπλοκ διαδικασίας που καθορίζονται από το επίπεδο, αλλά αυτές είναι πολύ απλές αλλαγές.
Επιλέξαμε επίσης να χρησιμοποιούμε διακόπτες στον πίνακα ως είσοδο χρήστη, αλλά αυτό είναι επίσης δυνατό με ένα κουμπί στον πίνακα Basys3. το κουμπί θα εξαλείψει την ανάγκη επαναφοράς των διακοπτών κάθε φορά που ο χρήστης ξεκινά από την αρχή. Αρχικά χρησιμοποιήσαμε ένα κουμπί, ωστόσο αυτό προκάλεσε σφάλματα στον καθορισμό του επιπέδου επειδή θα ανέβαινε πολλά επίπεδα αν χτυπούσαν δύο ανερχόμενες άκρες του PushClk όταν το κουμπί κρατιόταν πατημένο.
Παρακάτω είναι ένα βίντεο που δείχνει πώς να παίζετε, περνώντας από τα πρώτα 4 επίπεδα και την τελική οθόνη λήξης.
Το κύριο αρχείο για αυτό το έργο περιλαμβάνεται παρακάτω.
Πηγές
Εγχειρίδιο αναφοράς Basys3
Έμπνευση για έργο - παιχνίδι Arduino Stop It
Συνιστάται:
Πατήστε Tap Rainbow - ένα παιχνίδι γρήγορης αντίδρασης 2 παικτών: 4 βήματα (με εικόνες)
Πατήστε Tap Rainbow - a 2 Player Παιχνίδι Γρήγορης Αντίδρασης: Πριν από 2 εβδομάδες η κόρη μου είχε μια ιδιοφυή ιδέα να κάνει ένα παιχνίδι γρήγορης αντίδρασης με χρώματα ουράνιου τόξου (είναι ειδικός σε ουράνιο τόξο: D). Μου άρεσε αμέσως η ιδέα και αρχίσαμε να σκεφτόμαστε πώς θα μπορούσαμε να την κάνουμε ένα πραγματικό παιχνίδι. Η ιδέα ήταν. Έχετε ουράνιο τόξο στο
555 Παιχνίδι αντίδρασης χρονοδιακόπτη: 5 βήματα
555 Παιχνίδι αντίδρασης χρονοδιακόπτη: Κοινό -στόχοςΑυτό το διδακτικό απευθύνεται σε άτομα που ενδιαφέρονται για κυκλώματα (με μικρό υπόβαθρο) που αναζητούν ένα απλό παιχνίδι που μπορείτε να φτιάξετε με λίγα φθηνά εξαρτήματα. Επίπεδο δυσκολίας Αυτό θα ήταν δύσκολο αν
Αστείο παιχνίδι αντίδρασης Arduino: 3 βήματα
Αστείο παιχνίδι αντίδρασης Arduino: Αστείο παιχνίδι αντίδρασης Arduino για όλη την οικογένεια;) Βασισμένο σε διασταυρούμενη επικοινωνία Bluetooth. Χρειάζεστε μόνο μερικά είδη Arduino, ένα smartphone Android και ένα κουτί παπουτσιών. Εάν δεν έχετε κανένα από αυτά, πιστέψτε σταθερά σε αυτό: δεν υπάρχει τίποτα που
Παιχνίδι Αντίδρασης- Έργο Μηχανικής Υπολογιστών: 3 Βήματα
Παιχνίδι Αντίδρασης- Έργο Μηχανικής Υπολογιστών: Το παιχνίδι αντίδρασης είναι ακριβώς αυτό που λέει το όνομα, δοκιμάζει την ταχύτητα αντίδρασής σας. Mightσως ρωτάτε ποια οφέλη θα μπορούσε να προσφέρει αυτός ο διακομιστής εκτός ψυχαγωγίας, αλλά μπορείτε να το χρησιμοποιήσετε για άτομα που βρίσκονται σε φάση αποκατάστασης από χειρουργική επέμβαση ή ατυχήματα. Η αντίδρασή τους
Παιχνίδι Αντίδρασης Arduino: 9 Βήματα
Arduino Reaction Game: Έφτιαξα αυτό το παιχνίδι ως σχολική εργασία. Έπρεπε να φτιάξουμε κάτι διαδραστικό με ένα arduino. Αυτό είναι το πρώτο μου έργο Arduino που έχω κάνει, οπότε ήταν αρκετά δύσκολο, αλλά όχι αδύνατο