Πίνακας περιεχομένων:

FPGA Asteroid Game: 7 βήματα (με εικόνες)
FPGA Asteroid Game: 7 βήματα (με εικόνες)

Βίντεο: FPGA Asteroid Game: 7 βήματα (με εικόνες)

Βίντεο: FPGA Asteroid Game: 7 βήματα (με εικόνες)
Βίντεο: Asteroids game using FPGA 2024, Οκτώβριος
Anonim
Παιχνίδι αστεροειδών FPGA
Παιχνίδι αστεροειδών FPGA

Για το τελικό έργο CPE 133, αποφασίσαμε να δημιουργήσουμε ένα παιχνίδι αστεροειδών στο FPGA μας χρησιμοποιώντας δύο διακόπτες με κουμπιά και την οθόνη 7 τμημάτων. Το παιχνίδι λειτουργεί έτσι ώστε ένας αστεροειδής να αναπαράγεται σε μία από τις τρεις τυχαία επιλεγμένες σειρές και να πληγώνει προς το πλοίο στην άλλη πλευρά της οθόνης των 7 τμημάτων. Το πάνω κουμπί και το κάτω κουμπί μπορούν να χρησιμοποιηθούν για να μετακινήσετε το πλοίο σας μακριά από τον αστεροειδή. Σε περίπτωση αποτυχίας να γίνει αυτό, η οθόνη διαβάζει «BAnG» για μια στιγμή και στη συνέχεια επανεκκινεί γρήγορα το παιχνίδι, ώστε ο χρήστης να δοκιμάσει ξανά. Αυτό που ακολουθεί είναι μια σύντομη περιγραφή του πώς έγινε το έργο, έτσι ώστε οποιοσδήποτε χρήστης να μπορεί να αναπαράγει ή να βελτιώσει τον σχεδιασμό μας.

Βήμα 1: Επισκόπηση

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Το έργο αποτελείται σε μεγάλο βαθμό από Μηχανές Πεπερασμένης Κατάστασης (FSM), οι οποίες χρησιμοποιούν τη λογική για να μεταφέρουν το FPGA μεταξύ καταστάσεων που αποθηκεύουν και εμφανίζουν διαφορετικές τιμές θέσεων πλοίων και βράχων. Οι δύο κύριες ενότητες είναι το παιχνίδι FSMs για το βράχο και το πλοίο και ο δυαδικός αποκωδικοποιητής οθόνης 7 τμημάτων FSM, οι οποίοι ενσωματώνονται μαζί χρησιμοποιώντας ένα πολύ απλό δομικό μοντέλο σε VHDL.

Τα FSM δημιουργήθηκαν για τη θέση του πλοίου, τη θέση του βράχου και για τον αποκωδικοποιητή 7 τμημάτων. Ο σκοπός του FSM του πλοίου είναι έτσι ώστε το πλοίο να μπορεί να μετακινηθεί στη σωστή θέση όταν ο παίκτης πατήσει ένα κουμπί πάνω ή κάτω. Το FSM είναι απαραίτητο επειδή πρέπει να θυμάται σε ποια θέση ήταν τελευταία για να μετακινηθεί στη σωστή θέση.

Ο σκοπός του FSM του βράχου είναι να μετακινήσει τον βράχο στη σωστή θέση με βάση τη σειρά που βρίσκεται και την τελευταία θέση σε αυτήν τη σειρά. Επιπλέον, παρακολουθεί τη θέση της μονάδας που θα την εμφανίσει και ψευδοτυχαία επιλέγει μια νέα σειρά που θα εμφανιστεί στην επόμενη.

Το FSM για τον αποκωδικοποιητή οθόνης 7 τμημάτων χρησιμοποιήθηκε όχι μόνο για να εμφανίσει το πλοίο και το βράχο αλλά και για να εμφανίσει το "BAnG" όταν η θέση του πλοίου και η θέση του βράχου είναι οι ίδιες.

Βήμα 2: Υλικά

Τα υλικά που χρησιμοποιήθηκαν στο έργο ήταν:

  • Basys3 Development Board από την Digilent, Inc.
  • Vivado Design Σουίτα
  • sseg_dec.vhd (Αυτό το αρχείο μας δόθηκε στο Polylearn και γράφτηκε από τον Bryan Mealy)
  • Clk_div.vhd (Αυτό το αρχείο μας παρασχέθηκε στο Polylearn και γράφτηκε από τον Bryan Mealy)
  • Τρεις μηχανές πεπερασμένης κατάστασης (FSM)

Βήμα 3: Κάνοντας το παιχνίδι

Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι
Κάνοντας το Παιχνίδι

Η ενότητα παιχνιδιού δημιουργήθηκε με τη χρήση μοντέλων συμπεριφοράς για να περιγράψει τις καταστάσεις του πλοίου και του βράχου για τους δικούς τους αντίστοιχους FSM. Το πλεονέκτημα αυτού είναι ότι είναι πολύ πιο εύκολο να μοντελοποιήσουμε το κύκλωμα συμπεριφορικά περιγράφοντας τι κάνει παρά να καταλάβουμε όλα τα στοιχεία που απαιτούνται για το σχεδιασμό του υλικού.

Οι καταστάσεις βράχου έγιναν χρησιμοποιώντας μια ψευδογενή γεννήτρια τυχαίων αριθμών για την πρώτη θέση του βράχου. Για να το πετύχουμε αυτό, δώσαμε στη γεννήτρια το δικό της ρολόι το οποίο ήταν εξαιρετικά γρήγορο σε σχέση με την ταχύτητα του παιχνιδιού. Σε κάθε ανερχόμενη άκρη, ένας αριθμός τριών δυαδικών ψηφίων αυξάνεται και όλες οι τιμές του αντιστοιχούν σε μία από τις τρεις καταστάσεις εκκίνησης για το πλοίο. Επομένως, τρεις τιμές αντιστοιχούν στη θέση 3 (επάνω δεξιά), τρεις αντιστοιχούν στη θέση 7 (το κέντρο) και δύο αντιστοιχούν στη θέση 11 (κάτω δεξιά).

Μόλις συμβεί η τυχαία γενιά και ο αστεροειδής έχει αρχική κατάσταση, ρέει οριζόντια προς το πλοίο χωρίς διακοπή.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Το ρολόι που χρησιμοποιείται για την επόμενη λογική κατάστασης του ροκ ελέγχει την ταχύτητα του παιχνιδιού. διαπιστώσαμε μέσω δοκιμής και σφάλματος ότι το 9999999 είναι μια καλή τιμή για τον μέγιστο αριθμό.

Η λογική του πλοίου λειτουργεί αρχικοποιώντας την κεντρική θέση (θέση 4) στην άκρα αριστερή πλευρά. Εάν πατήσετε το επάνω κουμπί ή το κάτω κουμπί, το πλοίο θα μετακινηθεί πάνω και κάτω στη θέση 0 και 11 που αντιστοιχεί στο κουμπί που έχει πατηθεί.

Προκειμένου η κίνηση του πλοίου να είναι καλή για τον χρήστη, δεν κάναμε την κίνησή του ασύγχρονη. Χρησιμοποιήσαμε ένα ρολόι για τις αλλαγές της κατάστασής του και χρησιμοποιήσαμε έναν μέγιστο αριθμό 5555555.

Βήμα 4: Εμφάνιση του αποτελέσματος

Ο δυαδικός αποκωδικοποιητής σε 7 τμήματα λαμβάνει τις 4-bit μεταβλητές θέσης για το πλοίο και τον αστεροειδή και εμφανίζει την κατάλληλη εικόνα (είτε το πλοίο και ο βράχος είτε το μήνυμα "BAnG").

Αυτό το επιτυγχάνει ελέγχοντας πρώτα εάν τα δύο είναι ίσα και στη συνέχεια εμφανίζοντας το μήνυμα "BAnG" εάν ο έλεγχος επιστρέψει αληθής.

Εάν δεν επιστρέψει αληθινός, ο αποκωδικοποιητής θα εμφανίσει το πλοίο και τον βράχο αλλάζοντας μεταξύ τους σε πολύ υψηλή συχνότητα ρολογιού και ξεγελάει το μάτι να τα δει σαν να εμφανίζονται ταυτόχρονα.

Βήμα 5: Το βάζουμε όλα μαζί

Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί

Συμπεριλάβαμε το FSM του πλοίου και του βράχου σε ένα μεγάλο FSM που συνδέσαμε στην οθόνη FSM. Οι είσοδοι στο παιχνίδι είναι το κουμπί επάνω και το κάτω κουμπί στον πίνακα BASYS3 και το ρολόι συστήματος. Οι έξοδοι είναι διανύσματα τμήματος και ανόδου επτά τμήματα-οθόνη.

Αυτές οι είσοδοι και οι έξοδοι θα εμφανιστούν στο αρχείο περιορισμών όπου αντιστοιχίζονται στη θύρα.

Βήμα 6: Μελλοντικές τροποποιήσεις

Στο μέλλον, η προσθήκη περισσότερων λειτουργιών κίνησης πλοίων στο έργο θα ήταν μια βελτίωση. Αυτό μπορεί να επιτευχθεί απλώς δίνοντας 2 επιπλέον εισόδους κουμπιών και επιτρέποντας στο πλοίο να πάρει θέσεις (καταστάσεις) διαφορετικές από 0, 4 και 8. Μια άλλη πιθανή τροποποίηση θα μπορούσε να είναι ο έλεγχος της επόμενης χρονικής στιγμής του αστεροειδή, έτσι ώστε να ξεκινά αργά και να αυξάνει την ταχύτητα κατά 1,5 φορές κάθε φορά που χάνει το πλοίο μέχρι να χτυπήσει, όπου θα επανεκκινήσει και θα γίνει ξανά αργό. Αυτό θα αυξήσει τη δυσκολία του παιχνιδιού και θα το κάνει πιο διασκεδαστικό για τον χρήστη αν εφαρμοστεί, και θα μπορούσε να γίνει δημιουργώντας μια μεταβλητή για το μέγιστο πλήθος του επόμενου ρολογιού κατάστασης του βράχου, πολλαπλασιάζοντας αυτήν τη μεταβλητή κατά 1,5 κάθε φορά που ο αστεροειδής δεν Δεν χτυπάτε και το επαναφέρετε στην αρχική του τιμή κάθε φορά που χτυπά το ροκ.

Βήμα 7: Συμπέρασμα

Αυτό το έργο μας βοήθησε να κατανοήσουμε καλύτερα μηχανές πεπερασμένης κατάστασης, ρολόγια και αλληλεπιδραστική εμφάνιση στις οθόνες επτά τμημάτων.

Το μεγαλύτερο πράγμα για τις μηχανές πεπερασμένης κατάστασης είναι ότι είναι σημαντικό να γνωρίζετε (να θυμάστε) σε ποια κατάσταση βρίσκεστε αυτήν τη στιγμή για να μεταβείτε στην επόμενη επιθυμητή κατάσταση. Κατά ειρωνικό τρόπο, καλές συμβουλές για τη ζωή. πρέπει να ξέρεις πού είσαι για να ξέρεις πού πας.

Χειρίζοντας διαφορετικές παρουσίες ρολογιών, μπορέσαμε να δημιουργήσουμε τυχαία αριθμούς, να μετακινήσουμε τον βράχο στην επόμενη θέση και να διαχειριστούμε την εμφάνιση του πλοίου, του βράχου και του τέλους του παιχνιδιού.

Μάθαμε ότι περισσότερες από μία άνοδοι δεν μπορούν να εμφανιστούν ταυτόχρονα. Η ενότητα που μας δόθηκε εκμεταλλεύτηκε ότι το ανθρώπινο μάτι μπορεί να δει τη διαφορά μόνο σε μια συγκεκριμένη συχνότητα. Έτσι, επιλέχθηκε υψηλότερη συχνότητα αλλαγής ανόδων. Το πλοίο και ο βράχος που φαίνονται ταυτόχρονα είναι στην πραγματικότητα ένας υπαινιγμός αφού το καθένα εμφανίζεται ξεχωριστά, αλλά πολύ γρήγορα. Αυτή η ιδέα εφαρμόστηκε για να εμφανίσει την κίνηση του πλοίου, του βράχου και το μήνυμα "BAnG".

Συνιστάται: