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

Stepηφιακή ακολουθία 4 βημάτων: 19 βήματα (με εικόνες)
Stepηφιακή ακολουθία 4 βημάτων: 19 βήματα (με εικόνες)

Βίντεο: Stepηφιακή ακολουθία 4 βημάτων: 19 βήματα (με εικόνες)

Βίντεο: Stepηφιακή ακολουθία 4 βημάτων: 19 βήματα (με εικόνες)
Βίντεο: Ο Έλληνας καθηγητής του ΜΙΤ Κωνσταντίνος Δασκαλάκης στη Στέγη 2024, Ιούλιος
Anonim
Stepηφιακός ακολουθίας 4 βημάτων
Stepηφιακός ακολουθίας 4 βημάτων
Stepηφιακός ακολουθίας 4 βημάτων
Stepηφιακός ακολουθίας 4 βημάτων

CPE 133, Cal Poly San Luis Obispo

Δημιουργοί έργου: Jayson Johnston και Bjorn Nelson

Στη σημερινή μουσική βιομηχανία, ένα από τα πιο συχνά χρησιμοποιούμενα «όργανα» είναι ο ψηφιακός συνθεσάιζερ. Κάθε είδος μουσικής, από το hip-hop έως το pop, ακόμα και το country, χρησιμοποιεί ένα ψηφιακό synthesizer στο στούντιο για να δημιουργήσει τους ρυθμούς και τους ήχους που χρειάζονται για να ζωντανέψουν τη μουσική τους. Σε αυτό το σεμινάριο, θα δημιουργήσουμε ένα πολύ απλό συνθεσάιζερ με τον πίνακα Basys 3 FPGA.

Ο συνθεσάιζερ θα μπορεί να αναπαράγει τέσσερις επιλεγμένες νότες τέταρτου με σταθερό αριθμό παλμών ανά λεπτό. Οι χρήστες θα χρησιμοποιήσουν τους διακόπτες για να αντιστοιχίσουν κάθε τρίμηνη νότα σε ένα μουσικό γήπεδο. Για αυτό το έργο χρησιμοποιούμε έναν ψηφιακό σε αναλογικό μετατροπέα 4-bit (DAC) για να πάρουμε την έξοδο από την πλακέτα και να τη μετατρέψουμε σε αναλογικό σήμα. Η έξοδος από το DAC θα τροφοδοτηθεί στη συνέχεια σε ένα τυπικό ηχείο υπολογιστή, δημιουργώντας τη μουσική μας. Δέκα έξι ξεχωριστά γήπεδα είναι δυνατά. Θα περιορίσουμε το συνθεσάιζερ μας σε μία μόνο οκτάβα 12 νότες, η οποία βρίσκεται μεταξύ του μεσαίου C (261,6 Hz) και του B4 (493,9 Hz). Ο χρήστης θα έχει επίσης την επιλογή εκχώρησης πολλαπλών σημειώσεων ταυτόχρονα, καθώς και ανάθεσης ανάπαυσης πατώντας αντιστοίχιση ενώ κανένας από τους διακόπτες βήματος δεν μετατοπίζεται προς τα πάνω. Καθώς κάθε νότα επιλέγεται και παίζεται, η σημείωση γράμματος εμφανίζεται στην οθόνη των 7 τμημάτων. Θα χρησιμοποιήσουμε επίσης τρία από τα κουμπιά στον πίνακα, ένα για αναπαραγωγή και παύση της μουσικής, ένα για επαναφορά του συνθεσάιζερ και τοποθέτησή του σε λειτουργία "επιλογής" και το τρίτο για ανάθεση σε κάθε νότα ενός βήματος κατά τη λειτουργία επιλογής.

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

Ακολουθεί μια λίστα με τον απαιτούμενο εξοπλισμό:

  • Vivado (ή οποιοσδήποτε χώρος εργασίας VHDL)
  • Basys 3 ή παρόμοια πλακέτα FPGA
  • Μετατροπέας ψηφιακού σε αναλογικό (ελάχιστα 4-bit)
  • Ηχείο με υποδοχή ακουστικών
  • Καλώδια καλωδίων

Βήμα 1: Λειτουργία χρήστη του Digital Sequencer

Λειτουργία χρήστη του Digital Sequencer
Λειτουργία χρήστη του Digital Sequencer

Τα ακόλουθα βήματα είναι για τη λειτουργία του ψηφιακού ακολουθία. Ο ψηφιακός προσδιοριστής αλληλουχίας υποστηρίζει την αναπαραγωγή 12 διαφορετικών θέσεων (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), οι οποίες κυμαίνονται από 261,6 Hz έως 493,9 Hz.

1. Πατήστε το αριστερό κουμπί για να θέσετε την πλακέτα σε λειτουργία επιλογής. Σε αυτήν τη λειτουργία, οι 4 αριστερότεροι διακόπτες (διακόπτες 13 έως 16) θα χρησιμοποιηθούν ο καθένας για να αποθηκεύσουν μια ξεχωριστή τιμή βήματος.

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

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

4. Τώρα που έχουν εκχωρηθεί όλες οι νότες σημειώσεων, ο ψηφιακός ακολουθιογράφος είναι έτοιμος για αναπαραγωγή. Για να παίξετε τις νότες στο ηχείο, απλώς πατήστε το δεξί κουμπί αναπαραγωγής/παύσης για να ξεκινήσετε την αναπαραγωγή της μουσικής. Η σειρά της ακολουθίας αναπαραγωγής αντικατοπτρίζει τα βήματα που σχετίζονται με τους αριστερούς διακόπτες, από αριστερά προς τα δεξιά. Οι νότες θα παιχτούν με καθορισμένο αριθμό παλμών ανά λεπτό, με τη σειρά 1, 2, 3, 4, 1, 2…. Στην οθόνη θα εμφανιστεί η νότα που παίζεται αυτήν τη στιγμή καθώς τα ηχεία παίζουν τη μουσική. Για παύση της αναπαραγωγής μουσικής, απλώς πατήστε το δεξί κουμπί και, στη συνέχεια, η μουσική θα σταματήσει να παίζει και στην οθόνη εμφανίζεται ένα σύμβολο παύσης. Πατώντας ξανά το δεξί κουμπί θα συνεχιστεί η αναπαραγωγή.

Βήμα 2: Τεχνικές λεπτομέρειες

Τεχνικές λεπτομέρειες
Τεχνικές λεπτομέρειες

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

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

Εισροές

  • Clk (εγγενές σήμα ρολογιού)
  • PP (αναπαραγωγή/παύση)
  • Sel (βάλτε συνθεσάιζερ σε λειτουργία επιλογής)
  • Εκχώρηση (αντιστοίχιση ενός βήματος σε ένα βήμα)
  • Βήμα (οι σημειώσεις θέσης)
  • Συχνότητα (οι διακόπτες δημιουργούν το επιθυμητό βήμα)

Έξοδοι

  • Άνοδος (ανόδους 7 τμημάτων)
  • Cathode (καθόδους 7 τμημάτων)
  • DAC (4-bit οδήγηση του DAC)

Βήμα 3: Τεχνικές λεπτομέρειες

Τεχνικές λεπτομέρειες
Τεχνικές λεπτομέρειες

Βήμα 4: Διαχωριστικό ρολογιού 7 τμημάτων

Διαχωριστικό ρολογιού 7 τμημάτων
Διαχωριστικό ρολογιού 7 τμημάτων

Το συνθεσάιζερ μας χρησιμοποιεί τρία διαχωριστικά ρολογιού, όλα παράγουν σήματα που εξυπηρετούν διαφορετικό σκοπό στο έργο μας. Ένας διαιρέτης ρολογιού λαμβάνει ένα εγγενές σήμα ρολογιού και παράγει ένα τροποποιημένο σήμα το οποίο έχει συχνότητα μικρότερη από το αρχικό σήμα ρολογιού. Το φυσικό ρολόι του Basys 3 είναι 100 MHz. Αυτή είναι η συχνότητα που χρησιμοποιούν τα διαχωριστικά ρολογιών μας. Εάν χρησιμοποιείτε διαφορετικό πίνακα FPGA με διαφορετική συχνότητα φυσικού ρολογιού, ίσως χρειαστεί να αλλάξετε τον κώδικα.

Ο διαχωριστής ρολογιού 7 τμημάτων παράγει ένα σήμα που οδηγεί το αρχείο seg_display. Θα εξηγήσουμε πώς λειτουργεί αυτό το αρχείο με περισσότερες λεπτομέρειες όταν φτάσουμε στην ενότητα του. Ουσιαστικά, αυτός ο διαχωριστής ρολογιού παράγει ένα σήμα 240 Hz που θα χρησιμοποιηθεί για εναλλαγή μεταξύ ανόδου και καθόδου στην οθόνη. Το σήμα είναι 240 Hz επειδή η συχνότητα στην οποία το ανθρώπινο μάτι δεν μπορεί να αναγνωρίσει την απουσία φωτός είναι 60 Hz. Χρησιμοποιούμε δύο ψηφία, οπότε διπλασιάζοντας αυτήν τη συχνότητα, κάθε ψηφίο θα ταλαντεύεται στα 60 Hz. Στη συνέχεια το διπλασιάζουμε για να πάρει 240 Hz επειδή το σύστημα αλλάζει μόνο όταν το σήμα ανεβαίνει ψηλά και όχι όταν χαμηλώνει.

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

Εισροές

Clk (εγγενές σήμα ρολογιού)

Έξοδοι

Clk_7seg (για seg_display)

Συστατικά

  • D μητρώο
  • MUX
  • Αντιστροφέας
  • Αθροιστής

Βήμα 5: Χτυπήματα ανά λεπτό διαχωριστικό ρολογιού

Beats Per Minute Clock Divider
Beats Per Minute Clock Divider

Ο διαιρέτης ρολογιού BPM λειτουργεί με παρόμοιο τρόπο. Αυτό το διαχωριστικό παράγει τη συχνότητα ρολογιού που οδηγεί την εναλλαγή μεταξύ των τεσσάρων βημάτων κατά την έξοδο ήχων στην κατάσταση αναπαραγωγής. Αποφασίσαμε την εναλλαγή μεταξύ σημειώσεων στα 100 BPM. Στα 100 BPM, κάθε νότα θα παιχτεί για 3/5 του δευτερολέπτου. Το προκύπτον σήμα θα έχει συχνότητα 1,67 Hz.

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

Εισροές

Clk (συχνότητα φυσικού ρολογιού)

Έξοδοι

Clk_BPM (στο output_FSM)

Συστατικά

  • D μητρώο
  • MUX
  • Αντιστροφέας
  • Αθροιστής

Βήμα 6: Pitches Clock Divider

Pitches Clock Divider
Pitches Clock Divider

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

Το ίδιο σύστημα καταμέτρησης χρησιμοποιείται εδώ. Για τις συγκεκριμένες τιμές στις οποίες μετρήσαμε, δείτε το αρχείο με την ένδειξη Clk_div_pitches.

Εισροές

Clk (συχνότητα φυσικού ρολογιού)

Έξοδοι

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (για έξοδο_επιλογής)

Συστατικά

  • D μητρώο
  • MUX
  • Αντιστροφέας
  • Αθροιστής

Βήμα 7: Αναπαραγωγή/Παύση/Επιλογή μηχάνημα κατάστασης

Αναπαραγωγή/Παύση/Επιλογή μηχάνημα κατάστασης
Αναπαραγωγή/Παύση/Επιλογή μηχάνημα κατάστασης

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

Το μηχάνημα κατάστασης PPS είναι το πρώτο FSM στο κύκλωμά μας. Υπάρχουν τρεις καταστάσεις σε αυτό το FSM. Λειτουργία αναπαραγωγής, παύσης και επιλογής. Για να μετακινηθούμε στις διάφορες καταστάσεις, χρησιμοποιήσαμε τα κουμπιά PP και Selection. Δείτε το διάγραμμα κατάστασης παραπάνω για να δείτε πώς συμβαίνουν οι μεταβάσεις μεταξύ καταστάσεων. Κάναμε αυτήν τη μετάβαση FSM στην ανερχόμενη άκρη του φυσικού ρολογιού 100 MHz, έτσι ώστε να είναι αδύνατο το μηχάνημα να μην μεταβαίνει όταν πατηθεί ένα από τα κουμπιά, ακόμη και για πολύ μικρό χρονικό διάστημα. Η παρούσα κατάσταση (P_state) είναι η μόνη έξοδος από αυτήν τη μονάδα.

Εισροές

  • Clk (συχνότητα φυσικού ρολογιού)
  • Sel (αριστερό κουμπί)
  • PP (δεξί κουμπί)

Έξοδοι

P_state (παρούσα κατάσταση, σε output_FSM, note_assign, seg_dsiplay, final_select)

Συστατικά

  • MUX
  • D μητρώο

Βήμα 8: Αναπαραγωγή/Παύση/Επιλογή μηχανήματος κατάστασης

Αναπαραγωγή/Παύση/Επιλέξτε κατάσταση μηχανήματος
Αναπαραγωγή/Παύση/Επιλέξτε κατάσταση μηχανήματος

Βήμα 9: Έξοδος FSM

Έξοδος FSM
Έξοδος FSM

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

Η έξοδος FSM λειτουργεί μόνο εάν η τρέχουσα κατάσταση από το πρώτο FSM είναι "01" (κατάσταση αναπαραγωγής). Ουσιαστικά, αυτή είναι η ενεργοποίηση για τη μονάδα. Εάν η κατάσταση είναι "01", τότε ο FSM πρόκειται να αλλάξει μεταξύ καταστάσεων στην ανερχόμενη άκρη του σήματος ρολογιού BPM. Το κάνουμε αυτό επειδή το output_FSM ελέγχει ποιος δυαδικός αριθμός για το επιλεγμένο βήμα στέλνεται στις μονάδες output_select και seg_display. Το FSM έχει είσοδο 16-bit που προέρχεται από τη μονάδα εκχώρησης σημειώσεων, η οποία θα καλυφθεί στη συνέχεια. Στην κατάσταση "00" για το output_FSM, η μονάδα θα εξάγει "xxxx" για την πρώτη εκχωρημένη νότα. Στη συνέχεια, στο "01", θα βγει "εεεε" για τη δεύτερη νότα και ούτω καθεξής για κάθε νότα πριν επιστρέψει στην πρώτη νότα. Δείτε το διάγραμμα κατάστασης παραπάνω.

Αυτό το FSM διαφέρει από το πρώτο επειδή δεν υπάρχει λογική εισόδου για τον έλεγχο της εναλλαγής μεταξύ καταστάσεων. Αντ 'αυτού, ο FSM πρόκειται να λειτουργήσει μόνο όταν η κατάσταση από το πρώτο FSM είναι "01" και στη συνέχεια αυτός ο FSM θα μεταβεί μεταξύ καταστάσεων μόνο στην ανερχόμενη άκρη του σήματος ρολογιού. Μια άλλη διαφορά είναι ότι αυτή η μονάδα έχει λογική εξόδου, που σημαίνει ότι δεν εξάγει την παρούσα κατάσταση, αλλά εξάγει τον δυαδικό αριθμό για το βήμα σε αυτήν την κατάσταση.

Εισροές

  • Clk_BPM (σήμα ρολογιού BPM από διαχωριστή ρολογιού)
  • FSM1_state (PS από PPS FSM)
  • Pitch_in (βήματα από note_assign)

Έξοδοι

Pitch_out (ένα βήμα κάθε φορά, για έξοδο_επιλογής και seg_display)

Συστατικά

  • MUX
  • D μητρώο

Βήμα 10: Έξοδος FSM

Έξοδος FSM
Έξοδος FSM

Βήμα 11: Σημείωση Εκχώρηση

Σημείωση Εκχώρηση
Σημείωση Εκχώρηση

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

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

Εισροές

  • P_state (παρούσα κατάσταση από PPS FSM)
  • Sel (αριστερό κουμπί)
  • Διακόπτης (διακόπτης ενός βήματος)
  • Συχνότητα (ακροδεξιοί διακόπτες για γήπεδο)
  • Εκχώρηση (κάτω κουμπί, εκχωρεί μια σημείωση)

Έξοδοι

Βήμα (δυαδικός αριθμός, σε output_FSM)

Συστατικά

  • MUX
  • D εγγραφείτε

Βήμα 12: Επιλογή εξόδου

Έξοδος Επιλογή
Έξοδος Επιλογή

Η επιλογή εξόδου είναι υπεύθυνη για τη λήψη του δυαδικού αριθμού για ένα βήμα και τη σύνδεση αυτού στο αντίστοιχο σήμα ρολογιού. Παρά το μέγεθός του, αυτό είναι επίσης μια σχετικά απλή ενότητα. Το Output_select είναι ουσιαστικά ένας δυαδικός αποκωδικοποιητής, ο οποίος αποκωδικοποιεί τον δυαδικό αριθμό για ένα βήμα σε ένα συγκεκριμένο σήμα ρολογιού. Στην πραγματικότητα, η εκχώρηση της εξόδου σε συχνότητα ρολογιού λειτούργησε καλύτερα εδώ σε σύγκριση με τη μονάδα note_assign, επειδή το μόνο που έπρεπε να κάνει ήταν να MUX τα σήματα ρολογιού με τον δυαδικό αριθμό που αντιπροσωπεύει την είσοδο ελέγχου.

Ζητούμε συγγνώμη για την περίεργη δρομολόγηση, ο Vivado οργάνωσε τα σήματα βήματος αλφαβητικά για το αρχείο clk_div_pitches, αλλά για αυτό το αρχείο τα οργάνωσε αυξανόμενος δυαδικός αριθμός, προκαλώντας τα βήματα να είναι σε διαφορετική σειρά. Σημειώστε επίσης ότι εάν ο δυαδικός αριθμός από το output_FSM ήταν "0000" ή οτιδήποτε μεγαλύτερο από "1100", τότε το MUX αποστέλλεται μέσω ενός επίπεδου σήματος "0".

Εισαγωγή

  • Βήμα (από output_FSM).
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (σήματα ρολογιού βήματος)

Παραγωγή

Oneχος (ένα μόνο bit που ταιριάζει με το επιλεγμένο σήμα ρολογιού, σε τετραγωνικό κύμα)

Συστατικά

MUX

Βήμα 13: Square Wave Gen

Square Wave Gen
Square Wave Gen

Το module square_wave είναι η γεννήτρια για το τετραγωνικό κύμα που εξάγεται από την πλακέτα στο DAC. Χρησιμοποιώντας το ηχητικό σήμα από το προηγούμενο αρχείο, αυτό το τετραγωνικό κύμα αντιστρέφει τον αριθμό 4 bit μεταξύ "0000" και "1111" στην ανερχόμενη άκρη του Tone. Ο τόνος είναι μια συγκεκριμένη συχνότητα βήματος, οπότε το τετραγωνικό κύμα παράγει ένα κύμα με διαφορετική συχνότητα όταν το output_FSM μεταβαίνει σε άλλη κατάσταση. Η έξοδος 4-bit από αυτήν τη μονάδα πηγαίνει στη μονάδα fin_sel, όπου η λογική υπαγορεύει εάν αυτός ο δίαυλος θα εξάγεται με βάση την κατάσταση από το PPS FSM.

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

Εισροές

Oneχος (ταλαντούμενο bit από την επιλογή_εξόδου)

Έξοδοι

DAC_input (ταλαντούμενο δίαυλο 4-bit που αλλάζει στην ίδια συχνότητα τόνου)

Συστατικά

  • Αντιστροφέας
  • D μητρώο

Βήμα 14: Οθόνη 7 τμημάτων

Οθόνη 7 τμημάτων
Οθόνη 7 τμημάτων

Η ενότητα seg_display ελέγχει την οθόνη 7 τμημάτων στον πίνακα βάσης μας. Μέσα στην ενότητα, συμβαίνουν δύο διαδικασίες. Η πρώτη διαδικασία αποκωδικοποιεί το Freq όταν βρίσκεται στην κατάσταση "επιλογής" ή το Pitch όταν βρίσκεται στη λειτουργία "αναπαραγωγής". Στη λειτουργία "παύσης", η μονάδα αποκωδικοποιεί για να εμφανίσει το σύμβολο παύσης. Κοιτώντας τον κώδικα VHDL, μπορείτε να δείτε ότι ο δυαδικός αποκωδικοποιητής αποκωδικοποιεί την είσοδο σε δύο διαφορετικά σήματα, την κάθοδο 1 και την κάθοδο 2. Το Cathode1 αντιπροσωπεύει το γράμμα που αντιστοιχεί στο βήμα που θα εμφανιστεί και η κάθοδος2 αντιπροσωπεύει το επίπεδο σύμβολο (b) εάν υπάρχει. Ο λόγος για αυτό σχετίζεται με τη δεύτερη διαδικασία που πραγματοποιείται από τη μονάδα seg_display.

Σε έναν πίνακα basys3, η οθόνη του τμήματος έχει κοινές καθόδους. Ενώ οι άνοδος ελέγχουν ποιο ψηφίο είναι ενεργοποιημένο, οι κάθοδοι ελέγχουν ποια τμήματα είναι ενεργοποιημένα. Δεδομένου ότι η οθόνη έχει κοινές καθόδους, αυτό σημαίνει ότι μπορείτε να εμφανίσετε μόνο ένα σύνολο τμημάτων τη φορά. Αυτό θέτει ένα πρόβλημα για αυτό το έργο επειδή θέλουμε να εμφανίσουμε ένα γράμμα στο πρώτο ψηφίο και το επίπεδο σύμβολο, εάν είναι απαραίτητο, ταυτόχρονα. Τώρα θυμάστε το σήμα ρολογιού 7seg; Για να ξεπεράσουμε αυτό το ζήτημα, αλλάζουμε τις άνοδος και τις καθόδους μπρος -πίσω στο σήμα του ρολογιού 7seg. Επειδή το σήμα του ρολογιού είναι 240 Hz και χρησιμοποιούμε δύο ψηφία, κάθε ψηφίο θα ταλαντεύεται στα 60 Hz. Στο ανθρώπινο μάτι, θα φαίνεται ότι τα ψηφία δεν ταλαντεύονται καθόλου.

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

Εισροές

  • Πίσσα (δυαδικός αριθμός για μια νότα, που χρησιμοποιείται σε κατάσταση αναπαραγωγής)
  • Συχνότητα (διακόπτες συχνότητας, χρησιμοποιούνται όταν είναι σε κατάσταση επιλογής)
  • P_state (παρούσα κατάσταση από PPS FSM)
  • Clk_240Hz (σήμα ρολογιού από Clk_div_7seg, διπλό 120 επειδή χρησιμοποιούμε μόνο την ανερχόμενη άκρη)

Έξοδοι

  • Cathode (δίαυλος που ελέγχει τμήματα στην οθόνη, τελική έξοδος)
  • Άνοδος (δίαυλος που ελέγχει τα ψηφία στην οθόνη, τελική έξοδος)

Συστατικά

  • Μάνταλο
  • MUX
  • D μητρώο

Βήμα 15: Τελική επιλογή

Τελική επιλογή
Τελική επιλογή

Η τελική επιλογή είναι η τελευταία ενότητα που χρησιμοποιείται σε αυτό το έργο. Μια άλλη απλή ενότητα, αυτή η ενότητα ελέγχει την τελική έξοδο που θα μεταβεί στο DAC. Όταν βρίσκεται στην κατάσταση "επιλογής" ή "παύσης", η μονάδα θα βγάλει ένα στατικό "0000" έτσι ώστε να μην αναπαράγεται μουσική από τα ηχεία. Στην κατάσταση "παιχνιδιού", η μονάδα θα εξάγει τα ταλαντευόμενα 4-bit όπως καθορίζεται από το τετραγωνικό κύμα.

Εισροές

  • P_state (παρούσα κατάσταση από PPS FSM)
  • DAC_input (τα ταλαντευόμενα 4-bit από το τετραγωνικό κύμα)

Έξοδοι

DAC (ισούται με DAC_input σε κατάσταση αναπαραγωγής, τελική έξοδος)

Συστατικά

MUX

Βήμα 16: Εξωτερικές συσκευές: DAC

Εξωτερικές συσκευές: DAC
Εξωτερικές συσκευές: DAC

Ένας ψηφιακός σε αναλογικός μετατροπέας (DAC) λαμβάνει ένα διακριτό σήμα και το μετατρέπει σε συνεχές σήμα. Το DAC μας έχει τέσσερα bit και είναι κατασκευασμένο από έναν ενισχυτή αθροίσεων. Χρησιμοποιώντας μια αναλογία αντιστάσεων στον βρόχο τροφοδοσίας και ανάδρασης, μπορέσαμε να δημιουργήσουμε ένα σύστημα που εξάγει σε 16 διαφορετικά επίπεδα δημιουργώντας από το "άθροισμα" κάθε κλάδου. Το Bit0, ο κορυφαίος κλάδος, έχει το μικρότερο βάρος και συνεισφέρει το μικρότερο δυναμικό όταν είναι υψηλό εξαιτίας αυτού του κλάδου υψηλότερη αντίσταση. Το βάρος αυξάνεται καθώς κατεβαίνετε στα κλαδιά. Αν μετρούσατε δυαδικά προς τα πάνω και μετά κάνατε πίσω αντίστροφα χρησιμοποιώντας τις εισόδους δυαδικών ψηφίων, οι τάσεις εξόδου θα μοιάζουν με ένα ημιτονοειδές κύμα. Η είσοδος στο DAC συνδέθηκε με ένα από τα PMOD στην πλακέτα για τη μεταφορά του σήματος 4-bit.

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

Βήμα 17: Εξωτερικές συσκευές: Ηχείο

Εξωτερικές συσκευές: Ηχείο
Εξωτερικές συσκευές: Ηχείο

Για αυτό το έργο, δεν πρόκειται να αγοράσετε ένα υπέροχο ζευγάρι ηχείων. Όπως μπορείτε να πείτε, ο ήχος είναι αρκετά βασικός. Πήγαμε και αγοράσαμε ένα σετ ηχείων υπολογιστή αξίας 8 $ από την Best Buy. Οτιδήποτε με υποδοχή ακουστικών λειτουργεί καλά. Το Monotone λειτουργεί επίσης καλά. Μπορείτε ακόμη και να χρησιμοποιήσετε ακουστικά, αλλά μπορεί να τα σκάσετε!

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

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

Και αυτό είναι το τελευταίο βήμα για τη δημιουργία ενός ψηφιακού sequencer από έναν πίνακα FPGA! Μεταβείτε στις επόμενες δύο ενότητες για να κατεβάσετε όλο τον κώδικα VHDL και να δείτε το sequencer σε δράση.

Βήμα 18: Επίδειξη βίντεο

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

Βήμα 19: Κώδικας VHDL

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

Συνιστάται: