Σύνθεση VHDL σχεδιάσεων σε FPGA's
Χρήση του Leonardo για VHDL σύνθεση
VHDL σύνθεση σε Actel FPGA με SDF backannotation
Σύνθεση απλών VHDL σχεδιάσεων για έκθεση στο DA
Χρήση του Leonardo για VHDL σύνθεση
Σε αυτό το tutorial θα δούμε πώς να χρησιμοποιούμε τον εργαλείο Exemplar Leonardo για να συνθέτουμε τις VHDL σχεδιάσεις σε FPGA. Υποθέτουμε ότι είναι γνωστό το να γράφουμε VHDL κώδικα. Στο παράδειγμα που ακολουθεί θα δούμε την σύνθεση μιας απλής σχεδίασης ALU.
Πρώτα σιγουρευόμαστε ότι τα εργαλεία της Mentor είναι στο δικό μας path.
Τώρα αλλάζουμε directory και πάμε στο directory όπου βρίσκεται ο VHDL κώδικας. Πληκτρολογούμε leonardo& για να ξεκινήσει το Leonardo synthesis tool σε αυτό το directory. Η οθόνη λειτουργίας του Leonardo θα μοιάζει όπως φαίνεται στην εικόνα 1
( εικόνα 1 )
Η μπάρα του μενού μας επιτρέπει να εκτελούμε εντολές ή μπορούμε να πληκτρολογούμε εντολές μέσα στο παράθυρο. Τα κουμπιά κάτω από την μπάρα του μενού εκτελούν μερικές κοινές εντολές επίσης .
Κάνουμε κλικ στο κουμπί Flow Guide… . Θα μας προτρέψει να επιλέξουμε τεχνολογία στόχο (target technology). Επιλέγουμε Actel Act1. Αυτό θα εμφανίσει το παρακάτω παράθυρο :
( εικόνα 2)
Αυτό το παράθυρο θα μας οδηγήσει βηματικά στην σύνθεση της σχεδίασής μας.
Αρχίζουμε με το πρώτο βήμα: Load Library. Κάνουμε κλικ στο κουμπί και σιγουρευόμαστε ότι το Actel Act1 είναι φωτισμένο στο dialog box. Αυτό θα φορτώσει το σωστή βιβλιοθήκη τεχνολογίας για Actel Act1 εξαρτήματα.
Τώρα κάνουμε κλικ στο κουμπί Load Modgen και σιγουρευόμαστε πάλι ότι το Actel Act1 είναι φωτισμένο στο dialog box. Αυτό θα φορτώσει το σωστό module generator για τις Act1 σχεδιάσεις.
Ο Leonardo χρησιμοποιεί την έννοια του module generator για να δημιουργήσει ανεξαρτησία συσκευής (device independence). Για παράδειγμα, αν θέλουμε να φτιάξουμε έναν αθροιστή, σε κάποιες τεχνολογίες υπάρχουν πράγματα όπως fast carry bits. Το module generator για τον αθροιστή, σε αυτές τις τεχνολογίες θα συμπεριλάβει φυσικές μακροεντολές (physical macros) για να επωφεληθεί αυτού του χαρακτηριστικού. Εμείς δεν χρειάζεται να γνωρίζουμε τίποτα για να χρησιμοποιήσουμε αυτά τα χαρακτηριστικά. Χρειάζεται μόνο να επιλέξουμε το σωστό module generator για την δικιά μας target technology.
Τώρα κάνουμε κλικ στο κουμπί Read . Θα εμφανισθεί ένα dialog box σαν αυτό:
( εικόνα 3)
Για να συνθέσουμε ένα μονό αρχείο VHDL, κάνουμε κλικ στο κουμπί που μοιάζει folder στο δεξί μέρος του Filename: . Τότε μπορούμε να επιλέξουμε το αρχείο μας από μία λίστα.
Αν κάνουμε compile μία σειρά από VHDL αρχεία σε ένα project, τότε πρέπει να χρησιμοποιήσουμε το κουμπί list που είναι δεξιά του κουμπιού folder. Αυτό μας αφήνει να διαλέξουμε μία λίστα από αρχεία στο project. Αυτά γίνονται compile από την αρχή της αυτής της λίστας προς το τέλος. Έτσι αν αναφερθούμε σε ένα συγκεκριμένο μοντέλο σε ένα άλλο VHDL αρχείο, πρέπει πρώτα να κάνουμε compile το αναφερόμενο μοντέλο. Μπορούμε να οργανώσουμε πάλι την λίστα με το κουμπί Move στο dialog box.
Στο Read dialog box επιλέγουμε VHDL στη γραμμή Format για να ωθήσουμε (force) τη VHDL mode. Με αυτόν τον τρόπο δεν μας ενδιαφέρει τι επεκτάσεις αρχείων χρησιμοποιήσαμε ή δεν χρησιμοποιήσαμε για τα ονόματα των αρχείων.
Τώρα πιέζουμε το κουμπί Read για να διαβάσουμε, compile και συνθέσουμε τις σχεδιάσεις.
Μπορεί να πάρουμε διάφορες προειδοποιήσεις σε αυτό το σημείο. Τις διαβάζουμε προσεχτικά και διορθώνουμε προβλήματα που τυχόν υπάρχουν. Μία προειδοποίηση μπορεί να μην είναι σοβαρή. Για παράδειγμα κάτι σαν :
“syn_arit.vhd”, line 419: Warning, variable z is never assigned a value
δεν είναι ένα πρόβλημα. Αν πάρουμε προειδοποιήσεις για lathces ή για προβλήματα cycle/loop, πρέπει να τα διορθώσουμε. Αλλιώς συνεχίζουμε.
Αφού η σχεδίαση διαβασθεί και συνθετιθεί πρέπει να την στοχεύσουμε (target) στην τεχνολογία στόχο (target technology). Το πρώτο βήμα είναι να τρέξουμε το bubble tristate script το οποίο θα καθαρίσει τα πράγματα και θα κάνει το βήμα βελτιστοποίησης (optimization) πιο εύκολο. Αυτό το κάνουμε τώρα, πατώντας το κουμπί Bubble Tristates.
Τώρα είναι καιρός να βελτιώσουμε (optimize) την σχεδίαση. Πατάμε το πλήκτρο Optimize για να εμφανισθεί το Optimize dialog box:
( εικόνα 4)
Πριν να κάνουμε την βελτίωση, πρέπει να κλείσουμε την εσωτερική tri-state generation. Αυτό γίνεται πατώντας το κουμπί Advanced… και κάνοντας κλικ στην επιλογή Allow converting internal tri-states και μετά πατώντας το κουμπί Set. Αυτό επιτρέπει να βελτιστοποιηθούν τα εσωτερικά tri-states.
Τώρα η μόνη λογική επιλογή που έχουμε να κάνουμε είναι το πόσο προσπάθεια (effort) ο βελτιωτής (optimizer) πρέπει να κάνει. Επιλέγουμε Quick αν θέλουμε ένα γρήγορο μέτρημα πυλών (count gate). Επιλέγουμε Standard αν θέλουμε να δοκιμάσει να βρει την καλύτερη λύση. Η Quick τρέχει γρηγορότερα από την Standard mode. Συχνά όμως, δεν παίρνουμε καλύτερα αποτελέσματα στην Standard mode. Για να αρχίσει το τρέξιμο κάνουμε κλικ στο κουμπί Optimize.
Τώρα κάνουμε κλικ στο κουμπί Balance Loads για να εκτελέσουμε εξισορρόπηση φορτίου (load balancing) και μερικούς σχεδιαστικούς κανόνες ελέγχου. Αυτό θα διορθώσει τυχόν προβλήματα fanout και θα προσπαθήσει να ισορροπήσει φορτία για να μειωθεί το skew.
Κάνοντας κλικ στο κουμπί Report Area θα μας δώσει μία αναφορά για τον χώρο της σχεδίασης . Αυτό θα μας δώσει ένα μέτρημα του αριθμού των λογικών ενοτήτων (logic modules) και ποιού τύπου χρησιμοποιούνται. Αν δεν καθορίσουμε ένα όνομα αρχείου, τα αποτελέσματα θα φανούν μόνο στο παράθυρο Leonardo.
Αν θέλουμε να πάρουμε μία ιδέα της καθυστέρησης μέσα στο κύκλωμα, μπορούμε να πατήσουμε το κουμπί Report Delay. Εξ ορισμού θα δείξει τις δέκα διαδρομές με τις μεγαλύτερες καθυστερήσεις. Πρέπει να έχουμε στο μυαλό μας ότι υπολογίζει μόνο τις καθυστερήσεις λογικής και καλωδίου της σχεδίασης. Πρέπει να κάνουμε ένα place and route πριν πάρουμε πραγματικές καθυστερήσεις.
Τέλος, αν πρόκειται να κάνουμε ένα place and route, χρειάζεται να αντιγράψουμε τα αποτελέσματα της βελτιστοποίησης (optimization). Για να το κάνουμε αυτό, πατάμε το κουμπί Write. Για format επιλέγουμε το EDIF και δίνουμε ένα όνομα αρχείου, όπως alu.edf.
Τώρα έχουμε ολοκληρώσει την σύνθεση και βελτιστοποίηση της σχεδίασης. Αν θέλουμε να δούμε πως είναι οι πύλες, πατάμε το κουμπί Schematic Viewer που βρίσκεται στο παράθυρο Leonardo. Έτσι μπορούμε να πάρουμε μία ιδέα τι τύπου πύλες χρησιμοποιήθηκαν στην σχεδίασή μας.
Το επόμενο βήμα είναι είτε να κάνουμε place and route για μια ολοκληρωμένη σχεδίαση ή να μετατρέψουμε τον κώδικα και να βελτιώσουμε τα αποτελέσματα της σύνθεσης.