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

Παιχνίδι Binary to Decimal Matcher: 10 Βήματα
Παιχνίδι Binary to Decimal Matcher: 10 Βήματα

Βίντεο: Παιχνίδι Binary to Decimal Matcher: 10 Βήματα

Βίντεο: Παιχνίδι Binary to Decimal Matcher: 10 Βήματα
Βίντεο: What's the BEST Fridge to Buy? The Truth Will SURPRISE You! 2024, Ιούλιος
Anonim
Image
Image
Ρύθμιση του διαχωριστή ρολογιού
Ρύθμιση του διαχωριστή ρολογιού

Αυτό το διδακτικό θα δείξει τη διαδικασία και τις ενότητες που απαιτούνται για τη δημιουργία του παιχνιδιού Binary to Decimal Matching. Μέσα σε 60 δευτερόλεπτα, οι χρήστες θα μεταφράσουν και θα εισάγουν πολλούς τυχαίους δεκαδικούς αριθμούς στην οθόνη των επτά τμημάτων σε δυαδικό με εναλλαγή των διακοπτών και υποβολή με ένα κουμπί εικασίας. Μόλις ολοκληρωθεί, θα εμφανιστεί ένα τελικό σκορ και στη συνέχεια θα επαναρυθμιστεί για να παίξει ξανά.

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

Βήμα 1: Ρύθμιση του διαχωριστή ρολογιού

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

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

Είσοδοι: ClkIn, διαιρέτης (32 bit)

Έξοδος: ClkOut

Βήμα 2: Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)

Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)
Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)
Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)
Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)
Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)
Δημιουργία μηχανής πεπερασμένης κατάστασης (FSM)

Στη Μηχανή Πεπερασμένης Κατάστασης, αποφασίσαμε ότι πέντε καταστάσεις (Έναρξη, Εμφάνιση, Έλεγχος, Βαθμολογία και Τέλος) θα ήταν απαραίτητες με πέντε εισόδους (έναρξη, επαναφορά, μαντέψτε, ίσο, χρονικό όριο). Η μόνη έξοδος στο State Machine μας είναι ένας αριθμός 3 bit που αντιπροσωπεύει την κατάσταση στην οποία βρίσκεται ο χρήστης (000, 001, 011, 101, 100) σε σχέση με τις παρακάτω καταστάσεις.

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

Κατάσταση έναρξης (000)

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

Κατάσταση παιχνιδιού (001)

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

Έλεγχος κατάστασης (011)

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

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

Βαθμολογία (101)

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

Τελική κατάσταση (100)

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

Είσοδοι: Clk, πρώτο, έναρξη, μαντέψτε, ίσο, χρονικό όριο

Έξοδος: κατάσταση (3 bit)

Βήμα 3: Χαρτογράφηση της επίδειξης επτά τμημάτων

Αντιστοίχιση της επίδειξης επτά τμημάτων
Αντιστοίχιση της επίδειξης επτά τμημάτων
Αντιστοίχιση της επίδειξης επτά τμημάτων
Αντιστοίχιση της επίδειξης επτά τμημάτων
Αντιστοίχιση της επίδειξης επτά τμημάτων
Αντιστοίχιση της επίδειξης επτά τμημάτων

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

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

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

Είσοδοι: Clk, επτά τμήματα

Έξοδος: κάθοδοι (7 bit), άνοδοι (4 bit)

Βήμα 4: Δημιουργία του συγκριτή

Δημιουργία του συγκριτή
Δημιουργία του συγκριτή

Αυτή η υπομονάδα χρησιμοποιείται στην κατάσταση ελέγχου ως προς το πώς συγκρίνει την δυαδική εισαγόμενη εικασία 7 bit με την πραγματική δεκαδική τιμή.

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

Είσοδοι: διακόπτες (8 bit), αριθμός (8 bit)

Έξοδος: EQ

Βήμα 5: Ρύθμιση χρονοδιακόπτη

Ρύθμιση χρονοδιακόπτη
Ρύθμιση χρονοδιακόπτη
Ρύθμιση χρονοδιακόπτη
Ρύθμιση χρονοδιακόπτη

Ο χρονοδιακόπτης μας είναι ουσιαστικά δύο διαφορετικοί μετρητές που αυξάνονται με διαφορετικούς ρυθμούς. Ένας μετρητής στην τιμή "ενός", (η πρώτη επίδειξη επτά τμημάτων) και ένας μετρητής για την τιμή "δέκα" (δεύτερο ψηφίο στην οθόνη επτά τμημάτων). Κάθε ψηφίο βασίζεται στην ανοδική άκρη του ρολογιού και μόλις ο μετρητής φτάσει τα 60 δευτερόλεπτα, το time_out θα είναι υψηλό και το παιχνίδι θα τελειώσει και θα επιστρέψει στην αρχική κατάσταση.

Είσοδοι: Clk, κατάσταση (3 bit), έναρξη

Έξοδοι: Τρέχουσα (8 bit), χρονικό όριο

Βήμα 6: Σχεδιασμός της γεννήτριας τυχαίων τυχαίων αριθμών

Σχεδιασμός της γεννήτριας τυχαίων τυχαίων αριθμών
Σχεδιασμός της γεννήτριας τυχαίων τυχαίων αριθμών

Μια άλλη εναλλακτική μέθοδος για μια γεννήτρια αριθμών ειδικά για αυτήν την περίπτωση είναι να έχουμε έναν επαναλαμβανόμενο μετρητή από 0-99 (σε δυαδικό) που βγάζει τον μετρημένο αριθμό όταν η είσοδος είναι υψηλή, καθώς αυτό θα εξαλείψει την ανάγκη χρήσης ενός LFSR.

Ο αριθμός αλλάζει κάθε αυξανόμενη άκρη του εσωτερικού ρολογιού (10 νανο-δευτερόλεπτα) και κάνει κύκλους και στους 100 αριθμούς σε ένα μικρό δευτερόλεπτο. Κάθε φορά που ο χρήστης θέλει έναν νέο αριθμό από τη γεννήτρια αριθμών, εξάγει τον αριθμό στον οποίο ήταν, Αν και αυτή η διαδικασία δεν είναι εντελώς τυχαία, η πιθανότητα εύρεσης σχετικών αποτελεσμάτων από αυτήν τη διαδικασία είναι αρκετά χαμηλή για να είναι ψευδοτυχαία.

Είσοδοι: Clk, changenum, ίσες

Έξοδος: αριθμός (8 bit)

Βήμα 7: Δημιουργία μετατροπέα

Δημιουργία μετατροπέα
Δημιουργία μετατροπέα

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

Για παράδειγμα, εάν η τελική έξοδός μας για τη βαθμολογία ήταν 0010001 (δεκαεπτά), η επίδειξη επτά τμημάτων θα έδειχνε την δεκαεξαδική τιμή του 11, αντί του δεκαδικού αριθμού 17.

Είσοδος: Numin (8 bit)

Έξοδος: Numout (8 bit)

Βήμα 8: Τοποθέτηση όλων μαζί στην ενότητα παιχνιδιών

Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών
Βάζοντας τα πάντα μαζί στην ενότητα παιχνιδιών

Για τα στοιχεία μας, χρησιμοποιήσαμε τους απαραίτητους διακόπτες 0-6 για εναλλαγή του χρήστη, με τα τρία κουμπιά να λειτουργούν ως είσοδοι χρήστη για έναρξη, επαναφορά και εικασία. Τα επτά τμήματα της οθόνης και του ρολογιού είναι επίσης στοιχεία που έχουμε κάνει από προηγούμενα εργαστήρια αλλά έπρεπε να αλλάξουμε για να ταιριάζει σε αυτό το έργο.

Χωρίσαμε αυτό το έργο στις έξι ενότητες που εμφανίζονται παραπάνω για να διασπάσουμε ολόκληρο το gizmo σε πολλά μέρη εργασίας, ωστόσο, ο τρόπος που συνδέονται είναι αρκετά περίπλοκος και φαίνεται από τη συνημμένη εικόνα του μαύρου κουτιού.

Ενώ το παιχνίδι συμβαίνει, 7 LED ανάβουν για να ειδοποιήσουν το χρήστη ποιος αλλάζει να χρησιμοποιηθεί και όταν τελειώσει το παιχνίδι, προγραμματίσαμε επίσης να αναβοσβήνουν τα LED

Είσοδοι: διακόπτες (8 bit), Clk, επαναφορά, εκκίνηση, εικασία

Έξοδοι: κάθοδοι (7 bit), άνοδοι (4 bit), LED (7 bit)

Βήμα 9: Παρουσιάστηκαν επιπλέον προβλήματα

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

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

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

Βήμα 10: Αρχεία και περιορισμοί πηγής

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

Συνιστάται: