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

Πονγκ Πονγκ: 6 Βήματα
Πονγκ Πονγκ: 6 Βήματα

Βίντεο: Πονγκ Πονγκ: 6 Βήματα

Βίντεο: Πονγκ Πονγκ: 6 Βήματα
Βίντεο: Πως Φτιάχνουμε Καπνογόνο Εύκολα 2024, Νοέμβριος
Anonim
Πονγκ Πονγκ
Πονγκ Πονγκ

Υλικά:

Basys3 FPGA Board

Καλώδιο VGA

Vivado

Ο σκοπός αυτού του οδηγού είναι η ανάπτυξη ενός παιχνιδιού Pong που θα εμφανίζεται σε μια οθόνη. Το έργο θα χρησιμοποιήσει VHDL για προγραμματισμό και χρησιμοποιεί ένα Basys3 FPGA για να εκτελέσει τον κώδικα και μεταφέρει την εικόνα χρησιμοποιώντας μια διεπαφή VGA. Αυτό το σεμινάριο απευθύνεται σε άτομα που έχουν λίγη προηγούμενη γνώση του VHDL. Το σεμινάριο θα χωριστεί σε 6 διαφορετικές ενότητες: Επισκόπηση, Διαδικασία, Χειριστής Βαθμολογίας, Δημιουργία Εικόνας, Πονγκ Πονγκ και VGA.

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

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

Η παραπάνω εικόνα είναι ο συνολικός σχηματικός σχεδιασμός του έργου

Στόχος του παιχνιδιού:

Το παιχνίδι αποτελείται από μια οθόνη με συρόμενο κουπί που μπορεί να ελεγχθεί από τον χρήστη και ένα σταθερό τοίχο που λειτουργεί ως το πάνω όριο. Όταν ο χρήστης πατήσει το κουμπί έναρξης, το οποίο είναι το κουμπί επάνω, η μπάλα θα αρχίσει να αναπηδά και θα αναπηδήσει από τον τοίχο και θα επιχειρήσει να χτυπήσει το κουπί. Εάν η μπάλα χτυπήσει το κουπί, αναπηδά ξανά και συνεχίζει να αναπηδά μέχρι να χάσει το κουπί. Το παιχνίδι τελειώνει όταν η μπάλα δεν καταφέρει να χτυπήσει το κουπί. Ο χρήστης θα μπορεί να χρησιμοποιεί τα αριστερά και δεξιά κουμπιά για να καθορίσει την κίνηση του κουπιού. Για να επαναφέρετε το παιχνίδι, ο χρήστης πρέπει να πατήσει το κεντρικό κουμπί. Ο χρόνος της εκτέλεσης θα καταγραφεί σε οθόνη 7 τμημάτων. Υπάρχουν πέντε επίπεδα και κάθε δέκα δευτερόλεπτα το επίπεδο αυξάνεται, μέχρι να φτάσετε στο επίπεδο 5 όπου παραμένει μέχρι να χάσει ο χρήστης. Τα επίπεδα καθορίζονται από την ταχύτητα της μπάλας. αυτό σημαίνει ότι κάθε δέκα δευτερόλεπτα, η ταχύτητα της μπάλας αυξάνεται, αυξάνοντας έτσι τη δυσκολία του παιχνιδιού.

Αρχιτεκτονική του συστήματος:

Το παρακάτω διάγραμμα είναι το βασικό συνολικό μπλοκ διάγραμμα ανώτερου επιπέδου για το σύστημα. Το σύστημα έχει τέσσερις εισόδους: Button R, Button L, Start και Reset και ένα ρολόι. Διαθέτει οριζόντια και κάθετη έξοδο συγχρονισμού, RBG (που αναφέρεται στο χρώμα του εικονοστοιχείου σε μια συγκεκριμένη τοποθεσία) και Βαθμολογία (που λειτουργεί ως δίαυλος στην οθόνη των 7 τμημάτων). Το κουμπί επάνω θα χρησιμοποιηθεί ως αρχή κουμπί, και τα αριστερά και δεξιά κουμπιά θα χρησιμοποιηθούν για να μετακινήσετε το κουπί στις αντίστοιχες κατευθύνσεις τους. Η οθόνη 7 τμημάτων θα χρησιμοποιηθεί για την καταγραφή του σκορ, που είναι ο αριθμός των δευτερολέπτων που έχει παίξει ο χρήστης χωρίς να χάσει το παιχνίδι. Ο αριθμός θα εμφανιστεί ως δεκαδικός αριθμός.

Circuit Architecture: Θα φτιάξουμε το gizmo μας χρησιμοποιώντας ένα FSM που περιέχει μικρότερο FSM, το sub-FSM θα ελέγχει τη δυσκολία του παιχνιδιού ενώ ο κύριος FSM θα ελέγχει τη συνολική ροή του παιχνιδιού. Το gizmo μας θα χρησιμοποιήσει επίσης τουλάχιστον τρία διαχωριστικά ρολογιού, ένα για το σκορ (χρόνο), ένα για το ρυθμό ανανέωσης της οθόνης και ένα που συνδέεται με την έξοδο ενός DeMux, ώστε να μπορούμε να ελέγξουμε πόσο γρήγορα το παιχνίδι θα προχωρήσει με αυξανόμενες δυσκολίες. Το παιχνίδι θα κινηθεί πολύ πιο γρήγορα όσο περισσότερο παίζετε. Θα έχουμε την είσοδο ελέγχου της κατάστασης παρουσίασης του DeMux του υπο-FSM, έτσι ώστε να μπορούμε να ελέγξουμε πόσο γρήγορα θα πάει το παιχνίδι μέχρι το χρονικό διάστημα που το παίζετε. Θα χρησιμοποιήσουμε μερικούς μετρητές, έναν για να ανανεώσετε την οθόνη και έναν για να μετρήσετε το σκορ καθώς συνεχίζετε να παίζετε. Αυτό το έργο έχει δύο κύριες ενότητες και μια σειρά υπομονάδων που θα χειριστούν τα δεδομένα εισόδου. Οι δύο κύριες υπομονάδες είναι το πρόγραμμα οδήγησης VGA, καθώς και η μονάδα λογικής κουμπιού. Το πρόγραμμα οδήγησης VGA θα αποτελείται από προγραμματιζόμενη μνήμη, ένα διαχωριστή ρολογιού και τη λογική που θα χειρίζεται την έξοδο για το χρώμα. Η μονάδα λογικής κουμπιού θα αποτελείται επίσης από ένα διαχωριστή ρολογιού και μια προγραμματιζόμενη μνήμη, καθώς και έναν δυαδικό μετατροπέα σε δεκαδικό για την οθόνη 7 τμημάτων με τον αντίστοιχο διαχωριστή ρολογιού.

Βήμα 2: Διαδικασία εικόνας

Για την ενότητα Διαδικασία εικόνας του έργου, θα καθορίσουμε την κίνηση της μπάλας και του κουπιού. Το πρόγραμμα διαθέτει θύρες που περιλαμβάνουν αριστερά, δεξιά, επάνω και κεντρικά κουμπιά, την τρέχουσα κατάσταση, ρολόι, τις θέσεις Χ και Υ της μπάλας, το αριστερό και το δεξί άκρο του κουπιού και ένα fail. Η παρούσα κατάσταση χρησιμοποιείται για τον προσδιορισμό του σήματος ενεργοποίησης. Ο κώδικας περνάει από τις πολλαπλές περιπτώσεις που μπορεί να κινηθεί η μπάλα και έχει θέσει προϋποθέσεις για να καθορίσει τη διαδρομή της μπάλας. Το επόμενο μπλοκ διαδικασίας καθορίζει την κατεύθυνση που κινείται το κουπί με βάση το κουμπί που πατά ο χρήστης. Ο κώδικας για αυτό το μέρος του έργου επισυνάπτεται με λεπτομερή σχόλια που περιγράφουν τι κάνει κάθε ενότητα.

Βήμα 3: Χειριστής βαθμολογίας

Διαχειριστής αποτελεσμάτων
Διαχειριστής αποτελεσμάτων

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

Διαιρέτης ρολογιού:

Ο διαιρέτης ρολογιού έχει εισόδους Clk (ρολόι), CEN (ενεργοποίηση) και Div (διαιρέτη) και έξοδο Clk_out. Εάν το σήμα ενεργοποίησης είναι ενεργοποιημένο, τότε το ρολόι θα υπολογίζεται στην άκρη ανόδου.

Μετρητής βαθμολογίας

Ο μετρητής Thescore έχει εισόδους Clk (Ρολόι) και RST (Επαναφορά) και εξόδους Clk_Out και Q που ουσιαστικά λειτουργεί ως έξοδο βαθμολογίας.

Πρόγραμμα οδήγησης τμήματος

Το πρόγραμμα οδήγησης τμήματος έχει εισόδους D1, D10, D100, D1000 και Clock. Οι αριθμοί μετά το "D" αναφέρονται στο δεκαδικό ψηφίο στην οθόνη των 7 τμημάτων. Οι έξοδοι είναι οι άνοδοι και το ψηφίο. Το ρολόι μετρά και εκχωρεί τους αριθμούς και τη θέση του. Για παράδειγμα, ένα "9" θα εμφανιστεί στη θέση ενός με το "0" σε χιλιάδες, εκατοντάδες και δεκάδες. Όταν αλλάζει σε "10", ο αριθμός θα έχει τώρα ένα "1" στη θέση των δεκάδων και "0" στη θέση χιλιάδων, εκατοντάδων και ενός.

Διαχειριστής τμημάτων

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

Διαχειριστής αποτελεσμάτων

Το Score Handler αποτελείται από τις προηγούμενες τέσσερις οντότητες και τα συνδυάζει όλα και χαρτογραφεί τα σήματα. Ενεργοποιεί και απενεργοποιεί επίσης τον μετρητή με βάση την τρέχουσα κατάσταση.

Βήμα 4: Δημιουργία εικόνας

Η δημιουργία εικόνας αποτελείται από τέσσερα στοιχεία: Animation, Fail Counter, Refresh Image και Start Counter. Αυτά τα αρχεία αναφέρονται στον τρόπο δημιουργίας των εικόνων στην οθόνη.

Κινουμένων σχεδίων

Το αρχείο κινούμενων εικόνων έχει εισόδους Clk (Σήμα ρολογιού), CEN (ενεργοποίηση καταμέτρησης), RST (Επαναφορά σήματος), B_X (θέση X της μπάλας), B_Y (θέση Y της μπάλας), P_L (θέση αριστερού κουπιού) και P_R (δεξιά θέση κουπιού). Οι έξοδοι είναι WA (η διεύθυνση στην οποία γράφουμε το χρώμα) και WD (το χρώμα γράφεται στην καθορισμένη διεύθυνση). Το αρχείο διαθέτει Play_Counter που είναι ένας μετρητής που θα χρησιμοποιηθεί ως είσοδος ελέγχου για το MUX, ένας κωδικοποιητής που μπορεί να βγάλει τα σωστά χρώματα στα σωστά σημεία και, τέλος, έναν πολυπλέκτη που εμφανίζει το σωστό χρώμα με βάση τη θέση του κουπιού και μπάλα.

Ανανέωση εικόνας

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

Έναρξη μετρητή

Ο μετρητής έναρξης χρησιμοποιεί εισόδους Clk, RS και CEN και εξάγει WA και WD. Χρησιμοποιεί μετρητή και μετατροπή για να καθορίσει την είσοδο ελέγχου για το MUX. Στη συνέχεια, ο πολυπλέκτης χρησιμοποιεί την είσοδο για να καθορίσει τις σωστές διευθύνσεις χρώματος και στέλνει αυτά τα δεδομένα στο πρόγραμμα οδήγησης VGA. Αυτό χρησιμοποιείται για την εμφάνιση του "Pong" όταν ο χρήστης ξεκινά το παιχνίδι.

Fail Counter

Ο μετρητής αποτυχίας χρησιμοποιείται για την εμφάνιση του "Game Over" όταν ο χρήστης χάνει το παιχνίδι. Έχει σήμα Clk, RST και CEN. Χρησιμοποιεί έναν μετρητή και έναν τύπο μετατροπής για να καθορίσει την είσοδο ελέγχου για το MUX. Στη συνέχεια, ο πολυπλέκτης χρησιμοποιεί την είσοδο για να καθορίσει τις σωστές διευθύνσεις χρώματος και στέλνει αυτά τα δεδομένα στο πρόγραμμα οδήγησης VGA.

Βήμα 5: Πονγκ παιχνίδι

Πονγκ Πονγκ
Πονγκ Πονγκ

Αυτή η ενότητα του έργου περιλαμβάνει τα αρχεία Pong Master, Finite State Machine (FSM), Timer και Start Debounce αρχεία.

Μετρών την ώραν

Το χρονόμετρο έχει εισόδους Clk (Clock) και PS (Present State) και Timer και Clk_out ως εξόδους. Το χρονόμετρο χρησιμοποιείται για την αλλαγή της ταχύτητας του παιχνιδιού περίπου κάθε πέντε δευτερόλεπτα.

Ροή FSM

Το Flow FSM έχει εισόδους Clk, Fail, Timer, Bttn_S (Start Button) και Buttn_RST (Reset Button) και έξοδο Pres_S (Present State Output). Ο FSM χρησιμοποιεί το χρονόμετρο για να ενημερώσει την παρούσα κατάσταση στην επόμενη κατάσταση και συνεχίζει την ενημέρωση της επόμενης κατάστασης έως ότου το παιχνίδι φτάσει στο επίπεδο 5 όπου παραμένει μέχρι να τελειώσει το παιχνίδι.

Ξεκινήστε το Debounce

Το Start Debounce είναι η αναπήδηση εκκίνησης της μπάλας. Έχει εισόδους S_in και Clk και έξοδο S_out.

Pong Master Αυτό το αρχείο χρησιμοποιεί όλα τα προηγούμενα στοιχεία και το κάνει έτσι ώστε όλα τα στοιχεία να είναι στιγμιαία. Είναι το κύριο αρχείο που συνδυάζει όλα τα προηγούμενα στοιχεία που έχουμε δημιουργήσει μαζί.

Βήμα 6: Πρόγραμμα οδήγησης VGA

Το πρόγραμμα οδήγησης VGA (Visual Graphics Array) είναι ένα λογισμικό που χρησιμοποιείται για την αποδοχή εντολών ή δεδομένων που αποστέλλονται στην οθόνη. Ο οδηγός μας δόθηκε από τον καθηγητή μας. Χρησιμοποιήστε το πρόγραμμα οδήγησης και ένα καλώδιο VGA για να συνδέσετε την πλακέτα Basys3 στην οθόνη.

Θα πρέπει τώρα να είστε έτοιμοι να φτιάξετε το δικό σας παιχνίδι Pong χρησιμοποιώντας VHDL!

Συνιστάται: