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

Το FPGA σημαίνει Field Programmable Gate Array (Πίνακας Προγραμματιζόμενων Πυλών Πεδίου ). Πρόκειται για ψηφιακές συσκευές ή τσιπ που μπορούν να διαμορφωθούν ώστε να υλοποιούν σχεδόν οτιδήποτε. Με άλλα λόγια, είναι ένα κενό τσιπ στο οποίο μπορείτε να "γράψετε". Αυτό σημαίνει ότι μπορείτε να υλοποιήσετε μια CPU, μνήμη, έναν ελεγκτή, οποιαδήποτε λογική κ.λπ., επιτυγχάνοντας πολύ γρήγορη λειτουργία και όλα τα πλεονεκτήματα της ενσωμάτωσής της σε ένα τσιπ αντί της χρήσης ξεχωριστών ηλεκτρονικών εξαρτημάτων.
Ο Ross Freeman και ο Bernard Vonderschmitt, συνιδρυτές της Xilinx, ήταν αυτοί που εφευρέθηκαν το FPGA το 1984. Το έκαναν ως μια εξέλιξη στις μάρκες CPLD εκείνης της εποχής. Οι προγραμματιζόμενες μάρκες CPLD είχαν ελλείψεις που επιλύθηκαν νέα σχέδια FPGA και έκτοτε εξελίχθηκαν.
Η αγορά FPGA είναι τόσο επικερδής που εταιρείες όπως η Intel, η Xilinx, η Altera, η Quick Logic, η Lattice και άλλες έχουν επενδύσει σημαντικά στην ανάπτυξη καλύτερων FPGA και ολοκληρωμένων περιβαλλόντων ανάπτυξης (IDE) για αυτές. Αυτό παρέχει εξαιρετικές πλατφόρμες για τη διευκόλυνση του έργου των προγραμματιστών και των κατασκευαστών.
Αυτοί οι κατασκευαστές παρέχουν πλέον όχι μόνο ένα προγραμματιζόμενο τσιπ, αλλά και πολλά βοηθητικά εξαρτήματα για να προσφέρουν στους προγραμματιστές περισσότερες δυνατότητες. Για παράδειγμα, περιλαμβάνουν κυψέλες μνήμης flash, κυψέλες μνήμης SDRAM και ούτω καθεξής.
Σε τι χρησιμεύουν;

Επομένως, ένα FPGA μπορεί να είναι παρόμοιο με ένα ASIC, αλλά μπορούμε να επιλέξουμε τι θα είναι. Για παράδειγμα, θα μπορούσαμε να δημιουργήσουμε κώδικα για να το προγραμματίσουμε και να το μετατρέψουμε σε CPU, GPU, αθροιστή, ελεγκτή μνήμης ή οποιοδήποτε άλλο λογικό κύκλωμα που υλοποιείται σε ένα μόνο τσιπ.
Οι δυνατότητες είναι αρκετά ατελείωτες. Στην πραγματικότητα, σας προτείνω να επισκεφθείτε τον ιστότοπο opencores.org, ένας ιστότοπος αφιερωμένος στην προσφορά πληθώρας έργων hardware libre. Θα βρείτε κωδικούς σε VHDL, Verligo, κ.λπ., για RAM, CPU, GPU, ελεγκτές, ALUs, FPUs, αποκωδικοποιητές και ένα μακρύ κλπ..
Πώς προγραμματίζεται;

Για να προγραμματίσετε ένα FPGA, μπορείτε να χρησιμοποιήσετε το λειτουργικό σύστημα που προτιμάτε, όπως GNU/Linux, Windows ή macOS, αν και σίγουρα υπάρχουν περισσότερα περιβάλλοντα ανάπτυξης διαθέσιμα για Windows. Γενικά, οι εταιρείες που κατασκευάζουν το FPGA προσφέρουν ένα ολοκληρωμένο IDE (Ολοκληρωμένο Περιβάλλον Ανάπτυξης) που παρέχει όλα τα απαραίτητα εργαλεία σε μια ενιαία σουίτα λογισμικού.
Θα χρειαστείτε επίσης το τσιπ ή την πλακέτα FPGA και το απαραίτητο καλώδιο ή προγραμματιστή για να συνδέσετε το FPGA στον υπολογιστή σας, ώστε να μεταφέρετε τον κώδικα που έχετε γράψει στο FPGA και να τον προγραμματίσετε. Αυτό είναι παρόμοιο με αυτό που κάνετε με μια πλακέτα Arduino, φορτώνοντας το πρόγραμμα Arduino IDE στην προγραμματιζόμενη μνήμη του μικροελεγκτή.
Ωστόσο, στην περίπτωση ενός FPGA, αυτό που έχουμε είναι μια σειρά από στοιχειώδη στοιχεία όπως κελιά μνήμης, πύλες AND, OR και NOT, flip-flops και άλλα βασικά στοιχεία ή μπλοκ ψηφιακών ηλεκτρονικών που μπορούμε να χρησιμοποιήσουμε. Με το γραπτό πρόγραμμα, θα υπαγορεύσουμε πώς αυτά τα απαραίτητα μπλοκ θα ομαδοποιηθούν για να σχηματίσουν το επιθυμητό κύκλωμα, όπως μια ALU.
Με άλλα λόγια, αν προγραμματίσουμε έναν αθροιστή στο IDE μας, τα απαραίτητα μπλοκ για την υλοποίηση αυτού του αθροιστή θα συνδεθούν σωστά μέσα στο FPGA, έτσι ώστε το τσιπ να λειτουργεί ως αθροιστής. Απλό, σωστά; Γενικά, χρησιμοποιούνται διάφορες μέθοδοι για αυτόν τον προγραμματισμό σε φυσικό επίπεδο, όπως η μνήμη ή οι ασφάλειες για τη δημιουργία μιας μόνιμης σύνδεσης.
Η ταχύτητα με την οποία λειτουργούν θα εξαρτηθεί από τη συχνότητα ρολογιού του FPGA που αγοράσαμε. Για παράδειγμα, τα πιο βασικά λειτουργούν συνήθως στα 50 MHz, ενώ άλλα θα λειτουργούν σε πολύ υψηλότερες συχνότητες. Στην περίπτωση του FPGA στα 50 MHz, αυτό σημαίνει ότι θα λειτουργεί με ρυθμό 50.000.000 φορές ανά δευτερόλεπτο. Αν συνεχίσουμε με τον αθροιστή που χρησιμοποίησα ως παράδειγμα, θα είναι σε θέση να εκτελέσει αυτόν τον αριθμό προσθέσεων σε ένα δευτερόλεπτο...
Συνεχίζοντας με το θέμα του προγραμματισμού , αφού καταλάβουμε ότι μπορούμε να γράψουμε κώδικα όπως θα κάναμε στο Arduino IDE ή να αναπτύξουμε οποιοδήποτε άλλο πρόγραμμα, και αφού δούμε πώς γίνεται σε επίπεδο υλικού, θα έλεγα ότι δεν πρόκειται πραγματικά για προγραμματισμό καθαυτόν. Αντίθετα, είναι μια περιγραφή υλικού. Στην πραγματικότητα, χρησιμοποιούνται γλώσσες περιγραφής υλικού όπως VHDL, Verilog, κ.λπ.
Αυτό το πρόγραμμα περιγράφει, σε λογικό επίπεδο, τι κάνει το κύκλωμα που θέλουμε να υλοποιήσουμε. Στη συνέχεια, μεταφέρεται στο FPGA. Αν και είναι αλήθεια ότι ορισμένες πλατφόρμες επιτρέπουν τον προγραμματισμό σε γλώσσες όπως η C για την υλοποίηση μιας CPU στο FPGA και στη συνέχεια τη δημιουργία προγραμμάτων για φόρτωση στη μνήμη και επεξεργασία από αυτόν τον επεξεργαστή.
Ενσωμάτωση με το Arduino

Τα FPGA συνήθως χρησιμοποιούνται ξεχωριστά, αλλά υπάρχουν πολλά εργαλεία και κιτ στην αγορά που θα διευκολύνουν την ενσωμάτωση του FPGA σας με την πλατφόρμα Arduino . Ένα παράδειγμα μητρικής για την ενσωμάτωση ενός FPGA στα έργα Arduino σας είναι η MKR Vidor 4000, αν και υπάρχουν και άλλες.
Το MKR Vidor 4000 είναι μια μητρική με τρία τσιπ. Ένα από αυτά είναι ένα FPGA, συγκεκριμένα ένα Intel Cyclone 10. Υπάρχουν επίσης και άλλα τσιπ για συνδεσιμότητα Bluetooth LE (χαμηλής κατανάλωσης) και συμβατότητα Wi-Fi. Είναι μια εξαιρετική προσθήκη στο Arduino σας, παρέχοντας δυνατότητες συνδεσιμότητας και επιτρέποντάς σας να εφαρμόσετε ό,τι χρειάζεστε στο FPGA.
Αυτό σας προσφέρει προσαρμόσιμο υλικό , το οποίο έχετε διαμορφώσει για οποιονδήποτε σκοπό θέλετε. Αυτό προσφέρει ατελείωτες δυνατότητες.