Προγραμματιστής ολοκληρωμένων κυκλωμάτων. Plis - τα πρώτα μου βήματα

Το FPGA χρησιμοποιεί τη μνήμη RAM για τη διαμόρφωση ΧΩΝΩ(Διαμόρφωση RAM). Αυτή η μνήμη κατανέμεται σε όλο τον κρύσταλλο, οι τιμές που είναι γραμμένες σε αυτόν ελέγχουν το εσωτερικό πεδίο μεταγωγής, καθορίζοντας τη δομή της συνθετικής ψηφιακής συσκευής. Κατά κανόνα, στην αρχιτεκτονική FPGA FPGA αυτή η μνήμη είναι πτητική και όταν εφαρμόζεται τροφοδοσία στη συσκευή, είναι απαραίτητο να φορτωθούν τιμές σε αυτήν από κάποιο εξωτερικό (σε σχέση με τον κρύσταλλο FPGA) μέσο ROM (Μνήμη Μόνο για ανάγνωση). ) χρησιμοποιείται τσιπ για αυτούς τους σκοπούς ή και στην περίπτωση της βάσης LESO2, η φόρτωση πραγματοποιείται από τον υπολογιστή.

Ένα από τα πιο σημαντικά χαρακτηριστικά ενός FPGA είναι η λογική του ικανότητα. Η χωρητικότητα καθορίζει πόσο πολύπλοκες ψηφιακές συσκευές μπορούν να συντεθούν. Με άλλα λόγια, η λογική χωρητικότητα δείχνει πόσο θα χωρέσουν όλα στο τσιπ. Εάν έχετε ήδη συντάξει ένα έργο για το FPGA στο Quartus II, θα πρέπει να έχετε δώσει προσοχή στην τελική αναφορά, η οποία υποδεικνύει ποιοι πόροι και σε ποιες ποσότητες χρησιμοποιήθηκαν στο έργο, καθώς και το ποσοστό του μέγιστου. Ο κύριος πόρος του FPGA είναι τα λογικά στοιχεία (Logic Elements). Στο FPGA EP4CE6E22C8, δηλαδή σε αυτό που χρησιμοποιείται στη βάση εκπαίδευσης, υπάρχουν 6272 τέτοια στοιχεία Είναι πολλά ή λίγα; Για να απαντήσουμε σε αυτό το ερώτημα, θα πρέπει να εξετάσουμε ποιο είναι αυτό το λογικό στοιχείο.

Βασική λογική πύλη

Είναι γνωστό από την άλγεβρα Boole ότι χρησιμοποιώντας μια συγκεκριμένη στοιχειακή βάση, για παράδειγμα ένα στοιχείο ΚΑΙ-ΟΧΙ ή ΔΕΝ-ΟΧΙ, μπορείτε να εφαρμόσετε οποιαδήποτε λογική συνάρτηση. Ωστόσο, η χρήση ενός μόνο τύπου στοιχείου δεν δικαιολογείται πάντα τεχνικά κατά τη σύνθεση σύνθετων συσκευών, ένας μεγάλος αριθμός στοιχείων θα αυξήσει τον χρόνο μετάδοσης του σήματος και ως εκ τούτου θα μειώσει την απόδοση. Επομένως, στις δομές FPGA FPGA, μια πιο σύνθετη δομή χρησιμοποιείται ως το απλούστερο λογικό στοιχείο, η οποία είναι μια σύνδεση μιας προγραμματιζόμενης συνδυαστικής συσκευής και ενός D-flip-flop. Το σχήμα 1 δείχνει την απλοποιημένη δομή ενός τέτοιου στοιχείου.

Εικόνα 1 – Γενικευμένη δομή του λογικού στοιχείου FPGA (LE)

Το κελί έχει τρεις λογικές εισόδους DATAA, DATAB και DATAC, μια είσοδο ρολογιού CLK και μια έξοδο LEOUT. Εάν η κυψέλη απαιτείται να λειτουργεί μόνο ως συνδυαστική συσκευή, τότε ο πολυπλέκτης εξόδου αλλάζει την έξοδο του στοιχείου LUT στην έξοδο ολόκληρης της κυψέλης, εάν η έξοδος πρέπει να καταχωρηθεί, τότε το σήμα από το LUT μανδαλώνεται από το συγχρονισμό σήμα σε ένα D-flip-flop, η έξοδος του οποίου συνδέεται μέσω του πολυπλέκτη στο LEOUT. Η είσοδος ελέγχου του πολυπλέκτη (δεν φαίνεται στο σχήμα) συνδέεται με το αντίστοιχο bit της μνήμης διαμόρφωσης CRAM.

Εάν κανείς δεν έχει ερωτήσεις σχετικά με τον τρόπο λειτουργίας μιας σκανδάλης και πολυπλέκτη, τότε με το στοιχείο που υποδεικνύεται στο διάγραμμα ως LUT, όλα είναι κάπως πιο περίπλοκα. Η συντομογραφία LUT σημαίνει Πίνακας αναζήτησηςή απλά Πίνακας αναζήτησης, ο οποίος μπορεί κυριολεκτικά να μεταφραστεί ως "πίνακας αναζήτησης" ή "πίνακας αναζήτησης". Το LUT είναι κάτι περισσότερο από έναν πίνακα. Σε σχέση με τα FPGA, αυτό σας επιτρέπει να εφαρμόσετε οποιαδήποτε λογική συνάρτηση με τη μορφή μνήμης SRAM, όπου η διεύθυνση είναι ένα όρισμα και τα περιεχόμενα του κελιού είναι μια τιμή. Έτσι, για να περιγράψουμε τη λογική συνάρτηση τριών μεταβλητών (στο παράδειγμα που δίνεται υπάρχουν τρεις μεταβλητές: DATAA, DATAB και DATAC), αρκούν 8 κελιά μνήμης. Ο απαιτούμενος πίνακας αλήθειας αποθηκεύεται ως μάσκα (LUT-mask) στο αντίστοιχο κελί CRAM. Χρησιμοποιώντας πολυπλέκτες, επιλέγεται η επιθυμητή τιμή. Οι πολυπλέκτης ελέγχονται από σήματα θύρας εισόδου για την κατασκευή ενός K-input LUT (k-LUT) που υλοποιεί οποιαδήποτε λογική συνάρτηση k μεταβλητών, που απαιτεί 2 k SRAM bit και 2 k-1 πολυπλέκτης. Το παρακάτω σχήμα δείχνει ένα LUT τριών εισόδων.

Εικόνα 2 – Συσκευή LUT

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

Πρόστιμο! Χρησιμοποιώντας τη λογική πύλη που φαίνεται στο Σχήμα 1, μπορείτε να αποκτήσετε οποιαδήποτε λογική συνάρτηση τριών μεταβλητών και την παραλλαγή καταχωρητή της. Τι γίνεται όμως αν χρειαστεί να εφαρμόσουμε μια σκανδάλη εκτός από μια σκανδάλη D; Για την υλοποίηση ορισμένων τύπων, μια υπάρχουσα συνδυαστική συσκευή (LUT) στην είσοδο ενός D flip-flop είναι αρκετή, αλλά για να εφαρμόσουμε όλα τα γνωστά flip-flop πρέπει ακόμα να κάνουμε κάποιες αλλαγές στο βασικό κύκλωμα. Αρχικά, είναι απαραίτητο να εισαγάγουμε ανατροφοδότηση: για να γίνει αυτό, θα στείλουμε ένα σήμα από την έξοδο του D-flip-flop σε μία από τις εισόδους LUT. Για να διασφαλίσουμε ότι δεν επηρεάζεται η λειτουργικότητα που επιτεύχθηκε προηγουμένως, δεν έχουμε το δικαίωμα να καταλάβουμε υπάρχουσες εισόδους, θα αντικαταστήσουμε το LUT με ένα 4 εισόδων. Δεύτερον, θα αυξήσουμε τη λειτουργικότητα του ίδιου του D-flip-flop, προσθέτοντας πρόσθετες γραμμές ελέγχου: την είσοδο ενεργοποίησης ENA (από τα αγγλικά "Enable" - "Enable") και την είσοδο ασύγχρονης επαναφοράς ACLR (από το αγγλικό "Asynchronous Clear ” - “Ασύγχρονη Εκκαθάριση”). Ως αποτέλεσμα, λαμβάνουμε ένα κύκλωμα κατάλληλο για τη σύνθεση οποιωνδήποτε σκανδαλισμών:

Εικόνα 3 – Δομή ενός λογικού στοιχείου κλειστού βρόχου (LE)

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

Εικόνα 4 – Δομή λογικού στοιχείου (LE) με κανάλι μεταφοράς

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

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

Εικόνα 5 – Αθροιστής τεσσάρων bit

Κατά την ανάπτυξη μιας βασικής λογικής κυψέλης, επιλύθηκαν δύο προβλήματα: πρώτον, οι συνθετικές συσκευές πρέπει να έχουν τη μέγιστη απόδοση και, δεύτερον, η χρήση των πόρων πρέπει να είναι όσο το δυνατόν πληρέστερη. Στο προηγούμενο παράδειγμα, εάν ο αθροιστής απαιτείται να λειτουργεί αποκλειστικά ως συνδυαστικό κύκλωμα, οι πολυπλέκτης εξόδου θα λάβουν το σήμα από τις εξόδους LUT και ολόκληρη η αλυσίδα των flip-flops θα παραμείνει αχρησιμοποίητη. Αντίθετα, κατά τη σύνθεση ενός σειριακού ή παράλληλου καταχωρητή, όλα τα LUT θα χρησιμεύσουν ουσιαστικά ως αγωγός: συνδέοντας την είσοδο LE με την είσοδο D flip-flop. Μια μικρή προσθήκη στο κύκλωμα θα καταστήσει δυνατή, εάν είναι απαραίτητο, τη χρήση της συνδυαστικής συσκευής και της σκανδάλης του στοιχείου ξεχωριστά για τη σύνθεση ανεξάρτητων μονάδων. Ο πολυπλέκτης στην είσοδο σκανδάλης σας επιτρέπει να επιλέξετε την πηγή σήματος: είτε από την είσοδο DATAC είτε από την έξοδο LUT. Επιπλέον, καθίσταται δυνατή η οργάνωση ενός πρόσθετου καναλιού για τη σύνδεση σκανδαλισμών γειτονικών LE για αύξηση της απόδοσης κατά την κατασκευή διαδοχικών καταχωρητών. Το σχήμα 6 δείχνει το διάγραμμα του προκύπτοντος λογικού στοιχείου. Η είσοδος REGIN και η έξοδος REGOUT αποτελούν ένα αποκλειστικό κανάλι για τη σύνδεση σκανδαλών, η είσοδος SLOAD (από τα αγγλικά «Σύγχρονη φόρτωση») ελέγχει την επιλογή της πηγής σήματος για την είσοδο σκανδάλης.

Εικόνα 6 – Δομή λογικού στοιχείου (LE) με δυνατότητα διαχωρισμού LUT και σκανδάλης

Βασική λογική FPGA Cyclone IV

Το εξεταζόμενο στοιχείο LE με τη μία ή την άλλη μορφή υπάρχει σε διάφορες οικογένειες FPGA, ο αριθμός των εισόδων και η πολυπλοκότητα του LUT μπορούν να αυξηθούν σε αυτό, μπορούν να προστεθούν πρόσθετες συνδέσεις εντός του LE και των θυρών για ενσωμάτωση στο παγκόσμιο δίκτυο μεταγωγής. το FPGA. Για παράδειγμα, στην κορυφαία οικογένεια Stratix IV, ένα στοιχείο περιλαμβάνει δύο LUT έξι εισόδων, δύο αποκλειστικούς πλήρεις αθροιστές και τέσσερα flip-flops! Ωστόσο, από πρακτική άποψη, για να εργαστούμε αποτελεσματικά με το περίπτερο LESO2, καλό είναι να εξετάσουμε λεπτομερέστερα την εφαρμογή του LE στις οικογένειες των Κυκλώνων, ιδιαίτερα στον Κυκλώνα IV.

Το σχήμα 7 δείχνει το διάγραμμα κυκλώματος της λογικής πύλης Cyclone IV FPGA.

Εικόνα 7 – Λογικό στοιχείο (LE) Κυκλώνας IV

Ακριβώς όπως μια βασική λογική πύλη, κάθε flip-flop έχει μια είσοδο δεδομένων, μια είσοδο ρολογιού CLK, μια είσοδο ενεργοποίησης ENA και μια είσοδο ασύγχρονης επαναφοράς (διαγραφή) ACLR. Προστέθηκε ένα σύγχρονο σήμα εκκαθάρισης SCLR (από τα αγγλικά "Synchronous Clear" - "Asynchronous Clearing"): εάν εμφανιστεί ένα λογικό σε αυτήν την είσοδο, τότε ένα λογικό μηδέν θα γραφτεί στη σκανδάλη ως ο επόμενος παλμός ρολογιού. Όλα αυτά σας επιτρέπουν να διαμορφώσετε την προγραμματιζόμενη σκανδάλη κάθε LE ώστε να λειτουργεί σε λειτουργία σκανδάλης D, T, JK ή RS.

Η συνδυαστική συσκευή έχει δεχτεί κάποια επιπλοκή σε σύγκριση με το βασικό κύκλωμα. Στην είσοδο C του LUT, ο πολυπλέκτης επιλέγει την πηγή σήματος, χάρη στην οποία το LUT μπορεί να εφαρμόσει μια λογική συνάρτηση τεσσάρων μεταβλητών, επιπλέον, μια σημαία μεταφοράς ή η έξοδος του δικού του flip-flop μπορεί να χρησιμοποιηθεί ως μεταβλητή .

Το Cyclone IV LUT μπορεί να λειτουργήσει σε δύο λειτουργίες: κανονικό και αριθμητικό. κατά τη μεταγλώττιση, θα επιλέξει αυτόματα τη βέλτιστη λειτουργία για την υλοποίηση της απαιτούμενης λειτουργίας. Η κανονική λειτουργία έχει σχεδιαστεί για να εφαρμόζει βασική λογική και διάφορες συνδυαστικές λειτουργίες. Σε αυτήν τη λειτουργία, τέσσερις είσοδοι LE (DATAA, DATAB, DATAC, DATAD) τροφοδοτούνται σε τέσσερις εισόδους LUT. Ο μεταγλωττιστής επιλέγει αυτόματα την είσοδο μεταφοράς CIN, την είσοδο DATAC ή την έξοδο flip-flop (ανάδραση) ως μία από τις εισόδους LUT. Η αριθμητική λειτουργία είναι κατάλληλη για τη σύνθεση αθροιστών, μετρητών, συσσωρευτών και συγκριτών (κυκλώματα σύγκρισης). Σε αυτήν τη λειτουργία, το LUT είναι ένας πλήρης αθροιστής ενός bit που περιλαμβάνει έναν λογικό χειριστή σημαίας υπερχείλισης. Ο ίδιος ο μεταγλωττιστής δημιουργεί αλυσίδες μεταφοράς κατά τη σύνθεση αριθμητικών συσκευών πολλαπλών bit.

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

Οι λογικές πύλες LE συνδυάζονται σε λογικά μπλοκ ΕΡΓΑΣΤΗΡΙΟ(Μπλοκ λογικού πίνακα). Στον Cyclone IV, κάθε LAB περιέχει:

  • 16 λογικά κύτταρα.
  • Σήματα ελέγχου LAB;
  • Κυκλώματα σημαίας LE μεταφοράς.
  • Καταχωρίστε αλυσίδες καταρράκτη.
  • αλυσίδες τοπικών συνδέσεων.

Τα κυκλώματα τοπικής ζεύξης μεταδίδουν σήματα μεταξύ κυψελών LE στο ίδιο LAB. Τα κυκλώματα συνδυασμού καταχωρητή συνδέουν την έξοδο καταχωρητή ενός LE με τις εισόδους καταχωρητών γειτονικών κυψελών LE. Ο μεταγλωττιστής Quartus II τοποθετεί σχετική λογική σε LAB ή γειτονικά LAB, επιτρέποντας τη χρήση τοπικών κυκλωμάτων επικοινωνίας και συνδέσεων καταχωρήσεων για αύξηση της απόδοσης και της αποτελεσματικότητας τοποθέτησης.

Τα κυκλώματα τοπικής σύνδεσης λαμβάνουν σήματα από τις γραμμές και τις στήλες του παγκόσμιου πεδίου επικοινωνίας και από τις εξόδους των κυψελών LE που ανήκουν στο ίδιο μπλοκ LAB. Στα τοπικά κυκλώματα διασύνδεσης LAB μπορούν να συνδεθούν γειτονικά λογικά μπλοκ, μπλοκ βρόχου κλειδώματος φάσης (PLL), κελιά μνήμης RAM M9K, ενσωματωμένοι πολλαπλασιαστές που βρίσκονται στη δεξιά ή την αριστερή πλευρά μέσω ειδικών βυσμάτων. Έτσι, κάθε κελί LE μπορεί να έχει σύνδεση με δεκαέξι LE από το μπλοκ του (συμπεριλαμβανομένου του εαυτού του) και τριάντα δύο LE από το LAB που βρίσκεται αριστερά ή δεξιά. Έως 48 συνδέσεις συνολικά! Αυτές οι άμεσες άμεσες συνδέσεις ελαχιστοποιούν τη χρήση καθολικών διαδρομών, παρέχουν μεγαλύτερη ευελιξία στη σύνθεση κυκλωμάτων και αυξάνουν τη συνολική απόδοση.

Το σχήμα 8 δείχνει την ενσωμάτωση του μπλοκ LAB στο παγκόσμιο δίκτυο επικοινωνίας FPGA.

Εικόνα 8 – Δομή των συνδέσεων LAB στο πεδίο μεταγωγής FPGA

Κάθε LE έχει τρεις εξόδους που παρέχουν σύνδεση στο πεδίο μεταγωγής FPGA. Αυτές οι έξοδοι πηγαίνουν στις γραμμές και τις στήλες των καθολικών ιχνών σύνδεσης και στις τοπικές διαδρομές σύνδεσης. Όπως συμβαίνει με μια βασική λογική πύλη, ένα LUT ή ένα flip-flop μπορεί να ελέγξει αυτές τις εξόδους ανεξάρτητα.

Για να μπορείτε να ελέγχετε όλα τα κελιά LE σε ένα LAB ταυτόχρονα, ενσωματώνεται ειδική λογική στο λογικό μπλοκ και εκχωρούνται ειδικές γραμμές - κανάλια ελέγχου. Τα σήματα ελέγχου εκπομπής (εντός ενός LAB) διανέμονται μέσω τέτοιων καναλιών. Η αρχιτεκτονική επιτρέπει την ταυτόχρονη χρήση έως και οκτώ σημάτων ελέγχου:

  • δύο σήματα ρολογιού (labclk1 και labclk2).
  • δύο σήματα ενεργοποίησης (labclkena1 και labclkena2).
  • δύο ασύγχρονα σήματα επαναφοράς (labclr1 και labclr2).
  • Σύγχρονη επαναφορά/διαγραφή σήματος (synclr).
  • σύγχρονο σήμα φόρτωσης (syncload).

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

Το σχήμα 9 δείχνει τη σύνδεση των σημάτων ελέγχου LAB και των τοπικών κυκλωμάτων σύνδεσης σε μια λογική κυψέλη. Τα ευρήματα LE συμφωνούν με το σχήμα 7.

Σχήμα 9 – Δομή αλληλεπίδρασης LE με σήματα ελέγχου

Κάθε LAB έχει δύο σήματα ρολογιού και δύο σήματα ενεργοποίησης. Στο επίπεδο λογικού στοιχείου, επιλέγεται ποιο σήμα θα παρέχεται στο flip-flop, αλλά το σήμα ρολογιού συσχετίζεται με το σήμα ενεργοποίησης. Επομένως, αν και για οποιοδήποτε LE σε ένα συγκεκριμένο LAB είναι δυνατό να επιλέξετε ποιο σήμα ρολογιού θα χρησιμοποιηθεί: labclk1 ή labclk2, το αντίστοιχο σήμα ενεργοποίησης πρέπει να χρησιμοποιείται σε συνδυασμό με αυτό. Για παράδειγμα, εάν χρησιμοποιείται το labclk1, μαζί με αυτό θα χρησιμοποιηθεί μόνο το labcken1. Εάν το LAB χρησιμοποιεί και τα δύο άκρα ανόδου και πτώσης του σήματος ρολογιού, θα χρησιμοποιηθούν και τα δύο κανάλια ρολογιού, καθιστώντας τη λογική επιλογής πιο περίπλοκη.

Chip Planer

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

Εικόνα 10 – Έκθεση σύνταξης

Για την οπτική παρακολούθηση των πόρων που χρησιμοποιούνται στο Quartus II, χρησιμοποιείται ένα βοηθητικό πρόγραμμα Chip Planer. Δείχνει τη θέση και τη χρήση των στοιχειωδών μπλοκ στη συνολική αρχιτεκτονική του FPGA-στόχου. Μπορείτε να εκκινήσετε το Chip Planer από το περιβάλλον Quartus: μενού Εργαλεία -> Chip Planer. Ο χάρτης τσιπ (Εικόνα 11) δείχνει όλους τους πόρους FPGA: LE που συνδυάζονται στο LAB, πολλαπλασιαστές υλικού (μπλοκ DSP), κελιά μνήμης, buffer I/O, γεννήτριες PLL. Το χρώμα δείχνει τον βαθμό χρήσης: ανοιχτό - αχρησιμοποίητα μπλοκ, σκούρο - μέγιστο φορτίο. Εάν κάνετε μεγέθυνση (το αντίστοιχο εργαλείο στον πίνακα ή ctrl+τροχός ποντικιού), τότε οι λεπτομέρειες είναι διαθέσιμες σε επίπεδο LE, εδώ το LUT εμφανίζεται με μπλε, η σκανδάλη εμφανίζεται με σκούρο κόκκινο.

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

Εικόνα 11 – Χάρτης πόρων FPGA

Εάν επιλέξετε LUT ή έναυσμα στο LE, τότε στον πίνακα Ιδιότητες κόμβου μπορείτε να δείτε το διάγραμμα LE και μια περιγραφή των ιδιοτήτων και των τρόπων λειτουργίας. Κάνοντας διπλό κλικ σε ένα LUT ή ένα σκανδάλη θα εκκινήσει το εργαλείο Resource Property Editor σε νέο παράθυρο, όπου μπορείτε να εξετάσετε τις συνδέσεις μέσα στο λογικό στοιχείο. Τα κυκλώματα που χρησιμοποιούνται επισημαίνονται με μπλε χρώμα.

Εικόνα 12 – Λογικό στοιχείο στο πρόγραμμα επεξεργασίας ιδιοτήτων πόρων

Αντί για συμπέρασμα

Αυτό απέχει πολύ από την πλήρη περιγραφή της αρχιτεκτονικής FPGA, όπως μπλοκ DSP (πολλαπλασιαστές), μπλοκ RAM, γεννήτρια PLL, buffers I/O που έχουν μείνει πίσω από τα επόμενα άρθρα της σειράς προσοχή σε αυτά. Ωστόσο, το παρακάτω υλικό θα αφιερωθεί στην εφαρμογή γνώσεων σχετικά με τη δομή του λογικού στοιχείου LE και τον συνδυασμό τους στο σχεδιασμό των απλούστερων ψηφιακών συσκευών.

  • Προγραμματισμός μικροελεγκτή
  • Περίμενες σημάδι; Να τος!

    Για πολλά χρόνια δίσταζα να ξεκινήσω να προγραμματίζω FPGA γιατί ήταν δύσκολο, ακριβό και επίπονο (όπως μου φαινόταν). Αλλά είναι καλό να έχεις φίλους που σε βοηθούν να κάνεις το πρώτο βήμα. Και τώρα δεν καταλαβαίνω ένα πράγμα - ΓΙΑΤΙ ΠΕΡΙΜΕΝΑ ΤΟΣΟ;

    Τώρα θα σε βοηθήσω να κάνεις και το πρώτο βήμα!

    Γιατί το χρειάζομαι;

    Έχετε βαρεθεί να διαβάζετε συνεχώς έγγραφα στο MK σας ή να κρατάτε ένα σωρό πληροφορίες στο κεφάλι σας. Ξαναγράψατε τα πάντα στο asm, αλλά η ταχύτητα εξακολουθεί να μην είναι αρκετή. Συνδέσατε δύο εξωτερικές συσκευές στο MK σας, συνδέετε μια τρίτη, αλλά σας έχουν τελειώσει οι διακοπές, αυτές οι μονάδες που λειτουργούσαν ήδη σταματούν να λειτουργούν. Παίρνεις άλλο MK, πιο δυνατό από την ίδια γραμμή, αλλά και πάλι manuals, flag registers, bits... διάολο. Αλλάζεις πλατφόρμα: μεταβαίνεις σε άλλο MK και πετάς τις γνώσεις σου για την προηγούμενη πλατφόρμα. Ό,τι και να κάνεις, είναι δύσκολο. Βρίσκεις μια δημοφιλή πλατφόρμα στην οποία μπορείς εύκολα να συναρμολογήσεις ένα έργο από εξαρτήματα, αλλά και πάλι δεν μπορείς να ξεπεράσεις τους περιορισμούς υλικού αυτού του MK... Κάπου στην άκρη της συνείδησής σου μερικές φορές εμφανίζεται η σκέψη ότι σε ένα FPGA αυτό σίγουρα θα λειτουργούσε γρήγορα και παράλληλα, ποιο είναι αυτό "ακριβώς το πρόβλημα που πρέπει να λυθεί παρακαλώ", αλλά είμαι πολύ μεγάλος/ηλίθιος/απασχολημένος/κλπ για να μπορώ/να αρχίσω να το κάνω αυτό.

    Θέλετε επιτέλους να αναπνεύσετε ελεύθερα; Προχώρα!

    Η χαρά της ανάπτυξης σε FPGA

    Είχα μια δύσκολη μέρα στη δουλειά. Από τη μια δουλειά ήρθα στη δεύτερη δουλειά, μετά στη ντάκα, το βράδυ έκανα μαθήματα, μετά μια οικογενειακή ταινία και μόλις στις 23 το βράδυ ήμουν εντελώς ελεύθερος! Το να πω ότι κουράστηκα σημαίνει να μην πω τίποτα. Αλλά σε αυτή την κατάσταση, κάθισα στο φορητό υπολογιστή με έναν σταθερό στόχο: να φτιάξω μια γεννήτρια τετραγωνικών κυμάτων 440 Hz. Πέρασαν 20 λεπτά και το άκουγα ήδη στα ακουστικά μου. Δεν πίστευα στα αυτιά μου! Μου πήρε άλλα 15 λεπτά για να κάνω PWM και να αλλάξω την ένταση. Μέχρι εκείνη τη στιγμή, είχα μόνο τον πίνακα FPGA για περίπου μια εβδομάδα, και πριν από αυτό είχα διαβάσει μόνο μερικά βιβλία για τη Verilog.

    Εκείνο το βράδυ συνειδητοποίησα: ΕΔΩ ΕΙΝΑΙ!Αυτή είναι η πλατφόρμα όπου μπορώ γρήγορα και εύκολα να μετατρέψω τις σκέψεις μου σε πραγματικά λειτουργικό υλικό!

    Γιατί αυτό?

    Θα περιγράψω τα πλεονεκτήματα που υπάρχουν στη μελέτη και τη χρήση των FPGA, αν και όλοι τα γνωρίζουν ήδη:
    • Οικουμενικότητα της γνώσης- κατά την αλλαγή του μοντέλου MK, πρέπει να διαβάσετε την τεκμηρίωση. Όταν αλλάζετε τον κατασκευαστή του MK, πρέπει να διαβάσετε την τεκμηρίωση. Πρέπει να διαβάζετε συνεχώς τα έγγραφα, να κρατάτε συνεχώς πολλές πληροφορίες στο μυαλό σας. Κατά την ανάπτυξη σε ένα FPGA, εάν γνωρίζετε Verilog ή VHDL, τότε μπορείτε όχι μόνο να προγραμματίσετε οποιοδήποτε FPGA από τη σειρά ενός κατασκευαστή, αλλά και, αν θέλετε, να μεταβείτε σε άλλο (Altera, Xilinx). Παρόλο που θα υπάρξουν στιγμές κατά την οποία θα κυριαρχήσετε ένα διαφορετικό περιβάλλον ανάπτυξης και τα λεπτά ζητήματα υλικού, η ίδια η ουσία της προσέγγισης για το σχεδιασμό συσκευών σε HDL δεν θα αλλάξει από αυτό.
    • Από την ιδέα στο υλικό- κατά την ανάπτυξη ενός έργου, εάν σας λείπει ένας μικροελεγκτής, πρέπει να επιλέξετε άλλον. Κατ 'αρχήν, μπορείτε να κάνετε υποθέσεις σχετικά με το εάν αυτό το MK θα αντιμετωπίσει ή όχι το έργο. Ή υπάρχει ένα συγκεκριμένο MK και προσπαθείτε να χωρέσετε ένα έργο σε αυτό. Τις περισσότερες φορές αυτό συμβαίνει. Μου θυμίζει λίγο την προσέγγιση του παππού μου, που φτιάχνει μια σκάλα από αυτά που έχει στο υπόστεγο. Αν και μπορείτε να σχεδιάσετε μια σκάλα, αγοράστε σανίδες που θα ταιριάζουν... Από την ιδέα μέχρι το υλικό, και όχι το αντίστροφο.
    • Ευκολία στη χρήση των εξελίξεων άλλων ανθρώπων- μπορείτε να πάρετε την ενότητα κάποιου άλλου και να την εφαρμόσετε στο έργο σας. Από τον κώδικα μπορείτε να καταλάβετε πώς λειτουργεί. Ακόμα κι αν είναι για xilinx, και το κάνεις υπό altera. Μερικές φορές αυτό δεν λειτουργεί καλά, αλλά είναι πιο εύκολο από, για παράδειγμα, την προσθήκη δυαδικών βιβλιοθηκών σε ένα έργο C++/Qt
    • Αποκλεισμός της ανεξαρτησίας.Τα μπλοκ στην HDL είναι σαν καθαρές λειτουργίες στη γλώσσα. Εξαρτώνται μόνο από τα σήματα εισόδου. Η αναπτυγμένη και διορθωμένη ενότητα θα συνεχίσει να λειτουργεί σωστά, ανεξάρτητα από το πώς μεγαλώνει το έργο. Τίποτα από το εξωτερικό δεν θα επηρεάσει τη σωστή λειτουργία του από το εσωτερικό. Και γενικά, μπορείτε να ξεχάσετε πώς λειτουργεί - είναι ένα μαύρο κουτί. Επιπλέον, τα μπλοκ λειτουργούν παράλληλο.

    Πρόβλημα επιλογής

    Υπάρχουν πολλές ερωτήσεις σχετικά με το τι να επιλέξετε: Altera/Xilinx, Verilog/VHDL, ποια κάρτα εντοπισμού σφαλμάτων να λάβετε. Πρώτα όμως πρώτα.

    Κατασκευαστής

    διάλεξα Altera. Γιατί; Λοιπόν, έτσι αποφασίσαμε με τον φίλο μου, αν και το όνομα Xilinx είναι πιο όμορφο για μένα. ΑΛΛΑ. Εάν δεν μπορείτε να επιλέξετε τώρα, τότε θα το κάνω για εσάς. Χρειάζεστε το Altera! Γιατί; Δεν γνωρίζω. Το πιο σημαντικό τώρα είναι να κάνουμε ένα βήμα: να κάνουμε μια επιλογή. Επέλεξα το Altera και δεν έχω μετανιώσει μέχρι στιγμής.



    Γλώσσα

    Ας το πάρουμε Verilog - επειδή… Λοιπόν, καταλαβαίνεις.

    Πίνακας ανάπτυξης

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

    Στην οικογένεια Altera, για λογικά χρήματα μπορούμε να αγοράσουμε πλακέτες με CPLD MAX II με στοιχεία 240, 570 και 1270 ή παλαιότερα τσιπ FPGA όπως το Cyclone 1, 2, 3, 4 με έως και 10.000 ή περισσότερα κύτταρα. Πώς να επιλέξετε;

    Ακόμη και με βάση 240 κυψέλες, το έργο Mars Rover κάνει απλώς έναν τεράστιο αριθμό έργων. Συνιστώ ανεπιφύλακτα να το διαβάσετε για να πάρετε μια γενική ιδέα της πολυπλοκότητας των έργων που μπορούν να χωρέσουν σε 240 κελιά. Από την άλλη, υπάρχουν έργα που είναι πλήρως προγραμματισμένα για ένα hardware αντίγραφο ενός συγκεκριμένου υπολογιστή, συμπεριλαμβανομένου του επεξεργαστή και όλης της λογικής γύρω από αυτόν (NES, Speccy, Orion, YuT-88, κλπ). Αυτό απαιτεί ήδη πέντε, δέκα ή περισσότερα χιλιάδες κύτταρα. Επιπλέον, αυτές οι πλακέτες περιέχουν πρόσθετες εξωτερικές συσκευές.

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

    Αυτό που πραγματικά διαφοροποιεί το MAX από τους Cyclones, εκτός από τον αριθμό των κυττάρων, είναι:
    1) Η σειρά MAX δεν έχει PLL μέσα. Κάθε πλακέτα ανάπτυξης έχει έναν ταλαντωτή, συνήθως 50 MHz. Αυτό θα είναι αρκετό για την πλειοψηφία των έργων. Όλος ο συγχρονισμός θα πραγματοποιηθεί διαιρώντας τα 50 MHz με κάποια τιμή. Εναλλακτικά, μπορείτε να πάρετε μια εξωτερική γεννήτρια και να την τροφοδοτήσετε σε μια ξεχωριστή είσοδο FPGA. Τι γίνεται αν χρειάζεστε συχνότητα μεγαλύτερη από 50 MHz; Δεν μπόρεσα να βρω αμέσως ταλαντωτές άνω των 50 MHz. Αλλά εδώ είναι που το PLL, το οποίο είναι ενσωματωμένο σε Cyclones, έρχεται να σώσει. Σε αυτό μπορείτε να πολλαπλασιάσετε τη συχνότητα, για παράδειγμα, έως και 100 MHz.
    2) Η σειρά Cyclone έχει ενσωματωμένες μονάδες πολλαπλασιασμού υλικού. Ο αριθμός τους εξαρτάται από το συγκεκριμένο μοντέλο - εδώ μπορείτε ακόμα να "δείτε τις οδηγίες" για να μάθετε πόσο. Εάν σκοπεύετε να κάνετε κάποιο είδος DSP, τότε θα σας φανούν χρήσιμοι: θα εξοικονομήσουν κελιά και θα αυξήσουν την ταχύτητα. Από την άλλη πλευρά, εάν δεν υπάρχουν πολλαπλασιαστές, μπορούν να συντεθούν, αλλά ένα μικρό FPGA μπορεί να μην έχει αρκετούς πόρους για αυτό.

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

    Πόσα χρήματα χρειάζονται;


    Προγραμματιστής
    Πιστεύω ότι δεν έχω χρόνο να κολλήσω προγραμματιστές χύμα.

    300 ρούβλια. Πήρα το δικό μου στο eBay, μοιάζει με αυτό:

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

    Πρώτο επίπεδο 350 - 550 ρούβλια. Πρόκειται για πίνακες που βασίζονται στο MAX II (ή κελιά). Μπορεί να είναι κατάλληλο για αρχική εξοικείωση και περαιτέρω ενσωμάτωση σε τελικές συσκευές. Η πλακέτα έχει μια γεννήτρια, μερικά κουμπιά, μερικά LED και τις υπόλοιπες 80 ακίδες κατά την κρίση σας.

    μονάδα ισχύος
    Είναι απαραίτητο, αλλά δεν περιλαμβάνεται πάντα. Θα χρειαστείτε τροφοδοτικό 5 volt και ρεύμα 2Α.

    Μέσο επίπεδο από 900 έως 1500 ρούβλια. Πρόκειται για πίνακες Cyclone 1, 2, 3, 4, που διαφέρουν κυρίως στον αριθμό των κελιών.
    Σημειώνονται κάπως έτσι:
    Ε.Π. 2 ντο 5 T144 - Cyclone 2 περίπου 5k κύτταρα
    Ε.Π. 4 C.E. 6 E22C8N - Cyclone 4 περίπου 6k κύτταρα
    Ε.Π. 2 ντο 8 Q208C8N - Cyclone 2 περίπου 8k κύτταρα

    Μπορεί να παρατηρήσετε ότι ο κυκλώνας 3 μπορεί να έχει περισσότερα κύτταρα από τον κυκλώνα 4.

    Εδώ είναι μερικές επιλογές:

    835 ρούβλια.
    ALTERA FPGA CycloneII EP2C5T144 Minimum System Board for Learn good

    880 ρούβλια
    Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

    1265 ρούβλια
    EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board

    Προηγμένες σανίδες . Πρόκειται για πλακέτες στις οποίες είναι εγκατεστημένες πρόσθετες μονάδες (UTP, USB, AUDIO), βύσματα (SD, VGA), κουμπιά, διακόπτες, LED, ενδείξεις επτά τμημάτων κ.λπ. Ή μπορεί να υπάρχει μια πλακέτα βάσης και οι πλακέτες επέκτασης μπορούν να προσαρτηθούν ξεχωριστά σε αυτήν.

    Έχω το ακόλουθο σετ εργασίας - πλακέτα + πλακέτα επέκτασης:
    Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
    2760 ρούβλια

    Εδώ είναι ο κύριος πίνακας. Διαθέτει 2 LED, 2 κουμπιά, 4 διακόπτες, ένδειξη επτά τμημάτων και τσιπ RAM.

    Πλακέτα επέκτασης. Περιέχει SD, VGA, καθώς και ελεγκτές USB (Τσιπ υψηλής ταχύτητας USB2.0: CY7C68013A), AUDIO (Κάρτα ήχου έως 96kHz/32bit ADC/DAC: WM8731S), UTP (διεπαφή Ethernet 100M: DM9000A):

    Αυτές οι σανίδες απλώς τοποθετούνται η μία στην άλλη, αλλά την έχω ακόμα σε ένα συρτάρι. Για τις χειροτεχνίες μου, έχω μια breadboard, την οποία συνδέω με ένα καλώδιο που συνοδεύει το κιτ. Περιλαμβάνεται επίσης τροφοδοτικό 5 volt.


    Ένα χωράφι σπαρμένο με Πίνακες Προγραμματιζόμενων Πυλών

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

    FPGA- έτσι λέγεται ΑΥΤΟ στα ρωσικά. Ππρογραμματιζόμενος μεγάλολογικό ΚΑΙαναπόσπαστο ΜΕαιμ.
    Στα αστικά ακούγεται λίγο διαφορετικά - FPGA - φάπεδίο του Π rogrammable σολέφαγε ΕΝΑακτίνες. Αυτό κυριολεκτικά μεταφράζεται ως "Ένα χωράφι με σπόρους με σειρές προγραμματιζόμενων πυλών".
    Για να είμαστε λίγο πιο σοβαροί, μπορούμε να το ονομάσουμε "Προγραμματιζόμενος πίνακας πύλης"

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

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

    Βαλβίδα- Αυτό είναι ένα βασικό στοιχείο οποιουδήποτε ψηφιακού μικροκυκλώματος.

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

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

    Αυτό είναι γενικά.

    Στην πραγματικότητα, όλα είναι πολύ πιο περίπλοκα :) Ας δούμε την εικόνα


    Αυτό είναι ένα macrocell - Macrocell στο όνομά τους.
    Κάθε τσιπ FPGA αποτελείται από τα ακόλουθα μακροκύτταρα... μακροκυψέλες. Όπως φαίνεται από το διάγραμμα macrocell, αποτελείται από ένα μπλοκ πίνακα αναζήτησης ( LUT) - "Πίνακας αναζήτησης" και επίσης, δώσει το έναυσμα γιαμε σύγχρονες και ασύγχρονες εισόδους και κάποια λογική στις εισόδους της σκανδάλης. Στην πραγματικότητα, μόνο το LUT είναι προγραμματισμένο. Όπως μπορείτε να δείτε, έχει 4 εισόδους και μία έξοδο. Αυτή η έξοδος μπορεί να τροφοδοτηθεί είτε απευθείας στην έξοδο macrocell (Q0) είτε στη σύγχρονη είσοδο δεδομένων του flip-flop (D).

    Το LUT δεν είναι τίποτα άλλο από μια ROM με 16 κελιά 1 bit. Όταν ένας συγκεκριμένος συνδυασμός ψηφιακών σημάτων εφαρμόζεται στις εισόδους του LUT (D0...D3), τα αντιλαμβάνεται ως διεύθυνση και εξάγει τα περιεχόμενα της κυψέλης σε αυτή τη διεύθυνση.

    Γενικά, κάθε κύκλωμα λογικής πύλης που έχει 4 εισόδους (ή λιγότερες) και μία έξοδο μπορεί να περιγραφεί από έναν πίνακα αλήθειας 16 σειρών. Για παράδειγμα, ας πάρουμε αυτό το απλό κύκλωμα και ας γράψουμε έναν πίνακα αλήθειας για αυτό:

    Ο πίνακας αλήθειας περιγράφει το λογικό επίπεδο της εξόδου του κυκλώματος (Q) για όλους τους πιθανούς συνδυασμούς σημάτων εισόδου (D0...D3). Με τον ίδιο τρόπο, στο LUT, κάθε συνδυασμός σημάτων εισόδου (ανάγνωση - κάθε διεύθυνση ROM) συνδέεται με το δικό του σήμα εξόδου. Δηλαδή, ο πίνακας αλήθειας του κυκλώματος που θέλουμε να δούμε στη θέση του είναι ραμμένος στο LUT. Είναι τόσο απλό!

    Εάν το κύκλωμα περιέχει περισσότερες από 4 εισόδους ή περισσότερες από 1 εξόδους, χρησιμοποιούνται LUT πολλών μακροκυψελών.

    clear="all">

    Το πιο σημαντικό όμως είναι η σκανδάλη. Άλλωστε, όπως γνωρίζετε (ή ίσως δεν γνωρίζετε ακόμα), όλοι οι καταχωρητές, οι μετρητές και πολλά άλλα στοιχεία της ψηφιακής τεχνολογίας αποτελούνται από ενεργοποιητές. Έτσι, ο αριθμός των μακροκυψελών στο τσιπ FPGA καθορίζει τον αριθμό των flip-flops. Και το αντίστροφο :) Έτσι, όταν επιλέγετε ένα μικροκύκλωμα για οποιοδήποτε έργο, πρέπει πρώτα να υπολογίσετε πόσες σκανδάλες θα υπάρχουν στο κύκλωμα και να το πάρετε με μια ρεζέρβα...

    Το παρακάτω σχήμα δείχνει ένα μπλοκ διάγραμμα των μικροκυκλωμάτων της σειράς EPM7000 από την Altera Αυτή η εικόνα έχει ληφθεί από το φύλλο δεδομένων https://www.altera.com/literature/ds/m7000.pdf Αναφέρεται στα μικροκυκλώματα EPM7032, EPM7064, EPM7096. Έτσι, τα δύο τελευταία ψηφία στο όνομα υποδεικνύουν ακριβώς τον αριθμό των μακροκυψελών στο μικροκύκλωμα.


    Όπως φαίνεται από το διάγραμμα, τα macrocells συνδυάζονται σε «λογικά μπλοκ πίνακα» (LAB - Logic Array Block).
    Αυτά τα μπλοκ συνδέονται μεταξύ τους μέσω μιας προγραμματιζόμενης διάταξης διασύνδεσης (PIA).
    Επιπλέον, τα LAB συνδέονται με τις ακίδες του μικροκυκλώματος μέσω μπλοκ ελέγχου I/O.

    Όταν αναβοσβήνει, κάθε μπλοκ έχει τις δικές του πληροφορίες ραμμένες σε αυτό:
    - Τα LUT είναι προγραμματισμένα σε Macrocells,
    - Το PIA περιέχει πληροφορίες σχετικά με τις εσωτερικές διασυνδέσεις,
    - πληροφορίες σχετικά με τις συνδέσεις στα πόδια του μικροκυκλώματος είναι ραμμένες στα μπλοκ ελέγχου I/O.

    Σοβαρά, το "υλικολογισμικό" ενός FPGA ονομάζεται "φόρτωση διαμόρφωσης".

    Τι πιστεύετε ότι θα χρησιμοποιήσουμε για να φορτώσουμε τη διαμόρφωση;;;
    Λοιπόν, φυσικά, με το παλιό καλό Byte Blaster! :) Ένα byte blaster είναι ένα καθολικό πράγμα :) Μίλησα λεπτομερώς για το πώς να το φτιάξω εδώ

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

    Το FPGA (Programmable Logic Integrated Circuit) είναι ένας από τους τύπους ηλεκτρονικών συσκευών που χρησιμοποιούνται για την υλοποίηση διαφόρων λογικών συσκευών ποικίλης πολυπλοκότητας, από δυαδικούς μετρητές, απλά λογικά κυκλώματα (αντικατάσταση τυπικών ολοκληρωμένων κυκλωμάτων - χαλαρά) έως εξειδικευμένους επεξεργαστές και νευροτσίπ.

    Καταλάβαμε τον σκοπό, το ερώτημα είναι πώς; Μέσα στο FPGA υπάρχουν ορισμένα βασικά στοιχεία που συνδέονται με βάση μια εγγραφή διαμόρφωσης. Τα πιθανά βασικά στοιχεία, ο τύπος και η θέση αποθήκευσης της εγγραφής διαμόρφωσης εξαρτώνται από τον τύπο του FPGA και από το συγκεκριμένο μοντέλο. Στα σύγχρονα FPGA υπάρχουν δύο τύποι: CPLD και FPGA, θα τους δώσουμε μια παράγραφο το καθένα.

    CPLD (σύνθετη προγραμματιζόμενη λογική συσκευή - σύνθετες προγραμματιζόμενες λογικές συσκευές) - FPGA, τα βασικά στοιχεία του οποίου είναι τα μακροστοιχεία και οι απλές λογικές πύλες (AND(-NOT)/OR(-NOT)). Συνήθως περιέχει λιγότερα βασικά στοιχεία από ένα FPGA, αλλά είναι πιο γρήγορο. Περιέχει επίσης τυπικά μη πτητική μνήμη διαμόρφωσης απευθείας στο τσιπ, αλλά έχει περιορισμένο αριθμό κύκλων διαμόρφωσης.

    FPGA (πεδία προγραμματιζόμενη συστοιχία πύλης) - FPGA, τα οποία έχουν συνήθως μια ολόκληρη δέσμη τύπων βασικών μπλοκ, αυτά είναι προσαρμοσμένα λογικά στοιχεία (πίνακες αλήθειας) και μπλοκ προσθήκης-πολλαπλασιασμού (Επεξεργασία ψηφιακών σημάτων - DSP) και PLL (Κλειδωμένη φάση Loop) για διαίρεση και πολλαπλασιασμό συχνοτήτων και κάποιες άλλες ανάλογα με το μοντέλο. Έχουν συνήθως πτητική εσωτερική μνήμη και λειτουργικότητα για φόρτωση διαμορφώσεων από εξωτερική μη πτητική μνήμη.

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

    Ας ξεκινήσουμε συζητώντας τα εργαλεία. Θα χρησιμοποιήσω την πλακέτα εκκίνησης Altera Cyclone II FPGA, αυτή είναι μια έτοιμη πλακέτα στην οποία είναι εγκατεστημένη η σειρά Cyclone II FPGA - EP2C20F484C7N, καθώς και διάφορα περιφερειακά και διεπαφές. Σε αυτό το άρθρο, χρησιμοποιούμε LED και δείκτες επτά τμημάτων. Δεν θα χρησιμοποιήσουμε κανένα ειδικό μπλοκ αυτής της σειράς FPGA, επομένως μπορείτε να χρησιμοποιήσετε σχεδόν οποιοδήποτε άλλο FPGA (FPGA και CPLD) αν θέλετε.

    Όσοι ενδιαφέρονται πολύ μπορούν να αγοράσουν ένα από τα κιτ ανάπτυξης ή να συναρμολογήσουν τη συσκευή μόνοι τους, κάτι που είναι αρκετά δύσκολο για έναν αρχάριο, αλλά μια απολύτως εφικτή εργασία. Τα διαγράμματα προγραμματιστή και τα διαγράμματα σύνδεσης για τα ίδια τα FPGA είναι εύκολα στην Google και οποιοσδήποτε έχει εργαστεί στο παρελθόν σε ερασιτεχνικό υλικολογισμικό AVR μπορεί να βρει έναν κατάλληλο προγραμματιστή Altera Byte Blaster. Σε γενικές γραμμές, σας παρέχω μια υλοποίηση κυκλώματος (στο τέλος του άρθρου υπάρχει ένα διάγραμμα κυκλώματος του Starter Board μου). Όποιος θέλει να το δοκιμάσει χωρίς να ξοδέψει χρήματα και να δει το αποτέλεσμα της εργασίας μπορεί να χρησιμοποιήσει τον προσομοιωτή που είναι ενσωματωμένος στο Quartus II (η εργασία με αυτόν δεν περιγράφεται σε αυτό το άρθρο).

    Για λογισμικό θα χρησιμοποιήσουμε το Quartus II, τη δωρεάν έκδοση του οποίου μπορείτε να βρείτε στον ιστότοπο του κατασκευαστή (Altera), τόσο σε εκδόσεις Windows όσο και σε Linux.

    Και τώρα πλησιάζουμε στην εξάσκηση! Ξεκινάμε το σύστημα Quartus II CAD και δημιουργούμε ένα έργο. Τα πρώτα βήματα του οδηγού είναι να υποδείξετε το όνομα του έργου και τη θέση του και, στη συνέχεια, να παραλείψετε το βήμα της προσθήκης αρχείων (θα έχουμε χρόνο αργότερα). Θα ολοκληρώσουμε τη δημιουργία του έργου στο στάδιο της επιλογής μιας συσκευής, εάν το κάνουμε σε ένα κομμάτι υλικού, γνωρίζουμε ακριβώς το όνομα του FPGA και το επιλέγουμε. Εάν κάνουμε απλώς ένα έργο για FPGA, θα επιλέξουμε κάτι πιο ισχυρό, για παράδειγμα, έναν τρίτο κυκλώνα. Επιλέγω το FPGA που είναι εγκατεστημένο στο κιτ εκκίνησης.

    Κάντε κλικ στο Finish - το έργο δημιουργείται. Η δομή του έργου στο Quartus είναι ιεραρχική, πρέπει να επιλέξουμε την κορυφή της ιεραρχίας (Οντότητα ανωτάτου επιπέδου). Για τη σχεδίαση, μπορούμε να χρησιμοποιήσουμε αρχεία κυκλώματος και αρχεία με περιγραφή λογικής σε ένα από τα HDL (Γλώσσα περιγραφής υλικού). Η γνώμη μου είναι ότι ο πιο προφανής τρόπος είναι να χρησιμοποιήσετε ένα αρχείο κυκλώματος με τα κύρια λογικά μπλοκ ως την κορυφή της ιεραρχίας και να εφαρμόσετε τα ίδια τα μπλοκ σε HDL. Οι απόψεις μπορεί να είναι διαφορετικές, ενώ επέλεγα, διάβασα πολλά θέματα για το holivar, αλλά προς το παρόν συμβιβάστηκα σε αυτό το μοντέλο, μπορείτε να κάνετε την επιλογή σας. Επέλεξα VHDL ((Ολοκληρωμένα κυκλώματα πολύ υψηλής ταχύτητας) Γλώσσα περιγραφής υλικού) ως γλώσσα HDL για το έργο, μπορείτε να χρησιμοποιήσετε οποιαδήποτε άλλη γλώσσα, για παράδειγμα Verilog ή AHDL, όλα εξαρτώνται από τις προτιμήσεις σας.

    Δημιουργήστε το πρώτο μας αρχείο έργου (Αρχείο – Νέο..) και επιλέξτε Block Diagram/Schematic File. Τώρα ας σχεδιάσουμε ένα απλό κύκλωμα, προσθέσουμε μία είσοδο, μία έξοδο και ας τα συνδέσουμε (σε ένα πραγματικό FPGA αυτό το κύκλωμα θα μεταδίδει ένα σήμα από το ένα σκέλος στο άλλο). Για να το κάνετε αυτό, κάντε διπλό κλικ σε ένα κενό χώρο στο διάγραμμα και επιλέξτε το απαιτούμενο στοιχείο στο παράθυρο διαλόγου Σύμβολο που ανοίγει.

    Συνδέουμε ακριβώς έτσι, με μια γραμμή. Ας δώσουμε ονόματα στις ακίδες (Διπλό κλικ σε στοιχεία), η είσοδος θα ονομάζεται CLOCK_27 και η έξοδος θα ονομάζεται LEDR. Τα ονόματα δεν επιλέχθηκαν τυχαία - τότε συσχετίζω το CLOCK_27 με την είσοδο ταλαντωτή 27 Mhz και το LEDR με το μηδενικό κόκκινο LED. Αποθηκεύστε το αρχείο αφήνοντας το πλαίσιο ελέγχου προσθήκη στο έργο. Τώρα ας ορίσουμε το αρχείο που προκύπτει ως την κορυφή της ιεραρχίας του έργου. Για να το κάνετε αυτό, στο παράθυρο του Project Navigator, στην καρτέλα Files, στο μενού περιβάλλοντος του αρχείου μας, επιλέξτε Set as Top-Level Entity. Γεια σας, ο κόσμος είναι έτοιμος. Μεταγλωττίζουμε το έργο (Processing – Start Compilation), αν δούμε Info: Το Quartus II Full Compilation ήταν επιτυχές. – χαιρόμαστε και θεωρούμε ότι ολοκληρώθηκε το πρώτο στάδιο.

    Τώρα ας δούμε τους στόχους μας. Η συσκευή μας θα αρχίσει να μετράει λεπτά και ώρες όταν ενεργοποιηθεί η τροφοδοσία. Αυτό σημαίνει ότι θα χρειαστούμε τέσσερις δείκτες επτά τμημάτων "HH: MM". Για να μετρήσουμε το χρόνο χρειαζόμαστε ένα περισσότερο ή λιγότερο ακριβές σήμα 1Hz. Το παίρνουμε διαιρώντας τη συχνότητα 27Mhz, μετά θα τη μετρήσουμε με 60 (δευτερόλεπτα), μετά πάλι με 60 (λεπτά) και μετά με 24 (ώρες). Από τα δύο τελευταία μπλοκ, ο δυαδικός αριθμός των λεπτών και των ωρών θα παρέχεται στον αποκωδικοποιητή Bin -> BCD (δυαδική κωδικοποίηση δεκαδικού) -> 7seg. Αυτό, γενικά, είναι ολόκληρη η συσκευή. Θα κάνω αμέσως κράτηση ότι το κύκλωμα θα είναι ασύγχρονο (τα λεπτά ξεκινούν από δευτερόλεπτα και οι ώρες από λεπτά), για απλότητα και σαφήνεια.

    Λοιπόν, ας δημιουργήσουμε το πρώτο μας μπλοκ - το μπλοκ διαίρεσης συχνότητας. Ας δημιουργήσουμε ένα νέο αρχείο, όπως ήδη γνωρίζουμε, μόνο ο τύπος αρχείου θα είναι Αρχείο VHDL. Ας επικολλήσουμε τον κώδικα σε αυτό:

    Βιβλιοθήκη ieee?
    χρησιμοποιήστε ieee.std_logic_1164.all;

    Η οντότητα Div_27Mhz_to_1Hz είναι
    port(clk:in std_logic; clk_out:out std_logic);
    τέλος Div_27Mhz_to_1Hz;

    Αρχιτεκτονική div_behavior του Div_27Mhz_to_1Hz είναι
    αρχίζουν
    διαδικασία (κλκ)
    μεταβλητή cnt: ακέραιο εύρος 0 έως 27000000.
    αρχίζουν
    έπειτα

    Εάν (cnt >= 13500000)
    έπειτα
    clk_out<= "1";
    αλλού
    clk_out<= "0";
    τέλος εαν;

    Εάν (cnt = 27000000)
    έπειτα
    cnt:= 0;
    αλλού
    cnt:= cnt + 1;
    τέλος εαν;

    Τέλος εαν;
    τελική διαδικασία?
    τέλος div_behavior;

    Θα παραλείψω τις οδηγίες εξυπηρέτησης (μπορείτε να τις αναζητήσετε στο βιβλίο αναφοράς, συνδέσμους στο τέλος), θα δώσω προσοχή μόνο στη λογική του έργου. Πρώτα δηλώνουμε την οντότητα, δηλ. το ίδιο το μπλοκ. Υποδεικνύουμε τις εισόδους και τις εξόδους του, τους τύπους και τα ονόματά τους. Ο τύπος std_logic στην κοινή γλώσσα σημαίνει bit. Στη συνέχεια, περιγράφουμε την εσωτερική αρχιτεκτονική αυτού του μπλοκ. Η αρχιτεκτονική αποτελείται από παράλληλες διαδικασίες. Κάθε διεργασία έχει τη δική της λίστα ευαισθησίας, για παράδειγμα η μόνη διεργασία στο παραπάνω παράδειγμα είναι ευαίσθητη σε αλλαγές στην είσοδο clk. Μπορείτε να δηλώσετε μεταβλητές για μια διεργασία, στο παράδειγμά μας αυτή είναι μια μεταβλητή τύπου ακέραιου εύρους από 0 έως 27000000. Στη συνέχεια, η στοιχειώδης λογική ορίζεται στο σώμα της διαδικασίας: μέχρι να περάσει η μισή περίοδος, σπρώχνουμε ένα λογικό μηδέν στο η έξοδος, όταν περάσει το μισό, πιέζουμε το ένα και μην ξεχνάμε να μετράμε και να μηδενίζουμε τον μετρητή όταν φτάσει τα 27.000.000 Δεν προσποιούμαι ότι έχω τέλειο κωδικό - ακόμα μαθαίνω, θα είμαι χαίρομαι για τις διορθώσεις :)

    Αποθηκεύουμε το αρχείο με τον κωδικό και δημιουργούμε ένα σύμβολο (Αρχείο – Δημιουργία/Ενημέρωση – Δημιουργία αρχείων συμβόλων για τρέχοντα αρχεία), αυτό είναι απαραίτητο για να εισαγάγουμε αυτό το μπλοκ στο κύριο διάγραμμα μας. Μπορείτε να βρείτε τα σύμβολά σας στο φάκελο Project στο παράθυρο διαλόγου εισαγωγής συμβόλου. Τώρα ας δούμε τα υπόλοιπα μπλοκ με λιγότερες λεπτομέρειες.

    Βιβλιοθήκη ieee?
    χρησιμοποιήστε ieee.std_logic_1164.all;
    χρησιμοποιήστε ieee.std_logic_unsigned.all;

    Η οντότητα cnt_0_to_59 είναι
    port(clk:in std_logic; c59:out std_logic; vector:out std_logic_vector(5 downto 0));
    τέλος cnt_0_to_59;

    Αρχιτεκτονική cnt_behavior του cnt_0_to_59 είναι
    αρχίζουν
    διαδικασία (κλκ)
    μεταβλητή cnt: εύρος ακέραιων αριθμών 0 έως 59.
    αρχίζουν
    if(clk"γεγονός και clk = "1")
    έπειτα
    if(cnt = 59)
    έπειτα
    cnt:= 0;
    c59<= "1";
    διάνυσμα<= CONV_STD_LOGIC_VECTOR(cnt, 6);
    αλλού
    cnt:= cnt + 1;
    c59<= "0";
    διάνυσμα<= CONV_STD_LOGIC_VECTOR(cnt, 6);
    τέλος εαν;
    τέλος εαν;
    τελική διαδικασία?
    τέλος cnt_behavior;

    Αυτό είναι το μπλοκ μέτρησης από το μηδέν έως το 59 που χρησιμοποιούμε για να μετράμε λεπτά και δευτερόλεπτα. Μεταξύ των νέων χαρακτηριστικών εδώ είναι ο τύπος εξόδου std_logic_vector(5 downto 0), που ορίζει μια ομάδα bit (διάνυσμα bit), καθώς και η συνάρτηση CONV_STD_LOGIC_VECTOR(cnt, 6), η οποία μετατρέπει μια μεταβλητή σε ένα διάνυσμα bit του καθορισμένου μήκος.

    Βιβλιοθήκη ieee?
    χρησιμοποιήστε ieee.std_logic_1164.all;
    χρησιμοποιήστε ieee.std_logic_unsigned.all;

    Για CONV_STD_LOGIC_VECTOR:
    χρησιμοποιήστε ieee.std_logic_arith.all;

    Η οντότητα cnt_0_to_23 είναι
    port(clk:in std_logic; vector:out std_logic_vector(4 downto 0));
    τέλος cnt_0_to_23;

    Αρχιτεκτονική cnt_behavior του cnt_0_to_23 είναι
    αρχίζουν
    διαδικασία (κλκ)
    μεταβλητή cnt: εύρος ακέραιων αριθμών 0 έως 23.
    αρχίζουν
    if(clk"γεγονός και clk = "1")
    έπειτα
    if(cnt = 23)
    έπειτα
    cnt:= 0;
    διάνυσμα<= CONV_STD_LOGIC_VECTOR(cnt, 5);
    αλλού
    cnt:= cnt + 1;
    διάνυσμα<= CONV_STD_LOGIC_VECTOR(cnt, 5);
    τέλος εαν;
    τέλος εαν;
    τελική διαδικασία?
    τέλος cnt_behavior;

    Πάνω είναι ο μετρητής ωρών. Τίποτα καινούργιο.

    Βιβλιοθήκη ieee?
    χρησιμοποιήστε ieee.std_logic_1164.all;
    χρησιμοποιήστε ieee.std_logic_unsigned.all;

    Για CONV_STD_LOGIC_VECTOR:
    χρησιμοποιήστε ieee.std_logic_arith.all;

    Η οντότητα bin2bcd_5bit είναι
    port(bin:in std_logic_vector(4 downto 0);
    bcd1:out std_logic_vector(3 downto 0);
    bcd10:out std_logic_vector(3 downto 0)
    );

    Τέλος bin2bcd_5bit.

    Αρχιτεκτονική converter_behavior του bin2bcd_5bit είναι
    αρχίζουν
    διαδικασία (κάδος)
    μεταβλητή i: ακέραιο εύρος 0 έως 23.
    μεταβλητή i1: ακέραιο εύρος 0 έως 9.
    αρχίζουν
    i:= conv_integer(bin);
    i1:= i / 10;
    bcd10<= CONV_STD_LOGIC_VECTOR(i1, 4);
    i1:= είμαι 10;
    bcd1<= CONV_STD_LOGIC_VECTOR(i1, 4);
    τελική διαδικασία?
    end converter_behavior;

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

    Βιβλιοθήκη ieee?
    χρησιμοποιήστε ieee.std_logic_1164.all;
    χρησιμοποιήστε ieee.std_logic_unsigned.all;

    Η οντότητα BCD_to_7seg είναι
    Λιμάνι(
    BCD:in std_logic_vector(3 downto 0);
    seg:out std_logic_vector(6 downto 0)
    );

    Τέλος BCD_to_7seg;

    Αρχιτεκτονική conv_behavior του BCD_to_7seg είναι
    αρχίζουν
    διαδικασία (BCD)
    αρχίζουν
    εάν BCD = "0000" τότε seg<= "0000001";--0
    elsif BCD = "0001" τότε seg<= "1001111";--1
    elsif BCD = "0010" τότε seg<= "0010010";--2
    elsif BCD = "0011" τότε seg<= "0000110";--3
    elsif BCD = "0100" τότε seg<= "1001100";--4
    elsif BCD = "0101" τότε seg<= "0100100";--5
    elsif BCD = "0110" τότε seg<= "0100000";--6
    elsif BCD = "0111" τότε seg<= "0001111";--7
    elsif BCD = "1000" τότε seg<= "0000000";--8
    elsif BCD = "1001" τότε seg<= "0000100";--9
    άλλο σεγ<= "1001001";--err
    τέλος εαν;
    τελική διαδικασία?
    end conv_behavior;

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

    ΕΙΣΑΓΩΓΗ

    Συνήθως, όταν κάποιος βλέπει έναν πίνακα που λειτουργεί, κάνει πάντα τις ίδιες ερωτήσεις: - Είναι Arduino; - Πώς λειτουργεί χωρίς Arduino;

    Δεν είναι μικροελεγκτής, δεν είναι καν επεξεργαστής, είναι FPGA. Το FPGA είναι ένα προγραμματιζόμενο λογικό ολοκληρωμένο κύκλωμα, ένα τέτοιο μικροκύκλωμα αποτελείται από πολλά πανομοιότυπα μπλοκ ή μακροκυψέλες, κάθε κατασκευαστής τα αποκαλεί διαφορετικά, επομένως για το Xilinx είναι Slices (slices) για το Altera - LogicElements (λογικά στοιχεία). Αυτά τα μπλοκ είναι σχετικά απλά, μπορούν να λειτουργήσουν ως πολλά λογικά στοιχεία, να είναι ένας μικρός πίνακας αναζήτησης (LUT), να περιέχουν έναν έτοιμο αθροιστή, πολλαπλασιαστή, μπλοκ επεξεργασίας ψηφιακού σήματος (DSP), γενικά όλα όσα έχει στο μυαλό του ο κατασκευαστής . Ο χρήστης μπορεί να τακτοποιήσει και να διαμορφώσει αυτά τα μπλοκ όπως θέλει, υλοποιώντας έτσι αρκετά πολύπλοκα ψηφιακά κυκλώματα. Μπορείτε να εφαρμόσετε ακόμη και έναν μικροελεγκτή σε ένα FPGA, για παράδειγμα υλοποιώντας το ίδιο Arduino ή έναν επεξεργαστή της δικής σας αρχιτεκτονικής, για παράδειγμα, όχι έναν επεξεργαστή καταχωρητή αλλά έναν επεξεργαστή στοίβας, μπορείτε ακόμη και να εφαρμόσετε το δικό σας FPGA σε ένα FPGA!

    Μεταξύ των διαθέσιμων FPGAs του προϋπολογισμού, μπορούν να εντοπιστούν δύο κύριοι κατασκευαστές: η Altera και η Xilinx με τα προϊόντα τους μπορείτε να ξεκινήσετε το ταξίδι σας για να κατακτήσετε αυτές τις τεχνολογίες. Κατά τη γνώμη μου, είναι καλύτερο να επιλέξετε τα τσιπ Altera, καθώς το σχεδιαστικό τους περιβάλλον ενημερώνεται συνεχώς και εάν επιλέξετε ένα δημοφιλές τσιπ Xilinx XC3S500E, θα πρέπει να είστε ικανοποιημένοι με το ξεπερασμένο περιβάλλον ISE 14.7 (αν και έχει επίσης τα πλεονεκτήματά του) .

    Στην ξένη βιβλιογραφία μπορείτε να βρείτε συντομογραφίες για τα FPGA: FPGA και CPLD. CPLD (Complex Programmable Logic Device) - τσιπ με μικρό αριθμό macrocells, εξειδικευμένα μπλοκ και χαμηλή κατανάλωση ενέργειας. Ένα μεγάλο έργο δεν μπορεί να συντεθεί για αυτόν τον τύπο τσιπ, αλλά χρησιμοποιούνται επίσης στην πράξη, για παράδειγμα, ένας σπάνιος μικροελεγκτής έχει, ας πούμε, 300 πόδια. Τέτοια τσιπ χρησιμοποιούνται συχνά ως συστήματα διασύνδεσης, προεπεξεργαστές και επέκταση I/O. Το FPGA (Field-Programmable Gate Array) είναι μια συστοιχία πύλης με δυνατότητα προγραμματισμού πεδίου (FPGA), πολύ πιο ισχυρά τσιπ σε σύγκριση με το CPLD, αλλά καταναλώνει περισσότερη ενέργεια και κοστίζει σημαντικά περισσότερο. Για να μειωθεί το κόστος της περιοχής μήτρας, τα τσιπ FPGA μπορούν να περιέχουν έτοιμες λειτουργίες, όπως μονάδες επεξεργασίας ψηφιακού σήματος (μονάδες DSP), ενσωματωμένους επεξεργαστές και ενσωματωμένη μνήμη. Τα FPGA χρησιμοποιούνται ευρέως για τη δοκιμή και την επαλήθευση σχεδίων, στη λεγόμενη επικύρωση πριν από το πυρίτιο, μειώνοντας έτσι το κόστος και τον χρόνο πριν από την κυκλοφορία του προϊόντος. Τα τσιπ FPGA μπορούν να διαμορφωθούν εκ νέου ανά πάσα στιγμή, οι εξελίξεις βρίσκονται σε εξέλιξη, για παράδειγμα στην Intel, για να συνδυάζουν τις αρχιτεκτονικές ενός συμβατικού επεξεργαστή και ενός τσιπ FPGA. Η Xilinx έχει ήδη τέτοιες λύσεις - Zynq, αλλά δεν θα μιλήσουμε για αυτές προς το παρόν.

    Θα μιλήσουμε για πιο απλά πράγματα, ειδικά από τη στιγμή που πήρα στα χέρια μου ένα κιτ ανάπτυξης: Cyclone IV 4 FPGA Core Board και Altera USB Blaster Downloader PLD Development kit για 35 $, αγορασμένα στο AliExpress.

    1 Επίδειξη πίνακα Cyclone IV 4 FPGA Core Board, σύντομη περιγραφή

    Ρύζι. 1 - Επίδειξη πληρωμής Cyclone IV 4 FPGA Core Board

    Η πλακέτα (Εικ. 1) έχει εγκατεστημένο τσιπ EP4CE6E22C8N, τα χαρακτηριστικά της:

    Τύπος πόρου Σύντομη περιγραφή Ποσότητα
    Λογικά στοιχεία (Les) Ο αριθμός των λογικών μπλοκ - κελιών, το κύριο χαρακτηριστικό με το οποίο μπορούμε να συγκρίνουμε τη «ισχύ» των τσιπ που θα χρησιμοποιήσει αυτά τα μπλοκ 6,272
    Ενσωματωμένη μνήμη (Kbits) Η ενσωματωμένη μνήμη δεν είναι ακόμη σημαντικό χαρακτηριστικό για εμάς 270
    Ενσωματωμένοι πολλαπλασιαστές 18x18 Ενσωματωμένοι πολλαπλασιαστές υλικού, μια πολύ σημαντική παράμετρος στην επεξεργασία ψηφιακών σημάτων, η πλήρης ισχύς των FPGA αποκαλύπτεται όταν λειτουργούν πολλοί πολλαπλασιαστές παράλληλα 15
    PLL γενικής χρήσης Οι κόμβοι βρόχου κλειδωμένου φάσης, που δεν είναι ακόμη σημαντικό χαρακτηριστικό, απλοποιούν τον συγχρονισμό συσκευών που λειτουργούν σε διαφορετικές συχνότητες 2
    Παγκόσμια δίκτυα ρολογιού Ο αριθμός των τομέων συχνότητας δεν είναι ακόμη σημαντικό χαρακτηριστικό 10
    Τράπεζες εισόδου/εξόδου χρήστη Ο αριθμός των χωριστών τραπεζών εισόδου/εξόδου χρηστών δεν είναι ακόμη σημαντικό χαρακτηριστικό 8
    Μέγιστος αριθμός εισόδου/εξόδου χρήστη Αριθμός προσαρμοσμένων ακίδων I/O, μπορούμε να συνδέσουμε οποιεσδήποτε συσκευές, όπως το Arduino 91

    Το διοικητικό συμβούλιο έχει:

    1. Flash Memory – Όταν ενεργοποιηθεί, το FPGA θα διαμορφωθεί ώστε να υλοποιείται στη μνήμη flash. Μπορείτε να συνθέσετε το έργο σας και να γράψετε σε αυτό το flash
    2. Ο χαλαζίας 25 MHz είναι μια γεννήτρια συχνοτήτων ρολογιού αναφοράς, σε αυτήν τη συχνότητα θα λειτουργούν όλα τα έργα μας, το FPGA μας μπορεί να υποστηρίξει έως και 10 τέτοια κανάλια.
    3. LED – 10, κουμπιά – 2.
    4. Ακροδέκτες I/O 61 + 2 γείωση, 1 μη συνδεδεμένο. Μπορείτε να συνδέσετε μια ποικιλία συσκευών. DAC-ADC, επιταχυνσιόμετρα και γυροσκόπια, οθόνες χαρακτήρων και γραφικών, όπως το Arduino.
    5. Τροφοδοσία μέσω USB, ή εξωτερικό 5V.

    Το κιτ περιλαμβάνει επίσης προγραμματιστή JTAG, Altera USB Blaster.

    2. Περιβάλλον Quartus II και το πρώτο μας έργο

    Για να δουλέψουμε με αυτό το FPGA πρέπει να κατεβάσουμε το επίσημο περιβάλλον ανάπτυξης - Quartus II Web Edition, είναι δωρεάν. Πηγαίνουμε στον επίσημο ιστότοπο http://dl.altera.com/15.0/?edition=web, τη στιγμή που γράφεται η έκδοση 15.0 είναι η νεότερη, αν είναι νεότερη, κατεβάστε την.

    Επιλέγω:


    Ρύζι. 2 - επιλέξτε τα απαραίτητα προϊόντα Altera

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

    Ας δημιουργήσουμε το πρώτο μας έργο.

    Εκκινήστε το Quartus, επιλέξτε το κύριο μενού File -> New Project Wizard, εμφανίζεται το παράθυρο εισαγωγής, κάντε κλικ στο επόμενο. Στη συνέχεια, πρέπει να καθορίσετε τον κατάλογο για το έργο και το όνομά του, το τρίτο πεδίο είναι το όνομα της κορυφαίας ενότητας, θα δείτε αργότερα τι είναι. Επιλέγουμε το φάκελο όπου θέλουμε να αποθηκεύσουμε το έργο και βγάζουμε ένα όνομα, έχω το test1.


    Ρύζι. 3 - νέο παράθυρο οδηγού έργου

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

    Στη συνέχεια, πρέπει να επιλέξουμε το τσιπ μας αυτό μπορεί να γίνει ανά πάσα στιγμή. Επιλέγουμε όπως στο σχήμα, Family – Cyclone IV E, συγκεκριμένη συσκευή επιλεγμένη στο «Διαθέσιμες συσκευές» και επιλέγουμε το τσιπ μας EP4CE6E22C8N, είναι στην αρχή. Αν έχεις άλλο, βρες το δικό σου, είναι σημαντικό. Κάντε κλικ στο επόμενο.


    Ρύζι. 4 -

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


    Ρύζι. 5 - Παράθυρο "Assinments-Deice"

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

    Από προεπιλογή, οι αχρησιμοποίητες ακίδες "Ως είσοδος τριών δηλώσεων με αδύναμη έλξη" (οι ακροδέκτες εισόδου βρίσκονται στην τρίτη κατάσταση με υψηλή σύνθετη αντίσταση, με ανάσυρση χαμηλής ισχύος), μπορείτε να αποχωρήσετε ή να επιλέξετε "Όπως εισόδου τριών δηλώσεων ". Μπορείτε να διαβάσετε σχετικά με την αντίσταση έλξης στη Wikipedia https://ru.wikipedia.org/wiki/Pull-up_resistor. Στην ψηφιακή τεχνολογία μπορεί να υπάρχουν τρεις καταστάσεις, μια λογική είναι η τάση τροφοδοσίας ή μια υψηλή στάθμη, ένα λογικό μηδέν είναι όταν ο ακροδέκτης είναι συνδεδεμένος στη γείωση ή μια κατάσταση χαμηλής στάθμης και υψηλής σύνθετης αντίστασης. Κατάσταση υψηλής σύνθετης αντίστασης- αυτό συμβαίνει όταν ένας πείρος έχει πολύ υψηλή αντίσταση και πρακτικά δεν επηρεάζει το καλώδιο στο οποίο είναι συνδεδεμένο Αυτή η κατάσταση είναι απαραίτητη, για παράδειγμα, κατά την οργάνωση λεωφορείων, όταν πολλές συσκευές είναι συνδεδεμένες σε ένα καλώδιο και οι ανενεργές συσκευές δεν παρεμβαίνουν. με λειτουργία.


    Ρύζι. 6 - Παράθυρο «Επιλογές συσκευής και καρφίτσας», Αχρησιμοποίητες καρφίτσες

    Τα συνδέουμε όλα στο "Επεξεργαστής Εργασίας"


    Ρύζι. 7 - Καλέστε το "Assignment Editor" από το μενού ή τον πίνακα

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


    Ρύζι. 8 - Assinement Editor

    Στη στήλη "Προς", εισαγάγετε το όνομα της εισόδου ή της εξόδου. Στη στήλη «Όνομα ανάθεσης», επιλέξτε «Τοποθεσία». Στη στήλη «Τιμή» υπάρχει ο αριθμός pin του μικροκυκλώματος, σύμφωνα με το διάγραμμα της πλακέτας (έχω γραμμένους αριθμούς ακίδων απευθείας στην πλακέτα).

    Πρέπει επίσης να καθορίσετε τι να κάνετε με τα κουμπιά, τα οποία συνδέονται με το ένα πόδι στο έδαφος και το άλλο στην είσοδο του τσιπ. Όταν πιέζετε το πόδι θα υπάρχει ένα χαμηλό επίπεδο, αλλά χωρίς να πιέσετε, δεν είναι ξεκάθαρο, το πόδι του τσιπ απλά θα κρέμεται στον αέρα, κάτι που είναι πολύ κακό. Πρέπει να συνδέσετε την είσοδο του τσιπ στην τροφοδοσία είτε με μια αντίσταση στην πλακέτα είτε με πιο κομψό τρόπο στο "Assignments Editor". Στη στήλη «Όνομα ανάθεσης», επιλέξτε «Ασθενής αντίσταση έλξης» για την ομάδα κλειδιού* (η ομάδα υποδεικνύεται με αστερίσκο).


    Ρύζι. 9 - Επεξεργαστής Εργασίας

    Στη συνέχεια, πρέπει να δημιουργήσετε μια περιγραφή της μονάδας ανώτατου επιπέδου, η οποία θα λειτουργεί απευθείας με τα πόδια του τσιπ. Στο κύριο μενού, κάντε κλικ στην επιλογή Δημιουργία και επιλέξτε "Αρχεία σχεδίασης-> Διάγραμμα μπλοκ/Σχηματικό αρχείο".


    Ρύζι. 10 - Διάλογος νέων αρχείων

    Στο παράθυρο που ανοίγει, επιλέξτε το «Εργαλείο καρφίτσας» και τοποθετήστε την είσοδο και την έξοδο (ακίδες εισόδου και εξόδου) στο διάγραμμα. Μετονομάζουμε την είσοδο σε κλειδί, την έξοδο σε led και τα συνδέουμε με αγωγό. Αποθηκεύστε και κάντε κλικ στο "Έναρξη μεταγλώττισης".


    Ρύζι. 11 - Το παράθυρο περιγραφής γραφικών, το Εργαλείο Pin και το Start Compilation επισημαίνονται

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

    Συνδέουμε την πλακέτα επίδειξης και τον προγραμματιστή, επιλέγουμε το εργαλείο "Προγραμματιστής". Το παράθυρο θα πρέπει να γράφει "USB-Blaster", εάν όχι, κάντε κλικ στο "Hardware Setup" και προσπαθήστε να καταλάβετε γιατί όχι, πιθανότατα τα προγράμματα οδήγησης δεν είναι εγκατεστημένα, κοιτάξτε συσκευές Windows, αναζητήστε μη αναγνωρισμένες συσκευές, ίσως υπάρχει πρόβλημα με το καλώδιο. Εάν όλα είναι καλά, κάντε κλικ στο "Auto Detect" και επιλέξτε το τσιπ μας.


    Ρύζι. 12 - Παράθυρο προγραμματιστή

    Κάντε διπλό κλικ στο πεδίο «Αρχείο» και επιλέξτε το αρχείο που θέλετε να γράψετε στο FPGA (βρίσκεται στο φάκελο output_files του έργου μας), ελέγξτε το πεδίο «Πρόγραμμα / Διαμόρφωση» και κάντε κλικ στο κουμπί «Έναρξη».


    Ρύζι. 13 - Παράθυρο προγραμματιστή, το τσιπ μας έχει ήδη ρυθμιστεί

    Συγχαρητήρια για την πρώτη σας διαμόρφωση FPGA! Η δίοδος D1 θα πρέπει να ανάψει, όταν πατήσετε το πλήκτρο 1 θα πρέπει να σβήσει (αφού το κουμπί κλείνει το πόδι στη γείωση), τότε θα κάνουμε κάτι γι 'αυτό)