Συστοιχία Επιτόπια Προγραμματιζόμενων Πυλών Field Programmable Gate Arrays (FPGAs) Οι προγραμματιζόμενες λογικές διατάξεις (PLDs Programmable Logic Devices) είναι ψηφιακά ολοκληρωμένα κυκλώματα (ICs) που μπορούν να διαμορφωθούν από τον χρήστη και χρησιμοποιούνται για την υλοποίηση λογικών συναρτήσεων. Τα PLDs μπορούν να πραγματοποιήσουν οποιαδήποτε Boolean έκφραση ή συνάρτηση χρησιμοποιώντας τις λογικές δομές που είναι ήδη υλοποιημένες. Σε αντίθεση, τα συνήθη ολοκληρωμένα κυκλώματα, παρέχουν μια συγκεκριμένη λογική συνάρτηση που δεν μπορεί να τροποποιηθεί έτσι ώστε να ικανοποιήσει συγκεκριμένη απαίτηση σε κάποιο σχεδιασμό. Τα τελευταία χρόνια, τα PLDs αποτελούν την περισσότερο προτιμώμενη διάταξη στις εφαρμογές, καθώς το κόστος τους έχει μειωθεί σημαντικά με τη χρήση νέων τεχνολογιών. Τα PLDs προσφέρονται σε διάφορες αρχιτεκτονικές και με ένα μεγάλο πλήθος από τεχνολογίες μνημών για τον προγραμματισμό τους. Μία από τις σημαντικότερες κατηγορίες PLDs είναι τα FPGAs (Field Programmable Gate Arrays) [1]. Τα FPGAs είναι ψηφιακά ολοκληρωμένα κυκλώματα τα οποία περιέχουν προγραμματιζόμενα μπλοκ ψηφιακής λογικής [2]. Αυτά τα μπλοκ συνδέονται μεταξύ τους με την βοήθεια προγραμματιζόμενων διασυνδέσεων. Στο σχήμα 1 φαίνεται η κάτοψη μίας γενικής αρχιτεκτονικής FPGA. Σχ. 1. Γενική αρχιτεκτονική FPGA. Η διάταξη των προγραμματιζόμενων λογικών μπλοκ έχει κανονική μορφή, όμοια με αυτήν ενός διδιάστατου πίνακα. Σε ένα κανάλι διασύνδεσης υπάρχει ένας αριθμός αγωγών διασύνδεσης. Οι αγωγοί διασύνδεσης διατρέχουν οριζόντια και κάθετα το ολοκληρωμένο, διασυνδέοντας μέσω των προγραμματιζόμενων διασυνδέσεων, τα προγραμματιζόμενα λογικά μπλοκ. Με αυτόν τον τρόπο γίνεται δυνατή η υλοποίηση πολυεπίπεδων λογικών συναρτήσεων. Τα μπλοκ εισόδων/εξόδων, τα οποία σχετίζονται με τους ακροδέκτες εισόδου/εξόδου του ολοκληρωμένου, συνδέονται με τα προγραμματιζόμενα λογικά μπλοκ με αγωγούς διασύνδεσης, μέσω προγραμματιζόμενων διασυνδέσεων. Το τμήμα Field Programmable της ονομασίας τους αναφέρεται στο ότι αυτά τα ολοκληρωμένα προγραμματίζονται στο πεδίο εφαρμογής τους. Οι εταιρείες κατασκευής των FPGAs υλοποιούν τα ολοκληρωμένα έτσι ώστε να έχουν την ιδιότητα να προγραμματίζονται (προγραμματιζόμενα λογικά μπλοκ, προγραμματιζόμενες διασυνδέσεις κ.λπ.) από τον τελικό χρήστη. Η λειτουργία που θα επιτελείται από το ολοκληρωμένο καθορίζεται από τον τελικό χρήστη, ο οποίος επιλέγει τις λογικές συναρτήσεις που θα υλοποιούν τα προγραμματιζόμενα λογικά μπλοκ, τις μεταξύ τους
διασυνδέσεις και τις διασυνδέσεις των μπλοκ εισόδων/εξόδων με τα προγραμματιζόμενα λογικά μπλοκ. Η επιλογή αυτή λέγεται προγραμματισμός του FPGA και γίνεται με τη βοήθεια λογισμικού και υλικού που παρέχουν οι εταιρείες κατασκευής των FPGAs. Ο προγραμματισμός των λογικών μπλοκ αποσκοπεί στο να τα κάνει να εκτελούν τις λειτουργίες κάποιων βασικών λογικών πυλών, όπως της AND, της XOR ή και κάποιων ακόμη πιο σύνθετων συνδυαστικών συναρτήσεων, όπως αποκωδικοποιητές ή μαθηματικές συναρτήσεις. Οι πυκνότητες των λογικών πυλών στα FPGA κυμαίνονται από μερικές χιλιάδες έως μερικά εκατομμύρια λογικές πύλες. Στα περισσότερα FPGAs, τα λογικά μπλοκ περιλαμβάνουν επίσης τα στοιχεία μνήμης, τα οποία μπορούν να είναι απλά flip-flops ή πιο ολοκληρωμένα μπλοκ μνήμης. Στα πλεονεκτήματα τους περιλαμβάνονται ο μικρότερος χρόνος παραγωγής τους, η ικανότητα τους να μπορούν να αναπρογραμματίζονται, έτσι ώστε να διορθώνονται τα διάφορα σφάλματα και το μικρότερο κόστος παραγωγής [3]. Η ύπαρξη των FPGAs οφείλεται στο κενό που παρατηρήθηκε ότι υπάρχει στο φάσμα των ψηφιακών ολοκληρωμένων κυκλωμάτων στις αρχές της δεκαετίας του '90. Από την μία πλευρά υπήρχαν τα PLDs (Programmable Logic Devices), τα οποία ήταν σε πολύ μεγάλο βαθμό προγραμματιζόμενα και απαιτούσαν πολύ μικρούς χρόνους σχεδίασης (όσον αφορά την διαδικασία σχεδίαση προγραμματισμός έλεγχος διορθώσεις επαναπρογραμματισμός) αλλά αδυνατούσαν να υλοποιήσουν πολύ μεγάλες ή και πολύπλοκες λογικές συναρτήσεις. Από την άλλη πλευρά ήταν τα ASICs (Application-Specific Integrated Circuits), τα οποία μπορούσαν να υλοποιήσουν πολύ μεγάλες και πολύπλοκες λογικές συναρτήσεις αλλά ο χρόνος και το κόστος σχεδίασής τους ήταν εξαιρετικά μεγάλα. Επίσης στα ASICs η τελική σχεδίαση είναι παγωμένη στο πυρίτιο, δηλ. κατασκευάζονται άπαξ για μια συγκεκριμένη εφαρμογή και δεν υπάρχει στο εξής δυνατότητα αλλαγής της λειτουργικότητάς τους. Για να καλυφθεί αυτό το κενό στο φάσμα των ψηφιακών ολοκληρωμένων κυκλωμάτων η εταιρεία Xilinx ανέπτυξε μία νέα κατηγορία ψηφιακών ολοκληρωμένων κυκλωμάτων, τα FPGAs, τα οποία πρωτοεμφανίστηκαν στην αγορά το 1984. Ένα FPGA μπορεί να προγραμματιστεί απεριόριστες φορές και συνεπώς να αλλάζει λειτουργικότητα ανάλογα με τις εκάστοτε απαιτήσεις του χρήστη. Επιπλέον, ο προγραμματισμός ενός FPGA γίνεται σε επίπεδο ψηφιακών εξαρτημάτων και λογικών πυλών, δηλαδή ο προγραμματιστής μπορεί να διαχειρίζεται μέσω προγράμματος απευθείας το υλικό του ολοκληρωμένου κυκλώματος. Έτσι, τα κύρια συγκριτικά πλεονεκτήματα των FPGA έναντι των κυκλωμάτων ASIC και των μικροεπεξεργαστών είναι η ευελιξία τους και η ταχύτητά τους, αντίστοιχα [4]. Σχ. 2. Τυπική αρχιτεκτονική FPGA της Xilinx. 2
Τυπική εσωτερική δομή FPGA της Xilinx [4] Τα FPGA αποτελούνται από έναν αριθμό λογικών μπλοκ και από ένα πλήθος διασυνδέσεων μεταξύ των μπλοκ. Τόσο τα λογικά μπλοκ όσο και οι διασυνδέσεις είναι προγραμματιζόμενα. Έτσι, κάθε λογικό μπλοκ μπορεί να προγραμματιστεί ώστε να εκτελεί μια συγκεκριμένη λειτουργία και πολλά λογικά μπλοκ μπορούν να διασυνδεθούν μεταξύ τους για να διαμορφωθεί το τελικό κύκλωμα. Αν και υπάρχουν πολλές διαφορετικές αρχιτεκτονικές στα FPGA, η επικρατέστερη είναι αυτή που φαίνεται στο σχήμα 2. Αυτή η αρχιτεκτονική χρησιμοποιείται και στα FPGA της εταιρείας Xilinx. Όπως φαίνεται παραστατικά στο σχήμα 2, το FPGA έχει τη μορφή ενός δισδιάστατου πίνακα λογικών μπλοκ, τα οποία συνδέονται μεταξύ τους μέσω ενός πλέγματος διασυνδέσεων. Ο προγραμματισμός του FPGA καθορίζει τη λογική συμπεριφορά των μπλοκ και τις συνδέσεις που υφίστανται μεταξύ τους. Το βασικότερο και πολυπληθέστερο μπλοκ ενός FPGA ονομάζεται CLB (Configurable Logic Block) και μπορεί να υλοποιήσει ασύγχρονες ή σύγχρονες λογικές συναρτήσεις πολλών εισόδων, μνήμες RAM ή ROM, αθροιστές, shift registers, κλπ. Τα πρώτα FPGA αποτελούνταν ως επί το πλείστον από CLB. Σήμερα όμως, οι κατασκευαστές των FPGA ενσωματώνουν και πολλά άλλα λογικά μπλοκ στα προϊόντα τους, τα οποία εκτελούν εξειδικευμένες λειτουργίες, όπως μνήμες RAM, γρήγορους πολλαπλασιαστές, γεννήτριες σημάτων χρονισμού, ακόμα και πλήρεις μικροεπεξεργαστές. Το πλέγμα των διασυνδέσεων περιέχει διασυνδέσεις γενικής χρήσης, οι οποίες ενώνουν οποιαδήποτε λογικά μπλοκ μεταξύ τους, όπως επίσης και διασυνδέσεις εξειδικευμένης λειτουργικότητας. Πχ. στις οικογένειες FPGA της Xilinx υπάρχουν ειδικοί δίαυλοι για τη μεταφορά των σημάτων χρονισμού προς όλες τις περιοχές του FPGA, αποκλειστικές διασυνδέσεις υψηλής ταχύτητας μεταξύ γειτονικών μπλοκ μνήμης SRAM, κλπ. Η επικοινωνία του FPGA με τον εξωτερικό κόσμο γίνεται συνήθως μέσω ειδικών μπλοκ εισόδου-εξόδου (Input Output Blocks - IOB). Τα σύγχρονα FPGA διαθέτουν εκατοντάδες θύρες I/O και υποστηρίζουν πολλά διαφορετικά πρότυπα επικοινωνίας. Τεχνολογίες προγραμματισμού του υλικού [4] Οι επικρατέστερες τεχνολογίες προγραμματισμού των FPGA είναι οι παρακάτω: 1) Μέσω κελιών SRAM Ο προγραμματισμός κάθε σύνδεσης γίνεται αποθηκεύοντας ένα bit σε ένα κελί SRAM. Το bit αυτό οδηγεί ένα τρανζίστορ διασύνδεσης σε κατάσταση αγωγιμότητας ή αποκοπής, ενεργοποιώντας ή απενεργοποιώντας αντίστοιχα τη σύνδεση. Ο προγραμματισμός χάνεται μετά από κάθε απώλεια ισχύος, συνεπώς η τεχνική αυτή απαιτεί τη χρήση εξωτερικής μνήμης για την αποθήκευση του bitstream προγραμματισμού. 2) Fuse-antifuse Η μέθοδος αυτή χρησιμοποιεί υψηλή τάση για να μεταβάλλει την αντίσταση των συνδέσεων. Η αντίσταση κάθε σύνδεσης ρυθμίζεται να είναι είτε της τάξης των μερικών GOhms (πρακτικά ανοιχτό κύκλωμα) είτε της τάξης των μερικών Ohms (πρακτικά βραχυκύκλωμα). Το μειονέκτημα αυτής της μεθόδου είναι ότι ο προγραμματισμός είναι μόνιμος και το FPGA δεν μπορεί να επαναχρησιμοποιηθεί. 3) PROM EPROM EEPROM Flash Αυτή η μέθοδος χρησιμοποιεί τις ίδιες τεχνικές προγραμματισμού με τις τεχνολογίες των μνημών PROM EPROM EEPROM Flash και μπορεί να θεωρηθεί ότι βρίσκεται στο μέσο των δύο προηγούμενων τεχνικών. Παρέχει τόσο την ευστάθεια της fuse-antifuse όσο και την ικανότητα επανεγγραφής της SRAM. Από την άλλη, η αντίσταση των διακοπτών δρομολόγησης είναι μεγαλύτερη από αυτήν της fuse-antifuse, ενώ ο προγραμματισμός είναι πιο πολύπλοκος και χρονοβόρος από ότι αυτός της τεχνικής SRAM. 3
Τεχνολογία βασισμένη σε SRAM στοιχεία [2] Το SRAM-στοιχείο μνήμης, το οποίο χρησιμοποιείται ως δομικό στοιχείο των μνημών SRAM, φαίνεται στο σχήμα 3. Αυτό το στοιχείο μνήμης μπορεί να αποθηκεύσει πληροφορία του ενός bit. Για να εισαχθεί πληροφορία στο SRAM-στοιχείο μνήμης θα πρέπει να ενεργοποιηθεί η γραμμή Word line για ένα ορισμένο χρονικό διάστημα, τέτοιο ώστε η τιμή που βρίσκεται στη γραμμή Bit line να προλάβει να διαδοθεί μέσω των δύο αντιστροφέων που ορίζουν τον βρόχο. Η αποθηκευμένη τιμή θα παραμείνει στον βρόχο για πάντα, δεδομένου της αδιάλειπτης τροφοδοσίας, εκτός και εάν αντικατασταθεί από μία νέα τιμή, η οποία θα εισαχθεί στον βρόχο των δύο αντιστροφέων με τον τρόπο που περιγράφηκε παραπάνω. Όταν η τροφοδοσία διακοπεί, η τιμή του SRAM-στοιχείου μνήμης χάνεται. Σχ. 3. Ένα SRAM-στοιχείο μνήμης και η (ισοδύναμη) υλοποίηση με τρανζίστορ. Ένα SRAM-στοιχείο διασύνδεσης (pass-transistor switch ή SRAM switch) αποτελείται από ένα SRAM-στοιχείο μνήμης και ένα τρανζίστορ (pass-transistor). Η τιμή που αποθηκεύεται στο SRAM-στοιχείο μνήμης οδηγεί την πύλη του pass-transistor. Έτσι αναλόγως της τιμής που έχει αποθηκευτεί στο SRAM-στοιχείο μνήμης το pass-transistor λειτουργεί ως ανοικτός ή κλειστός διακόπτης. Στο σχήμα 4 φαίνεται ένα SRAM-στοιχείο διασύνδεσης. Γενικά η χρήση της τεχνολογίας SRAM έχει κάποια μειονεκτήματα και κάποια πλεονεκτήματα. Το SRAM-στοιχείο διασύνδεσης καταλαμβάνει μεγάλο χώρο στην επιφάνεια του ολοκληρωμένου γιατί αποτελείται από 6 τρανζίστορ (5 για το SRAM-στοιχείο μνήμης και 1 για pass-transistor). Σχ. 4. Ένα SRAM-στοιχείο διασύνδεσης (SRAM switch). Τα SRAM-στοιχεία μνήμης μπορούν όμως να χρησιμοποιηθούν ως latches, flip-flop ή ακόμα και ως μνήμη κατανεμημένη μέσα στο ολοκληρωμένο. Επειδή τα περιεχόμενα των SRAM-στοιχείων μνήμης χάνονται όταν διακοπεί η τροφοδοσία, το FPGA θα πρέπει να προγραμματίζεται κάθε φορά που του παρέχεται τροφοδοσία. Βέβαια, με την βοήθεια μίας εξωτερικής μνήμης EΕPROM ή FLASH, η οποία κρατάει μόνιμα το επιθυμητό πρόγραμμα, η διαδικασία προγραμματισμού του FPGA (αφού προγραμματιστεί η εξωτερική μνήμη) διαρκεί περίπου 1 με 2 δευτερόλεπτα, δίνοντας την αίσθηση ότι το FPGA είναι μόνιμα προγραμματισμένο. Γενικά ένα SRAM-based FPGA μπορεί να προγραμματίζεται σχετικά γρήγορα και επαναλαμβανόμενα, γεγονός που το 4
καθιστά ελκυστικό για την σχεδίαση νέων εφαρμογών, όπου απαιτούνται επαναλαμβανόμενες δοκιμές και διορθώσεις. Ανάπτυξη εφαρμογών στα FPGA [3] Η ανάπτυξη εφαρμογών για τα FPGA γίνεται συνήθως με τη χρήση ειδικών γλωσσών προγραμματισμού, που ονομάζονται Hardware Description Languages (HDL). Mέσω αυτών, ο προγραμματιστής μπορεί να χειριστεί ψηφιακά εξαρτήματα και σήματα. Οι πιο γνωστές γλώσσες είναι οι VHDL και Verilog. Τα τελευταία χρόνια πάντως, εκτός από τις γλώσσες HDL έχουν αναπτυχθεί σχηματικοί συντάκτες και εργαλεία προγραμματισμού υψηλού επιπέδου, τα οποία διευκολύνουν σε μεγάλο βαθμό το έργο των προγραμματιστών. Παράλληλα, διάφορες εταιρείες έχουν αναπτύξει δομές σε γλώσσες HDL, οι οποίες υλοποιούν με βέλτιστο τρόπο πολύπλοκα ψηφιακά κυκλώματα. Αυτές οι δομές λέγονται IP-cores (Intellectual Property Cores) και μπορούν να χρησιμοποιηθούν για τη μείωση του χρόνου ανάπτυξης και του ρίσκου μιας εφαρμογής καθώς και την αύξηση της απόδοσης. Εφαρμογές [3] Οι εφαρμογές των FPGAs περιλαμβάνουν ψηφιακή επεξεργασία σήματος, διαστημικές εφαρμογές και συστήματα άμυνας, αναγνώριση φωνής, κρυπτογραφία, βίο -πληροφορική, και ένα σύνολο άλλων αναπτυσσόμενων εφαρμογών. Τα FPGAs αρχικά ξεκίνησαν σαν ανταγωνιστές των PLDs. Καθώς το μέγεθος τους, η δυνατότητες και η ταχύτητα τους αυξάνονται, άρχισαν να υλοποιούν όλο και μεγαλύτερες συναρτήσεις στο επίπεδο που κάποιες να έχουν εξελιχτεί σε πλήρη συστήματα on chip (SOC). Τα FPGA βρίσκουν επίσης εφαρμογές σε περιοχές που χρησιμοποιούν μαζικό παραλληλισμό, πράγμα που προσφέρεται από την αρχιτεκτονική τους. Μια τέτοια περιοχή είναι η κρυπτανάλυση, και συγκεκριμένα η μέθοδος επίθεσης με υπολογιστική ισχύ (brute force attack) σε κρυπτογραφημένα μηνύματα. Τα FPGA έχουν αρχίσει να χρησιμοποιούνται κατά κόρον σε εφαρμογές υψηλής επίδοσης υπολογισμών, όπως Ταχύ Μετασχηματισμό Fourier (FFT) ή συνελίξεις που πραγματοποιούνται από FPGA αντί των μικροεπεξεργαστών. Η ευελιξία των FPGA δίνει την δυνατότητα για ακόμη μεγαλύτερη απόδοση, αλλάζοντας την ακρίβεια και το εύρος για έναν αυξανόμενο αριθμό παράλληλων αριθμητικών μονάδων. Αυτό έχει οδηγήσει σε έναν νέο τύπο επεξεργασίας, που ονομάζεται αναδιαμορφωμένος υπολογισμός (reconfigurable computing). Μια νέα τάση είναι ο συνδυασμός των λογικών μπλοκ και των διασυνδέσεων των παραδοσιακών FPGAs με ένθετους μικροεπεξεργαστές και περιφερειακά, για την διαμόρφωση ενός πλήρους "συστήματος σε προγραμματιζόμενο chip". Παραδείγματα αυτών των υβριδικών τεχνολογιών μπορούν να βρεθούν στις διατάξεις της Xilinx Virtex - Il Pro και Virtex - 4, που περιλαμβάνουν έναν ή περισσότερους PowerPC επεξεργαστές ένθετους στη λογική του FPGA. FPGA Εργαστηρίου Ηλεκτρονικής ΣΝ Το Εργαστήριο Ηλεκτρονικής της ΣΝ διαθέτει ένα FPGA Spartan 3A της εταιρείας Xilinx. Προτείνεται ως διπλωματική εργασία ο προγραμματισμός του για την υλοποίηση απλών ψηφιακών πυλών ή ψηφιακών κυκλωμάτων (λ.χ. καταχωρητών, πολυπλεκτών, αποκωδικοποιητών, κλπ). Στο παρακάτω σχήμα δίνεται η βασική του δομή. 5
Σχ. 5. Βασική δομή FPGA Xilinx Spartan 3A. Aναφορές [1] Εργαστήριο Ηλεκτρονικών Εφαρμογών, Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών του Πανεπιστημίου Πατρών. [2] «Yλοποίηση μικροεπεξεργαστή σε περιβάλλον FPGA», ιπλωματική Εργασία Παναγιώτη Μουσουλιώτη, Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΑΠΘ, Νοέμβριος 2011. [3] «Yλοποίηση αλγορίθμου ανίχνευσης δασικής πυρκαγιάς με χρήση οπτικής κάμερας σε κύκλωμα FPGA», ιπλωματική Εργασία Νικόλαου Σισμάνη, Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΑΠΘ, 2009. [4] «Ανάλυση του προτύπου κωδικοποίησης ομιλίας LPC-10e και υλοποίηση σε προγραμματιζόμενο κύκλωμα FPGA της οικογένειας Xilinx Virtex-4», ιπλωματική Εργασία Bασίλειου Μηλιόπουλου, Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΑΠΘ, Οκτώβριος 2010. 6