Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο...

44
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Αρχιτεκτονική Υπολογιστών Ι Εργαστηριακές Ασκήσεις Οκτώβριος 2008

Upload: others

Post on 24-Apr-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

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

ΑΑρρχχιιττεεκκττοοννιικκήή ΥΥπποολλοογγιισσττώώνν ΙΙ

Εργαστηριακές Ασκήσεις

Οκτώβριος 2008

Page 2: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Περιεχόμενα Άσκηση 1: LED Decoder ....................................................................................................... 3 Άσκηση 2: Ιεραρχική Σχεδίαση ............................................................................................ 16 Άσκηση 3: Πλήρης Αθροιστής ............................................................................................. 28 Άσκηση 4: Πολυπλέκτης 4 σε 1 .......................................................................................... 29 Άσκηση 5: D Flip-Flop ........................................................................................................ 30 Παράρτημα Α: Εξοπλισμός Εργαστηρίου ............................................................................ 31 Παράρτημα Β: Ροή Σχεδίασης και VHDL ........................................................................... 39

2

Page 3: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΑΣΚΗΣΗ 1

LLEEDD DDeeccooddeerr

Περιγραφή Το ψηφιακό κύκλωμα αυτού του εργαστηρίου είναι ένας αποκωδικοποιητής LED (LED decoder). Συγκεκριμένα το κύκλωμα δέχεται 4-bit σαν είσοδο και έχει 7-bit έξοδο με τα οποία οδηγούμε τo 7-segment LED της πλακέτας XSA-50. Τα τμήματα του LED θα πρέπει να οδηγηθούν έτσι ώστε να αναπαριστούν τη δεκαεξαδική τιμή των 4-bit όπως στον παρακάτω πίνακα:

Four-bit Input Hex Digit LED Display

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

A 1010 A

b 1011 B

C 1100 C

d 1101 D

E 1110 E

F 1111 F

Πίνακας 1-1 Για την κατασκευή του κυκλώματος θα χρησιμοποιήσουμε στοιχεία της VHDL.

3

Page 4: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Ένα υψηλού επιπέδου διάγραμμα του LED-decoder είναι:

Ακολουθήστε τα παρακάτω βήματα: • Δημιουργήστε ένα νέο project • Προσθέστε ένα αρχείο πηγαίου κώδικα σε VHDL (VHDL Module) που θα υλοποιεί τη λειτουργία του αποκωδικοποιητή.

• Αναθέστε τις 4 γραμμές εισόδου του κυκλώματος σε 4 γραμμές δεδομένων της παράλληλης θύρας τις οποίες μπορείτε να ελέγξετε από την εφαρμογή gxsport. Αναθέστε τα 7 bit της εξόδου του κυκλώματος στα τμήματα του LED της XSA-50.

• Μεταφέρετε το κύκλωμα στην XSA-50. • Ελέγξετε το αποτέλεσμα με την εφαρμογή gxsport. 1. Δημιουργία νέου Project • Δημιουργήστε ένα νέο project. Ξεκινήστε την εφαρμογή ISE.

Για να δημιουργήσετε ένα νέο project χρησιμοποιείστε το μενού File -> New Project

4

Page 5: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

• Στην επιλογή Top-Level Source Type επιλέξτε HDL.

Μετά την επιλογή του πλήκτρου “Next” εμφανίζεται ένα παράθυρο όπου πρέπει να εισάγετε κάποιες χαρακτηριστικές τιμές του FPGA chip που θα χρησιμοποιήσετε. • Εισάγετε σωστά τις παραμέτρους της πλακέτας XSA-50 Αυτές είναι:

Device Family Device Package Speed Grade

Spartan2 xc2s50 tq144 -5 Στη συνέχεια επιλέξτε “Next”.

5

Page 6: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

2. Δημιουργία του αρχείου VHDL

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

6

Page 7: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

• Στο παράθυρο 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). Έχουν προστεθεί κλήσεις στη βιβλιοθήκη της IEEE και σε πακέτα που περιέχουν χρήσιμους ορισμούς για τη δημιουργία ενός ψηφιακού κυκλώματος. Έχουν ορισθεί οι είσοδοι και οι έξοδοι του LED decoder. Η συμπεριφορά του LED decoder για κάθε συνδυασμό των σημάτων εισόδου πρέπει να προστεθεί μεταξύ των γραμμών με τα “begin” και “end”.

7

Page 8: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

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

8

Page 9: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

1100101

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

9

Page 10: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

1100101

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

10

Page 11: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

1100101

1. Η διαδικασία translate μετατρέπει το netlist (output του synthesizer) σε μια εξειδικευμένη μορφή, προσθέτοντας τυχόν περιορισμούς (θα αναφερθούμε περισσότερο αργότερα σε αυτούς).

2. Η διαδικασία map αναλύει (decompose) τη netlist και την επανασυνθέτει με τέτοιο τρόπο ώστε να υλοποιείται με στοιχεία του FPGA chip της XSA-50 (ή όποιου FPGA έχετε επιλέξει).

3. Τέλος, η διαδικασία Place & Route αντιστοιχεί τα στοιχεία του κυκλώματος σε συγκεκριμένες θέσεις στο FPGA chip και προγραμματίζει τους στοιχειώδεις «διακόπτες» του FPGA με τέτοιο τρόπο ώστε να δρομολογεί τα σήματα μεταξύ των λογικών στοιχείων.

4. Με την επιλογή Place & Route Report και την Pad Report μπορείτε να δείτε ποιο ποσοστό του FPGA χρησιμοποιεί το κύκλωμά σας και ποια pins είναι οι είσοδοι και έξοδοι του κυκλώματος.

5. Αναθέσεις των pin (Περιορισμοί)

• Αν δεν τεθούν κάποιοι περιορισμοί, οι αναθέσεις των pin στις εισόδους και εξόδους του κυκλώματος γίνονται αυτόματα (τυχαία) κατά τη διαδικασία της προσαρμογής.

11

Page 12: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Μπορούμε να επιλέξουμε τα pins που θα χρησιμοποιήσουμε με αρχεία περιορισμών (constraints).

• Το FPGA λαμβάνει οκτώ εισόδους μέσω τις παράλληλης θύρας. Τέσσερις από αυτές θα χρησιμοποιήσουμε για την είσοδο του LED decoder, όπως στον πίνακα που ακολουθεί:

LED Decoder Input XSA-50

d0 P50 d1 P48 d2 P42 d3 P47

• Οι έξοδοι του LED decoder πρέπει να ανατεθούν στο 7-segment LED σύμφωνα με

τον ακόλουθο πίνακα.

LED Decoder Output XSA-50

s0 P67 s1 P39 s2 P62 s3 P60 s4 P46 s5 P57 s6 P49

Για τη δημιουργία του αρχείου των περιορισμών επιλέξτε αρχικά το αντικείμενο leddcd (source pane) και με δεξί κλικ δημιουργήστε ένα νέο αρχείο τύπου Implementation Constraints File (ονομάστε το leddcd).

12

Page 13: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

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

1100101

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

13

Page 14: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

• Μετά την ολοκλήρωση των αλλαγών και την αποθήκευση τους είναι απαραίτητη η επανεκτέλεση της διεργασίας Imlement Design.

6. Δημιουργία του αρχείου για το προγραμματισμό του FPGA (bitstream)

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

Χρησιμοποιείστε την εφαρμογή gxsload για να προγραμματίσετε το FPGA της XSA-50. Απλώς σύρετε το .bit αρχείο στο πλαίσιο FPGA/CPLD και κατόπιν πατήστε το κουμπί "Load". 8. Έλεγχος του κυκλώματος Ο έλεγχος του κυκλώματος γίνεται με την εφαρμογή gxsport, με την οποία ελέγχονται οι οκτώ είσοδοι του FPGA μέσω του παράλληλου καλωδίου. Οι είσοδοι d0, d1, d2, και d3 του LED decoder έχουν ανατεθεί στα pins που ελέγχονται από τα bits D0, D1, D2 και D3 της εφαρμογής gxsport. Για να δώσετε για παράδειγμα την τιμή 1110 στην είσοδο του LED

14

Page 15: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

decoder θέστε (D3,D2,D1,D0) = (1,1,1,0) και πατήστε το πλήκτρο Strobe. To γράμμα Ε θα εμφανιστεί στο LED.

Προσοχή: Το bit D7 της παράλληλης θύρας ελέγχει τον προγραμματισμό του FPGA. Αν δώσετε τη τιμή 0 θα διαγραφεί ο προγραμματισμός και θα πρέπει να μεταφέρετε το bitstream ξανά με την εφαρμογή gxsload.

• Επαληθεύστε ότι το κύκλωμα σας αποδίδει όλες τις τιμές του πίνακα 1-1. Παραδοτέο Αναφορά στην οποία πρέπει να εξηγήσετε τον κώδικα που γράψατε για την περιγραφή του LED Decoder. Ποια είναι η λειτουργία της εντολής when … else;

15

Page 16: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΑΣΚΗΣΗ 2

ΙΙεερρααρρχχιικκήή ΣΣχχεεδδιιάάσσηη

Περιγραφή Στην άσκηση αυτή θα χρησιμοποιήσετε το κύκλωμα του LED decoder που φτιάξατε στο προηγούμενο εργαστήριο. Σκοπός αυτού του εργαστηρίου είναι η απόκτηση εμπειρίας στην ιεραρχική σχεδίαση καθώς και σχεδίαση κυκλωμάτων μέσω λογικών μονάδων από βιβλιοθήκες. Θα κατασκευάσετε έναν μετρητή των 4 bit, η τιμή του οποίου θα εμφανίζεται στο LED της XSA-50 μέσω του LED decoder. Ένα διάγραμμα υψηλού επιπέδου του υπό κατασκευή κυκλώματος δίνεται στο επόμενο σχήμα:

Η σχεδίαση αυτή είναι ιεραρχική. Τόσο ο LED decoder όσο και ο μετρητής είναι αυτόνομες μονάδες που συνδέονται μεταξύ τους μέσω μιας άλλης μονάδας υψηλότερου επιπέδου, ώστε να δημιουργήσουν το τελικό κύκλωμα. 1. Δημιουργία νέου Project

Δημιουργήστε ένα νέο project όπως και στην προηγούμενη άσκηση. Στο σημείο όπου η εφαρμογή σας προτρέπει να προσθέσετε ήδη υπάρχοντα αρχεία πηγαίου κώδικα, επιλέξτε την προσθήκη κώδικα σε VHDL και προσθέστε το αρχείο leddcd.vhd από τον κατάλογο του προηγούμενου εργαστηρίου.

16

Page 17: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

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

17

Page 18: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Στο παράθυρο του επεξεργαστή κειμένου προσθέστε τον ακόλουθο κώδικα VHDL για το counter module (γραμμές 17-25):

Η γραμμή 17 ορίζει ένα 28-bit σήμα (signal) cnt, το οποίο αναπαριστά την τρέχουσα τιμή του counter. H process (γραμμές 19-24) καθορίζει πότε η τιμή του counter αυξάνεται. Η συνθήκη της γραμμής 21 είναι αληθής μόνο όταν το σήμα clk πηγαίνει από 1 σε 0. Η δήλωση στη γραμμή 22 αυξάνει την τιμή του cnt κατά 1. Τέλος στη γραμμή 25, τα πρώτα 4-bit της τρέχουσας τιμής του counter οδηγούνται προς την έξοδο του module. Ο λόγος για τον οποίο χρησιμοποιούμε τα πρώτα 4-bit από ένα 28-bit signal, είναι για να μειώσουμε τη συχνότητα με την οποία θα αναβοσβήνει το LED της πλακέτας ώστε να είναι παρατηρήσιμο. Η XSA-50 είναι εφοδιασμένη με ένα clock συχνότητας 50 MHz. Με αυτή τη συχνότητα το LED θα αναβόσβηνε υπερβολικά γρήγορα για να είναι παρατηρήσιμο. Χρησιμοποιώντας όμως μόνο τα πρώτα 4-bit, το LED θα αλλάζει μόνο κάθε 2

24 κύκλους του

ρολογιού ή κάθε 224

/ (50 x 106) = 0.336 δευτερόλεπτα, αρκετά αργά για να παρατηρηθεί.

Στο σημείο αυτό έχουμε δύο ανεξάρτητα modules τα οποία θα πρέπει να τα συνδέσετε μεταξύ τους. Πριν από αυτό πρέπει να δημιουργήσετε το σχηματικό του κυκλώματος (schematic) τόσο για τον LED decoder όσο και για τον counter. Για να δημιουργήσουμε το counter schematic επιλέγουμε το αντικείμενο counter στο source pane και εκτελούμε τη διεργασία Create Schematic Symbol. Όμοια δημιουργούμε και το schematic για το LED decoder.

18

Page 19: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Προσθέστε ένα schematic υψηλότερου επιπέδου για να συνδέσετε τα δύο modules. Επιλέγοντας το αντικείμενο xc2s50-5tq144, δημιουργήστε ένα νέο schematic με όνομα disp_cnt.

19

Page 20: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Με διπλό κλικ στο disp_cnt εμφανίζεται ο επεξεργαστής σχεδίου όπου μπορούμε να σχεδιάσουμε το κύκλωμα μας. Επιλέγοντας την κατηγορία c:/tmp/fpga_designs/design2 βρίσκουμε τα σχηματικά (schematics) που δημιουργήσαμε λίγο νωρίτερα στη symbol list.

Μπορούμε να μεταφέρουμε τα δύο αυτά σχηματικά στην επιφάνεια σχεδίασης.

Προσθέστε καλώδια στο σχέδιο του κυκλώματος ώστε να συνδέσετε τα δύο modules μεταξύ

τους. Αυτό γίνεται με το πλήκτρο από τη μπάρα εργαλείων. Επιλέξτε με αριστερό κλικ αρχικά το count(3:0) και στη συνέχεια το d(3:0) ώστε να πραγματοποιήσετε τη σύνδεση δημιουργώντας ένα 4-bit δίαυλο (bus).

20

Page 21: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Επιλέξτε την κατηγορία IO (Input Output) και επιλέξτε ένα buffer εξόδου (OBUF) από τη λίστα των συμβόλων. Συνδέστε τον OBUF στην έξοδο του LED decoder.

21

Page 22: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Για να δημιουργήσετε το σωστό εύρος διάλου του OBUF, χρησιμοποιείστε τις ιδιότητες του αντικείμενου για να το ονομάσετε mybuf(6:0). Με το τρόπο αυτό έχετε μετατρέψει την έξοδο του ενός bit του buffer σε έξοδο επτά bits.

22

Page 23: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Μπορείτε να ελέγξετε το σχέδιο του κυκλώματος για λάθη με το πλήκτρο .

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

Προσέξτε ότι τώρα έχει αλλάξει η ιεραρχία των modules (στο sources pane). Τα modules counter και leddcd εμφανίζονται ένα επίπεδο χαμηλότερα από το displ_cnt.

23

Page 24: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

3. Προσαρμογή του κυκλώματος στο 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

24

Page 25: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

1. Αποθηκεύστε τις αναθέσεις των pin και εξέλθετε από το παράθυρο Xilinx PACE. Από το σημείο αυτό συνεχίστε όπως σε προηγούμενο εργαστήριο για να: 2. Δημιουργήσετε τη netlist του λογικού κυκλώματος (disp_cnt -> Synthesize). 3. Εκτελέσετε τις διεργασίες translate, map και place & route (διπλό κλικ στο

Implement Design). 4. Δημιουργήσετε το bitstream disp_cnt.bit και να προγραμματίστε το FPGA

χρησιμοποιώντας το gxsload. Μόλις ολοκληρωθεί προγραμματισμός του FPGA το LED θα μετράει συνεχόμενα 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, C, d, E, F με περίοδο 5.4 sec.

25

Page 26: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

4. Έλεγχος Χρονισμού Για να δείτε πόσο γρήγορα μπορεί να τρέξει ο μετρητής που δημιουργήσατε, χρησιμοποιείστε τη διαδικασία Generate Post-Place & Route Timing. Η διαδικασία αυτή προσδιορίζει τις μέγιστες χρονικές καθυστερήσεις μεταξύ των λογικών στοιχείων του κυκλώματος (καλωδίωση).

Όταν ολοκληρωθεί η διαδικασία, μπορείτε να διαβάσετε τα αποτελέσματα της ανάλυσης από την επιλογή Text-based Post-Place & Route Static Timing Report.

26

Page 27: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Σε αυτή την ανάλυση μπορείτε να δείτε ότι η ελάχιστη περίοδος (μέγιστη συχνότητα) του clock που μπορεί να γίνει αντιληπτή από το κύκλωμα είναι 5.266 ns που αντιστοιχεί σε συχνότητα 189.9MHz αρκετά μεγαλύτερη από τα 50 MHz του clock της XSA-50. Παραδοτέα Στην αναφορά σας πρέπει να απαντήσετε στα ακόλουθα ερωτήματα: 1. Τι είναι κάθε ένα από τα παρακάτω κυκλώματα, ακολουθιακό ή συνδυαστικό, και γιατί;

a) 4-bit Counter b) LED Decoder c) Όλο το κύκλωμα της άσκησης

2. Εξηγήστε επίσης:

a) Πώς λειτουργεί ο κώδικας για τον counter (συνοπτικά). b) Γιατί ορίζουμε 28-bit signal για τον counter και όχι 4-bit που τελικά

χρησιμοποιούμε;

27

Page 28: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΑΣΚΗΣΗ 3

ΠΠλλήήρρηηςς ΑΑθθρροοιισσττήήςς

Περιγραφή Σκοπός του σημερινού εργαστηρίου είναι:

• Να σχεδιάσετε έναν πλήρη αθροιστή (γράφοντας ένα απλό πρόγραμμα σε VHDL). Το κύκλωμα πρέπει να έχει τρεις εισόδους (a, b, c) και δύο εξόδους (sum, carry) εύρους 1-bit. Αναλυτική περιγραφή του κυκλώματος μπορείτε να βρείτε στην ενότητα 4-4 του βιβλίου «Ψηφιακή Σχεδίαση» (συγγραφέας: Morris Mano).

• Αναθέστε την καθεμία από τις εισόδους σε 3 διακόπτες (dip-switches) της πλακέτας ή σε 3 γραμμές δεδομένων της παράλληλης θύρας και τις εξόδους σε 2 τμήματα του LED.

• Μεταφορτώστε το κύκλωμα που σχεδιάσατε στην πλακέτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώματος.

• Μελετήστε τις χρονικές καθυστερήσεις χρησιμοποιώντας την επιλογή Text-based Post-Place & Route Static Timing Report.

Παραδοτέα Αναφορά στην οποία θα απαντάτε στα ακόλουθα:

1. Δώστε τον πίνακα αλήθειας του πλήρους αθροιστή και τις συναρτήσεις που υλοποιήσατε στον κώδικα.

2. Παραθέστε τον κώδικα που γράψατε για την υλοποίηση του πλήρους αθροιστή. 3. Αναφέρετε σε ποια pins αναθέσατε τις εισόδους και τις εξόδους του κυκλώματος. 4. Ποιες καθυστερήσεις υπάρχουν στο κύκλωμα και ποιες είναι οι τιμές τους;

28

Page 29: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΑΣΚΗΣΗ 4

ΠΠοολλυυππλλέέκκττηηςς 44--σσεε--11

Περιγραφή Σκοπός του σημερινού εργαστηρίου είναι:

• Να σχεδιάσετε έναν πολυπλέκτη 4-σε-1 (γράφοντας ένα απλό πρόγραμμα σε VHDL). Το κύκλωμα πρέπει να έχει τέσσερις εισόδους (a, b, c, d), δύο γραμμές επιλογών (s0, s1) και μια έξοδο (out) εύρους 1-bit. Αναλυτική περιγραφή του κυκλώματος μπορείτε να βρείτε στην ενότητα 4-10 του βιβλίου «Ψηφιακή Σχεδίαση» (συγγραφέας: Morris Mano).

• Αναθέστε την καθεμία από τις εισόδους στους 4 διακόπτες (dip-switches) της πλακέτας και την έξοδο σε 1 τμήμα του LED. Χρησιμοποιήστε δύο γραμμές δεδομένων της παράλληλης θύρας για τις δύο γραμμές επιλογών.

• Μεταφορτώστε το κύκλωμα που σχεδιάσατε στην πλακέτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώματος.

• Μελετήστε τις χρονικές καθυστερήσεις χρησιμοποιώντας την επιλογή Text-based Post-Place & Route Static Timing Report.

Παραδοτέα Αναφορά στην οποία θα απαντάτε στα ακόλουθα:

1. Το κύκλωμα της άσκησης (πολυπλέκτης 4-σε-1) είναι ακολουθιακό ή συνδυαστικό και γιατί;

2. Παραθέστε τον κώδικα που γράψατε για την περιγραφή του πολυπλέκτη 4-σε-1 και εξηγείστε τον. a. Ποια είναι η λειτουργία των εντολών που χρησιμοποιήσατε; b. Η περιγραφή σας είναι structural, dataflow ή behavioral και γιατί;

3. Αναφέρετε σε ποια pins αναθέσατε τις εισόδους και τις εξόδους του κυκλώματος. 4. Ποιες καθυστερήσεις υπάρχουν στο κύκλωμα και ποιες είναι οι τιμές τους;

29

Page 30: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΑΣΚΗΣΗ 5

DD FFlliipp--FFlloopp

Περιγραφή Σκοπός του σημερινού εργαστηρίου είναι:

• Να σχεδιάσετε ένα D-Flip-Flop (DFF) γράφοντας ένα πρόγραμμα σε VHDL. Το DFF πυροδοτείται κατά την άνοδο του σήματος του ρολογιού (clk). Όταν η είσοδος reset (rst) είναι «1» η έξοδος πρέπει να είναι «0», ανεξάρτητα από την τιμή του clk. Διαφορετικά η έξοδος είναι ίση με την είσοδο τη στιγμή της αλλαγής της κατάστασης του clk από «0» σε «1». Υπόδειξη: Για να περιγράψετε τη λειτουργία του flip-flop χρησιμοποιείστε μία PROCESS. Αυτή θα εκτελείται κάθε φορά που θα υπάρχει μια αλλαγή στα σήματα (rst, clk).

• Αναθέστε την είσοδο clk στο ρολόι της πλακέτας και την rst σε ένα διακόπτη της XSA-50, ενώ την έξοδο σε 1 τμήμα του 7-segment LED.

• Μεταφορτώστε το κύκλωμα που σχεδιάσατε στην πλακέτα XSA-50 και επαληθεύστε τον πίνακα αληθείας του κυκλώματος.

Παραδοτέα

Αναφορά στην οποία θα απαντάτε στα ακόλουθα:

1. Εξηγείστε τη λειτουργία του D Flip-Flop.

2. Παραθέστε τον κώδικα που γράψατε για την περιγραφή του D Flip-Flop και

εξηγείστε τον. Είναι structural, dataflow ή behavioral και γιατί;

3. Αναφέρετε σε ποια pins αναθέσατε τις εισόδους του D Flip-Flop και την έξοδό του.

30

Page 31: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΠΑΡΑΡΤΗΜΑ Α

ΕΕξξοοππλλιισσμμόόςς ΕΕρργγαασσττηηρρίίοουυ

Τα εργαστήρια ψηφιακής σχεδίασης πραγματοποιούνται χρησιμοποιώντας την πλακέτα XSA-50, η οποία είναι εφοδιασμένη με ένα FPGA chip της εταιρείας Xilinx.

Η πλακέτα δέχεται τροφοδοσία 9V DC, ενώ για την υλοποίηση όχι πολύ γρήγορων κυκλωμάτων μπορεί να τροφοδοτηθεί και μέσω της εισόδου PS-2. Οι τάσεις που απαιτούνται από τα επιμέρους στοιχεία της πλακέτας δημιουργούνται από τους σταθεροποιητές τάσης (voltage regulators). Προσέξτε, κατά τη λειτουργία της πλακέτας οι σταθεροποιητές θερμαίνονται αρκετά.

• Για την τροφοδοσία της πλακέτας μέσω της θύρας PS-2 πρέπει να τοποθετηθεί βραχυκυκλωτήρας (jumper) μεταξύ των pins 1 και 2 του J7.

• H πλακέτα XSA-50 συνδέεται μέσω της παράλληλης θύρας με ένα PC. Μέσω κατάλληλου λογισμικού (XSTools) μπορεί να γίνει η μεταφορά και ο έλεγχος των ψηφιακών κυκλωμάτων στο FPGA chip.

• Η πλακέτα διαθέτει έξοδο VGA, για τη χρήση της όμως απαιτείται η κατασκευή ενός κυκλώματος VGA driver στο FPGA.

• Με την κατασκευή κατάλληλου driver (ψηφιακό κύκλωμα) η XSA-50 είναι δυνατό να δεχθεί είσοδο από πληκτρολόγιο ή ποντίκι μέσω της θύρας PS-2.

31

Page 32: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Χαρακτηριστικά της XSA-50

Η πλακέτα XSA-50 περιλαμβάνει τα ακόλουθα στοιχεία:

• XC2S50 Spartan-II FPGA: Είναι το κύριο στοιχείο υλοποίησης των ψηφιακών κυκλωμάτων που σχεδιάζονται με το κατάλληλο λογισμικό (ISE).

• XC9572XL CPLD: Το CPLD χρησιμοποιείται για να ελέγχει την επικοινωνία της πλακέτας με τον Η/Υ μέσω της παράλληλης θύρας.

• Osc: Προγραμματιζόμενος ταλαντωτής, δημιουργεί το σήμα του clock που αποστέλλεται στην πλακέτα.

• Flash: Μνήμα flash των 128 KByte, όπου μπορούν να αποθηκευτούν μόνιμα δεδομένα.

• SDRAM: 8 MByte SDRAM για την παροδική αποθήκευση δεδομένων τα οποία είναι προσβάσιμα από το FPGA.

• LED: Ένα LED επτά τμημάτων (7-segment display) για την παρουσίαση οπτικών αποτελεσμάτων κατά την λειτουργία της πλακέτας.

• DIP switch: Ένας διακόπτης τεσσάρων θέσεων (DIP-switch) με τον οποίο εισάγονται ρυθμίσεις (δεδομένα) στην XSA-50 ή καθορίζεται η ανώτερη διεύθυνση της μνήμης.

• Pushbutton: Διακόπτης πιέσεως για την αποστολή στιγμιαίων πληροφοριών στο FPGA. Όταν ο διακόπτης είναι πιεσμένος, χαμηλή τάση εφαρμόζεται στο αντίστοιχο pin του FPGA.

• Parallel Port: Η παράλληλη θύρα αποτελεί την κύρια δίοδο επικοινωνίας της πλακέτας με το PC. Mέσω αυτής μεταφέρονται δεδομένα καθώς και τα bits προγραμματισμού του FPGA για την υλοποίηση των ψηφιακών κυκλωμάτων (bitstreams).

• PS/2 Port: Είσοδος PS/2 για την σύνδεση πληκτρολογίου ή ποντικιού • VGA Port: Θύρα VGA για σύνδεση με VGA monitor.

Η πλακέτα XSA-50 μπορεί να συνδεθεί με μία πλακέτα επέκτασης, την XST-2.x (XSTend) του σχήματος που ακολουθεί.

32

Page 33: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Η πλακέτα 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 μπορεί να σταλεί ήχος σε ζεύγος (stereo). IDE:• Μια διεπαφή IDE επιτρέπει στην XSA-50 να αποθηκεύει και να διαβάζει δεδομένα σε σκληρό δίσκο.

Τροφοδοσία της πλακέτας XSA-50 και XST 2.x

Τροφοδοσία μπορεί να εφαρμοσθεί στην πλακέτα XSA-50 και στην XST 2.x με τους ακόλουθους τρόπους.

33

Page 34: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

• Άμεσα στην XSA-50 με το τροφοδοτικό των 9V DC

• Με το τροφοδοτικό των 9V DC στην πλακέτα XSTend

34

Page 35: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

• Μέσω ενός συνήθους τροφοδοτικού ATX PC στην πλακέτα XSTend (υποδοχή J6)

• Με διπλή τροφοδοσία 5V / 3.3V στις εισόδους της XST 2.x

Έλεγχος καλής λειτουργίας

Για να ελέγξετε αν λειτουργεί σωστά η XSA-50 μετά τη σύνδεση της μέσω του παράλληλου καλωδίου με το PC και τη τροφοδοσία της με 9V DC, εκτελέστε την εφαρμογή GXTEST. Στο παράθυρο που θα εμφανισθεί επιλέξτε την XSA-50 σαν Board Type και την LPT1 σαν θύρα εισόδου. Στη συνέχεια πιέστε το πλήκτρο TEST για να αρχίσει η διαδικασία ελέγχου. Η εφαρμογή GXSTEST θα ρυθμίσει το FPGA για την διαδικασία ελέγχου. Αν αυτή είναι επιτυχής, θα εμφανισθεί η ένδειξη O στο LED της πλακέτας και η εφαρμογή θα σας ενημερώσει για την επιτυχία του ελέγχου. Σε αντίθετη περίπτωση ο χαρακτήρας Ε θα

35

Page 36: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

εμφανισθεί στο LED της πλακέτας.

Ρύθμιση της συχνότητας του ταλαντωτή

Η πλακέτα XSA-50 είναι εφοδιασμένη με ένα κύκλωμα παραγωγής συχνότητας 100 ΜΗz (ταλαντωτής - Dallas Semiconductor DS1075Z-100). Η κύρια αυτή συχνότητα μπορεί να διαιρεθεί με τους παράγοντες 1, 2, ... μέχρι το 2052 παρέχοντας τις αντίστοιχες συχνότητες του ρολογιού. Η συχνότητα αυτή αποστέλλεται στα υπόλοιπα μέρη της πλακέτας σαν σήμα ρολογιού.

Η επιλογή του κατάλληλου διαιρέτη της βασικής συχνότητας γίνεται μέσω της εφαρμογής GXSSETCLK. Με την εκτέλεση της εμφανίζεται ένα παράθυρο όπου μπορείτε να επιλέξετε το τύπο της πλακέτας (XSA-50), τη θύρα επικοινωνίας με τον Η/Υ και το διαιρέτη της βασικής συχνότητας (από 1 έως 2052). Πιέζοντας το πλήκτρο SET και ακολουθώντας τις οδηγίες που θα εμφανισθούν από την εφαρμογή GXSSETCLK για την τροφοδοσία και την θέση των βραχυκυκλωτήρων (jumpers) γίνεται ο επαναπρογραμματισμός της συχνότητας.

Παράλληλη θύρα Η παράλληλη θύρα είναι η κύρια μονάδα διασύνδεσης της 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 μπορεί να προγραμματιστεί (π.χ. με

36

Page 37: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

το αρχείο dwnldpar.svf) ώστε λειτουργεί σαν μονάδα διασύνδεσης μεταξύ της παράλληλης θύρας και του FPGA. Ρυθμίσεις της εφαρμογής ISE 8.1 για χρήση με την πλακέτα XSA-50

Οι παράμετροι της πλακέτας XSA-50 που θα πρέπει να δοθούν στο Xilinx ISE 8.1 κατά το σχεδιασμό των ψηφιακών κυκλωμάτων είναι:

Device Family Spartan2

Device xc2s50

Package tq144

Speed -5

LEDs

S1S2

S3S4S5

S0

S6

DP

Κατά τη διάρκεια των εργαστηρίων θα χρησιμοποιήσουμε τα LED’s της XSA-50 για την παρουσίαση αποτελεσμάτων. Οι αναθέσεις των pins που αφορούν το κάθε τμήμα του LED δίδονται στον ακόλουθο πίνακα.

LED Decoder Output XSA-50

S0 P67 S1 P39 S2 P62 S3 P60 S4 P46 S5 P57 S6 P49 DP P44

37

Page 38: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Επικοινωνία μέσω της παράλληλης θύρας Στον ακόλουθο πίνακα δίνεται η αντιστοιχία των pins με τα bits της παράλληλης θύρας (εφαρμογή GXSPort):

Port Bit D0 D1 D2 D3 D4 D5 D6 D7

Pin Assignment P50 P48 P42 P47 P65 P51 P58 P43 Το D7 (P43) δεν πρέπει να το πειράζετε γιατί χάνεται ο προγραμματισμός του FPGA. Clock

I/O Signal XSA-50 clk P88

PushButton

I/O Signal XSA-50 PushButton P93

Dip-Switches

DIP Switch pins 1 P54 2 P64 3 P63 4 P56

38

Page 39: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

ΠΑΡΑΡΤΗΜΑ Β

ΡΡοοήή ΣΣχχεεδδίίαασσηηςς κκααιι VVHHDDLL

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

Η διαδικασία της προσομοίωσης είναι μέρος μιας ευρύτερης διαδικασίας που λέγεται verification και έχει σαν σκοπό να ελέγξει διεξοδικά την ορθή λειτουργία του κυκλώματος. Μεγάλο μέρος της προσπάθειας καταβάλλεται στο καθορισμό σεναρίων που ελέγχουν το κύκλωμα σε μεγάλο εύρος λογικών συνθηκών. Η διαδικασία αυτή μπορεί να διακριθεί σε δύο μέρη, τo Functional Verification και τo Timing Verification. Functional Verification.

Κατά το functional verification, η λειτουργία του κυκλώματος ελέγχεται ανεξάρτητα από το χρόνο. Τόσο οι καθυστερήσεις στις πύλες όσο και όλες οι υπόλοιπες παράμετροι

39

Page 40: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

χρόνου θεωρούνται μηδέν. Timing Verification

Στο δεύτερο μέρος, το timing verification, ελέγχεται η λειτουργία του κυκλώματος λαμβάνοντας υπόψη την αναμενόμενη χρονική καθυστέρηση των πυλών, καθώς και τις χρονικές απαιτήσεις ακολουθιακών στοιχείων όπως τα flip-flops. Είναι σύνηθες να ολοκληρώνεται η διαδικασία του functional simulation, προτού αρχίσουν τα βήματα που αναφέρονται σαν back-end. Όμως η ικανότητα να πραγματοποιήσουμε με ακρίβεια timing simulation στο σημείο αυτό είναι περιορισμένη, μια και το αποτέλεσμα είναι ισχυρά εξαρτώμενο από τις επόμενες διαδικασίες της Σύνθεσης (synthesis) και της Προσαρμογής (Fitting). Σύνθεση (Synthesis)

Κατά τη διάρκεια της σύνθεσης, η VHDL περιγραφή του κυκλώματος μεταφράζεται σε ένα πλήθος από δομικά στοιχεία και συνδέσεις (netlist), τα οποία μπορούν να χρησιμοποιηθούν ή να κατασκευαστούν στην τεχνολογία για την οποία προορίζεται το κύκλωμα. Προσαρμογή (Fitting, Place & Route)

Στη διαδικασία αυτή, το κατάλληλο λογισμικό προσαρμόζει τα δομικά στοιχεία που δημιουργήθηκαν στο προηγούμενο βήμα στους διαθέσιμους πόρους της συσκευής ή της τεχνολογίας για την οποία προορίζεται το κύκλωμα. Ο σχεδιαστής στο βήμα αυτό μπορεί να εισάγει περιορισμούς τόσο για την τοποθέτηση των δομικών στοιχείων όσο και για τα pins εισόδου και εξόδου του κυκλώματος. Το τελευταίο βήμα είναι το timing verification του προσαρμοσμένου κυκλώματος, όπου μπορούν να ληφθούν υπόψη οι χρονικοί περιορισμοί που εισάγουν οι πύλες, το μήκος των καλωδίων, το fan-out του κυκλώματος κτλ. Σε αυτό το βήμα ελέγχονται τα ίδια σενάρια με την περίπτωση του functional verification, γνωρίζοντας όμως με ακρίβεια το τρόπο με τον οποίο θα δομηθεί το κύκλωμα. Δομή προγράμματος VHDL H VHDL είναι μια γλώσσα που δημιουργήθηκε έχοντας υπόψη τις αρχές του δομημένου προγραμματισμού. Στη VHDL ο ορισμός των εισόδων και των εξόδων ενός κυκλώματος διαχωρίζεται από την εσωτερική του δομή. Συγκεκριμένα, με τη δήλωση entity ορίζονται οι είσοδοι και έξοδοι μιας αυτοτελούς μονάδας (module), ενώ με τη δήλωση architecture περιγράφεται η εσωτερική δομή και λειτουργία της αυτοτελούς μονάδας.

40

Page 41: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Στο αρχείο μίας 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, Boolean κτλ. Με τη δήλωση architecture ορίζεται η εσωτερική δομή της μονάδας. Τα σήματα (εισόδου & εξόδου) πηγάζουν από τη δήλωση entity που έχει προηγηθεί. Το architecture μπορεί να περιλαμβάνει, επίσης, σήματα και δηλώσεις που είναι τοπικά (local) κατ’ αναλογία με τις γνωστές γλώσσες υψηλού επιπέδου.

41

Page 42: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Σε αντιστοιχία με τις γλώσσες υψηλού επιπέδου, μια VHDL function, δέχεται ένα σύνολο από ορίσματα και επιστρέφει ένα αποτέλεσμα. Η δομή μιας συνάρτησης (function) VHDL είναι ως εξής: function function-name ( signal-names : signal-type; 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 logic 1164 απαιτείται η δήλωση: use ieee.std_logic_1164.all;

42

Page 43: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Processes H δήλωση process στη VHDL είναι ο κυριότερος τρόπος περιγραφής ακολουθιακών κυκλωμάτων (π.χ. μνήμης, registers). Η βασική δομή μίας 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 η οποία περιγράφει έναν register δύο λειτουργιών (παράλληλη φόρτωση όταν Load = '1' και αριστερή ολίσθηση όταν Load = '0') με ασύγχρονο reset: 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 βρίσκεται σε κατάσταση αναμονής.

43

Page 44: Αρχιτεκτονική Υπολογιστών Ι · 2011-04-06 · • Στο παράθυρο Define VHDL Sourceπου εμφανίζεται μπορείτε να ορίσετε

Αν υπάρξει κάποιο γεγονός στην είσοδο Rst που τη φέρει στη κατάσταση ΄1΄, η πρώτη δήλωση if θα εκτελεστεί και η μεταβλητή Qreg θα λάβει τη τιμή “00000000”. Αν συμβεί κάποιο γεγονός στο σήμα Clk, τότε και πάλι η διεργασία θα εκτελεσθεί. Αν το Rst έχει τη τιμή ‘1’, θα εκτελεσθεί το πρώτο if όπως και νωρίτερα. Αν όμως το Rst δεν έχει τη τιμή ‘1’ η έκφραση (Clk = ‘1’ and Clk’event) θα επαληθευθεί. Για να ανιχνευθεί η μεταβολή από τη θέση ‘0’ στη θέση ‘1’ αρκεί η δήλωση Clk = ‘1’. Όμως αν η process εκτελέστηκε εξαιτίας κάποιου γεγονότος στο Rst, π.χ. την αλλαγή της τιμής του από ‘1’ σε ‘0’, δεν επιθυμούμε να εκτελεσθεί το μέρος του κώδικα που αφορά γεγονός στο Clk. Για να το διασφαλίσουμε αυτό έχουμε προσθέσει και τη δήλωση Clk’event. Σήματα και Μεταβλητές Δύο είναι οι κύριοι τύποι των αντικειμένων που συναντάμε στην VHDL για τη μεταφορά δεδομένων: σήματα (signals) και μεταβλητές (variables). Συνήθως, για την περιγραφή των διαφόρων κυκλωμάτων χρησιμοποιούμε τα σήματα. Ανάλογα με την περιγραφή του κυκλώματος, ένα σήμα μπορεί να αντιστοιχεί σε κάποιο καλώδιο ή σε κάποιο στοιχείο αποθήκευσης πληροφορίας (flip-flop).

44