Τεύχος Εργαστηριακών Ασκήσεων Έκδοση 1η

Σχετικά έγγραφα
ΠΑΡΑΡΤΗΜΑ Β. Verification

VHDL Εισαγωγικές έννοιες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Εργαστηριακές Ασκήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Εργαστηριακές Ασκήσεις

Οδηγίες εγκατάστασης και χρήσης του Quartus

Εισαγωγή στη σχεδιαστική ροή της Xilinx

Lab 2 Manual - Introduction to Xilinx

Εισαγωγή στη VHDL Υλοποίηση στο Quartus

ΗΜΥ211 Εργαστήριο Ψηφιακών Συστημάτων

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Μηχανές Πεπερασμένων Καταστάσεων

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Ακολουθιακός Κώδικας

ΕΙΣΑΓΩΓΙΚΟ ΕΓΧΕΙΡΙ ΙΟ ΓΙΑ ΣΧΕ ΙΑΣΜΟ ΜΕ ΧΡΗΣΗ ΤΗΣ ΓΛΩΣΣΑΣ VHDL

ηµιουργία Αρχείου Πρότζεκτ (.qpf)

VHDL Introduction. Subtitle

Εισαγωγή στη Verilog με το ISE

Εργαστηριακή Άσκηση 4: Ιεραρχική σχεδίαση και προσχεδιασμένοι πυρήνες

Εισαγωγή στη γλώσσα περιγραφής υλικού VHDL. Γενικά χαρακτηριστικά, σύνταξη και τύποι. Ψηφιακή Σχεδίαση µε CAD ΙΙ - ιάλεξη 1 -

Library, package και subprograms

Κυκλωμάτων» Χειμερινό εξάμηνο

Μοντέλα. χαρακτηριστικά χωρίς να συνοδεύεται από λεπτοµέρειες.

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Χειµερινό Εξάµηνο

Ενσωματωμένα Συστήματα

1 Περίληψη Η εργασία έγινε στα πλαίσια του μαθήματος των Ψηφιακών Ηλεκτρονικών Συστημάτων με σκοπό αρχικά την εκμάθηση της γλώσσας VHDL (Very High Spe

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 15: Καταχωρητές (Registers)

Εργαστήριο Αρχιτεκτονικής Υπολογιστών Ι. Εισαγωγή στη VHDL

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 Συµπληρωµατική ΔΙΑΛΕΞΗ 14: Περιγραφή Ακολουθιακών Κυκλωµάτων στη VHDL

Προσοµοίωση Συστηµάτων µε VHDL. (Peter Ashenden, The Students Guide to VHDL)

Περίληψη. ΗΜΥ-210: Λογικός Σχεδιασµός Εαρινό Εξάµηνο Παράδειγµα: Καταχωρητής 2-bit. Καταχωρητής 4-bit. Μνήµη Καταχωρητών

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

VHDL για Σχεδιασµό Ακολουθιακών Κυκλωµάτων

ΑΣΚΗΣΗ 1η ΤΟ ΠΕΡΙΒΑΛΛΟΝ ΣΧΕΔΙΑΣΗΣ QUARTUS II ΤΗΣ ALTERA

ΗΜΥ211 Εργαστήριο Ψηφιακών Συστημάτων

ΑΣΚΗΣΗ 4 η ΕΙΣΑΓΩΓΗ ΣΤΗ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ ΜΕ ΧΡΗΣΗ Η/Υ (QUARTUS II ALTERA)

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

Εισαγωγή στη γλώσσα περιγραφής υλικού VHDL. Βασικές εντολές και η περιγραφή συνδυαστικών κυκλωµάτων. Ψηφιακή Σχεδίαση µε CAD ΙΙ - ιάλεξη 2 -

Επιβεβαίωση ορθής λειτουργίας απλών ψηφιακών κυκλωμάτων

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. Καταχωρητές 1

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Σχεδίαση Ψηφιακών Συστημάτων. Ενότητα: ΚΑΤΑΧΩΡΗΤΕΣ - ΑΠΑΡΙΘΜΗΤΕΣ

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

Εφαρμογές Ψηφιακών Ηλεκτρονικών

26-Nov-09. ΗΜΥ 210: Λογικός Σχεδιασμός, Χειμερινό Εξάμηνο Καταχωρητές 1. Διδάσκουσα: Μαρία Κ. Μιχαήλ

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

Σχεδίαση Ψηφιακών Συστημάτων

ΗΜΥ211 Εργαστήριο Ψηφιακών Συστηµάτων

ΑΣΚΗΣΗ 2: Σχεδίαση και προσομοίωση κυκλωμάτων καταχωρητών και μετρητών

ΗΥ-225. Verilog HDL. Τα βασικά...

Σχεδιασμός Πλήρους Αθροιστή/Αφαιρέτη

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα

ΑΣΚΗΣΗ 2η ΥΛΟΠΟΙΗΣΗ ΑΠΟΚΩΔΙΚΟΠΟΙΗΤΗ ΟΘΟΝΗΣ 7 ΤΜΗΜΑΤΩΝ

Cubitech Hellas Ακροπόλεως 24, Καλλιθέα, Αθήνα Τ.Κ , Ελλάδα, Τηλ Φαξ

Κ. ΕΥΣΤΑΘΙΟΥ, Γ. ΠΑΠΑΔΟΠΟΥΛΟΣ ΠΑΤΡΑ

ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ.3 ΑΣΥΓΧΡΟΝΟΣ ΔYΑΔΙΚΟΣ ΑΠΑΡΙΘΜΗΤΗΣ.5 ΑΣΥΓΧΡΟΝΟΣ ΔΕΚΑΔΙΚΟΣ ΑΠΑΡΙΘΜΗΤΗΣ.7 ΑΣΥΓΧΡΟΝΟΣ ΔΕΚΑΔΙΚΟΣ ΑΠΑΡΙΘΜΗΤΗΣ ΜΕ LATCH.

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

8 η Θεµατική Ενότητα : Εισαγωγή στις Γλώσσες Περιγραφής Υλικού: Μοντέλα Συνδυαστικών Κυκλωµάτων

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

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

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Συναρτήσεις, Διαδικασίες και Δομές Ελέγχου Λειτουργίας Κυκλωμάτων (testbenches)

ΑΣΚΗΣΗ 8 Tutorial by TeSLa Συνδεσμολογία κυκλώματος Διαδικασία Προγραμματισμού

Συστηµάτων ΗΜΥ211. Στόχοι Εργαστηρίου. Πανεπιστήμιο Κύπρου. Πανεπιστήμιο Κύπρου. Εργαστήριο Ψηφιακών Συστηµάτων ΗΜΥ211 Χειµερινό 2013

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. VHDL για Ακολουθιακά Κυκλώματα 1

Structural VHDL. Structural VHDL

Ενσωματωμένα Συστήματα

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

100 ΕΡΩΤΗΣΕΙΣ ΜΕ ΤΙΣ ΑΝΤΙΣΤΟΙΧΕΣ ΑΠΑΝΤΗΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

SIMATIC MANAGER SIMATIC MANAGER

Ελίνα Μακρή

6.1 Θεωρητική εισαγωγή

Εφαρμογές Σειριακής Επικοινωνίας

Εισαγωγή. Περιεχόμενα της συσκευασίας. Τεχνικές Προδιαγραφές. Απαιτήσεις συστήματος. Ελληνική Έκδοση. IP002 Sweex USB Internet Phone

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Χειµερινό Εξάµηνο

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΚΑΤΑΧΩΡΗΤΕΣ ΟΛΙΣΘΗΤΕΣ

7 η Θεµατική Ενότητα : Εισαγωγή στις Γλώσσες Περιγραφής Υλικού

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Συντρέχων Κώδικας

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

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

6 η Θεµατική Ενότητα : Σχεδίαση Συστηµάτων σε Επίπεδο Καταχωρητή

Τ.Ε.Ι. ΚΡΗΤΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ. Ασκήσεις 1-2 Εισαγωγή

(Logic Gate Simulator)

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

Εισαγωγή στη Γλώσσα VHDL

Εξωτερικές συσκευές Οδηγός χρήσης

Ενσωματωμένα Συστήματα

Πανεπιστήµιο Θεσσαλίας

ΗΜΥ 210: Λογικός Σχεδιασµός, Εαρινό Εξάµηνο Ένα συνδυαστικό κύκλωµα µπορεί να περιγραφεί από: Φεβ-05. n-είσοδοι

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

Η συχνότητα f των παλµών 0 και 1 στην έξοδο Q n είναι. f Qn = 1/(T cl x 2 n+1 )

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Εξωτερικές συσκευές Οδηγός χρήσης

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ GRS-1

Εργαστήριο Ψηφιακής Σχεδίασης

7.1 Θεωρητική εισαγωγή

Ενσωµατωµένα Συστήµατα

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

KiCad Create new project Eeschema Electronic schematic editor Eeschema Page settings grid Place component

Ενσωματωμένα Συστήματα

Σχεδίαση Ψηφιακών Συστημάτων

Πανεπιστήµιο Θεσσαλίας

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Ψηφιακή Σχεδίαση Τεύχος Εργαστηριακών Ασκήσεων Έκδοση 1η ρ. Κωνσταντίνος Καραφασούλης ckaraf@aegean.gr Σεπτέµβριος 2005 1

1 Περιεχόµενα Άσκηση 1: Εισαγωγικό Εργαστήριο... 2 Άσκηση 2: LED Decoder...... 23 Άσκηση 3: Εισαγωγή στο Προσοµοιωτή Modelsim.... 36 Άσκηση 4: Ιεραρχική Σχεδίαση 42 Άσκηση 5: Πλήρης Αθροιστής 54 Άσκηση 6: Πολυπλέκτης 4 σε 1. 55 Άσκηση 7: D Flip-Flop 56 Άσκηση 8: Μηχανή Πεπερασµένων Καταστάσεων... 57 Παράρτηµα Α : Εξοπλισµός Εργαστηρίου... 58 Παράρτηµα Β : Ροή Σχεδίασης και VHDL... 67 1

ΑΣΚΗΣΗ 1 Εισαγωγικό Εργαστήριο Περιγραφή ηµιουργήστε ένα συνδυαστικό κύκλωµα 3 εισόδων το οποίο να υλοποιεί την ακόλουθη συνάρτηση: D = AB + C Ακολουθήστε τα ακόλουθα βήµατα:. ηµιουργήστε ένα νέο project. Προσθέστε ένα schematic αρχείο. Εκχωρήστε τις εισόδους A, B, C και την έξοδο D σε pins της κάρτας XSA-50.. Μεταφέρεται το κύκλωµα στην XSA-50.. Ελέγξετε το αποτέλεσµα. 1. ηµιουργία νέου Project Ξεκινήστε την εφαρµογή ISE (µε διπλό κλικ στο εικονίδιο του Project Navigator). Για να δηµιουργήσετε ένα νέο project χρησιµοποιείστε το µενού File -> New Project 2

Στο παράθυρο που θα εµφανισθεί επιλέξτε ένα όνοµα για το project σας και το κατάλογο του δίσκου που θα το αποθηκεύσετε. Για τις ανάγκες του σηµερινού εργαστηρίου θα πρέπει να επιλέξετε Schematic σαν το Top-Level Module Type. Μετά την επιλογή του πλήκτρου Next εµφανίζεται ένα παράθυρο όπου πρέπει να εισάγετε κάποιες χαρακτηριστικές τιµές της FPGA κάρτας που θα χρησιµοποιήσετε (XSA-50) Αυτές είναι: Χ Board Device Family Device Package Speed Grade XSA-50 Spartan2 xc2s50 tq144-5 Στη συνέχεια επιλέξτε Next:. 3

Στο παράθυρο που ακολουθεί επιλέξτε πάλι Next. Θα εισάγουµε αρχείο πηγαίου κώδικα στη συνέχεια. Επιλέγοντας Next, θα δείτε µια σύνοψη των επιλογών που έχετε κάνει µέχρι αυτή τη στιγµή. Επιλέξτε το Finish. 4

5

2. ηµιουργία του σχεδίου του κυκλώµατος Στο σηµείο αυτό το παράθυρο του Project Navigator πρέπει να έχει τη µορφή Επιλέξτε το xc2s50-5tq144 και δηµιουργήστε ένα νέο αρχείο πηγαίου κώδικα είτε µε διπλό-κλικ Create New Source στο είτε µε δεξί κλικ και επιλέγοντας το New Source. Θα δείτε το παράθυρο που ακολουθεί: 6

Επιλέξτε Schematic από το αριστερό µενού και δώστε το όνοµα lab1_part1_sch στο πεδίο FileName. Το ακόλουθο παράθυρο σχεδίασης θα εµφανισθεί επιλέγοντας το Next Επιλέξτε το tab Symbols (στο αριστερό τµήµα του ανωτέρου παράθυρου). Εµφανίζονται µια λίστα από κατηγορίες (επάνω) και µε σύµβολα (κάτω) 7

Για να υλοποιήσετε την συνάρτηση D = AB + C θα χρειαστείτε µια πύλη AND δύο εισόδων, ένα αντιστροφέα (inv) και µια πύλη OR δύο εισόδων. Από τη λίστα των Symbols επιλέξτε το and2, πηγαίνετε στην επιφάνεια σχεδίασης και µε ένα κλικ δηµιουργήστε µια πύλη AND. 8

Μπορείτε να µεγεθύνετε ή να σµικρύνετε την επιφάνεια σχεδίασης µε τα πλήκτρα + και της µπάρας εργαλείων. Στη συνέχεια επιλέξτε το σύµβολο or2 και δηµιουργήστε µε τον ίδιο τρόπο µια πύλη OR στην επιφάνεια σχεδίασης. Επαναλάβετε τη διαδικασία και για το σύµβολο inv (αντιστροφέας). Στο σηµείο αυτό η επιφάνεια σχεδίασης έχει τη µορφή: 9

Για να συνδέσετε τα στοιχεία που επιλέξατε µεταξύ τους, επιλέξτε το εικονίδιο από τη µπάρα εργαλείων. Με τη χρήση του µολυβιού δηµιουργήστε το κύκλωµα όπως και στο παράθυρο που ακολουθεί. Επιλέξτε το εικονίδιο Add I/O Marker από τη µπάρα εργαλείων για να προσθέσετε τα στοιχεία εισόδου για κάθε µία από τις τρεις εισόδους καθώς και ένα 10

στοιχείο εξόδου στην έξοδο της πύλης OR. Μετονοµάστε τις εισόδους και την έξοδο είτε κάνοντας διπλό κλικ σε αυτές είτε µε δεξί κλίκ. Οι είσοδοι πρέπει να λέγονται A, B και C και η έξοδος D, όπως στο προηγούµενο σχήµα, Στη µπάρα των εργαλείων υπάρχει το εικονίδιο. Επιλέγοντας το, διενεργείται έλεγχος του κυκλώµατος που σχεδιάσατε. εν πρέπει να υπάρχει κανένα. Αν υπάρχει, θα πρέπει να τα διορθώσετε προτού συνεχίσετε. 11

3. Εκχώρηση των pins του FPGA Επιστρέψτε στο Project Navigator και επιλέξτε το αρχείο που δηµιουργήσατε. Επιλέξτε το διαδικασία Assign Package Pins από το σύνολο User Constraints.. Απαντήστε θετικά στο ερώτηµα που εµφανίζεται για την προσθήκη ενός αρχείου περιορισµών. Μπορείτε να φτάσετε στο ίδιο σηµείο µε την επιλογή Create New Source Στο σηµείο αυτό εµφανίζεται ο επεξεργαστής των περιορισµών: 12

Οι είσοδοι A, B, C και η έξοδος D εµφανίζονται. Πρέπει να εκχωρήσετε σε αυτές κάποια pins από το FPGA chip. Επιλέξτε τις τιµές του ακόλουθου πίνακα. DIP Switch pins A Pin 54 B Pin 64 C Pin 63 D Pin 67 Οι τιµές αυτές αναφέρονται στα pins του dip switch τεσσάρων εισόδων της κάρτας. (Ανατρέξτε στην περιγραφή του υλικού 31 ή στο εγχειρίδιο της κάρτας http://www.xess.com/manuals/xsa-manual-v1_2.pdf). Η έξοδος συνδέετε στο pin του LED (S0, bottom bar). Στο σχήµα που ακολουθεί βλέπετε τη λεπτοµέρεια από το εγχειρίδιο της XSA-50 που αναφέρεται στο pins που µας ενδιαφέρουν. 13

Αποθηκεύστε τις εκχωρήσεις των pin που εισαγάγατε στην εφαρµογή PACE. Αυτές αποθηκεύονται σε ένα αρχείο κειµένου (text file), το οποίο µπορείτε να το επεξεργαστείτε και µε την επιλογή Edit Constraints (text). #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "A" LOC = "P54" ; NET "B" LOC = "P64" ; NET "C" LOC = "P63" ; NET "D" LOC = "P67" ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE 14

4. ηµιουργία του αρχείου για το προγραµµατισµό του FPGA (bitstream) Σε αυτό το βήµα θα δηµιουργήσουµε ένα αρχείο το οποίο µπορεί να µεταφορτωθεί στο FPGA προγραµµατίζοντας το. Επιστρέψτε στην εφαρµογή Project Navigator επιλέγοντας το αρχείο µε το σχέδιο του κυκλώµατος. Από το παράθυρο των Processes επιλέξτε το Generate Programming File και µε δεξί κλικ- Properties, ρυθµίστε FPGA Startup Clock = JTAG clock (µενού Startup Options). H επιλογή αυτή είναι απαραίτητη γιατί ο προγραµµατισµός tτου FPGA θα γίνει µέσω της εφαρµογής impact. Στη συνέχεια δηµιουργήστε το αρχείο για τον προγραµµατισµό του FPGA (bitsrean) µε διπλό κλικ στην επιλογή Generate Programming File.Αν δεν υπάρχουν λάθη, πράσινα θα εµφανισθούν δίπλα από τις αντίστοιχες διαδικασίες (επόµενο σχήµα) 15

Αν εµφανισθεί κάποιο κίτρινο ερωτηµατικό, τότε υπάρχει κάποιο σφάλµα το οποίο πιθανόν να πρέπει να διορθώσετε πριν συνεχίσετε. Στο βήµα αυτό δηµιουργείτε ένα αρχείο µε επέκταση (bitstream) που περιέχει τα κώδικα προγραµµατισµού του FPGA. Στη περίπτωση µας είναι το lab1_part1_sch.bit. Στο επόµενο βήµα θα µεταφορτώσετε το αρχείο αυτό στο FPGA για να το προγραµµατίσετε. 16

5. Μεταφόρτωση του αρχείου bitstream στο FPGA Για τον προγραµµατισµό του FPGA θα χρησιµοποιήσουµε την εφαρµογή impact. Βεβαιωθείτε ότι η XSA-50 έχει ρυθµισθεί για την εφαρµογή impact. Σε αντίθετη περίπτωση ακολουθείστε τα ακόλουθα βήµατα: Χρησιµοποιείστε την εφαρµογή GXSLOAD για να προγραµµατίσετε την XSA-50 µε την εφαρµογή p3jtag.svf από τον κατάλογο C:\XSTOOLS \XSA\50\ Αφού αποσυνδέσετε τη κάρτα µεταφέρετε το βραχυκυκλωτήρα από τις επαφές 2-3 (xs) στις επαφές 1-2 (xi) του J9 Αν θελήσετε µελλοντικά να χρησιµοποιήσετε την εφαρµογή gsxload για τον προγραµµατισµό του FPGA επαναφέρετε τον βραχυκυκλωτήρα στη θέση xs του J9 Για τον προγραµµατισµό του FPGA µε το αρχείο bitstream που δηµιουργήσατε, χρησιµοποιήστε την επιλογή Configure Device από το µενού Generate Programming File του Project Navigator. Η επιλογή αυτή εµφανίζει το παράθυρο της εφαρµογής impact (επόµενο σχήµα).. 17

Συνδέστε την κάρτα XSA-50 στην παράλληλη θύρα του Η/Υ και στη συνέχεια στην τροφοδοσία. Εκτελέστε τη διαδικασία Boundary Scan. Η εφαρµογή θα πρέπει να εντοπίσει το FPGA chip. Αν δεν το βρει, ελέγξετε ξανά την τροφοδοσία και την παράλληλη σύνδεση. Στην προτροπή της εφαρµογής για configuration file επιλέξτε το αρχείο που δηµιουργήσατε lab1_part1_sch.bit Στο σηµείο αυτό το παράθυρο του impact έχει την ακόλουθη µορφή: 18

Με δεξί κλικ στο εικονίδιο Xilinx επιλέξτε Program. Στο παράθυρο που εµφανίζεται επιλέξτε OK. Αν ο προγραµµατισµός είναι επιτυχής, ένα µήνυµα επιτυχίας σε µπλε φόντο θα εµφανισθεί. 19

Προσοχή: Αν έχετε διατηρήσει την εφαρµογή impact ανοικτή και έχετε κάνει αλλαγές στο αρχικό σχέδιο του κυκλώµατος, η impact θα συνεχίσει να µεταφέρει το παλαιό αρχείο bitstream ακόµη και αν έχετε δηµιουργήσει νέο. Στη περίπτωση αυτή θα πρέπει να κάνετε δεξί κλικ στο εικονίδιο του FPGA και να επιλέξετε Assign New Configuration File, ώστε να επιλέξετε το αρχείο bitsream ξανά. 20

21

6. Έλεγχος Χρησιµοποιήστε τους τρεις πρώτους διακόπτες του dip-switch και ελέγξτε την έξοδο από το LED. Είναι αυτό που περιµένατε; Θυµηθείτε ότι οι διακόπτες είναι κατασκευασµένη έτσι ώστε όταν είναι στη θέση 1 να είναι συνδεδεµένοι στη γείωση (low) και στη θέση 0 συνδεδεµένοι µε την τάση (high). Επαληθεύστε τις τιµές του ακόλουθου πίνακα: A B C D = AB + C 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 Προσοχή: Όταν ολοκληρώσετε την άσκηση επαναφέρετε όλους τους διακόπτες στη θέση off. Με όµοιο τρόπο σχεδιάστε ένα κύκλωµα για την ακόλουθη συνάρτηση: E = ( A + B)( AC + D) Απαιτείται ακόµη µία είσοδος: Ο 4 ος διακόπτης του dip-switch (pin 56) _ Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας των συναρτήσεων που χρησιµοποιήσατε όπως αυτές προκύπτουν από τον έλεγχο του κυκλώµατος στην XSA-50. Αναφέρατε τις θέσεις των διακοπτών και το τµήµα του LED που ενεργοποιήσατε. Συµπεριλάβετε το κύκλωµα που φτιάξατε µε (Alt-PrtScn & paste) Οι φάκελοι των δύο projects σε µορφή zip µε όνοµα lab1_a_yourname.zip και lab1_b_yourname.zip 22

ΑΣΚΗΣΗ 2 LED Decoder Περιγραφή Το ψηφιακό κύκλωµα αυτού του εργαστηρίου είναι ένας αποκωδικοποιητής LED (LED decoder). Συγκεκριµένα το κύκλωµα δέχεται 4-bit σαν είσοδο και έχει 7-bit έξοδο µε τα οποία οδηγούµε τo LED της κάρτας XSA-50. Τα τµήµατα του LED θα πρέπει να οδηγηθούν έτσι ώστε να αναπαριστούν τη δεκαεξαδική τιµή των 4-bit όπως στο παρακάτω πίνακα: Four-bit Input Hex Digit LED Display 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 A A 1011 B b 1100 C c 1101 D d 1110 E E 1111 F F Πίνακας 2-1 Για την κατασκευή του κυκλώµατος θα χρησιµοποιήσουµε και στοιχεία της VHDL, σε αντίθεση µε το πρώτο εργαστήριο όπου το κύκλωµα ολοκληρώθηκε αποκλειστικά µε τη χρήση του επεξεργαστή σχεδίων. 23

Ένα υψηλού επιπέδου διάγραµµα του LED-decoder είναι: Ακολουθήστε τα ακόλουθα βήµατα: ηµιουργήστε ένα νέο project Προσθέστε ένα αρχείο πηγαίου κώδικα σε VHDL (VHDL Module) που θα υλοποιεί τη λειτουργία του αποκωδικοποιητή. Εκχωρήστε τις 4 γραµµές εισόδου του κυκλώµατος σε 4 γραµµές δεδοµένων της παράλληλης πόρτας τις οποίες µπορείτε να ελέγξετε από την εφαρµογή gsxport. Εκχωρήστε τα 7 bit της εξόδου του κυκλώµατος στα τµήµατα του LED της XSA- 50. Μεταφέρεται το κύκλωµα στην XSA-50. Ελέγξετε το αποτέλεσµα µε την εφαρµογή gsxport. 1. ηµιουργία νέου Project ηµιουργήστε ένα νέο project, όπως και στο πρώτο εργαστήριο µε όνοµα design1. Στην επιλογή Top-Level Module Type επιλέξτε HDL Θυµηθείτε να εισάγετε σωστά της παραµέτρους της κάρτας XSA-50 24

2. ηµιουργία του αρχείου VHDL Επιλέξτε το xc2s50-5tq144 και δηµιουργήστε ένα νέο αρχείο πηγαίου κώδικα είτε µε διπλό-κλικ Create New Source στο είτε µε δεξί κλικ και επιλέγοντας το New Source. Στο παράθυρο που εµφανίζεται επιλέξτε VHDL module και ονοµατίστε το σαν leddcd 25

Στο παράθυρο Define VHDL Source που εµφανίζεται µπορείτε να ορίσετε τις εισόδους και εξόδους του κυκλώµατος του LED decoder. Στη πρώτη γραµµή εισάγεται το γράµµα d στο πεδίο Port Name (Το όνοµα της εισόδου του LED decoder) Η είσοδος d έχει εύρος 4-bits, οπότε στο πεδίο MSB εισάγετε το 3 αφήνοντας το LSB στο 0. Η ίδια διαδικασία πρέπει να επαναληφθεί στη δεύτερη γραµµή και για την 7- bit έξοδο s. Πρέπει επίσης να δηλώσετε ότι η s είναι έξοδος (out) Μετά την ολοκλήρωση των ρυθµίσεων ένας σκελετός προγράµµατος σε VHDL θα εµφανιστεί στο παράθυρο του επεξεργαστή κειµένου (editor pane). Προσέξτε ότι το αρχείο leddcd.vhd έχει προστεθεί στο παράθυρο των πηγαίων προγραµµάτων (sources pane). Στις γραµµές 1-4 έχουν προστεθεί κλήσεις στη βιβλιοθήκη της IEEE και σε πακέτα που περιέχουν χρήσιµους ορισµούς για τη δηµιουργία ενός ψηφιακού κυκλώµατος. Στις γραµµές 11-14 έχουν ορισθεί οι είσοδοι και οι έξοδοι του LED decoder. Η συµπεριφορά του LED decoder στα σήµατα εισόδου πρέπει να προστεθεί µεταξύ των γραµµών 18 και 21. 26

Στην εικόνα που ακολουθεί παρουσιάζεται ολοκληρωµένος ο κώδικας VHDL για το LED decoder. 27

Σφάλµατα στο κώδικα VHDL µπορούν να εντοπιστούν µε διπλό-κλικ στην επιλογή Check Syntax, η οποία εµφανίζεται στο process pane όταν έχουµε επιλεγµένο το αντικείµενο ledddcd από το source pane. 3. Σύνθεση Αν ο κώδικας σας δεν περιέχει λάθη, τότε το επόµενο στάδιο είναι η µετατροπή του σε λογικό κύκλωµα. Αυτό µπορεί να γίνει επιλέγοντας το αντικείµενο leddcd από το παράθυρο πηγαίων προγραµµάτων (source pane) και στη συνέχεια κάνοντας διπλόκλικ στην επιλογή Synthesize-XST του παραθύρου διεργασιών (process pane) όπως φαίνεται στην ακόλουθη εικόνα: 28

Το πρόγραµµα θα διαβάσει τον VHDL κώδικα και θα το µετατρέψει σε µια netlist από πύλες. Αν η µετατροπή ολοκληρωθεί µε επιτυχία µπορείτε να δείτε το κύκλωµα που προέκυψε από το κώδικα VHDL επιλέγοντας το View RTL Schematic και τις διάφορες επιλογές που χρησιµοποιήθηκαν στη µετατροπή µε View Synthesis Report 4. Προσαρµογή του κυκλώµατος στο FPGA Μέχρι στιγµής έχει κατασκευαστεί το λογικό κύκλωµα για το LED decoder, όµως για να χρησιµοποιηθεί στην πραγµατικότητα πρέπει να µεταφραστεί και να µεταφερθεί στους διαθέσιµους πόρους του FPGA (translate, map και place &route). Η διαδικασία αυτή εκτελείται επιλέγοντας το αντικείµενο leddcd από το παράθυρο των αρχείων πηγαίου κώδικα (sources pane) και στη συνέχεια κάνοντας διπλό-κλικ στο Implement design, όπως φαίνεται στην εικόνα που ακολουθεί. 29

1. Η διαδικασία translate µετατρέπει τη netlist (output του synthesizer) σε µια εξειδικευµένη µορφή, προσθέτοντας τυχόν περιορισµούς (θα αναφερθούµε περισσότερο αργότερα σε αυτούς). 2. Η διαδικασία map αναλύει (decompose) την netlist και την επανασυνθέτει µε τέτοιο τρόπο ώστε να εφαρµόζει καλά στα στοιχεία του FPGA chip της XSA- 50 (ή όποιας έχετε επιλέξει) 3. Τέλος, η διαδικασία Place & Route εκχωρεί τα στοιχεία του κυκλώµατος σε συγκεκριµένες θέσεις στο FPGA chip και θέτει του στοιχειώδες «διακόπτες» του FPGA σε τέτοιες θέσεις ώστε να δροµολογεί τα σήµατα µεταξύ των λογικών στοιχείων. 4. Με την επιλογή Place & Route Report και την Pad Report µπορείτε να δείτε ποιο ποσοστό του FPGA χρησιµοποιεί το κύκλωµα σας και ποια pins είναι οι είσοδοι και έξοδοι του κυκλώµατος 5. Εκχωρήσεις των pin (Περιορισµοί) Αν δε τεθούν κάποιοι περιορισµοί οι εκχωρήσεις των pin στις εισόδους και εξόδους του κυκλώµατος γίνονται αυτόµατα (τυχαία) κατά τη διαδικασία της 30

προσαρµογής. Μπορούµε να επιλέξουµε τα pins που θα χρησιµοποιήσουµε µε αρχεία περιορισµών (constraints). Το FPGA έχει οκτώ εισόδους µέσω τις παράλληλης πόρτας. Τέσσερις από αυτές θα χρησιµοποιήσουµε για την είσοδο του LED decoder, όπως στον πίνακα που ακολουθεί: LED Decoder Input XSA-50 d0 d1 d2 d3 P50 P48 P42 P47 Οι έξοδοι του LED decoder πρέπει να εκχωρηθούν στο 7-τµηµάτων LED σύµφωνα µε τον ακόλουθο πίνακα. LED Decoder Output XSA-50 s0 s1 s2 s3 s4 s5 s6 P67 P39 P62 P60 P46 P57 P49 Για τη δηµιουργία του αρχείου των περιορισµών επιλέξτε αρχικά το αντικείµενο leddcd (source pane) και µε δεξί-κλικ δηµιουργήστε ένα νέο αρχείο τύπου Implementation Constraints File (ονοµάστε το leddcd). 31

Μετά την ολοκλήρωση αυτής της διαδικασίας ένα αρχείο µε όνοµα leddcd.ucf έχει προστεθεί στο source pane. Επιλέγοντας αυτό το αρχείο και κάνοντας διπλό-κλικ στη διεργασία Assign Package Pins στο παράθυρο διεργασιών ξεκινά η διαδικασία εκχώρησης των εισόδων εξόδων του LED decoder στα επιθυµητά pins του FPGA. 32

Στο παράθυρο Xilinx PACE που εµφανίζεται, επιλέγοντας το Ports tab εµφανίζεται µια λίστα των τρεχουσών εκχωρήσεων των pins εισόδου και εξόδου του LED decoder. Αλλαγές στις εκχωρήσεις των pins γίνονται από το παράθυρο Design Object List I/o pins. 33

Μετά την ολοκλήρωση των αλλαγών και την αποθήκευση τους είναι απαραίτητη η επανεκτέλεση της διεργασίας Imlement Design. 6. ηµιουργία του αρχείου για το προγραµµατισµό του FPGA (bitstream) Στο σηµείο αυτό έχει ολοκληρωθεί η σχεδίαση του κυκλώµατος και έχει γίνει η σωστή εκχώρηση των εισόδων και εξόδων LED decode στα pins του FPGA. Το επόµενο βήµα είναι η δηµιουργία του bitstream που χρησιµοποιείται στη πραγµατικότητα για να προγραµµατίσει το chip. Επίλέξτε το αντικείµενο leddcd από το sources pane και µε διπλό κλικ στη διεργασία Generate Programming File δηµιουργείστε το bitstream (αρχείο leddcd.bit) 34

7. Μεταφόρτωση του αρχείου bitstream στο FPGA Για τη µεταφορά του αρχείου bitstream στο FPGA chip της κάρτας XSA- 50 πρέπει να έχετε συνδέσει τον υπολογιστή σας µε τη κάρτα µέσω του παράλληλου καλωδίου και τη πηγή τροφοδοσίας. Στο σηµερινό εργαστήριο θα χρησιµοποιήσουµε την εφαρµογή gsxload για τον προγραµµατισµό της XSA-50. Βεβαιωθείτε ότι ο βραχυκυκλωτήρας του J9 είναι στη θέση xs. Χρησιµοποιήστε ανάλογη διαδικασία µε εκείνη που περιγράφτηκε στο εργαστήριο 1 για το προγραµµατισµό της XSA-50 µε το αρχείο p3jtag.svf για να προγραµµατίσετε την κάρτα µε το αρχείο leddcd.bit. 8. Έλεγχος του κυκλώµατος Ο έλεγχος του κυκλώµατος γίνεται µε την εφαρµογή gxsport, µε την οποία ελέγχονται οι οκτώ είσοδοι του FPGA µέσω του παράλληλου καλωδίου. Ξεκινήστε την εφαρµογή από το εικονίδιου που βρίσκεται στην επιφάνεια εργασίας. Οι είσοδοι d0, d1, d2, και d3 του LED decoder έχουν εκχωρηθεί στα pins που ελέγχονται από τα πλήκτρα D0, D1, D2 και D3 της εφαρµογής gxsport. Για να δώσετε για παράδειγµα την τιµή 1110 στην είσοδο του LED decoder θέστε (D3,D2,D1,D0) = (1,1,1,0) και πατήστε το πλήκτρο Strobe. To γράµµα Ε θα εµφανιστεί στο LED. Προσοχή: Το bit D7 της παράλληλης πόρτας ελέγχει το πρόγραµµα στο FPGA. Αν δώσετε τη τιµή 0 θα διαγραφεί ο προγραµµατισµός του FPGA και θα πρέπει να µεταφέρετε το bitstream ξανά µε την εφαρµογή gsxload. Επαληθεύστε ότι το κύκλωµα σας αποδίδει όλες τις τιµές του πίνακα 2-1 Παραδοτέο Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50. Ο φάκελος των project σε µορφή zip µε όνοµα lab2_yourname.zip. 35

ΑΣΚΗΣΗ 3 Εισαγωγή στον προσοµοιωτή Modelsim Περιγραφή Μέρος A Ο σκοπός αυτού του εργαστηρίου είναι να σας εισάγει στη χρήση του προσοµοιωτή Simulator Modelsim. Στο προηγούµενο εργαστήριο κατασκευάσαµε ένα LED decoder επτά τµηµάτων. Θα χρησιµοποιήσουµε τον Simulator Modelsim για να δούµε την απόκριση του LED decoder σε δεδοµένη είσοδο. Μπορεί κανείς να δει τον αποκωδικοποιητή σαν ένα κύκλωµα µε 4 εισόδους (Σχήµα 3-1) και (Σχήµα 3-1) 7 εξόδους είτε σαν ένα µε µια είσοδο εύρους 4 bit και µια έξοδο εύρος 7 bit. Στο προηγούµενο εργαστήριο επιλέξαµε το δεύτερο τρόπο. Όπως θα δούµε στη συνέχεια (Testbench) υπάρχουν πλεονεκτήµατα στο σχεδιασµό µε µια µόνο µεταβλητή Σχήµα 3-1 36

Σχήµα 3-2 Αφού ξεκινήσετε την εφαρµογή ISE και «φορτώσετε» το project του LED decoder που δηµιουργήσατε στο προηγούµενο εργαστήριο, βεβαιωθείτε ότι έχετε ολοκληρώσει χωρίς λάθη τη διαδικασία της σύνθεσης Testbench 1. Έχοντας ολοκληρώσει τη σύνθεση µε επιτυχία, επιλέξτε add a new source µε δεξί κλικ στο αντικείµενο xc2s50-5tq144. a. Επιλέξτε test bench waveform (ονοµάστε το αρχείο αυτό leddcd_tbw). Το αρχείο αυτό πρέπει να αντιστοιχηθεί µε το leddcd.hdl 2. Στη συνέχεια εµφανίζεται ένα παράθυρο που ονοµάζεται Initialize Timing.. 37

Επιλέγοντας OK εισέρχεστε στο κυρίως µέρος της εφαρµογής 3. Ορίστε µια επιθυµητή τιµή στις εισόδους (0 ή 1 ) κάνοντας κλίκ στο µπλε εικονίδιο της κάθε εισόδου (για την περίπτωση που έχουµε επιλέξει πολλές εισόδους του 1 bit) 38

4. Αν έχετε επιλέξει να έχετε µια είσοδο εύρους 4 bits, τότε µε την επιλογή του µπλε εικονιδίου εµφανίζεται ένα πλήκτρο pattern wizard. Επιλέγοντας το εµφανίζεται ένα άλλο παράθυρο το οποίο δηµιουργεί αυτόµατα το σύνολο των εισόδων. Ορίστε το ώστε να εκτελεστεί για 16 κύκλους Επιλέξτε : Pattern: Count up Radix: Binary Initial Value: 0 Terminal Value: 1111 5. Με δεξί κλικ στο τέλος των εισόδων επιλέξτε Set End of Testbench. 6. Αποθηκεύστε το testbench waveform και επιλέξτε το αρχείο leddcd_tbw από το µενού sources pane. 7. Οι επιλογές του Simulation έχουν εµφανισθεί στο µενού των processes. 39

Με διπλό κλικ εκτελέστε τη διεργασία Simulate Behavioral VHDL Model. 8. Τέσσερα νέα παράθυρα θα εµφανισθούν µε αυτή την επιλογή. Θα επικεντρωθούµε επί του παρόντος στο παράθυρο Wave Window. Ελέγξτε αν για µια δεδοµένη τιµή εισόδου λαµβάνεται την αναµενόµενη έξοδο. Αν όχι, τότε πρέπει να ελέγξετε ξανά τη λογική του κυκλώµατος. 9. Μπορείτε να χρησιµοποιήσετε το µεγεθυντικό φακό για να παρατηρήσετε µε µεγαλύτερη ακρίβεια συγκεκριµένα τµήµατα της κυµατοµορφής. Μέρος Β ηµιουργήστε τα κάτωθι απλά σχέδια κυκλωµάτων αξιοποιώντας τις δυνατότητες του επεξεργαστή σχεδίων: α) Μιας πύλης nand3 b) Τεσσάρων αναστροφέων (inv) συνδεδεµένων σε σειρά Για το κάθε ένα από αυτά δηµιουργήστε ένα απλό testbench waveform (π.χ. random) και προσδιορίστε την έξοδο τους εκτελώντας τη διεργασία Simulate Behavioral VHDL Model. Συγκρίνεται την έξοδο µε τους πίνακες αληθείας τους αντίστοιχους πίνακες αληθείας των κυκλωµάτων. Στη συνέχεια προχωρήστε σε Simulate Post-Place & Route VHDL Model. Συγκρίνοντας τις κυµατοµορφές εισόδου-εξόδου εκτιµήστε τη χρονική καθυστέρηση που εισάγουν οι µονάδες nand3 και inv της XSA-50. 40

Παραδοτέο Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας των κυκλωµάτων καθώς και οι κυµατοµορφές εισόδου εξόδου από τον Simulator Modelsim (χρησιµοποιήστε Alt-PrtScn & paste) Οι φάκελοι των projects σε µορφή zip µε όνοµα lab3_a_yourname.zip, lab3_b_yourname.zip και lab3_c_yourname.zip 41

ΑΣΚΗΣΗ 4 Ιεραρχική Σχεδίαση Περιγραφή Στην σηµερινή άσκηση θα χρησιµοποιήσετε το κύκλωµα του LED decoder που φτιάξατε σε προηγούµενο εργαστήριο. Σκοπός αυτού του εργαστηρίου είναι η απόκτηση εµπειρίας στην ιεραρχική σχεδίαση καθώς και σχεδίαση κυκλωµάτων µέσω λογικών µονάδων από βιβλιοθήκες. Θα κατασκευάσετε ένα καταµετρητή 4 bit η τιµή του οποίου εµφανίζεται στο LED της XSA-50 µέσω του LED decoder. Ένα διάγραµµα υψηλού επιπέδου του υπό κατασκευή κυκλώµατος δίνεται στο επόµενο σχήµα: Η σχεδίαση αυτή είναι ιεραρχική, τόσο ο LED decoder όσο και ο καταµετρητής είναι αυτόνοµες µονάδες που συνδέονται µεταξύ τους µέσω µιας άλλης µονάδας υψηλότερου επιπέδου ώστε να δηµιουργήσουν το τελικό κύκλωµα. 1. ηµιουργία νέου Project ηµιουργήστε ένα νέο project (design2) όπως και στην προηγούµενη άσκηση. Στο σηµείο όπου η εφαρµογή σας προτρέπει να προσθέσετε ήδη υπάρχοντα αρχεία πηγαίου κώδικα, επιλέξτε τη προσθήκη κώδικά σε VHDL και προσθέστε το αρχείο leddcd.vhd από το κατάλογο design1 προηγούµενου εργαστηρίου. 42

2. Προσθήκη της µονάδας counter Στο σηµείο αυτό πρέπει να προσθέσετε τη µονάδα του καταµετρητή counter (VHDL module). ηµιουργήστε το µε ίδια διαδικασία όπως και στο εργαστήριο 2, δίνοντας του το όνοµα counter. O καταµετρητής έχει µια είσοδο που θα προέλθει από το clock της κάρτας XSA-50 και µία έξοδο 4-bit. Ορίστε την είσοδο και έξοδο όπως στην εικόνα που ακολουθεί: Στο παράθυρο του επεξεργαστή κειµένου που ακολουθεί προσθέστε τον ακόλουθο κώδικα VHDL για το counter module (γραµµές 17-25): 43

Η γραµµή 17 ορίζει ένα 28 bit σήµα (signal), cnt, είναι η τρέχουσα τιµή του counter. H process (γραµµές 19-24) καθορίζει πότε η τιµή του counter αυξάνεται. Η συνθήκη της γραµµής 21 είναι αληθής µόνο όταν το σήµα clk πηγαίνει από 1 σε 0. Η δήλωση στη γραµµή 22 αντικαθιστά τη τιµή της cnt µε τη νέα της τιµή. Τέλος στη γραµµή 25, τα πρώτα 4-bit της τρέχουσας τιµής του counter οδηγούνται προς την έξοδο toy module. Ο λόγος για τον οποίο χρησιµοποιούµε τα πρώτα 4-bit από ένα 28 bit signal, είναι για να µειώσουµε τη συχνότητα µε την οποία θα αναβοσβήνει το LED της κάρτας ώστε να είναι παρατηρήσιµο. Η XSA-50 είναι εφοδιασµένη µε ένα clock συχνότητας 50 MHz. Με αυτή τη συχνότητα το LED θα αναβόσβηνε υπερβολικά γρήγορα για αν είναι παρατηρήσιµο. Χρησιµοποιώντας, όµως µόνο τα πρώτα 4-bit το LED θα αλλάζει µόνο κάθε 2 24 κύκλους του ρολογιού, ή κάθε 2 24 / (50 x 10 6 ) = 0.336 δευτερόλεπτα, αρκετά αργά για να παρατηρηθεί. Στο σηµείο αυτό έχουµε δύο ανεξάρτητα modules τα οποία θα πρέπει να τα συνδέσετε µεταξύ τους. Πριν από αυτό πρέπει να δηµιουργήσετε το σχέδιο του κυκλώµατος (schematics) τόσο για το LED decoder όσο και για το counter. Για να δηµιουργήσουµε το counter schematic επιλέγουµε το αντικείµενο counter στο source pane και εκτελούµε τη διεργασία Create Schematic Symbol. Όµοια δηµιουργούµε και το schematic για το LED decoder. 44

Προσθέστε ένα schematic υψηλότερου επιπέδου για να συνδέσουµε τα δύο modules. Επιλέγοντας το αντικείµενο xc2s50-5tq144 δηµιουργήστε ένα νέο schematic µε όνοµα disp_cnt. Με διπλό κλικ στο disp_cnt εµφανίζεται ο επεξεργαστής σχεδίου όπου µπορούµε ν α σχεδιάσουµε το κύκλωµα µας. Επιλέγοντας την κατηγορία c:/tmp/fpga_designs/design2 βρίσκουµε τα σχήµατα (schematics) που δηµιουργήσαµε 45

λίγο νωρίτερα στη symbol list. Μπορούµε να µεταφέρουµε τα δύο αυτά σχήµατα στην επιφάνεια σχεδίασης. Προσθέστε καλώδια στο σχέδιο του κυκλώµατος ώστε να συνδέσετε τα δύο modules µεταξύ τους. Αυτό γίνεται µε το πλήκτρο από τη µπάρα εργαλείων. Επιλέξτε µε αριστερό κλικ αρχικά το count(3:0) και στη συνέχεια το d(3:0) ώστε να πραγµατοποιήσετε τη σύνδεση δηµιουργώντας ένα 4-bit δίαυλο. 46

Επιλέξτε την κατηγορία IO (Input Output) και επιλέξτε ένα buffer εξόδου (OBUF) από τη λίστα των συµβόλων. Συνδέστε τον OBUF στην έξοδο του LED decoder. Για να δηµιουργήσετε το σωστό εύρος διάλου του OBUF, χρησιµοποιείστε τις ιδιότητες του αντικείµενου για να το ονοµάσετε mybuf(6:0). Με το τρόπο αυτό έχετε µετατρέψει την έξοδο του ενός bit του buffer σε έξοδο επτά bits. 47

Μπορείτε να ελέγξετε το σχέδιο του κυκλώµατος για λάθη µε το πλήκτρο. Στο επόµενο βήµα πρέπει να συνδέσετε ένα Ι/Ο marker εισόδου στην είσοδο του ρολογιού του counter. Στην περίπτωση αυτή δεν είναι απαραίτητος ένας buffer εισόδου µια και το σήµα του clock θα εισέλθει στο FPGA από µια αποκλειστική για το clock είσοδο. Μετονοµάστε τον I/O marker σε clk και κάντε ακόµη ένα έλεγχο για σφάλµατα 48

στο σχέδιο του κυκλώµατος. Αν δεν υπάρχει κανένα σφάλµα αποθηκεύστε το κύκλωµα και εξέλθετε από τον επεξεργαστή των σχεδίων. Προσέξτε ότι τώρα έχει αλλάξει η ιεραρχία των modules (στο sources pane). Τα modules counter και leddcd εµφανίζονται ένα επίπεδο χαµηλότερα από το displ_cnt. 49

5. Προσαρµογή του κυκλώµατος στο FPGA Επιβάλλεται περιορισµούς (constraints) όπως και στα προηγούµενα εργαστήρια, χρησιµοποιώντας το αντικείµενο displ_cnt, ώστε η είσοδος clk να εκχωρηθεί το σήµα το ρολογιού των 50MHz του FPGA (ακόλουθος πίνακας ) και τα pins του LED όπως στην περίπτωση του προηγούµενο εργαστηρίου I/O Signal XSA-50 clk P88 s0 P67 s1 P39 s2 P62 s3 P60 s4 P46 s5 P57 s6 P49 50

1. Αποθηκεύστε τις εκχωρήσεις των pin και εξέλθετε από το παράθυρο Xilinx PACE. 2. Από το σηµείο αυτό συνεχίστε όπως σε προηγούµενο εργαστήριο για να : 3. ηµιουργήσετε το τη netlist του λογικού κυκλώµατος. (disp_cnt -> Synthesize) 4. Εκτελέσετε τις διεργασίες translate, map και place & route (διπλό κλικ στο Implement Design) 5. ηµιουργήσετε το bitstream disp_cnt.bit και να προγραµµατίστε το FPGA χρησιµοποιώντας το gsxload. 6. Μόλις ολοκληρωθεί προγραµµατισµός του FPGA το LED θα µετράει συνεχόµενα 7. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, E, F µε περίοδο 5.4 sec.. 51

8. Έλεγχος Χρονισµού Για να δείτε πόσο γρήγορα µπορεί να τρέξει ο µετρητής που δηµιουργήσατε, χρησιµοποιείστε τη διαδικασία Generate Post-Place & Route Timing. Η διαδικασία αυτή προσδιορίζει τις µέγιστες χρονικές καθυστερήσεις µεταξύ των λογικών στοιχείων του κυκλώµατος καθώς και εισάγονται από τη διασύνδεση των στοιχείων (καλωδίωση) Όταν ολοκληρωθεί η διαδικασία, µπορείτε να διαβάσετε τα αποτελέσµατα της ανάλυσης από την επιλογή Text-based Post-Place & Route Static Timing Report. 52

Σε αυτή την ανάλυση µπορείτε να δείτε ότι η ελάχιστη περίοδος (µέγιστη συχνότητα) του clock που µπορεί να γίνει αντιληπτή από το κύκλωµα είναι 5.266 ns που αντιστοιχεί σε συχνότητα 189.9MHz αρκετά µεγαλύτερη από τα 50 MHz του clock της XSA-50. Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50. Ο φάκελος των project σε µορφή zip µε όνοµα lab4_yourname.zip. 53

ΑΣΚΗΣΗ 5 Πλήρης Αθροιστής 3-bit Περιγραφή Σκοπός του σηµερινού εργαστηρίου είναι: Να σχεδιάσετε ένα πλήρη αθροιστή 3-bit (γράφοντας ένα απλό πρόγραµµα σε VHDL ή σχεδιάζοντας το σε επίπεδο πυλών). Το κύκλωµα πρέπει να έχει τρεις εισόδους (a,b,c) και δύο εξόδους (sum, carry) εύρους 1-bit. Αναλυτική περιγραφή του κυκλώµατος µπορείτε να βρείτε στην ενότητα 4-3 του βιβλίου «Ψηφιακή Σχεδίαση» Morris Mano. Να δηµιουργήσετε ένα testbech µε το οποίο θα ελέγξετε το κύκλωµα του αθροιστή (Simulate Behavioural Model) Εκχωρήστε τη κάθε µια από τις εισόδους σε 3 διακόπτες του dip-switch και τις εξόδους σε 2 τµήµατα του LED Μεταφορτώστε το κύκλωµα που σχεδιάσατε στην κάρτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώµατος. Μελετήστε τις χρονικές καθυστερήσεις χρησιµοποιώντας την επιλογή Simulate Post-Place & Route VHDL Model Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50 οι κυµατοµορφές από τον προσοµοίωση καθώς και τα σχόλια σας για τις χρονικές καθυστερήσεις του κυκλώµατος. Ο φάκελος των project σε µορφή zip µε όνοµα lab5_yourname.zip. 54

ΑΣΚΗΣΗ 6 Πολυπλέκτης 4 σε 1 Περιγραφή Σκοπός του σηµερινού εργαστηρίου είναι: Να σχεδιάσετε έναν πολυπλέκτη 4 σε 1 (γράφοντας ένα απλό πρόγραµµα σε VHDL ή σχεδιάζοντας το σε επίπεδο πυλών). Το κύκλωµα πρέπει να έχει τέσσερις εισόδους (a,b,c,d), δύο γραµµές επιλογών (s0, s1) και µια έξοδο (out) εύρους 1-bit. Αναλυτική περιγραφή του κυκλώµατος µπορείτε να βρείτε στην ενότητα 5-6 του βιβλίου «Ψηφιακή Σχεδίαση» Morris Mano. Να δηµιουργήσετε ένα testbech µε το οποίο θα ελέγξετε το κύκλωµα του πολυπλέκτη (Simulate Behavioural Model) Εκχωρήστε τη κάθε µια από τις εισόδους στους 4 διακόπτες του dip-switch και την έξοδο σε 1 τµήµα του LED. Χρησιµοποιήστε δύο γραµµές δεδοµένων της παράλληλης πόρτας για τις δύο γραµµές επιλογών Μεταφορτώστε το κύκλωµα που σχεδιάσατε στην κάρτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώµατος. Μελετήστε τις χρονικές καθυστερήσεις χρησιµοποιώντας την επιλογή Simulate Post-Place & Route VHDL Model Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50 οι κυµατοµορφές από τον προσοµοίωση καθώς και τα σχόλια σας για τις χρονικές καθυστερήσεις του κυκλώµατος. Ο φάκελος των project σε µορφή zip µε όνοµα lab6_yourname.zip. 55

56 ΑΣΚΗΣΗ 7 D Flip-Flop Περιγραφή Σκοπός του σηµερινού εργαστηρίου είναι: Να σχεδιάσετε ένα D-Flip-Flop (DFF) γράφοντας ένα πρόγραµµα σε VHDL. Το DFF πυροδοτείται κατά την άνοδο του σήµατος του ρολογιού (clk). Όταν η είσοδος reset (rst) είναι «1» η έξοδος πρέπει να είναι «0» ανεξάρτητη από την τιµή του clk. ιαφορετικά η έξοδος είναι ίση µε την είσοδο τη στιγµή της αλλαγής της κατάστασης του clk από «0» σε «1». Υπόδειξη: Για να περιγράψετε τη λειτουργία του flip-flop χρησιµοποιείστε την PROCESS για να δηµιουργήσετε µια σειριακή εκτέλεση του τµήµα του κώδικα που αυτή περιέχει. Αυτή θα εκτελείτε κάθε φορά που θα υπάρχει µια αλλαγή στα σήµατα (rst, clk) Να δηµιουργήσετε ένα testbech µε το οποίο θα ελέγξετε το κύκλωµα του DFF (Simulate Behavioural Model) Εκχωρήστε την είσοδο clk στο ρολόι της κάρτας και την rst στο bush button της XSA-50, ενώ την έξοδο σε 1 τµήµα του LED. Υπόδειξη: Υποβαθµίστε αρκετά τη συχνότητα του ρολογιού της XSA-50, ώστε να µπορείτε να παρατηρήσετε τις µεταβολές στο LED. Μεταφορτώστε το κύκλωµα που σχεδιάσατε στην κάρτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώµατος. Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50 οι κυµατοµορφές από τον προσοµοίωση καθώς και τα σχόλια σας για τις χρονικές καθυστερήσεις του κυκλώµατος. Ο φάκελος των project σε µορφή zip µε όνοµα lab7_yourname.zip. 56

ΑΣΚΗΣΗ 8 Μηχανή Πεπερασµένων Καταστάσεων Περιγραφή Σχεδιάστε σε VHDL το κύκλωµα το σχήµατος, το οποίο έχει δύο καταστάσεις (state A και state B) και µεταπηδά από την µία στην άλλη κάθε φορά που η είσοδος d= 1. Η έξοδος είναι x=a αν η µηχανή ήταν στην κατάσταση stateα ή x=b αν ήταν στην κατάσταση stateb. Η αρχική κατάσταση είναι η statea. Να δηµιουργήσετε ένα testbech µε το οποίο θα ελέγξετε το κύκλωµα του DFF (Simulate Behavioural Model) Εκχωρήστε την είσοδο clk στο ρολόι της κάρτας και την rst στο bush button της XSA-50, ενώ την έξοδο σε 1 τµήµα του LED. Οι τρεις είσοδοι µπορούν να εκχωρηθούν σε τρεις διακόπτες του dip-switch. Μεταφορτώστε το κύκλωµα που σχεδιάσατε στην κάρτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώµατος. Παραδοτέα Μία εργασία όπου θα αναφέρεται ο τρόπος διεξαγωγής του εργαστηρίου, οι πίνακες αληθείας του κυκλώµατος όπως αυτός προκύπτει από την πειραµατική επαλήθευση στην XSA-50 οι κυµατοµορφές από τον προσοµοίωση καθώς και τα σχόλια σας για τις χρονικές καθυστερήσεις του κυκλώµατος. Ο φάκελος των project σε µορφή zip µε όνοµα lab8_yourname.zip. 57

ΠΑΡΑΡΤΗΜΑ Α Εξοπλισµός Εργαστηρίου Τα εργαστήρια ψηφιακής σχεδίασης πραγµατοποιούνται χρησιµοποιώντας τη κάρτα XSA-50, η οποία είναι εφοδιασµένη µε το FPGA chip της xilinx (σχήµα 1). Η κάρτα δέχεται τροφοδοσία 9V DC, ενώ για όχι πολύ γρήγορα FPGA ψηφιακά κυκλώµατα µπορεί να τροφοδοτηθεί και µέσω της εισόδου PS-2. (Σχήµα 1). Οι τάσεις που απαιτούνται από τα επι µέρους στοιχεία της κάρτας δηµιουργούνται από τους σταθεροποιητές τάσης (voltage regulators). Προσέξτε, κατά τη λειτουργία της κάρτας οι σταθεροποιητές θερµαίνονται αρκετά. Για την τροφοδοσία της κάρτας µέσω της θύρας PS-2 πρέπει να τοποθετηθεί βραχυκυκλωτήρας (jumber) µεταξύ των pins 1 kai 2 του J7. H κάρτα XSA-50 συνδέεται µέσω της παράλληλης θύρας µε ένα PC. Μέσω κατάλληλου λογισµικού (xstools) µπορεί να γίνει η µεταφορά και έλεγχος των ψηφιακών κυκλωµάτων στο FPGA chip. Η κάρτα διαθέτει έξοδο VGA, για της χρήσης της όµως απαιτείται η κατασκευή ενός κυκλώµατος VGA driver στο FPGA. Με τη κατασκευή κατάλληλου driver (ψηφιακό κύκλωµα) η XSA-50 είναι δυνατόν να δεχθεί είσοδο από πληκτρολόγιο ή ποντίκι µέσω της θύρας PS-2. 58

Χαρακτηριστικά Στοιχεία της XSA-50: Η κάρτα XSA-50 περιλαµβάνει τα ακόλουθα στοιχεία: XC2S50 Spartan-II FPGA: Είναι το κύριο στοιχεία αποθήκευσης των ψηφιακών κυκλωµάτων που σχεδιάζονται µε το κατάλληλο λογισµικό (ISE), αποτελούµενο από 50000 πύλες. XC9572XL CPLD: Το CPLD χρησιµοποιείται για να ελέγχει την επικοινωνία της κάρτας µε τον Η/Υ µέσω της παράλληλης θύρας. Osc: Προγραµµατιζόµενος ταλαντωτής, δηµιουργεί το σήµα του clock που αποστέλλεται στην κάρτα Flash: Μνήµα flash των 128 KByte, όπου µπορούν να αποθηκευτούν µόνιµα δεδοµένα και ψηφιακά κυκλώµατα (bitstreams) SDRAM: 8 MByte SDRAM για την παροδική αποθήκευση δεδοµένων τα οποία είναι προσβάσιµα από το FPGA. LED: Ένα LED επτά τµηµάτων για την παρουσίαση οπτικών αποτελεσµάτων κατά την λειτουργία της κάρτας. DIP switch: Ένας διακόπτης τεσσάρων θέσεων (DIP-switch) µε τον οποίο εισάγονται ρυθµίσεις (δεδοµένα) στην XSA-50 ή καθορίζεται η ανώτερη διεύθυνση της µνήµης. Όταν δεν χρησιµοποιείται, οι θέσεις των διακοπτών του DIP switch πρέπει να είναι στη θέση OFF. Pushbutton: ιακόπτης πιέσεως για την αποστολή στιγµιαίων πληροφοριών στο FPGA. Όταν ο διακόπτης είναι πιεσµένος χαµηλή τάση εφαρµόζεται στο αντίστοιχο pin του FPGA. Parallel Port: Η παράλληλη πόρτα αποτελεί την κύρια δίοδο επικοινωνίας της κάρτας για τη µεταφορά δεδοµένων και των σχεδίων των ψηφιακών κυκλωµάτων (bitstreams). PS/2 Port: Είσοδος PS/2 για την σύνδεση πληκτρολογίου ή ποντικιού VGA Port: Θύρα VGA για την παρουσίαση µηνυµάτων από την XSA-50. 59

Η κάρτα XSA-50 µπορεί να συνδεθεί µε µία κάρτα επέκτασης, την XST-2.x του σχήµατος που ακολουθεί. Η κάρτα XST 2.x είναι εφοδιασµένη µε: USB 1.1 : Επιτρέπει τη σύνδεση ενός H/Y µε την κάρτα XStend µέσω ενός καλωδίου USB (είσοδος J5) RS-232 : Επιτρέπει τη σύνδεση της κάρτας µέσω ενός 9-pin RS-232 καλωδίου µε τον H/Y Stereo Input :Μία έξοδος ήχου µπορεί να συνδεθεί στην είσοδο J1 για την επεξεργασία του από κατάλληλο ψηφιακό κύκλωµα. Stereo Output: Μέσω της εξόδου J2 ήχος µπορεί να σταλεί σε ζεύγος IDE :Μια διεπαφή IDE επιτρέπει στην XSA-50 να αποθηκεύει και να διαβάζει δεδοµένα σε σκληρό δίσκο. Τροφοδοσία της κάρτας XSA-50 και XST 2.x Τροφοδοσία µπορεί να εφαρµοσθεί στην κάρτα XSA-50 και στην XST 2.x µε τους ακόλουθους τρόπους. Άµεσα στην XSA-50 µε το τροφοδοτικό των 9V DC 60

Με το τροφοδοτικό των 9V DC στην κάρτα XStend Μέσω ενός συνήθους τροφοδοτικού ATX PC στην κάρτα XStend (υποδοχή J6). 61

4. Με διπλή τροφοδοσία 5V / 3.3V στις εισόδους της XST 2.x όπως φαίνεται στο ακόλουθο σχήµα: 62

Έλεγχος καλής λειτουργίας Για να ελέγξετε αν λειτουργεί σωστά η XSA-50 µετά τη σύνδεση της µέσω του παράλληλου καλωδίου µε το PC και τη τροφοδοσία της µε 9V DC, εκτελέστε την εφαρµογή GXTEST από το εικονίδιο που βρίσκεται στην επιφάνεια εργασίας σας. Στο παράθυρο που θα εµφανισθεί επιλέξτε την XSA-50 σαν Board Type και την LPT1 σαν θύρα εισόδου. Στη συνέχεια πιέστε το πλήκτρο TEST για να αρχίσει η διαδικασία ελέγχου. Η εφαρµογή GXSTEST θα ρυθµίσει το FPGA για την διαδικασία ελέγχου. Αν αυτή είναι επιτυχής, σε 30 δευτερόλεπτα θα εµφανισθεί η ένδειξη Ο στο LED της κάρτας και η εφαρµογή θα σας ενηµερώσει για την επιτυχία του ελέγχου. Σε αντίθετη περίπτωση ο χαρακτήρας Ε θα εµφανισθεί στο LED της κάρτας. Ρύθµιση της συχνότητας του ταλαντωτή Η κάρτα XSA-50 είναι εφοδιασµένη µε ένα 100 ΜΗz κρύσταλλο (ταλαντωτή) (a Dallas Semiconductor DS1075Z-100). Η αρχική του συχνότητα µπορεί να διαιρεθεί µε τους παράγοντες 1, 2,... µέχρι το 2052 παρέχοντας τις αντίστοιχες συχνότητες του ρολογιού. Η συχνότητα αυτή αποστέλλεται στα υπόλοιπα µέρη της κάρτας σαν σήµα του ρολογιού. Η επιλογή του κατάλληλου διαιρέτη της βασικής συχνότητας γίνεται µέσω της εφαρµογής GXSSETCLK. Με την εκτέλεση της, από το εικονίδιο που βρίσκεται στην επιφάνεια εργασίας εµφανίζονται ένα παράθυρο όπου µπορείτε να επιλέξετε το τύπο της κάρτας (XSA-50), το θύρα επικοινωνίας µε τον Η/Υ και το διαιρέτη της βασικής συχνότητας (από 1 έως 2052). Πιέζοντας το πλήκτρο SET και ακολουθώντας τις οδηγίες που θα εµφανισθούν από την εφαρµογή GXSSETCLK για την τροφοδοσία και την θέση των βραχυκυκλωτήρων (jumbers) γίνεται ολοκληρώνεται ο επαναπρογραµµατισµός της συχνότητας. 63

Παράλληλη Πόρτα Η παράλληλη πόρτα είναι η κύρια µονάδα διασύνδεσης της XSA-50. Η γραµµή C0 (control line) συνδέεται απευθείας µε τον ταλαντωτή DS1075 και χρησιµοποιείται για τη ρύθµιση του διαιρέτη της συχνότητας όπως αναφέρθηκε νωρίτερα. Η γραµµή S6 συνδέεται απευθείας στο FPGA και χρησιµοποιείται σαν δίαυλος επικοινωνίας από το FPGA στο PC. Τα υπόλοιπα 15 pins χρησιµοποιούνται µέσω του CPLD ως εξής: Οι γραµµές επικοινωνίας (control lines) C1-C3 συνδέονται στα JTAG pins µέσω των οποίων γίνεται ο προγραµµατισµός του CPLD. Πληροφορίες από το CPLD επιστρέφουν στον Η/Υ µέσω της γραµµής S7 (status line) Οι οκτώ γραµµές δεδοµένων, D0-D7, και οι υπόλοιπες γραµµές κατάστασης, S3-S5, συνδέονται σε pins γενικής χρήσης του CPLD. To CPLD µπορεί να προγραµµατιστεί (π.χ. µε το αρχείο dwnldpar.svf) ώστε λειτουργεί σαν µονάδα διασύνδεσης µεταξύ της παράλληλης πόρτας και του FPGA. 64

Ρυθµίσεις της εφαρµογής ISE 7.1 για χρήση µε την κάρτα XSA-50 Οι παράµετροι της κάρτας XSA-50 που θα πρέπει να δοθούν στο Xilin ISE 7.1 κατά το σχεδιασµό των ψηφιακών κυκλωµάτων είναι: Device Family Spartan2 Device xc2s50 Package tq144 Speed (-) 5 LEDs: Κατά τη διάρκεια των εργαστηρίων θα χρησιµοποιήσουµε τα LED s της XSA-50 για την παρουσίαση αποτελεσµάτων. Οι εκχωρήσεις των Pins που αφορούν το κάθε τµήµα του LED δίδονται στον ακόλουθο πίνακα LED Decoder Output XSA-50 s0 s1 s2 s3 s4 s5 s6 P67 P39 P62 P60 P46 P57 P49. 65

Επικοινωνία Μέσω παράλληλης πόρτας: Στον ακόλουθο πίνακα δίδεται η αντιστοιχία των pins µε τα αντίστοιχα bits της παράλληλης πόρτας (εφαρµογή GXSPort) Port Bit D0 D1 D2 D3 D4 D5 Pin Assignment p50 p48 p42 p47 p65 p51 Clock PushButton I/O Signal XSA-50 clk P88 I/O Signal XSA-50 clk P93 Dip-Switch DIP Switch pins A Pin 54 B Pin 64 C Pin 63 D Pin 67 66

ΠΑΡΑΡΤΗΜΑ Β Ροή Σχεδίασης και VHDL Ροή Σχεδίασης Πριν περάσουµε σε περιγραφή της γλώσσας VHDL είναι χρήσιµο να δούµε το περιβάλλον και τη ροή της σχεδίασης. Τα βήµατα µιας σχεδίασης βασισµένης σε VHDL είναι µπορούν να οµαδοποιηθούν σε front-end και back-end. Σχεδίαση Αρχικά ψηφιακά κυκλώµατα µπορούν να σχεδιασθούν µε το κατάλληλο λογισµικό. Μεγαλύτερα κυκλώµατα µπορούν να σχεδιασθούν ιεραρχικά από µικρότερα κυκλώµατα (δοµικές µονάδες). Λεπτοµέρειες της σχεδίασης µπορούν να συµπληρωθούν αργότερα χρησιµοποιώντας τη γλώσσα VHDL (text based). Συγγραφή Στο επόµενο βήµα γράφεται ο κώδικας VHDL που περιγράφει επακριβώς τα δοµικά στοιχεία, τον τρόπο αλληλεπίδρασης µεταξύ τους και λεπτοµέρειες της εσωτερικής τους δοµής. Compilation Από τη στιγµή που έχει ολοκληρωθεί η συγγραφή του κώδικα, αυτός πρέπει να περάσει από τη φάση της συµβολοµετάφρασης (compilation). Ένας VHDL compiler αναλύει τον κώδικα για συντακτικά λάθη και ελέγχει τη συµβατότητα του µε τµήµατα του κώδικα από τον οποίο εξαρτάται. Επίσης, στη φάση αυτή δηµιουργούνται και οι πληροφορίες που είναι απαραίτητες για την φάση της προσοµοίωσης του κυκλώµατος. Προσοµοίωση Στη φάση αυτή, µε τη βοήθεια της εφαρµογής VHDL Simulator, ορίζονται διάφορες τιµές για τις εισόδους του κυκλώµατος και προσδιορίζονται οι τιµές των εξόδων, χωρίς να κατασκευαστεί το φυσικό κύκλωµα. Για µικρά κυκλώµατα είναι αρκετό να δοθούν διάφορες τιµές εισόδου και να παρατηρηθεί η έξοδος χειροκίνητα. Σε µεγάλα όµως κυκλώµατα, η VHDL παρέχει τη δυνατότητα δηµιουργίας ενός testbench, που θέτει αυτόµατα διάφορες τιµές στις εισόδους και τις συγκρίνει µε την αναµενόµενη τιµή εξόδου. Verification Η διαδικασία της προσοµοίωσης είναι µέρος µιας ευρύτερης διαδικασίας που λέγεται verification και έχει σαν σκοπό να ελέγξει διεξοδικά την ορθή λειτουργία του κυκλώµατος. Μεγάλο µέρος της προσπάθειας καταβάλλεται στο καθορισµό σεναρίων που ελέγχουν το κύκλωµα σε µεγάλο εύρος λογικών συνθηκών. 67

Functional Verification. Η διαδικασία αυτή µπορεί να διακριθεί σε δύο µέρη. Την functional verification όπου η λειτουργία του κυκλώµατος ελέγχεται ανεξάρτητα από το χρόνο. Τόσο οι καθυστερήσεις στις πύλες όσο και όλες οι υπόλοιπες παράµετροι χρόνου θεωρούνται µηδέν. Timing Verification Στο δεύτερο µέρος, το timing verification, ελέγχεται η λειτουργία του κυκλώµατος λαµβάνοντας υπόψη την αναµενόµενη χρονική καθυστέρηση των πυλών καθώς και τς χρονικές απαιτήσεις σειριακών κυκλωµάτων όπως τα flip-flops. Είναι σύνηθες να ολοκληρώνεται η διαδικασία functional simulation, προτού αρχίσουν τα βήµατα που αναφέρονται σαν back-end. Όµως η ικανότητα να πραγµατοποιήσουµε µε ακρίβεια timing simulation στο σηµείο αυτό είναι περιορισµένη, µια και το αποτέλεσµα είναι ισχυρά εξαρτώµενο από τις επόµενες διαδικασίες της Σύνθεσης (synthesis) και τhw Προσαρµογής (Fitting). Σύνθεση (Synthesis) Κατά τη διάρκεια της σύνθεσης η περιγραφή του κυκλώµατος στη VHDL µεταφράζεται δοµικών στοιχείων που µπορούν να συναρµολογηθούν στην τεχνολογία για την οποία προορίζεται το κύκλωµα. Για παράδειγµα, για ένα FPGA δηµιουργείτε ένα σύνολο πυλών και ένα σύνολο από συνδέσεις (netlist) που περιγράφει πως οι πύλες θα συνδεθούν µεταξύ τους. Προσαρµογή (Fitting, Place & Route) Στη διαδικασία αυτή, το κατάλληλο λογισµικό (fitter) προσαρµόζει τα δοµικά στοιχεία που δηµιουργήθηκαν στο προηγούµενο βήµα στους διαθέσιµους πόρους της συσκευής για την οποία προορίζεται το κύκλωµα. Ο σχεδιαστής στο βήµα αυτό µπορεί να εισάγει περιορισµούς τόσο για την τοποθέτηση των δοµικών στοιχείων στη συσκευή όσο και για την εκχώρηση των pins των εισόδων και εξόδων του κυκλώµατος. Το τελευταίο βήµα είναι η timing verification του προσαρµοσµένου κυκλώµατος, όπου µπορούν να ληφθούν υπόψη οι χρονικοί περιορισµοί που εισάγουν οι πύλες, το µήκος των καλωδίων, ο ηλεκτρικό φόρτος του κυκλώµατος κτλ. Σε αυτό το βήµα ελέγχονται τα ίδια σενάρια µε την περίπτωση του functional verification, γνωρίζοντας όµως µε ακρίβεια το τρόπο µε τον οποίο θα δοµηθεί το κύκλωµα στο FPGA. οµή προγράµµατος VHDL H VHDL είναι µια γλώσσα που δηµιουργήθηκε έχοντας αρχές του δοµηµένου προγραµµατισµού. Η κύρια ιδέα είναι να ορίζει τις εισόδους και εξόδους ενός κυκλώµατος, κρύβοντας την εσωτερική του δοµή. Στη VHDL µε τη δήλωση entity ορίζονται οι είσοδοι και έξοδοι µιας αυτοτελούς µονάδας (module), ενώ µε τη δήλωση architecture περιγράφεται η εσωτερική δοµή και λειτουργία της αυτοτελούς µονάδας. 68

Στο αρχείο ενός προγράµµατος VHDL η δήλωση entity και architecture είναι διαχωρισµένες όπως στο παραπάνω σχήµα. Ακολουθεί ένα παράδειγµα ενός προγράµµατος σε VHDL entity Inhibit is -- also known as 'BUT-NOT' port (X,Y: in BIT; --as in 'X but not Y' Z: out BIT); --(see [Klir, 1972]) end Inhibit; architecture Inhibit_arch of Inhibit is begin Z <= '1' when X='1' and Y='0' else '0'; end Inhibit_arch; Όπως σε κάθε γλώσσα, έτσι και στη VHDL υπάρχει µια σειρά από δεσµευµένες λέξεις. Στο ανωτέρω πρόγραµµα τέτοιες είναι οι entity, port, is, in, out, end, architecture, begin, when, else και not. Με τη δήλωση entity ορίζεται το όνοµα της αυτοτελούς µονάδος καθώς και οι είσοδοι και έξοδοι της (Με τη δεσµευµένη λέξη port). Τα X, Y, Z αποτελούν τα σήµατα εισόδου / εξόδου στη µονάδα. Η κατεύθυνση τους προσδιορίζεται µε τη χρήση των λεκτικών in, out και inout. Ορίζεται επίσης και το είδος του σήµατος π.χ. bit, real, integer, boolen κτλ. Με τη δήλωση architecture ορίζεται η εσωτερική δοµή της µονάδας. Τα σήµατα (εισόδου & εξόδου) πηγάζουν από τη δήλωση entity που έχει προηγηθεί. Η architecture µπορεί να περιλαµβάνει, επίσης, σήµατα και δηλώσεις που είναι τοπικά (local) κατ αναλογία µε τις γνωστές γλώσσες υψηλού επιπέδου. Σε αντιστοιχία µε τις γλώσσες υψηλού επιπέδου, µια VHDL function, δέχεται ένα σύνολο από ορίσµατα και επιστρέφει ένα αποτέλεσµα. Η δοµή µιας συνάρτησης (function) VHDL είναι ως εξής: function function-name ( signal-names : signal-type; 69

signal-names : signal-type;... signal-names : signal-type ) return return-type is type declarations constant declarations function definitions procedure definitions begin sequential-statement... sequential-statement end function-name; Μια VHDL procedure (ρουτίνα) είναι παρόµοια µε τη συνάρτηση (function) µε τη διαφορά ότι δεν επιστρέφει κάποιο αποτέλεσµα. Μια ρουτίνα (procedure) δέχεται ορίσµατα τύπου out ή inout. Οπότε µε το τρόπο αυτό είναι εφικτό να επιστρέψει ένα αποτέλεσµα. Libraries and Packages Μια βιβλιοθήκη (library) VHDL αποτελεί το χώρο όπου ο VHDL compiler αποθηκεύει πληροφορίες για µια σχεδίαση ενός project, συµπεριλαµβάνοντας και ενδιάµεσα αρχεία που χρησιµοποιούνται κατά την ανάλυση, προσοµοίωση και σύνθεση του κυκλώµατος. Για την τρέχουσα σχεδίαση σε VHDL ο compiler δηµιουργεί αυτόµατα και χρησιµοποιεί στη συνέχεια τη βιβλιοθήκη που ονοµάζεται work. Η βιβλιοθήκη work (συνήθως ένας υποκατάλογος στο κατάλογο του project) δεν περιλαµβάνει όλες τις πληροφορίες που είναι απαραίτητες για ένα συγκεκριµένο project. Ακόµη και πολύ µικρά σχέδια κυκλωµάτων είναι δυνατό να χρησιµοποιούν ορισµούς από τη βιβλιοθήκη της IEEE. Για να συµπεριληφθεί η βιβλιοθήκη αυτή στον κώδικα VHDL απαιτείτε η δήλωση: library ieee; H δήλωση library work; υπονοείτε ότι περιλαµβάνεται στην αρχή κάθε αρχείου VHDL. Σε µια βιβλιοθήκη περιλαµβάνονται αυτοτελείς µονάδες (entities & architectures), όχι όµως και ορισµοί µεταβλητών, τύπων σηµάτων κτλ. Τέτοιες πληροφορίες αποθηκεύονται σε VHDL packages (πακέτα). Πρόσβαση στους ορισµούς ενός package γίνεται µε τη χρήση του λεκτικού use. Για παράδειγµα, για να χρησιµοποιηθούν όλοι οι ορισµοί του πακέτου IEEE standard 1164 απαιτείτε η δήλωση: use ieee.std_logic_1164.all; Processes H δήλωση process στη VHDL είναι ο κυριότερος τρόπος περιγραφής σειριακών λειτουργιών (π.χ. µνήµης, registeres circuits). Σε τετοιες περιπτώσεις η κυριότερη 70

δοµή της process είναι: architecture arch_name of end_name is begin process_name: process(sensitivity_list) local declaration; local declaration;. begin sequential statement; sequential statement; end process; end arch_name; H sensitivity_list είναι προεραιτική και δηλώνει τα σήµατα στα οποία όταν ανιχνευθεί µια αλλαγή θα εκτελεσθεί η process. Καθίσταται απαραίτητη στις περιπτώσεις όπου δεν υπάρχουν εντολές wait στην process για να αναστείλουν την εκτέλεση της σε ορισµένα σηµεία. Ένα flip-flop είναι ένα πολύ καλό παράδειγµα που περιγράφεται µε µια process. Παραµένει αδρανές χωρίς να αλλάζει κατάσταση να συµβεί κάποιο σηµαντικό γεγονός (π.χ. αλλαγή του ρολογιού ή κάποιο γεγονός reset) το οποίο το θέτει σε λειτουργία και εν γένει το οδηγεί σε άλλη κατάσταση Στο παράδειγµα που ακολουθεί, παρουσιάζεται η λειτουργία της process για το κύκλωµα barrel sifter reg: process(rst, Clk) variable Qreg: std_logic_vector(0 to 7); begin if Rst= 1 then --async reset Qreg:= 00000000 ; elseif (Clk = 1 and Clk event) then if (Load = 1 ) then Qreg := Data; else Qreg := Qreg(1 to 7 ) & Qreg(0); end if; end if; Q <=Qreg; end process; Τα σήµατα Rst και Clk είναι τα µόνα που µπορούν να ενεργοποιήσουν την process. Αν δεν υπάρξει κανένα γεγονός σε αυτά, τότε η process βρίσκεται σε κατάσταση αναµονής. Αν υπάρχει κάποιο γεγονός στην είσοδο Rst που τη φέρνει στη κατάσταση 1 η πρώτη δήλωση if θα εκτελεστεί και η µεταβλητή Qreg θα λάβει τη τιµή 00000000. Αν συµβεί κάποιο γεγονός στο σήµα Clk, τότε η διεργασία θα εκτελεσθεί ξανά. Αν to 71

Rst εξακολουθεί να έχει τη τιµή 1, θα εκτελεσθεί το πρώτο if όπως και νωρίτερα. Αν όµως το Rst δεν έχει τη τιµή 1 η έκφραση (Clk = 1 and Clk event) θα προσδιορισθεί. Για να ανιχνευθεί η µεταβολή από τη θέση 0 στη θέση 1 αρκεί η δήλωση Clk = 1. Όµως αν η process εκτελέστηκε εξαιτίας κάποιο γεγονότος στο Rst, π.χ. τη πτώση από 1 σε 0 δεν επιθυµούµε να εκτελεσθεί το µέρος του κώδικα που αφορά γεγονός στο Clk. Για να το διασφαλίσουµε έχουµε προσθέσει τη δήλωση Clk event. Σήµατα και Μεταβλητές ύο είναι οι κύριοι τύποι των αντικειµένων που συναντάµε στην VHDL για τη µεταφορά δεδοµένων: σήµατα και µεταβλητές. Σε γενικές γραµµές οι µεταβλητές χρησιµοποιούνται για τη µεταφορά δεδοµένων µεταξύ σειριακών διεργασιών (processes, procedures και functions), ενώ τα σήµατα χρησιµοποιούνται για τη µεταφορά δεδοµένων µεταξύ των παράλληλων στοιχείων του σχεδίου του κυκλώµατος (π.χ. δύο processes) Είναι χρήσιµο να σκεφτόµαστε τα σήµατα σαν καλώδια (όπως στο σχέδιο του κυκλώµατος) και τις µεταβλητές σαν προσωρινές θέσεις µνήµης. 72