Μελετώντας το plis. Προγραμματιζόμενα λογικά ολοκληρωμένα κυκλώματα (PLI)

6. ΠΡΟΓΡΑΜΜΑΤΙΣΜΕΝΑ ΛΟΓΙΚΑ ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ (FPGA)

Προγραμματιζόμενο λογικό ολοκληρωμένο κύκλωμα (FPGA, Προγραμματιζόμενη λογική συσκευή, PLD) - ηλεκτρονικό εξάρτημα,

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

Η ιστορία της ανάπτυξης FPGA ξεκινά με προγραμματιζόμενες συσκευές μνήμης μόνο για ανάγνωση (PROM - Programmable Read Only Memory). Στην αρχή, τα PROM χρησιμοποιήθηκαν αποκλειστικά για την αποθήκευση δεδομένων, αργότερα άρχισαν να χρησιμοποιούνται για την υλοποίηση λογικών συναρτήσεων. Για την υλοποίηση συστημάτων Boolean συναρτήσεων με μεγάλο αριθμό μεταβλητών, αναπτύχθηκαν προγραμματιζόμενοι λογικοί πίνακες PLA (PLA - Programmable Logic Array) - ο πιο παραδοσιακός τύπος FPGA, ο οποίος έχει προγραμματιζόμενους πίνακες "AND" και "OR". Παραδείγματα τέτοιων FPGA είναι τα οικιακά κυκλώματα K556PT1, PT2, PT21.

Η κατασκευή του PLA βασίζεται στο γεγονός ότι οποιαδήποτε συνδυαστική συνάρτηση μπορεί να αναπαρασταθεί ως ένα λογικό άθροισμα (λειτουργία Ή) λογικών προϊόντων (Λειτουργίες ΚΑΙ). Το κύκλωμα που υλοποιεί τη συνδυαστική συνάρτηση φαίνεται στο Σχ. 6.1.

Ρύζι. 6.1. Διάγραμμα κατασκευής PLA

Το μειονέκτημα αυτής της αρχιτεκτονικής είναι η κακή χρήση των πόρων της προγραμματιζόμενης μήτρας "OR", έτσι τα τσιπ που κατασκευάστηκαν σύμφωνα με την αρχιτεκτονική της λογικής προγραμματιζόμενης μήτρας (PAL - Programmable Array Logic) αναπτύχθηκαν περαιτέρω - αυτά είναι FPGA που έχουν προγραμματιζόμενο πίνακα " ΚΑΙ» και μια σταθερή μήτρα «OR» (Εικ. .6.2). Τα περισσότερα σύγχρονα FPGA με μικρό βαθμό ενοποίησης ανήκουν σε αυτήν την κατηγορία. Παραδείγματα περιλαμβάνουν εγχώρια IC KM1556ХП4, ХП6, ХП8, ХЛ8, πρώιμες εξελίξεις (μέσα έως τέλη δεκαετίας του 1980) FPGA από τις INTEL, ALTERA, AMD, LATTICE κ.λπ.

Ρύζι. 6.2. Διάγραμμα κατασκευής PAL

Οι βελτιώσεις στα FPGA οδήγησαν στην εμφάνιση προγραμματιζόμενων μακρολογικών. Περιέχουν έναν μόνο προγραμματιζόμενο πίνακα "AND-NOT" ή "OR-NOT", αλλά λόγω των πολυάριθμων αντίστροφων ανατροφοδοτήσεων είναι ικανοί να σχηματίζουν πολύπλοκες λογικές συναρτήσεις. Αυτή η κλάση περιλαμβάνει, για παράδειγμα, τα FPGA PLHS501 και PLHS502 από τη SIGNETICS, τα οποία έχουν μια μήτρα "AND-NOT", καθώς και το κύκλωμα XL78C800 από την EXEL, με βάση έναν πίνακα "OR-NOT".

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

Περαιτέρω βελτιώσεις στην τεχνολογία κατασκευής κατέστησαν δυνατή την υλοποίηση πολλαπλών PAL σε ένα μόνο τσιπ, συνδεδεμένα με προγραμματιζόμενες συνδέσεις. Τέτοιες αρχιτεκτονικές ονομάζονται σύνθετη (σύνθετη) προγραμματιζόμενη λογική

ΠΡΟΓΡΑΜΜΑΤΙΣΜΕΝΗ ΛΟΓΙΚΗ

ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ

συσκευές (CPLD - Complex Programmable Logic Device) - αυτό είναι ένα FPGA,

Ρύζι. 6.3. Διάγραμμα Macrocell CPLD

Τα μικροκυκλώματα αυτού του τύπου μπορούν να χρησιμοποιηθούν για τη δημιουργία μη τυπικών ALU, αποκωδικοποιητών, πολυπλέκτη κ.λπ., π.χ. τέτοιες συσκευές όπου απαιτούνται λογικές συναρτήσεις πολλών μεταβλητών και μικρός αριθμός flip-flops. Τα FPGA τύπου CPLD έχουν συνήθως υψηλό βαθμό ολοκλήρωσης (έως 10.000 ισοδύναμες πύλες, έως 256 μακροστοιχεία).

Αυτή η κατηγορία περιλαμβάνει FPGA της οικογένειας MAX από την ALTERA, τις οικογένειες XC9500 και CoolRunner από την XILINX, καθώς και μεγάλο αριθμό τσιπ από άλλους κατασκευαστές (Atmel, Vantis, Lucent κ.λπ.).

Ένας άλλος τύπος αρχιτεκτονικής FPGA είναι οι προγραμματιζόμενες πύλες πεδίου (FPGA - Field Programmable Gate Array Logic), που αποτελούνται από ρυθμιζόμενα λογικά μπλοκ (CLB) και διαδρομές μεταγωγής - προγραμματιζόμενες πίνακες σύνδεσης (Εικ. 6.4). Τα διαμορφώσιμα λογικά μπλοκ τέτοιων FPGA αποτελούνται από ένα ή περισσότερα σχετικά απλά λογικά στοιχεία, τα οποία βασίζονται σε έναν πίνακα αναζήτησης (LUT), προγραμματιζόμενους πολυπλέκτης, ένα flip-flop και κυκλώματα ελέγχου. Χαρακτηριστικό των αρχιτεκτονικών FPGA είναι τα μπλοκ εισόδου/εξόδου (IOB - μπλοκ εισόδου/εξόδου),

που επιτρέπει την υλοποίηση αμφίδρομης εισόδου/εξόδου, τρίτης κατάστασης κ.λπ.

Ρύζι. 6.4. Δομή FPGA

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

Η κλάση FPGA περιλαμβάνει FPGA της οικογένειας Spartan και Virtex

XILINX; Fusion, M1 και M7 Fusion και άλλα από την ACTEL, καθώς και οι οικογένειες Cyclone, Stratix από την ALTERA, FPGA από την Atmel και τη Vantis.

6.1. Χαρακτηριστικά του προγραμματισμού FPGA

Τα δεδομένα διαμόρφωσης για το CPLD αποθηκεύονται σε μη πτητική μνήμη εντός του FPGA, επομένως δεν χρειάζεται να

ΨΗΦΙΑΚΕΣ ΣΥΣΚΕΥΕΣ ΚΑΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ. ΜΕΡΟΣ 2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΕΝΗ ΛΟΓΙΚΗ

ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ

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

(EPRM, EEPROM ή FLASH).

Όταν εργάζεστε σε τέτοια συστήματα, η διαμόρφωση του κυκλώματος που πρέπει να ληφθεί "μέσα" στο FPGA ή ο αλγόριθμος για τη λειτουργία του καθορίζεται είτε σε μια γλώσσα περιγραφής κειμένου: VDHL (V ery high speed integrated circuitsH ardwareD descriptionL anguage - hardware description language language για ολοκληρωμένα κυκλώματα υψηλής ταχύτητας), Verilog, ADHL (A lteraH ardwareD descriptionL anguage), που θυμίζει γλώσσα προγραμματισμού υψηλού επιπέδου (για παράδειγμα C). ή σε πρόγραμμα επεξεργασίας γραφικών (με τη μορφή ηλεκτρικού διαγράμματος). ή χρησιμοποιώντας διαγράμματα ροής αλγορίθμων ή γραφήματα καταστάσεων. Επιπλέον, όλα τα στάδια της εργασίας, συμπεριλαμβανομένου του προγραμματισμού ή της φόρτωσης του FPGA, εκτελούνται από ένα αυτοματοποιημένο σύστημα σχεδιασμού. Τέτοια συστήματα παράγονται από όλους τους κορυφαίους κατασκευαστές FPGA

(www.actel.com) ACTEL, (www.altera.com) ALTERA, (www.xilinx.com) XILINX, και άλλες εταιρείες.

7. ΨΗΦΙΑΚΟ-ΑΝΑΛΟΓΙΚΟΚΑΙ

7.1 Αρχές κατασκευήςμετατροπείς ψηφιακού σε αναλογικό

Ένας μετατροπέας ψηφιακού σε αναλογικό (DAC) είναι μια συσκευή για τη μετατροπή αριθμητικών κωδικών σε ισοδύναμες τιμές τάσης ή ρεύματος. Τα κυκλώματα DAC κατασκευάζονται χρησιμοποιώντας τόσο ψηφιακά όσο και αναλογικά στοιχεία (λειτουργικοί ενισχυτές, διακόπτες, μήτρες αντίστασης, κ.λπ.). Τα περισσότερα DAC που κατασκευάζονται με τη μορφή ολοκληρωμένων κυκλωμάτων είναι συσκευές παράλληλου τύπου. Η εργασία τους βασίζεται στο άθροισμα των ρευμάτων, τα μεγέθη των οποίων είναι ανάλογα με τους συντελεστές στάθμισης των bits του κωδικού εισόδου.

Το κύκλωμα ενός DAC 4-bit φαίνεται στο Σχ. 7.1.

Ρύζι. 7.1. Η αρχή της κατασκευής ενός κυκλώματος DAC

Περιλαμβάνει μια μήτρα αντίστασης, μια τάση αναφοράς U R, έναν λειτουργικό ενισχυτή και διακόπτες S 0 − S 3.

Οι αντιστάσεις των αντιστάσεων της μήτρας είναι τέτοιες ώστε τα ρεύματα που διαρρέουν τις αντιστάσεις να αντιστοιχούν στους συντελεστές στάθμισης των ψηφίων του αριθμού

D = d 3 d 2 d 1 d 0 . Η θέση των επαφών του διακόπτη εξαρτάται από τις τιμές του d i. Εάν d i = 0, τότε το ρεύμα που ρέει μέσω της αντίστασης μήτρας υπό τη δράση της τάσης αναφοράς U R βραχυκυκλώνεται στο κοινό καλώδιο.

Όταν d i = 1, το ρεύμα της αντίστασης ρέει μέσω του S i. ρέει στο κύκλωμα άθροισης

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

ΨΗΦΙΑΚΕΣ ΣΥΣΚΕΥΕΣ ΚΑΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ. ΜΕΡΟΣ 2

ΨΗΦΙΑΚΟ-ΑΝΑΛΟΓΙΚΟ ΚΑΙ

ΑΝΑΛΟΓΙΚΟΙ-ΨΗΦΙΑΚΟΙ ΜΕΤΑΤΡΟΠΕΣ

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

U 0= − R R 0 U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

Για να αυξήσετε τη χωρητικότητα bit του DAC, είναι απαραίτητο να προσθέσετε τον κατάλληλο αριθμό αντιστάσεων και διακοπτών.

Η κατασκευή αντιστάσεων υψηλής ακρίβειας για πίνακες είναι γεμάτη δυσκολίες, ειδικά στην περίπτωση DAC πολλαπλών bit (οι τιμές των αντιστάσεων κυμαίνονται σε ένα ευρύ φάσμα - από R έως

R 2 n − 1 , αλλά οι απαιτήσεις για απόλυτη ακρίβεια προσδιορισμού

οι αντιστάσεις είναι ίδιες για όλες τις αντιστάσεις). Επομένως, χρησιμοποιείται συχνά ένας πίνακας αντίστασης του τύπου R − 2R (Εικ. 7.2).

Ρύζι. 7.2. DAC με μήτρα τύπου R – 2R

Οι συντελεστές στάθμισης των σταδίων καθορίζονται με διαδοχική διαίρεση της τάσης αναφοράς. Ο συντελεστής εξασθένησης κάθε σταδίου μήτρας είναι ίσος με δύο. Η τάση εξόδου DAC είναι:

U 0=− 16 R 0 R U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

Τα τρανζίστορ MOS χρησιμοποιούνται συχνά ως ηλεκτρονικοί διακόπτες σε κυκλώματα DAC (Εικ. 7.3). Χρησιμοποιούνται επίσης διακόπτες ρεύματος που βασίζονται σε διπολικά τρανζίστορ.

Ρύζι. 7.3. 4-bit DAC:

α – θραύσμα κυκλώματος με διακόπτες MOS, β – UGO

Παραδείγματα IP:

K572PA1 - 10-bit DAC. Το IC περιέχει μια μήτρα ακριβείας R − 2R, διακόπτες τρανζίστορ MOS, ενισχυτές εισόδου, μετατροπείς και μια αντίσταση για το κύκλωμα ανάδρασης op-amp. Για να μετατρέψετε το συνολικό ρεύμα σε τάση, πρέπει να συνδεθεί ένας λειτουργικός ενισχυτής. Απαιτείται επίσης μια εξωτερική αναφορά τάσης.

ΨΗΦΙΑΚΕΣ ΣΥΣΚΕΥΕΣ ΚΑΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ. ΜΕΡΟΣ 2

ΨΗΦΙΑΚΟ-ΑΝΑΛΟΓΙΚΟ ΚΑΙ

ΑΝΑΛΟΓΙΚΟΙ-ΨΗΦΙΑΚΟΙ ΜΕΤΑΤΡΟΠΕΣ

7.2. Αρχές κατασκευήςμετατροπείς αναλογικού σε ψηφιακό

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

Σύμφωνα με τη μέθοδο μετατροπής, το ADC μπορεί να χωριστεί σε παράλληλο

Και συνεπής.

ΣΕ παράλληλα ADC, η τάση εισόδου συγκρίνεται ταυτόχρονα με όλα τα επίπεδα κατωφλίου της κλίμακας κβαντοποίησης (Εικ. Β.1.). Ως αποτέλεσμα της σύγκρισης, βρίσκεται το πλησιέστερο επίπεδο κβαντισμού, ο αριθμός του οποίου εκφράζεται σε δυαδικό κώδικα χρησιμοποιώντας έναν κωδικοποιητή. Ένα διάγραμμα που αναπαριστά 3-bit παράλληλο ADC, που φαίνεται στο Σχ. 7.4. Μια πηγή τάσης αναφοράς και ένα σύνολο αντιστάσεων καθιστούν δυνατή τη δημιουργία τάσεων ίσων με τα επίπεδα κατωφλίου.

Η τάση αναφοράς είναι (2n -1) = 7 φορές η τιμή του βήματος κβαντισμού U S . Εάν, για παράδειγμα, η τάση εισόδου είναι μέσα

κυμαίνονται από (4+ 1 2 ) U S έως (5+ 1 2 ) U S πρέπει να αντιπροσωπεύεται

επίπεδο κβαντισμού ίσο με 5U S και, κατά συνέπεια, δυαδικός κωδικός 101. Ο κωδικός εξόδου δημιουργείται ως εξής. Για μια δεδομένη τιμή του U I, οι έξοδοι έξι συγκριτών ορίζονται σε

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

παράδειγμα αυτό είναι το Χ 5).

Ρύζι. 7.4. Παράλληλο ADC: a – κύκλωμα, b – UGO

Παράδειγμα ΕΙΝΑΙ:

K1107PV1 - 6-bit παράλληλο ADC. Το IC κατασκευάζεται με χρήση διπολικής τεχνολογίας. Η μέγιστη συχνότητα δειγματοληψίας είναι 20 MHz.

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

ΨΗΦΙΑΚΕΣ ΣΥΣΚΕΥΕΣ ΚΑΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ. ΜΕΡΟΣ 2

ΨΗΦΙΑΚΟ-ΑΝΑΛΟΓΙΚΟ ΚΑΙ

ΑΝΑΛΟΓΙΚΟΙ-ΨΗΦΙΑΚΟΙ ΜΕΤΑΤΡΟΠΕΣ

διαδοχική καταμέτρηση. Η λειτουργία του βασίζεται στην καταμέτρηση του αριθμού των αθροίσεων του βήματος κβαντισμού που απαιτείται για να ληφθεί η τιμή της τάσης εισόδου. Το κύκλωμα ADC μέτρησης σειριακής μέτρησης φαίνεται στο Σχ. 7.5. Αποτελείται από έναν μετρητή n-bit πάνω/κάτω, έναν συγκριτή και έναν μετατροπέα ψηφιακού σε αναλογικό n-bit που περιλαμβάνεται στο κύκλωμα ανάδρασης.

Ρύζι. 7.5. Σειριακή μέτρηση ADC

Χρησιμοποιώντας έναν συγκριτή, συγκρίνονται η τάση εισόδου U I και η τάση εξόδου του DAC O. Εάν U I > U O, τότε η έξοδος του συγκριτή είναι επίπεδο μονάδας και ο μετρητής λειτουργεί στη λειτουργία άθροισης παλμών ρολογιού C. Εξαιτίας αυτού, η τάση U O τείνει σε U I . Όταν συγκρίνονται, ο κωδικός εξόδου n-bit D θα αντιπροσωπεύει την τάση εισόδου ADC. IfU I< U O то счетчик работает в вычитающем режиме. Таким образом, напряжениеU O , а следовательно, и выходной код, отслеживают выходное напряжениеU I Для того, чтобы

Για να αποτρέψετε την ταλάντωση του σήματος αναστροφής U/D μετά την ολοκλήρωση της διαδικασίας παρακολούθησης, είναι δυνατό να συμπληρωθεί το κύκλωμα ADC με μια συσκευή

αποκλεισμός μετρητή στο U I − U O< U S 2 .

Διάγραμμα κυκλώματος του ADC που φαίνεται στο Σχ. 7.5, πολύ απλό. Αλλά με υπερτάσεις τάσης εισόδου, η διαδικασία παρακολούθησης μπορεί να διαρκέσει έως και 2n κύκλους ρολογιού (περίοδοι παλμών C). Η επιτάχυνση της μετατροπής επιτυγχάνεται σε ένα ADC με στάθμιση bit. Το διάγραμμα του είναι παρόμοιο με το διάγραμμα στο Σχ. 7.5, μόνο ο μετρητής αντικαθίσταται από έναν καταχωρητή με συσκευή ελέγχου. Η λειτουργία του ADC ζύγισης bitwise γίνεται ως εξής. Πρώτον, όλα τα bit καταχωρητή ορίζονται στο μηδέν. Στη συνέχεια, το 1 εισάγεται στο πιο σημαντικό bit του καταχωρητή. Ταυτόχρονα, στην έξοδο του DAC

ορίζεται η τάση U O = 2n − 1 U S, ίση με το ήμισυ του συνόλου2 n − 2),

τότε d n − 2 = 1

Αν όχι,

d n − 2 = 0 .

Μετά το ν

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

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

Άλλα σειριακά ADC είναι επίσης γνωστά, για παράδειγμα, ADC που λειτουργούν χρησιμοποιώντας τη μέθοδο ενσωμάτωσης.

Παραδείγματα IP:

K572PV1 - ADC 12-bit με ζύγιση bit-by-bit. Το IC κατασκευάζεται με τεχνολογία CMOS. Χρησιμοποιείται με εξωτερικούς ενισχυτές λειτουργίας και αναφορά τάσης. Ο τυπικός χρόνος μετατροπής είναι 110 μsec.

K1113PV1 - ADC 10-bit για ζύγιση bit-by-bit. Το IC κατασκευάζεται με χρήση διπολικής τεχνολογίας και περιέχει όλα τα λειτουργικά εξαρτήματα του ADC, συμπεριλαμβανομένης μιας πηγής τάσης αναφοράς και μιας γεννήτριας ρολογιού. Τα στάδια εξόδου σχεδιάζονται σύμφωνα με ένα κύκλωμα τριών καταστάσεων. Χρόνος μετατροπής - όχι περισσότερο από 30 μsec.

Συγκρίνοντας παράλληλα και σειριακά ADC, μπορούν να σημειωθούν τα ακόλουθα. Τα παράλληλα ADC είναι κυκλώματα υψηλής ταχύτητας, αλλά η εφαρμογή τους απαιτεί μεγάλο κόστος υλικού (ένας ADC 6-bit περιέχει 64 συγκριτές). Οι ADC σειριακής μέτρησης έχουν το απλούστερο κύκλωμα, αλλά λειτουργούν σχετικά με τάσεις χαμηλής συχνότητας. Τα ADC με στάθμιση bit καταλαμβάνουν μια ενδιάμεση θέση όσον αφορά την πολυπλοκότητα και την απόδοση. Ο συνδυασμός παράλληλων και σειριακών κυκλωμάτων ADC σας επιτρέπει να δημιουργήσετε έναν μεγάλο αριθμό επιλογών μετατροπέα με διαφορετικές παραμέτρους και ποικιλία λειτουργιών.

ΨΗΦΙΑΚΕΣ ΣΥΣΚΕΥΕΣ ΚΑΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ. ΜΕΡΟΣ 2

ΛΟΓΟΤΕΧΝΙΑ

ΛΟΓΟΤΕΧΝΙΑ

1. Glassman K.F., Pokoptseva M.N. Ψηφιακές συσκευές και μικροεπεξεργαστές. Εγχειρίδιο για μαθητές της ειδικότητας 210312 «Οπτικοακουστική τεχνολογία». Μέρος 1. – Αγία Πετρούπολη: SPbGUKiT, 2008.

2. Novikov Yu.V. Βασικές αρχές ψηφιακών κυκλωμάτων. Βασικά στοιχεία και διαγράμματα. Μέθοδοι σχεδιασμού. – Μ.: Μιρ, 2001.

3. Novikov Yu., Skorobogatov P. Fundamentals of microprocessor technology: A course of lectures. – M.: INTUIT.RU, 2003.

4. Belov A. Εγχειρίδιο αυτο-οδηγίας για την τεχνολογία μικροεπεξεργαστή. – Μ.: Επιστήμη και Τεχνολογία, 2003.

5. Novozhilov O.P. Βασικές αρχές της ψηφιακής τεχνολογίας: Εγχειρίδιο. – Μ.: Radio Soft, 2004.

6. Ugryumov E. Ψηφιακό κύκλωμα από το λογικό στοιχείο στο προηγμένο LSI/VLSI με προγραμματιζόμενες δομές. – Αγία Πετρούπολη: BHV – Πετρούπολη, 2004.

7. Boyko V. Σχεδιασμός κυκλωμάτων ηλεκτρονικών συστημάτων. Ψηφιακές συσκευές.

– Αγία Πετρούπολη: BHV – Πετρούπολη, 2004.

8. Boyko V. Σχεδιασμός κυκλωμάτων ηλεκτρονικών συστημάτων. Μικροεπεξεργαστές και μικροελεγκτές. – BHV – Αγία Πετρούπολη, 2004.

9. Naryshkin A.K. Ψηφιακές συσκευές και μικροεπεξεργαστές. – Μ.: Εκδοτικός οίκος. Κέντρο "Ακαδημία", 2004.

10. Wilkinson B. Βασικές αρχές σχεδιασμού ψηφιακών κυκλωμάτων. – Κίεβο: Williams, 2004.

11. Fricke K. Εισαγωγικό μάθημα ψηφιακής ηλεκτρονικής. – Μ.: Τεχνόσφαιρα, 2004.

12. Opadchiy Yu.A. Αναλογικά και ψηφιακά ηλεκτρονικά. Εγχειρίδιο για τα πανεπιστήμια. – M.: Hotline – Telecom, 2005.

13. Tocci R. Widmer N. Ψηφιακά συστήματα. Θεωρία και πράξη. – Κίεβο: Williams, 2004.

14. Alekseeva L.A., Bul M.P., Glassman K.F., Pokoptseva M.N.. Οδηγίες για την εκτέλεση εργαστηριακών εργασιών για φοιτητές ειδικότητας 201400 «Οπτικοακουστική τεχνολογία» στο μάθημα «Ψηφιακές συσκευές και μικροεπεξεργαστές». – Αγία Πετρούπολη: SPbGUKiT, 2002.

Altera-Cyclone και Arduino

Η ουσία της ερώτησης. Διαφορά μεταξύ FPGA και μικροελεγκτή

Κάθε αρχάριος microproger σε ένα ορισμένο στάδιο της ανάπτυξής του αναρωτιέται τι διαφορά μεταξύ των FPGA(από το Altera ή το Xilinx) και μικροελεγκτή(μικροεπεξεργαστής);

Διαβάζεις τα φόρουμ - οι ειδικοί του χώρου γράφουν ότι πρόκειται για εντελώς διαφορετικά πράγματα που δεν μπορούν να συγκριθούν, υποστηρίζοντας ότι έχουν διαφορετικά αρχιτεκτονική. Διαβάζετε ένα εγχειρίδιο για τη Verilog ή τη C++ - και οι δύο χρησιμοποιούν παρόμοιους τελεστές με παρόμοια λειτουργικότητα, ακόμη και η σύνταξη είναι παρόμοια, αλλά γιατί είναι διαφορετικοί; Πηγαίνετε στο ρόβερ του Άρη - υπάρχουν LED (ή ακόμα και μόνο λαμπτήρες) που χρησιμοποιούν FPGAΑναβοσβήνουν, κοιτάς έργα στο Arduino - ελέγχουν ρομπότ. Στάση!

Αλλά τώρα ας σταματήσουμε και ας αναρωτηθούμε: γιατί με FPGA- μια ηλίθια λάμπα και το Arduino - ένα έξυπνο ρομπότ; Τελικά, τόσο η πρώτη όσο και η δεύτερη φαίνεται να είναι προγραμματιζόμενες συσκευές, αλήθεια; FPGAΔεν υπάρχουν αρκετές δυνατότητες για το ρομπότ;

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

Ας το σημειώσουμε αμέσως. Λειτουργικός FPGAαρχικά δεν είναι κατώτερο μικροελεγκτή(και ο μικροεπεξεργαστής, παρεμπιπτόντως, επίσης), πιο συγκεκριμένα - οι κύριες λειτουργίες του ενός και του άλλου είναι ουσιαστικά ταυτόσημες - να παράγει λογικό 0 ή 1 υπό ορισμένες συνθήκες, και αν μιλάμε για ταχύτητα, τον αριθμό των ακίδων (πόδια ) και τις δυνατότητες επεξεργασίας αγωγών, λοιπόν μικροελεγκτήνα FPGAαλλά γενικά μακριά. Υπάρχει όμως ένα «αλλά». Ώρα να αναπτύξουμε τον ίδιο αλγόριθμο λογισμικού σε δύο διαφορετικές συσκευές (FPGA και μικροελεγκτής) διαφέρει αρκετές φορές ή και δεκάδες φορές. Ακριβώς FPGAεδώ στο 99% των περιπτώσεων είναι πολύ κατώτερο του ΜΚ. Και δεν είναι καθόλου θέμα γλωσσικής σύγχυσης Verilog,VHDLή AHDL, και στην ίδια τη συσκευή FPGA.

Σχετικά με την αλληλεπίδραση της γλώσσας προγράμματος με την αρχιτεκτονική του FPGA και του μικροελεγκτή

FPGA: V FPGAκαι δεν υπάρχουν πολύπλοκες αυτοματοποιημένες αλυσίδες (που κάνουν μέρος της δουλειάς για εσάς). Υπάρχουν μόνο σιδερένιες διαδρομές και αυτοκινητόδρομοι, είσοδοι, έξοδοι, λογικά μπλοκ και μπλοκ μνήμης. Μεταξύ των ιχνών υπάρχει μια ειδική κατηγορία - ένα ίχνος χρονισμού (δεμένο σε ορισμένα πόδια μέσω των οποίων συνιστάται η διεξαγωγή της συχνότητας ρολογιού).

Κύρια σύνθεση:

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

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

Τα κύτταρα είναι ομάδες από πολλές μονάδες έως πολλές δεκάδες τρανζίστορ.

Το τρανζίστορ είναι το κύριο στοιχείο της λογικής TTL.

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

Γεννήτρια ρολογιού - ένα εξωτερικό τσιπ που παράγει τους παλμούς ρολογιού στους οποίους βασίζεται το μεγαλύτερο μέρος της εργασίας FPGA.

Αρχιτεκτονική FPGA. Αλληλεπίδραση συστατικών στοιχείων

Τα ίχνη συνδέονται με τα μπλοκ χρησιμοποιώντας ειδικά τρανζίστορ CMOS. Αυτά τα τρανζίστορ είναι ικανά να διατηρούν την κατάστασή τους (ανοιχτό ή κλειστό) για μεγάλο χρονικό διάστημα. Η κατάσταση του τρανζίστορ αλλάζει όταν εφαρμόζεται ένα σήμα κατά μήκος μιας συγκεκριμένης διαδρομής, η οποία χρησιμοποιείται μόνο όταν Προγραμματισμός FPGA. Δηλαδή, τη στιγμή του υλικολογισμικού, η τάση παρέχεται σε ένα συγκεκριμένο σύνολο τρανζίστορ CMOS. Αυτό το σετ καθορίζεται από το πρόγραμμα υλικολογισμικού. Έτσι, στο εσωτερικό πραγματοποιείται μια σύνθετη κατασκευή ενός τεράστιου δικτύου διαδρομών και αυτοκινητοδρόμων FPGA, συνδέοντας με πολύπλοκο τρόπο έναν τεράστιο αριθμό λογικών μπλοκ. Στο πρόγραμμα, περιγράφετε ακριβώς ποιος αλγόριθμος πρέπει να εκτελεστεί και το υλικολογισμικό συνδέει τα στοιχεία που εκτελούν τις λειτουργίες που περιγράφετε στο πρόγραμμα. Τα σήματα τρέχουν κατά μήκος της διαδρομής από μπλοκ σε μπλοκ. Μια σύνθετη διαδρομή καθορίζεται από το πρόγραμμα.

Αρχιτεκτονική FPGA(FPGA)

Αρχιτεκτονική μικροελεγκτή

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

Η μνήμη μόνο για ανάγνωση (ROM) είναι η μνήμη στην οποία είναι αποθηκευμένο το πρόγραμμά σας. Περιλαμβάνει αλγόριθμους δράσης και σταθερές. Καθώς και βιβλιοθήκες (σύνολα) εντολών και αλγορίθμων.

Μνήμη τυχαίας πρόσβασης (RAM) - χρησιμοποιούμενη μνήμη μικροελεγκτήγια προσωρινή αποθήκευση δεδομένων (όπως ενεργοποιήσεις σε FPGA). Για παράδειγμα, κατά τον υπολογισμό σε πολλά βήματα. Ας υποθέσουμε ότι πρέπει να πολλαπλασιάσετε τον πρώτο αριθμό που έρχεται με τη δεύτερη (1η ενέργεια), μετά τον τρίτο με την τέταρτη (2η ενέργεια) και να προσθέσετε το αποτέλεσμα (3η ενέργεια). Σε αυτήν την περίπτωση, το αποτέλεσμα της 1ης ενέργειας θα εισαχθεί στη μνήμη RAM για τη διάρκεια της δεύτερης και, στη συνέχεια, θα εισαχθεί το αποτέλεσμα της 2ης ενέργειας. Και τότε και τα δύο αυτά αποτελέσματα θα μεταφερθούν από τη μνήμη RAM για τον υπολογισμό 3 ενεργειών.

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

Εγκαταστάσεις I/O (Ports) και Serial I/O Ports - Pins μικροελεγκτήσχεδιασμένο να αλληλεπιδρά με τον έξω κόσμο.

Τα χρονόμετρα είναι μπλοκ σχεδιασμένα να μετρούν τον αριθμό των κύκλων κατά την εκτέλεση αλγορίθμων.

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

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

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

Γεννήτρια ρολογιού - ένα εξωτερικό μικροκύκλωμα που παράγει παλμούς ρολογιού στους οποίους όλα λειτουργία μικροελεγκτή.

Αλληλεπίδραση των συστατικών μπλοκ του μικροελεγκτή

ΣΕ μικροελεγκτή, V διαφορέςαπό FPGA, η εργασία γίνεται ανάμεσα στα παραπάνω μπλοκ, τα οποία έχουν ένα σύμπλεγμα αρχιτεκτονική, διευκολύνοντας τη διαδικασία ανάπτυξης του προγράμματος. Όταν αναβοσβήνει το firmware, αλλάζεις μόνο τη μόνιμη μνήμη, στην οποία βασίζεται όλη η δουλειά του MK.

Η κύρια διαφορά μεταξύ FPGA και μικροελεγκτή

Το FPGA είναι ραμμένο σε επίπεδο υλικού, σχεδόν σε ολόκληρη την περιοχή του τσιπ. Τα σήματα περνούν μέσα από πολύπλοκες αλυσίδες τρανζίστορ. Ο μικροεπεξεργαστής αναβοσβήνει σε επίπεδο προγράμματος υλικού, τα σήματα περνούν σε ομάδες, από μπλοκ σε μπλοκ - από μνήμη σε επεξεργαστή, σε RAM, από RAM σε επεξεργαστή, από επεξεργαστή σε θύρες I/O, από θύρες I/O στη RAM, από RAM... και ούτω καθεξής. Συμπέρασμα: λόγω Αρχιτεκτονικές FPGAκερδίζει σε ταχύτητα και ευρύτερες δυνατότητες επεξεργασίας αγωγών, η MK κερδίζει στην ευκολία γραφής αλγορίθμων. Λόγω ενός απλούστερου τρόπου περιγραφής των προγραμμάτων, η φαντασία του προγραμματιστή Μικροελεγκτήςλιγότερο περιορισμένο από χρόνο για εντοπισμό σφαλμάτων και ανάπτυξη και, επομένως, χρόνο για προγραμματισμό του ίδιου ρομπότ στο MK και FPGAθα διαφέρωπολλές πολλές φορές. Ωστόσο, ένα ρομπότ τρέχει FPGAθα είναι πολύ πιο γρήγορο, πιο ακριβές και ευέλικτο.

Υλικό και λογισμικό.

ΣΕ FPGAπρέπει να κάνετε όλη τη δουλειά μόνοι σας, χειροκίνητα: για να εφαρμόσετε οποιοδήποτε πρόγραμμα στο FPGA, πρέπει να παρακολουθείτε κάθε σήμα για κάθε καλώδιο που εισέρχεται FPGA, τοποθετήστε μερικά σήματα σε κελιά μνήμης, βεβαιωθείτε ότι την κατάλληλη στιγμή αυτά τα κελιά μνήμης έχουν πρόσβαση από άλλο σήμα, το οποίο επίσης παρακολουθείτε ή ακόμα και δημιουργείτε, και ως αποτέλεσμα, το σύνολο των σημάτων που καθυστερούν στη μνήμη ενεργοποιεί το σήμα που χρειάζεστε, το οποίο, για παράδειγμα, θα πάει σε μια συγκεκριμένη ακίδα εξόδου και θα ανάψει το LED που είναι συνδεδεμένο σε αυτό. Μερικά από τα σήματα δεν πηγαίνουν στη μνήμη, αλλά, για παράδειγμα, για την εκκίνηση ενός συγκεκριμένου τμήματος του αλγορίθμου (προγράμματος). Δηλαδή, στη γλώσσα microproger, αυτά τα σκέλη είναι διευθυνσιοδοτούμενα. Για παράδειγμα, στον πίνακα μας στο πρόγραμμά μας έχουμε τρεις καρφίτσες διευθύνσεων για την ενεργοποίηση ορισμένων άσχετων (ή σχετικών) αλγορίθμων, τους οποίους εφαρμόσαμε στη γλώσσα Verilog στο FPGA. Επίσης στο πρόγραμμα, εκτός από τρία σκέλη διευθύνσεων, έχουμε επίσης, για παράδειγμα, 20 σκέλη πληροφοριών, μέσω των οποίων φθάνει ένα σύνολο σημάτων εισόδου (για παράδειγμα, από διαφορετικούς αισθητήρες) με κάποιες πληροφορίες (για παράδειγμα, τη θερμοκρασία του νερό στο ενυδρείο από τον αισθητήρα θερμοκρασίας νερού στο ενυδρείο). 20 πόδια = 20 bit. 3 πόδια - 3 bit. Όταν φτάσει το σήμα διεύθυνσης 001 (από τρία σκέλη διεύθυνσης), εκκινούμε τον πρώτο αλγόριθμο, ο οποίος γράφει 20 σήματα πληροφοριών σε 20 κελιά μνήμης (20 σκανδαλισμοί), στη συνέχεια πολλαπλασιάζουμε τα επόμενα 20 σήματα με τα 20 που ελήφθησαν νωρίτερα και γράφουμε το αποτέλεσμα του πολλαπλασιασμού στη μνήμη και, στη συνέχεια, στείλτε τον κατά μήκος άλλων ποδιών, για παράδειγμα, στον θερμοστάτη νερού σε ένα ενυδρείο. Αλλά θα στείλουμε αυτό το αποτέλεσμα μόνο όταν ένας κωδικός, για παράδειγμα 011, φτάσει στα σκέλη της διεύθυνσής μας και ξεκινήσει τον αλγόριθμο ανάγνωσης και μετάδοσης. Λοιπόν, φυσικά "στέλνουμε", "διαβάζουμε" και γράφουμε κάτι άλλο χειροκίνητα. Ελέγχουμε κάθε σήμα σε κάθε βήμα της εργασίας FPGAσε ένα συγκεκριμένο μονοπάτι, δεν χάνουμε. Επεξεργασία ή εγγραφή. Προσθέστε ή πολλαπλασιάστε. Μην ξεχάσετε να το γράψετε. Μην ξεχάσετε να αποδεχτείτε το επόμενο σήμα και να το γράψετε σε άλλα ερεθίσματα. Προσθέστε επίσης εδώ την εργασία που συνδέεται με τη συχνότητα ρολογιού, τον συγχρονισμό (ο οποίος υλοποιείται επίσης με μη αυτόματο τρόπο), τα αναπόφευκτα σφάλματα στα στάδια ανάπτυξης και εντοπισμού σφαλμάτων και ένα σωρό άλλα προβλήματα που είναι απλά άσκοπο να εξετάσουμε σε αυτό το άρθρο. Είναι δύσκολο. Για πολύ καιρό. Αλλά η έξοδος λειτουργεί εξαιρετικά γρήγορα, χωρίς δυσλειτουργίες ή επιβραδύνσεις. Σίδερο!

Τώρα μικροελεγκτή. 20 πόδια για λήψη πληροφοριών - για τους περισσότερους μικροελεγκτέςένα σωματικά αδύνατο έργο. Αλλά 8 ή 16 - ναι παρακαλώ! 3 ενημερωτικά - εύκολα! Πρόγραμμα; Στη διεύθυνση 001, πολλαπλασιάστε τον πρώτο αριθμό που λάβατε με τον δεύτερο, στη διεύθυνση 011 στείλτε το αποτέλεσμα στον θερμοστάτη. Ολοι! Γρήγορα. Εύκολα. Όχι εξαιρετικό, αλλά αποτελεσματικό. Εάν γράψετε το πρόγραμμα πολύ σωστά, δεν θα υπάρξουν δυσλειτουργίες ή φρένα. Προγραμματικά!

Υλικό και πρόγραμμα! Αυτό είναι το κύριο πράγμα διαφορά μεταξύ FPGA και μικροελεγκτή.

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

Σύναψη

Οι σύγχρονοι προγραμματιστές επεξεργαστών και μικροεπεξεργαστών αναπτύσσουν αρχικά τις συσκευές τους FPGA. Ναι, ναι, σωστά μαντέψατε: πρώτα μιμούνται το δημιουργημένο αρχιτεκτονική μικροελεγκτήμέσω της ανάπτυξης και του υλικολογισμικού του προγράμματος στις FPGA, και στη συνέχεια μετρήστε την ταχύτητα εκτέλεσης των αλγορίθμων για μια συγκεκριμένη διάταξη προσομοιωμένων μπλοκ MC και ένα συγκεκριμένο σύνολο λειτουργιών για κάθε μπλοκ ξεχωριστά.

Σύμφωνα με τα χαρακτηριστικά του σήματος εξόδου, FPGAπιο συχνά σχεδιασμένο για 3,3V, 20mA, Μικροελεγκτήςστα 5V, 20mA.

Υπό μικροελεγκτήΤο AVR, που εφαρμόστηκε με επιτυχία στην πλατφόρμα Arduino, πολλά προγράμματα ανοιχτού κώδικα έχουν γραφτεί, μια μεγάλη ποικιλία gadgets έχουν αναπτυχθεί με τη μορφή αισθητήρων, κινητήρων, οθονών και ό,τι επιθυμεί η καρδιά σας! Το Arduino είναι πλέον περισσότερο σαν κιτ κατασκευής παιχνιδιών για παιδιά και ενήλικες. Ωστόσο, μην ξεχνάτε ότι ο πυρήνας αυτού του σχεδιαστή ελέγχει τα «έξυπνα σπίτια», τα σύγχρονα ηλεκτρονικά είδη ευρείας κατανάλωσης, τις συσκευές, τα αυτοκίνητα, τα αεροπλάνα, τα όπλα, ακόμη και τα διαστημόπλοια. Αναμφίβολα, ένα τέτοιο σετ κατασκευής θα είναι ένα από τα καλύτερα δώρα για κάθε εκπρόσωπο του ισχυρότερου μισού της ανθρωπότητας.

Κατ 'αρχήν, όλα είναι απλά!

Έχετε ακόμα ερωτήσεις; Γράψτε ένα σχόλιο. Θα απαντήσουμε και θα σας βοηθήσουμε να το καταλάβετε =)

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

Το 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, στην περίπτωσή μου επίσης αντίστροφη.

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

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

Βασικό στοιχείο λογικής

Είναι γνωστό από την άλγεβρα Boole ότι χρησιμοποιώντας μια συγκεκριμένη στοιχειακή βάση, για παράδειγμα ένα στοιχείο AND-NOT ή OR-NOT, μπορείτε να εφαρμόσετε οποιαδήποτε λογική συνάρτηση. Ωστόσο, η χρήση ενός μόνο τύπου στοιχείου δεν δικαιολογείται πάντα τεχνικά κατά τη σύνθεση σύνθετων συσκευών, ένας μεγάλος αριθμός στοιχείων θα αυξήσει τον χρόνο μετάδοσης του σήματος και ως εκ τούτου θα μειώσει την απόδοση. Ως εκ τούτου, στις δομές FPGA FPGA, μια πιο σύνθετη δομή χρησιμοποιείται ως το απλούστερο λογικό στοιχείο, η οποία είναι μια σύνδεση μιας προγραμματιζόμενης συνδυαστικής συσκευής και ενός D-trigger. Το σχήμα 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).
  • σύγχρονο σήμα φόρτωσης.

Τα σήματα σύγχρονου φορτίου και επαναφοράς χρησιμοποιούνται εύκολα για τη σύνθεση διαφόρων μετρητών και καταχωρητών. Αυτά τα σήματα επηρεάζουν όλους τους ενεργοποιητές 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

    Advanced Boards . Πρόκειται για πλακέτες στις οποίες είναι εγκατεστημένες πρόσθετες μονάδες (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.