Πίνακας περιεχομένων:
- Βήμα 1: Προδιαγραφές
- Βήμα 2: Επισκόπηση του PIC
- Βήμα 3: Σχεδιασμός και εφαρμογή RTL
- Βήμα 4: Σημαντικές σημειώσεις και συνημμένα αρχεία
Βίντεο: Σχεδιασμός προγραμματιζόμενου ελεγκτή διακοπών σε VHDL: 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Είμαι συγκλονισμένος από το είδος των απαντήσεων που λαμβάνω σε αυτό το ιστολόγιο. Ευχαριστώ παιδιά που επισκεφτήκατε το ιστολόγιό μου και μου δώσατε κίνητρο να μοιραστώ τις γνώσεις μου μαζί σας. Αυτή τη φορά, θα παρουσιάσω τον σχεδιασμό μιας άλλης ενδιαφέρουσας μονάδας που βλέπουμε σε όλα τα SOCs - Interrupt Controller.
Θα σχεδιάσουμε έναν απλό αλλά ισχυρό προγραμματιζόμενο ελεγκτή διακοπών. Είναι ένα πλήρως διαμορφώσιμο και παραμετροποιημένο σχέδιο που είναι φορητό σε όλες τις πλατφόρμες. Το σχεδίασα αφού διάβασα πολλά για μερικές δημοφιλείς αρχιτεκτονικές ελεγκτών διακοπών εκεί έξω όπως NVIC, 8259a, RISC-V PLIC, Microblaze's INTC κ.λπ. Ελπίζω ότι θα βρείτε αυτό το ιστολόγιο χρήσιμο και θα σας βοηθήσει να πάρετε μια γεύση σχετικά με τον τρόπο χειρισμού των διακοπών από έναν επεξεργαστή με τη βοήθεια ενός ελεγκτή διακοπών.
Βήμα 1: Προδιαγραφές
Ακολουθούν οι προδιαγραφές της IP:
- Διεπαφή AHB3-Lite.
-
Στατιστικά διαμορφώσιμες παράμετροι:
- Αριθμός εξωτερικών πηγών διακοπής. υποστηρίζει έως 63 διακοπές.
- Αριθμός επιπέδων προτεραιότητας. υποστηρίζει έως 63 επίπεδα.
- Αριθμός επιπέδων φωλιάσματος. υποστηρίζει έως και 8 επίπεδα φωλιάσματος.
- Πλάτος διαύλου 32 ή 64.
- Παγκόσμιες και τοπικές διακοπές με μάσκα.
- Δυναμικά διαμορφώσιμο επίπεδο προτεραιότητας για κάθε διακοπή.
- Δύο τρόποι λειτουργίας - Λειτουργία πλήρους ένθεσης και Λειτουργία ίσης προτεραιότητας.
- Υποστηρίζει ενεργές-υψηλού επιπέδου ευαίσθητες διακοπές.
Στο σχεδιασμό χρησιμοποιείται μηχανισμός διακοπής χειραψίας που εμπνέεται από τις προδιαγραφές RISC-V PLIC.
Η προειδοποίηση διακοπής είναι εμπνευσμένη από το 8259a
Άλλα στοιχεία: Microblaze INTC, NVIC
Βήμα 2: Επισκόπηση του PIC
Ο προγραμματιζόμενος ελεγκτής διακοπών (PIC) λαμβάνει πολλαπλές διακοπές από εξωτερικά περιφερειακά και τις συγχωνεύει σε μία έξοδο διακοπής σε έναν πυρήνα επεξεργαστή προορισμού.
Ο PIC ελέγχεται μέσω μητρώων ελέγχου και κατάστασης. Όλοι οι καταχωρητές PIC χαρτογραφούνται στη μνήμη και έχουν πρόσβαση μέσω της διεπαφής διαύλου AHB3-Lite.
Η τράπεζα μητρώου αποτελείται από καταχωρητή διαμόρφωσης, καταχωρητές ενεργοποίησης, μητρώους σε εκκρεμότητα, μητρώα εν λειτουργία, μητρώα προτεραιότητας και μητρώο ταυτότητας, τα οποία είναι τυπικά στους ελεγκτές διακοπών.
Ο καταχωρητής διαμόρφωσης χρησιμοποιείται για τον καθορισμό του τρόπου λειτουργίας του PIC. Μπορεί να λειτουργήσει είτε σε Λειτουργία πλήρους ένθεσης είτε σε Λειτουργία ίσης προτεραιότητας.
Σε κάθε διακοπή μπορεί να εκχωρηθούν προτεραιότητες και να καλυφθούν μεμονωμένα. Υποστηρίζεται επίσης η καθολική κάλυψη όλων των διακοπών.
Η τράπεζα μητρώου αλληλεπιδρά με το Priority Resolver και το BTC (Binary-Tree-Comparator) για να επιλύσει τις προτεραιότητες των διακοπών σε εκκρεμότητα και να επιβεβαιώσει τη διακοπή στον επεξεργαστή ανάλογα. Το μητρώο ταυτότητας περιέχει το αναγνωριστικό της διακοπής με την υψηλότερη προτεραιότητα σε εκκρεμότητα.
Βήμα 3: Σχεδιασμός και εφαρμογή RTL
Ο σχεδιασμός του PIC τονίζει τη μείωση της καθυστέρησης επίλυσης προτεραιοτήτων, το οποίο είναι το πιο κρίσιμο χρονικό μέρος του σχεδιασμού. Δεδομένου ότι ο σχεδιασμός επιλύει προτεραιότητες σε έναν κύκλο ρολογιού, η απόδοση υποβαθμίζεται με την αύξηση του αριθμού των πηγών με πολυπλοκότητα Log2.
Ο σχεδιασμός υλοποιήθηκε με επιτυχία και ο χρόνος επαληθεύτηκε μέχρι τις ακόλουθες συχνότητες στα Artix-7 FPGA.
- Έως 15 πηγές: 100 MHz
- Έως 63 πηγές: 50 MHz
Η διακοπή καθυστέρησης που προστίθεται μόνο από το PIC είναι 3 κύκλοι ρολογιού (χωρίς τον χρόνο αλλαγής περιβάλλοντος του επεξεργαστή και τον πρώτο χρόνο ανάκτησης εντολών ISR).
Βήμα 4: Σημαντικές σημειώσεις και συνημμένα αρχεία
Σημαντικές σημειώσεις:
- Εάν η διεπαφή AHB3-Lite είναι ανεπιθύμητη, μπορείτε να αλλάξετε την επάνω μονάδα και να χρησιμοποιήσετε το σχέδιο σκελετού του PIC. Ωστόσο, ο πάγκος δοκιμής που παρέχεται είναι για IP με διεπαφή AHB3-Lite.
- Το PIC IP v1.0 είναι ένα εντελώς φορητό, γυμνό σχέδιο RTL.
- Λειτουργικά επαληθευμένο για να λειτουργεί και στις δύο λειτουργίες.
Συνημμένα αρχεία:
- Κωδικοί σχεδιασμού και πάγκος δοκιμών σε VHDL.
- Πλήρης τεκμηρίωση IP.
Είναι ένα σχέδιο ανοιχτού κώδικα… Μη διστάσετε να χρησιμοποιήσετε…
Για οποιαδήποτε απορία, ανά πάσα στιγμή:
Μίτου Ρατζ
Συνιστάται:
Σχεδιασμός ενός απλού τεσσάρων κατευθύνσεων συσχετιστικού ελεγκτή μνήμης cache σε VHDL: 4 βήματα
Σχεδιασμός ενός απλού τεσσάρων κατευθυντήριων συστημάτων ελεγκτή μνήμης προσωρινής μνήμης σε VHDL: Στο προηγούμενο διδάσκοντά μου, είδαμε πώς να σχεδιάσουμε έναν απλό ελεγκτή προσωρινής μνήμης απευθείας αντιστοιχισμένου. Αυτή τη φορά, προχωράμε ένα βήμα μπροστά. Θα σχεδιάσουμε ένα απλό τετράπλευρο σύνολο συσχετιστικού ελεγκτή προσωρινής μνήμης. Πλεονέκτημα; Λιγότερο ποσοστό χαμένων, αλλά με κόστος για
Σχεδιασμός ενός απλού ελεγκτή προσωρινής μνήμης σε VHDL: 4 βήματα
Σχεδιασμός ενός απλού ελεγκτή προσωρινής μνήμης σε VHDL: Γράφω αυτό με οδηγίες, γιατί μου φάνηκε λίγο δύσκολο να βρω κάποιον κώδικα αναφοράς VHDL για να μάθω και να αρχίσω να σχεδιάζω έναν ελεγκτή προσωρινής μνήμης. Έτσι σχεδίασα ένα χειριστήριο cache μόνος μου από την αρχή και το δοκίμασα με επιτυχία στο FPGA. Έχω π
Σχεδιασμός I2C Master σε VHDL: 5 βήματα
Σχεδιασμός του I2C Master σε VHDL: Σε αυτό το διδακτικό, συζητείται ο σχεδιασμός ενός απλού I2C master στο VHDL. ΣΗΜΕΙΩΣΗ: κάντε κλικ σε κάθε εικόνα για να δείτε την πλήρη εικόνα
Σχεδιασμός ενός απλού ελεγκτή VGA σε VHDL και Verilog: 5 βήματα
Σχεδιασμός ενός απλού ελεγκτή VGA σε VHDL και Verilog: Σε αυτό το διδακτικό, θα σχεδιάσουμε έναν απλό ελεγκτή VGA σε RTL. Το VGA Controller είναι το ψηφιακό κύκλωμα που έχει σχεδιαστεί για να οδηγεί οθόνες VGA. Διαβάζεται από το Frame Buffer (VGA Memory) που αντιπροσωπεύει το πλαίσιο που θα εμφανιστεί και παράγει αναγκαία
Σχεδιασμός του SPI Master σε VHDL: 6 βήματα
Σχεδιασμός του SPI Master σε VHDL: Σε αυτό το διδακτικό, θα σχεδιάσουμε ένα SPI Bus Master από την αρχή σε VHDL