ΑΣΚΗΣΗ 2η ΥΛΟΠΟΙΗΣΗ ΑΠΟΚΩΔΙΚΟΠΟΙΗΤΗ ΟΘΟΝΗΣ 7 ΤΜΗΜΑΤΩΝ Σκοπός της δεύτερης άσκησης είναι αφενός η επανάληψη απαραίτητων γνώσεων από την ύλη του προηγούμενου εξαμήνου και αφετέρου η άμεση εισαγωγή στην υλοποίηση κυκλωμάτων με CPLD και FPGA με στόχο την εξοικίωση των σπουδαστών με το αναπτυξιακό σύστημα UP2 της Altera. Σχεδιάζεται ένας δυαδικός αποκωδικοποιητής οθόνης 7 τμημάτων ξεκινώντας από τον πίνακα αληθείας μέχρι την απεικόνιση στο CPLD MAX7. Πρέπει να δωθεί ιδιαίτερη προσοχή στην ορθή σχεδίαση του αποκωδικοποιητή γιατί αν και στην άσκηση αυτή ελέγχεται αυτόνομος, θα χρησιμοποιηθεί και σε επόμενες ασκήσεις για την ένδειξη των αποτελεσμάτων του αθροιστή και του απαριθμητή. ΘΕΩΡΙΑ «Ψηφιακή Σχεδίαση», Μ. Mano: Απλοποίηση συναρτήσεων Boole, Κεφ. 3.-3.5, σελ. 93-3. «Σχεδίαση Ψηφιακών Συστημάτων με τη γλώσσα VHDL», S. Brown & Z. Vranesic: Βελτιστοποίηση της υλοποίησης λογικών κυκλωμάτων, Κεφ. 4.-4.4, σελ 25-227. Εργαλεία Σχεδιασμού CAD, Κεφ. 4..2, σελ 272-283. Data Sheet DM9368 (7-segment decoder/driver/latch, Fairchild Semiconductors) ΤΟ ΑΝΑΠΤΥΞΙΑΚΟ ΣΥΣΤΗΜΑ UP2 ΤΗΣ ALTERA Το διάγραμμα βαθμίδων (block diagram) του αναπτυξιακόυ συστήματος UP2 φαίνεται στη σελίδα 3 του παραρτήματος του φυλλαδίου του εργαστηρίου. Εκτός από τις προγραμματιζόμενες διατάξεις υπάρχουν διάφορα στοιχεία όπως σειρές διακοπτών (DIP switches), δίοδοι εκπομπής φωτός (LEDs), οθόνες επτά τμημάτων (seven segment displays), ταλαντωτής παραγωγής σήματος ρολογιού (clock oscillator) και ακιδοσειρές για τη σύνδεση των ακροδεκτών των διατάξεων στις επιθυμητές θέσεις. Λεπτομερής περιγραφή όλων των στοιχείων του αναπτυξιακού συστήματος γίνεται στο Παράρτημα του φυλλαδίου αυτού. Στο αναπτυξιακό σύστημα UP2 της Altera υπάρχουν δύο προγραμματιζόμενες διατάξεις: ένα FPGA της οικογένειας FLEX K και ένα CPLD της οικογένειας MAX 7. Οι διατάξεις αυτές μπορούν να προγραμματιστούν από προσωπικό υπολογιστή με χρήση ενός καλωδίου ByteBlaster II. Η διάταξη FPGA EPFK7 (EPFK7RC24-4) περιλαμβάνει 7 πύλες και βασίζεται σε τεχνολογία SRAM (απαιτείται επαναπρογραμματισμός κάθε φορά που ξεκινά η λειτουργία του συστήματος μετά από διακοπή της τροφοδοσίας). Διαθέτει 3.744 λογικά στοιχεία (logic elements, LE) με τεσσάρων εισόδων πίνακες αναφοράς (Look-Up Tables, LUT) και εννέα embedded array blocks (EAB) το καθένα από τα οποία περιέχει 248 bits μνήμης που μπορούν να χρησιμοποιηθούν ως RAM, ROM, ή FIFO. Τα ΕΑΒ μπορούν να υλοποιήσουν λογικές συναρτήσεις όπως πολλαπλασιαστές, μικροελεγκτές και μονάδες επεξεργασίας ψηφιακού σήματος (DSP). Η διάταξη που είναι διαθέσιμη στο αναπτυξιακό σύστημα έχει 24 ακροδέκτες σε συσκευασία (package) RQFP. Η διάταξη CPLD EPM728S (EPM728SLC84-7) περιλαμβάνει 25 πύλες και βασίζεται σε τεχνολογία EEPROM (δεν απαιτείται επαναπρογραμματισμός). Διαθέτει 28 μακροκυψέλες (macrocells), οι οποίες παρέχουν τη δυνατότητα προγραμματιζόμενης AND και σταθερής OR λογικής και διαθέτουν προγραμματιζόμενους καταχωρητές (registers) με ανεξάρτητα σήματα ελέγχου και χρονισμού. Στο αναπτυξιακό σύστημα UP2 διατίθεται μία διάταξη με 84 ακροδέκτες σε συσκευασία (package) PLCC. 9
ΠΡΟΣΟΧΗ Οι δίοδοι εκπομπής φωτός είναι συνδεδεμένες στην τάση τροφοδοσίας μέσω μιας αντίστασης 33 Ω (pull-up) και επομένως φωτοβολούν όταν εμφανιστεί λογικό στον αντίστοιχο ακροδέκτη της ακιδοσειράς. Οι διακόπτες σειράς (DIP switches) είναι συνδεδεμένοι με την τάση τροφοδοσίας (pull-up) μέσω μιας αντίστασης ΚΩ. Η έξοδος του διακόπτη εμφανίζει λογικό όταν ο διακόπτης είναι ανοικτός (OFF) και λογικό όταν ο διακόπτης είναι κλειστός (ΟΝ) Οι σύνδεσμοι (jumpers) TDI, TDO, DEVICE, BOARD που βρίσκονται πάνω από το CPLD MAX7S καθορίζουν το ποια διάταξη προγραμματίζεται. Για τον προγραμματισμό του ΜΑΧ7 πρέπει να είναι όλοι στην πάνω θέση, ενώ για τον προγραμματισμό του FLEXK οι δύο πρώτοι (TDI, TDO) πρέπει να τοποθετηθούν στην κάτω θέση (βλέπε Table 2, σελίδα 5, στο UP2 User s Guide). ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ ΜΕΡΟΣ Α. Στο επόμενο σχήμα φαίνεται η κωδικοποίηση των επτά τμημάτων της οθόνης και το δεκαεξαδικό ψηφίο που πρέπει να εμφανίζεται για όλους τους συνδυασμούς των εισόδων από έως 5 2. Συμπληρώστε τον πίνακα αληθείας του αποκωδικοποιητή οθόνης 7 τμημάτων. ΠΡΟΣΟΧΗ Επειδή οι δίοδοι είναι συνδεδεμένες στην τάση τροφοδοσίας μέσω μιας αντίστασης pull-up και επομένως φωτοβολούν όταν εμφανιστεί λογικό στον αντίστοιχο ακροδέκτη, πρέπει στον πίνακα αληθείας να εμφανίζεται '' όταν θέλετε να ανάψει ένα τμήμα της οθόνης και '' για να είναι σβηστό. D3 D2 D D a b 2 c d e f g
3. Με χρήση πινάκων Karnaugh αποκωδικοποιητή. απλοποιήστε τις συναρτήσεις των εξόδων του a b c d e f g 4. Γράψτε κώδικα VHDL για την περιγραφή του αποκωδικοποιητή χρησιμοποιώντας τις απλοποιημένες συναρτήσεις εξόδου. Κώδικας VHDL entity seven_segment is port ( ) end entity architecture logic_functions of seven_segment is begin a<= b<= c<= d<= e<= f<= g<= end architecture 2
5. Ακολουθώντας τη διαδικασία της προηγούμενης άσκησης προσομοιώστε το κύκλωμα για όλους τους συνδυασμούς των εισόδων του και επαληθεύστε τον πίνακα αληθείας του. 6. Απεικόνιση του κυκλώματος σε ένα CPLD MAX7S 6.. Από το menu Assignments επιλέξτε Device ώστε να ανοίξει το παράθυρο επιλογής ολοκληρωμένου κυκλώματος που φαίνεται στο επόμενο σχήμα. 6.2. Από την επιλογή Family μπορείτε να επιλέξετε την οικογένεια CPLD ή FPGA στην οποία θα υλοποιήσετε το κύκλωμά σας. Κάθε οικογένεια περιλαμβάνει περισσότερα από ένα Ο.Κ. τα οποία διαφέρουν μεταξύ τους σε διάφορα χαρακτηριστικά, όπως ο αριθμός των λογικών στοιχείων και των ακροδεκτών, η ταχύτητα κλπ. Επιλέξτε την οικογένεια MAX7S και από το παράθυρο Available Devices το CPLD EPM728SLC84-7. Για να εμφανιστεί το συγκεκριμένο ολοκληρωμένο κύκλωμα πρέπει να απενεργοποιήσετε την επιλογή Show Advanced Devices. 6.3. Το επόμενο βήμα είναι η αντιστοίχιση των ακροδεκτών (pins) του κυκλώματος. Επιλέξτε Assignments Pin Planner για να ενεργοποιήσετε το εργαλείο αντιστοίχησης ακροδεκτών που φαίνεται στο επόμενο σχήμα. 22
Για να κάνετε τις αντιστοιχίσεις των ακροδεκτών στις θέσεις που θέλετε χρησιμοποιήστε το παράθυρο Edit. Στην πρώτη στήλη (Node Edit) εμφανίζονται τα ονόματα των σημάτων του κυκλώματος και με διπλό κλικ σε κάθε κουτάκι της τρίτης στήλης (Location) εμφανίζονται όλοι οι ακροδέκτες του Ο.Κ. που έχετε επιλέξει. Για κάθε ακροδέκτη δίνονται και επιπλέον πληροφορίες για τη λειτουργικότητα (input/output, clock, reset κλπ). Για παράδειγμα το pin με τον χαρακτηρισμό global clock πρέπει να χρησιμοποιηθεί μόνο για το σήμα ρολογιού του κυκλώματός και όχι για οποιαδήποτε άλλη λειτουργία. Πληροφορίες για τους ακροδέκτες του Ο.Κ. βλέπετε και στο σχήμα που εμφανίζεται στο δεξί μέρος της οθόνης. Στο σχήμα αυτό οι ακροδέκτες γενικού σκοπού σημειώνονται με κενό κύκλο ενώ αυτοί που έχουν ειδικές λειτουργίες με τρίγωνο, τετράγωνο, πεντάγωνο ή κύκλο με κάποια ένδειξη στο εσωτερικό του. Είναι δυνατή η γραφική αντιστοίχιση των ακροδεκτών με χρήση του mouse. Κάνοντας κλικ πάνω στο όνομα ενός σήματος στην πρώτη στήλη του πίνακα Edit και κρατώντας πατημένο το αριστερό πλήκτρο του mouse μπορείτε να τοποθετήσετε το σήμα στον ακροδέκτη που επιθυμείτε. Μόλις το mouse περάσει πάνω από έναν ακροδέκτη εμφανίζεται ο αριθμός του και ένα μήνυμα για τη λειτουργία του και τη δυνατότητα ή όχι τοποθέτησης σήματος από το χρήστη σε αυτό. 6.4. Πραγματοποιήστε τις παρακάτω αντιστοιχίσεις: Είσοδοι: d pin4, d pin5, d2 pin6, d3 pin8 Έξοδοι: a pin58, b pin6, c pin6, d pin63, e pin64, f pin65, g pin67. Οι έξοδοι απεικονίζονται στους ακροδέκτες που είναι συνδεδεμένοι με την οθόνη 7 τμημάτων του αναπτυξιακού UP2 (βλ. Σελ. 9 στο Παράρτημα) 6.5. Το επόμενο βήμα είναι η απεικόνιση του κυκλώματος στο επιλεγμένο CPLD, η οποία γίνεται με τη χρήση του Compiler. Προχωρήστε στην μετάφραση (από το menu Processing Start Compilation). Όταν ολοκληρωθεί η μετάφραση δημιουργείται το Compilation Report, στο οποίο μπορείτε να δείτε διάφορες πληροφορίες για το υπό σχεδίαση κύκλωμα: 23
Στο Flow Summary βλέπετε αν η εργασία έχει υλοποιηθεί με επιτυχία, την οικογένεια (Family) και το συγκεκριμένο Ο.Κ. (Device) που έχετε χρησιμοποιήσει καθώς και τα ποσοστά χρήσης των διαθέσιμων μακροκυψελών (macrocells) και ακροδεκτών (pins). Σημαντική πληροφορία είναι και το αν ικανοποιούνται οι απαιτήσεις χρονισμού (Timing requirements) του κυκλώματός σας. Σε περίπτωση που δεν ικανοποιούνται πρέπει να χρησιμοποιηθεί ο Timing Analyser για να προσδιοριστεί το πρόβλημα και να γίνουν οι απαραίτητες διορθώσεις. 6.6. Για την Προσομοίωση Χρονισμού (Timing Simulation) ακολουθείστε την ίδια διαδικασία που ακολουθήσατε και για την Προσομοίωση Λειτουργίας (functional simulation). Από το menu Assignments επιλέξτε Settings. Στο Category επιλέξτε Simulator, αλλάξτε το Simulation Mode από Functional σε Timing και πατήστε ΟΚ. Από το menu Processing επιλέξτε Simulator Tool, επιβεβαιώστε ότι το Simulation mode είναι Timing (αν δεν είναι αλλάξτε το) και πατήστε Start για να ξεκινήσει η προσομοίωση. Όταν ολοκληρωθεί η προσομοίωση χρονισμού, κάντε κλικ στο Report και θα εμφανιστούν στην οθόνη σας οι κυματομορφές εισόδων και εξόδων του κυκλώματος, που προέκυψαν από την προσομοίωση. Με μία πρώτη ματιά τα αποτελέσματα της προσομοίωσης χρονισμού φαίνονται ίδια με τα ίδια με τα αποτελέσματα της προσομοίωσης λειτουργίας. Η διαφορά τους έγκειται στο ότι η μεταβολή της τιμής των σημάτων εξόδου γίνεται με κάποια καθυστέρηση σε σχέση με τις μεταβολές των εισόδων. Η καθυστέρηση αυτή προσδιορίζεται από τα χαρακτηριστικά χρονισμού του ολοκληρωμένου κυκλώματος EPM728SLC84-7 που έχει επιλεγεί για την υλοποίηση του κυκλώματος και οφείλεται τόσο στις καθυστερήσεις των λογικών πυλών που έχουν χρησιμοποιηθεί όσο και στις καθυστερήσεις των μεταξύ τους διασυνδέσεων. Ένα άλλο εργαλείο για να δείτε τα αποτελέσματα της υλοποίησης του κυκλώματος στο επιλεγμένο Ο.Κ. είναι το Timing Closure Floorplan. Στο εργαλείο αυτό μπορείτε να δείτε πως είναι τοποθετημένες οι μακροκυψέλες στο Ο.Κ. ποιές από αυτές χρησιμοποιούνται για την υλοποίηση του κυκλώματος σας καθώς και τις μεταξύ τους διασυνδέσεις. Από το menu Assignments επιλέξτε Timing Closure Floorplan για να ενεργοποιήσετε το εργαλείο. Στην οθόνη σας θα εμφανιστεί η παρακάτω απεικόνιση του ολοκληρωμένου EPM728SLC84-7 στην οποία φαίνονται μερικές από τις μακροκυψέλες (macrocells). Οι μακροκυψέλες οργανώνονται σε βαθμίδες λογικών διατάξεων (logic array blocks, LAB), όπου η κάθε βαθμίδα LAB περιέχει 6 μακροκυψέλες. Αν δεν εμφανιστεί η παρακάτω εικόνα από το menu view επιλέξτε interior cells. Από το Toolbar επιλέξτε το Show fitter placements (η επιλογή στην κάτω δεξιά γωνία). Θα πρέπει να εμφανίζονται στους ακροδέκτες των macrocells τα ονόματα των σημάτων με μπλε χρώμα. Επίσης, επιλέγοντας από το Toolbar το x=b θα εμφανιστεί το παράθυρο των εξισώσεων, στο οποίο εμφανίζεται η εξίσωση κάθε κόμβου όταν τον επιλέξετε με το ποντίκι. 24
7. Υλοποίηση και έλεγχος του αποκωδικοποιητή 7.. Βεβαιωθείτε ότι δεν έχετε τροφοδοσία στο αναπτυξιακό σύστημα. 7.2. Τοποθετήστε καλώδια για τη σύνδεση των ακροδεκτών της διάταξης που χρησιμοποιήσατε στο βήμα 6.4 με τους διακόπτες (DIP switches). Η αντιστοιχία των ακροδεκτών της διάταξης με τους ακροδέκτες των ακιδοσειρών P έως P4 δίνεται στον πίνακα 3 (table 3) στη σελίδα 7 του UP2 User s Guide. Η οθόνη 7 τμημάτων είναι συνδεδεμένη πάνω στο PCB και δε χρειάζονται καλώδια σύνδεσης για αυτή. 7.3. Συνδέστε το καλώδιο προγραμματισμού ByteBlaster II στην παράλληλη θύρα του υπολογιστή και στο αναπτυξιακό σύστημα UP2. 7.4. Συνδέστε την τροφοδοσία. 7.5. Από το menu Tools επιλέξτε Programmer. Το επόμενο παράθυρο εμφανίζεται στην οθόνη: 25
7.6. Επιλέξτε Harware Setup και στο νέο παράθυρο επιλέξτε το ByteBlasterMV, Local, LPT και μετά το Select Hardware ώστε να ενεργοποιήσετε τη σύνδεση του υπολογιστή με το αναπτυξιακό σύστημα UP2. Η επιλογή mode πρέπει να είναι JTAG. 7.7. Όταν ολοκληρώσετε τη διαδικασία ενεργοποίησης της σύνδεσης επιλέξτε Auto Detect ώστε να ανιχνεύσει την προγραμματιζόμενη διάταξη και να εμφανιστεί στην οθόνη ο τύπος EPM728SLC84 7.8. Κάντε διπλό κλικ πάνω στη διάταξη που εμφανίστηκε στην οθόνη σας και θα εμφανιστεί ένα παράθυρο για την επιλογή του αρχείου προγραμματισμού. Από τη λίστα αρχείων που εμφανίζεται επιλέξτε το αρχείο xxxxx.pof, όπου xxxxx το όνομα του project το οποίο χρησιμοποιήσατε για τον αποκωδικοποιητή. 7.9. Στη στήλη Program/Configure επιλέξτε το κουτάκι. Το παράθυρο του Programmer πρέπει να είναι όπως φαίνεται στο επόμενο σχήμα. 7.. Σώστε το αρχείο του προγραμματιστή με το όνομα xxxxx.cdf, όπου xxxxx το όνομα του project το οποίο χρησιμοποιήσατε. 7.. Επιλέξτε το Start ώστε να ξεκινήσει η διαδικασία προγραμματισμού. Εμφανίζεται μία μπάρα που δείχνει την πρόοδο της διαδικασίας και αναβοσβήνουν τα πράσινα LEDs του αναπτυξιακού. 7.2. Επιβεβαιώστε τη σωστή λειτουργία του κυκλώματος για όλους τους συνδυασμούς των εισόδων. 26