Ο ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΗΣ MIPS R10000 ΠΑΠΑΔΗΜΗΤΡΙΟΥ ΓΕΩΡΓΙΑ Α.Μ. Μ386
ΒΑΣΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΟΥ R10000 Φέρνει και αποκωδικοποιεί 4 εντολές ανά κύκλο Η εκτέλεση πέρα από τις διακλαδώσεις γίνεται με εικασίες Η εκτέλεση των εντολών γίνεται δυναμικά εκτός σειράς Υλοποιεί την μετονομασία των καταχωρητών χρησιμοποιώντας πίνακες αντιστοίχησης Η ολοκλήρωση των εντολών γίνεται σε σειρά παρέχοντας έτσι ακριβείς μεθόδους χειρισμού εξαιρέσεων
ΣΩΛΗΝΩΣΕΙΣ 1 σωλήνωση για να φέρει τις εντολές 5 ανεξάρτητες σωληνώσεις για την εκτέλεση των εντολών 1 nonblocking μονάδα load/store 2 64bits ακέραιες ALUs 64bits μονάδες κινητής υποδιαστολής 1 αθροιστή με καθυστέρηση 2 κύκλων 1 πολλαπλασιαστή με καθυστέρηση 2 κύκλων
Το ιεραρχικό nonblocking υποσύστημα μνήμης περιλαμβάνει: Εσωτερικές (στο chip του επεξεργαστή) αμφίδρομες κύριες caches 32Kbyte instruction cache 32Kbyte data cache 1 εξωτερική αμφίδρομη δευτερεύουσα cache 128bit στατική RAM 64bit σύστημα διεπαφής
Εφαρμογές υψηλής απόδοσης με τον R10000 Εάν μια εντολή δε μπορεί να συνεχίσει, άλλες εντολές μπορούν να συνεχίσουν εκτός σειράς (nonblocking cache) Σύνθετο υλικό στον R10000 που δυναμικά αναδιοργανώνει την εκτέλεση των εντολών βασισμένο στη διαθεσιμότητα των τελεστέων (μπορεί να δει έως 32 εντολές μπροστά για να βρει πιθανό παραλληλισμό)
ΣΤΑΔΙΑ ΣΩΛΗΝΩΣΕΩΝ 1 σωλήνωση για να φέρει τις εντολές ΣΤΑΔΙΟ 1: Φέρνει τις 4 επόμενες εντολές (Instruction fetch) ΣΤΑΔΙΟ 2: Αποκωδικοποιεί και μετονομάζει τις εντολές, υπολογίζει τις διευθύνσεις προορισμού για jump εντολές και εντολές διακλάδωσης ΣΤΑΔΙΟ 3: Γράφει τις μετονομαζόμενες εντολές στις ουρές και διαβάζει τον πίνακα απασχολημένου bit για να καθορίσει εάν οι τελεστέοι είναι απασχολημένοι. Οι εντολές περιμένουν στις ουρές μέχρι να είναι έτοιμοι όλοι οι τελεστέοι.
ΣΤΑΔΙΑ ΣΩΛΗΝΩΣΕΩΝ (συνέχεια) 5 σωληνώσεις εκτέλεσης εντολών ΣΤΑΔΙΟ 3α: Έκδοση (issue) εντολής ΣΤΑΔΙΟ 3β: Διάβασμα τελεστέων από τα αρχεία καταχωρητών ΣΤΑΔΙΟ 4: Έναρξη εκτέλεσης εντολών Εντολές ακεραίων: 1 στάδιο (δηλ. Στάδιο 4) Εντολές load/store: 2 στάδια (δηλ. Στάδια 4-5) Εντολές floating-point: 3 στάδια (δηλ. Στάδια 4-6) TΕΛΕΥΤΑΙΟ ΣΤΑΔΙΟ: Γράφονται τα αποτελέσματα στο αρχείο καταχωρητών
Instruction fetch (1ο στάδιο) O R10000 φέρνει 4 τυχαίες εντολές χρησιμοποιώντας ένα ξεχωριστό σήμα ελέγχου για κάθε εντολή. Οι εντολές αυτές περιστρέφονται ώστε να αποκωδικοποιηθούν σε σειρά. Ο επεξεργαστής αποκωδικοποιεί και τις 4 εντολές στον επόμενο κύκλο, εκτός και αν οι ουρές ή η λίστα ενεργών καταχωρητών είναι γεμάτες. Οι εντολές που δεν αποκωδικοποιούνται αμέσως μένουν σε ένα buffer εντολών.
Μονάδα διακλαδώσεων Ο επεξεργαστής προβλέπει την κατεύθυνση που θα ακολουθήσει η διακλάδωση (αλγόριθμος πρόβλεψης βασισμένος σε έναν ιστορικό πίνακα διακλαδώσεων) και φέρνει τις εντολές της προβλεπόμενης κατεύθυνσης. Όταν αποκωδικοποιείται μια διακλάδωση, ο επεξεργαστής αποθηκεύει την τρέχουσα κατάσταση σε μια στοίβα διακλαδώσεων (εναλλακτική διεύθυνση διακλάδωσης, πλήρη αντίγραφα των πινάκων αντιστοίχησης και διάφορα bits ελέγχου). Όταν η στοίβα διακλαδώσεων γεμίσει, ο επεξεργαστής συνεχίζει την αποκωδικοποίηση μέχρι να συναντήσει την επόμενη εντολή διακλάδωσης, οπότε πρέπει να αποφασίσει την κατεύθυνση κάποιας εκκρεμούσας διακλάδωσης.
Μονάδα διακλαδώσεων (συνέχεια) Ο επεξεργαστής επαληθεύει κάθε πρόβλεψη διακλάδωσης αμέσως μόλις καθοριστεί η συνθήκη της, ακόμα κι αν εκκρεμούν προηγούμενες διακλαδώσεις. Εάν η πρόβλεψη ήταν λανθασμένη, ο επεξεργαστής εγκαταλείπει όλες τις εντολές που έχει φέρει από τον λανθασμένο δρόμο και επαναφέρει την κατάστασή του από την στοίβα διακλαδώσεων. Κάθε εντολή συνοδεύεται στις ουρές και στις σωληνώσεις εκτέλεσης από μια 4bit μάσκα διακλάδωσης, που δείχνει από ποιες εκκρεμούσες εντολές διακλάδωσης αυτή εξαρτάται. Όταν η διακλάδωση επαληθευτεί, τα αντίστοιχα bits της μάσκας μηδενίζονται, ενώ σε αντίθετη περίπτωση η εντολή σταματάει.
Αποκωδικοποίηση εντολών (2ο στάδιο) Ο R10000 αποκωδικοποιεί παράλληλα 4 εντολές. Η αποκωδικοποίηση σταματάει όταν η λίστα ενεργών καταχωρητών ή η ουρά γεμίσουν. Κατά την αποκωδικοποίηση μιας εντολής πολλαπλ/μού ή διαίρεσης δεν αποκωδικοποιούνται άλλες εντολές στον ίδιο κύκλο. (Μόνο αυτές οι εντολές χρησιμοποιούν 2 ειδικούς καταχωρητές Hi και Lo.) Οι εντολές που διαβάζουν ή τροποποιούν κάποιους καταχωρητές ελέγχου εκτελούνται ακολουθιακά, γιατί ο επεξεργαστής απαιτεί κενή σωλήνωση.
Αντιστοίχηση Καταχωρητών Για την εκτέλεση των εντολών εκτός σειράς ο επεξεργαστής καταγράφει τις εξαρτήσεις που υπάρχουν μεταξύ των καταχωρητών των τελεστέων χρησιμοποιώντας μετονομασία καταχωρητών. Οι φυσικοί καταχωρητές περισσότεροι από τους λογικούς, γιατί οι πρώτοι περιέχουν και τα προσωρινά αποτελέσματα και αυτά που έχουν εκτελεστεί. Κατά την αποκωδικοποίηση κάθε εντολής αντικαθίστανται τα πεδία των λογικών καταχωρητών με τον αντίστοιχο φυσικό καταχωρητή.
Αντιστοίχηση Καταχωρητών (συνέχεια) Δυναμική αντιστοίχηση των λογικών καταχωρητών σε φυσικούς καταχωρητές (πίνακες αντιστοίχησης καταχωρητών για καταχωρητές ακεραίων και κινητής υποδιαστολής). 32 λογικοί καταχωρητές κινητής υποδιαστολής (f0, f1, f2, …, f31) 64 φυσικοί καταχωρητές κινητής υποδιαστολής 33 λογικοί καταχωρητές ακεραίων (r1, r2, …, r31, Hi, Lo) (ειδική λογική πρόσβασης για τους Hi και Lo) 64 φυσικοί καταχωρητές ακεραίων Πεδία εντολών 5 bits (25 = 32) λογικοί καταχωρητές Διευθύνσεις 6 bits (26 = 64) φυσικοί καταχωρητές
Αντιστοίχηση Καταχωρητών (συνέχεια) Ελεύθερες λίστες: περιέχουν τους φυσικούς καταχωρητές που δεν έχουν ακόμα ανατεθεί από καμία εντολή ή είχαν χρησιμοποιηθεί από εντολές που έχουν ήδη ολοκληρωθεί. Ενεργή λίστα: καταγράφει όλες τις εντολές που είναι ενεργές στον επεξεργαστή. Οι εντολές προστίθενται στη λίστα κατά την αποκωδικοποίηση και αφαιρούνται όταν ολοκληρωθούν ή όταν προκύψει λανθασμένη πρόβλεψη. Πίνακες απασχολημένου bit: περιέχουν ένα bit για κάθε φυσικό καταχωρητή που δείχνει εάν περιέχει έγκυρη τιμή. Όταν ο καταχωρητής φύγει από την ελεύθερη λίστα θεωρείται απασχολημένος, ενώ μηδενίζεται όταν κάποια μονάδα εκτέλεσης γράψει μια τιμή στον καταχωρητή.
Ουρές εντολών Ο R10000 βάζει κάθε αποκωδικοποιημένη εντολή (εκτός των jump και NOP) στην ουρά ακεραίων, στην ουρά διευθύνσεων ή στην ουρά κινητής υποδιαστολής, ανάλογα με τον τύπο της εντολής. Ουρά ακεραίων: Περιέχει 16 εισόδους χωρίς συγκεκριμένη σειρά και κατανέμει μια είσοδο για κάθε εντολή ακεραίου μόλις αυτή αποκωδικοποιείται, ενώ η είσοδος απελευθερώνεται μόλις γίνει η έκδοση της εντολής σε μια ALU. Οι εντολές που μπορούν να εκτελεστούν μόνο από μία ALU έχουν προτεραιότητα για αυτήν την ALU. Ουρά κινητής υποδιαστολής: Περιέχει 16 εισόδους. Μοιάζει με την ουρά ακεραίων. Τα loads κινητής υποδιαστολής διαρκούν 3 κύκλους.
Ουρές εντολών (συνέχεια) Ουρά διευθύνσεων: Περιέχει 16 εισόδους Κατανέμει μια είσοδο για κάθε εντολή load/store μόλις αυτή αποκωδικοποιείται, ενώ η είσοδος απελευθερώνεται αφού η εντολή ολοκληρωθεί. Σε αντίθεση με τις άλλες δύο, είναι μια κυκλική FIFO ουρά που διατηρεί την αρχική σειρά εκτέλεσης των εντολών του προγράμματος για να καθορίζει τις εξαρτήσεις μνήμης για να δίνει προτεραιότητα σε παλαιότερες εντολές Όταν ο επεξεργαστής αποκαθιστά μια λανθασμένα προβλεπόμενη διακλάδωση, η ουρά εντολών αφαιρεί όλες τις εντολές που αποκωδικοποιήθηκαν μετά από αυτή τη διακλάδωση ξεκινώντας από το τέλος της ουράς.
Αρχεία καταχωρητών Καθένα περιέχει 64 καταχωρητές. Οι μονάδες εκτέλεσης εντολών διαβάζουν τους τελεστέους απευθείας από τα αρχεία καταχωρητών και γράφουν τα αποτελέσματα ξανά πίσω. Το αρχείο καταχωρητών ακεραίων έχει 7 θύρες για διάβασμα και 3 για γράψιμο. 2 θύρες για διάβασμα και 1 για γράψιμο για κάθε μία ALU (2) 2 θύρες για διάβασμα για την μονάδα υπολογισμού διευθύνσεων 1 θύρα για γράψιμο για εντολές store, jump και move-to-floating-point Το αρχείο καταχωρητών κινητής υποδιαστολής έχει 5 θύρες για διάβασμα και 3 για γράψιμο. 2 θύρες για διάβασμα και 1 για γράψιμο για τον αθροιστή 2 θύρες για διάβασμα και 1 για γράψιμο για τον πολ/στή 1 θύρα για διάβασμα για εντολές store και move 1 θύρα για γράψιμο για εντολές load και move
Μονάδες εκτέλεσης εντολών Μονάδες εκτέλεσης ακεραίων 2 ακέραιες ALUs κάθε μια από τις οποίες έχει 2 64bits καταχωρητές που φορτώνουν από το αρχείο καταχωρητών Οι εντολές πολ/μου και διαίρεσης ακεραίων έχουν 2 καταχωρητές προορισμού, τους Hi και Lo. Μονάδες εκτέλεσης κινητής υποδιαστολής Αθροιστής κινητής υποδιαστολής (εντολές πρόσθεσης, αφαίρεσης, σύγκρισης, μετατροπής) Πολλαπλασιαστής κινητής υποδιαστολής Διαίρεση Τετραγωνική ρίζα
Ιεραρχία μνήμης Η κύρια μνήμη δεδομένων και η κύρια μνήμη εντολών που βρίσκονται στο chip του επεξεργαστή λειτουργούν ταυτόχρονα, παρέχοντας μικρές καθυστερήσεις. Ο R10000 ελέγχει επίσης μια μεγάλη εξωτερική δευτερεύουσα μνήμη. Όλες οι μνήμες χρησιμοποιούν έναν αλγόριθμο LRU (Least Recently Used) Ο R10000 υπολογίζει διευθύνσεις εικονικής μνήμης και ο TLB μεταφράζει αυτές τις εικονικές διευθύνσεις σε φυσικές διευθύνσεις. Η 32KByte μνήμη εντολών προ-αποκωδικοποιεί τις εντολές σε μια 36bit μορφή. Τα 4 επιπλέον bits δείχνουν ποια λειτουργική μονάδα πρέπει να εκτελέσει την εντολή και χρησιμεύουν στην απλοποίηση της αποκωδικοποίησης των καταχωρητών προορισμού. Η μνήμη δεδομένων έχει 2 «όχθες» 16KByte.
Διεπαφή συστήματος Ο R10000 έχει μια 64bit αρτηρία που μπορεί να συνδέσει το πολύ 4 R10000 chips και να υπερκαλύψει έως 8 αιτήσεις για διάβασμα. Για τον σχεδιασμό συστημάτων οι χρήστες μπορούν να επιλέξουν ανάμεσα σε 5 συχνότητες δευτερεύουσας μνήμης και 7 συχνότητες συστήματος. Για να έχουμε περισσότερες επιλογές, βασίζουμε αυτά τα ρολόγια σε ένα PLL ρολόι. Ο cached buffer περιέχει διευθύνσεις για 4 αιτήσεις ανάγνωσης. Τα δεδομένα που επιστρέφονται από αυτές τις αιτήσεις αποθηκεύονται στον buffer εισόδου, ώστε να μπορούμε να έχουμε λειτουργία εκτός σειράς. 4 ομάδες buffers οδηγούν τα pins του chip. Buffer διεπαφής συστήματος Buffer δεδομένων Buffer διευθύνσεων Buffer ρολογιού Ο R10000 έχει 10 καταχωρητές για να ελέγχουν τα εσωτερικά σήματα και αυτοί οι καταχωρητές δεν επηρεάζουν τη λογική του επεξεργαστή αλλά χρησιμεύουν στον έλεγχο του προϊόντος.