Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 10 ο Μάθημα
Διάδρομος Δεδομένων – Datapath Εισαγωγή – Θα σχεδιάσουμε μια υλοποίηση για τις βασικές εντολές του MIPS: Τις εντολές που κάνουν αναφορά στη μνήμη (lw, sw) Τις αριθμητικές και λογικές εντολές (add, sub, slt) Την εντολή σύγκρισης beq και την jump (j)
Διάδρομος Δεδομένων – Datapath Πώς ορίζεται; – Ως μία συλλογή λειτουργικών μονάδων οι οποίες κάνουν επεξεργασία δεδομένων. – Μαζί με την Μονάδα ελέγχου, αποτελούν την CPU
Περίληψη Υλοποίησης Ο μετρητής προγράμματος (PC-Program Counter) είναι ένας 32-bit καταχωρητής ο οποίος έχει αποθηκευμένη τη διεύθυνση της επόμενης εντολής που θα εκτελεστεί Για κάθε εντολή τα πρώτα δύο βήματα είναι ίδια: 1.Στέλνεται ο PC στη μνήμη που περιέχει τον κώδικα και προσκομίζεται η εντολή από την μνήμη 2.Διαβάζεται ένας ή δύο καταχωρητές χρησιμοποιώντας τα πεδία της εντολής. Μετά από αυτά τα βήματα, οι ενέργειες που θα ακολουθήσουν για την ολοκλήρωση της εκτέλεσης της κάθε εντολής εξαρτώνται από τον τύπο της
Κτίζοντας το Διαδρομο Δεδομένων (Datapath) Χρειαζόμαστε μια μνήμη εντολών για να αποθηκεύσουμε τις εντολές του προγράμματος...ένα PC για να φυλάγεται η διεύθυνση της κάθε εντολής και έναν αθροιστή (adder) για να αυξάνει το PC στη διεύθυνση της επόμενης εντολής. Ο αθροιστής μπορεί να δημιουργηθεί από την ALU και θα ονομάσουμε αυτή τη λειτουργία της, ALU ADD (Πρόσθεση)
Σε αυτό το σχήμα φαίνεται ένα μέρος του διαδρόμου δεδομένων που χρησιμοποιείται για την προσκόμιση των εντολών από τη μνήμη και την αύξηση του μετρητή προγράμματος (PC) κατά 4 bytes.
Εντολές τύπου R - Αριθμητικές και Λογικές Εντολές Οι αριθμητικές και λογικές εντολές διαβάζουν δύο καταχωρητές, εκτελούν μια λειτουργία ALU και γράφουν το αποτέλεσμα Tέτοιες εντολές είναι οι add, sub και slt Εκτός των προαναφερθέντων μονάδων, χρειάζονται ακόμα: Αρχείο Καταχωρητών Arithmetic Logic Unit - ALU
Το μέγεθος του αριθμού των καταχωρητών εισόδου στο αρχείο των καταχωρητών είναι 5bits και προσδιορίζει έναν από τους 32 καταχωρητές τα δεδομένα εισόδου και τα δύο δεδομένα εξόδου είναι μεγέθους 32 bits. δύο εισόδους μεγέθους 32 bits και παράγει ένα αποτέλεσμα 32-bit H ALUελέγχεται από ένα 3-bit σήμα το οποίο καθορίζεται από τη μονάδα ελέγχου
Στο σχήμα φαίνεται ο διάδρομος δεδομένων για τις εντολές τύπου R. Η ALU μπορεί να εκλεχθεί για να παρέχει όλες τις βασικές διαδικασίες που απαιτούνται από τις εντολές τύπου R. Επίσης χρειαζόμαστε και το μηδέν (zero flag) ως έξοδος στο ALU για υλοποίηση των branches
Εντολές με αναφορά στη μνήμη - load και store Instructions Έστω οι εντολές lw $8,Astart($2) ή sw $8,Astart ($2). – Αυτές οι εντολές υπολογίζουν τη διεύθυνση της μνήμης προσθέτοντας την τιμή του καταχωρητή $2 στο 16-bit πεδίο που δίνει τη διεύθυνση της βάσης του πίνακα( Astart). – Για την υλοποίησή τους χρειάζονται εκτός των μονάδων «Αρχείο Καταχωρητών» και «ALU» τις: λειτουργική μονάδα για προέκταση σήματος (sign-extend) για το 16-bit πεδίο που πρέπει να μετατραπεί σε 32-bit για να μπορέσει να είναι είσοδος στην ALU μνήμη δεδομένων για γραφή ή ανάγνωση διευθύνσεων και γραφή δεδομένων
Το Σχήμα δείχνει το διάδρομο δεδομένων για τις εντολές load και store. Υπολογίζεται η διεύθυνση μνήμης στην οποία βρίσκονται τα δεδομένα, μετά διαβάζεται ή γράφεται από τη μνήμη δεδομένων και τέλος αν η εντολή είναι load γράφεται στο αρχείο των καταχωρητών
Εντολή Σύγκρισης - Branch Equal Instruction Έστω η εντολή beq $1, $2, offset – Έχει τρεις τελεσταίους: δύο καταχωρητές που συγκρίνονται για ισότητα και ένα 16 bit offset για υπολογισμό της διεύθυνσης-στόχου (target address) που θα κατευθυνθεί η εκτέλεση του προγράμματος Υπάρχουν δύο σημεία που πρέπει να προσέξουμε στην αρχιτεκτονική αυτού του συνόλου εντολών 1.Η αρχιτεκτονική καθορίζει τη βάση για υπολογισμό της διεύθυνσης της συνθήκης (branch address) ως τη διεύθυνση που ακολουθεί τη συνθήκη (target address). Αφού υπολογίζουμε το PC+4 (η διεύθυνση της επόμενης εντολής) για την προσκόμιση της εντολής στο διάδρομο δεδομένων είναι εύκολο να χρησιμοποιήσουμε αυτή τη τιμή ως τη βάση για υπολογισμό της διεύθυνσης-στόχος της συνθήκης (branch target address). 2.Επίσης το πεδίο offset μετακινείται 2 bits αριστερά για να είναι word offset. Αυτή η μετακίνηση είναι βοηθητική επειδή αυξάνεται η αποτελεσματικότητα του πεδίου offset κατά ένα παράγοντα του 4
Η εντολή υπό συνθήκη πρέπει να κάνει δύο πράγματα : – να υπολογίζει τη διεύθυνση-στόχος (όπως στο Σχήμα + τον αθροιστή) και – να συγκρίνει τα περιεχόμενα των καταχωρητών. Η σύγκριση μπορεί να γίνει χρησιμοποιώντας το αρχείο καταχωρητών, χρησιμοποιώντας το zero flag της ALU. Η ALU επιστρέφει σήμα όταν το αποτέλεσμα από την αφαίρεση των τιμών των δύο καταχωρητών είναι μηδέν, αν είναι μηδέν τότε ξέρουμε ότι οι δύο τιμές είναι οι ίσες
Yλοποίηση του διαδρόμου δεδομένων για την εντολή υπό συνθήκη
Ένα Απλό Σχήμα Υλοποίησης Δημιουργία ενός μονού διαδρόμου δεδομένων – Θα ορίσουμε μια καινούργια μέχρι τώρα έννοια, την έννοια του πολυπλέκτη (multiplexor). Ο πολυπλέκτης διαλέγει από μια συλλογή δεδομένων τα δεδομένα που ικανοποιούν τις συνθήκες των γραμμών ελέγχου του – Έστω το σχήμα:
Τα δύο αυτά σχήματα είναι περίπου ίδια, εκτός: Η δεύτερη είσοδος για την ALU είναι είτε καταχωρητής (R type instructions) είτε sign extended (memory instructions) H τιμή που γράφεται στο καταχωρητή αποτελέσματος προέρχεται από την ALU ( R type) ή από τη μνήμη (load) Πώς μπορούμε να συνδιάσουμε τα δύο παραπάνω σχήματα, χωρίς να επαναλάβουμε τις λειτουργικές μονάδες που είναι ίδιες στα δύο σχήματα;
Απάντηση: – Για να συνδυάσουμε τους δύο διαδρόμους δεδομένων και να χρησιμοποιήσουμε μόνο ένα αρχείο καταχωρητών και μια ALU πρέπει να υποστηρίξουμε δύο διαφορετικές πηγές για τη δεύτερη είσοδο της ALU και δύο διαφορετικές πηγές για τα δεδομένα που αποθηκεύονται στο αρχείο των καταχωρητών. Έτσι ένας πολυπλέκτης τοποθετείται στην είσοδο της ALU και ένας άλλος για τα δεδομένα εισόδου του αρχείου των καταχωρητών.
Το πλήρες datapath για R-type εντολές:
Αρχικά έρχεται η διεύθυνση της εντολής στο PC PC + 4 = 0 O mux καλείται να πάρει σαν αποτέλεσμα ή το PC+4 ή αυτό που έρχεται από την ALU. Εμάς μας ενδιαφέρει το PC+4. Η πύλη βοηθά ώστε να κλειδώσει στο mux η τιμή 0 ώστε να χρησιμοποιηθεί σαν αποτέλεσμα το PC+4
Επιστρέφουμε πάλι στη διακλάδωση Στη συνεχεια μπαίνει στη μνήμη εντολών Τα τελευταία 6 bits της εντολής πάνε στον έλεγχο για να βγουν τα κατάλληλα σήματα για αυτήν την εντολή. Τα ποηγούμενα bit της εντολής έρχονται εδώ και η ροή μπαίνει στον καταχωρητή ανάγνωσης 1 και φορτώνει την τιμή που έχει αποθηκευμένη ο καταχωρητής
Στα επόμενα bits της εντολής μπαίνουμε στον καταχωρητή ανάγνωσης 2 και φορτώνει τη τιμή που έχει αποθηκευμένη. = 1 Εδώ ο mux έχει να διαλέξει ανάμεσα στην διεύθυνση του Rt και σε αυτή του Rd. Λόγω του RegDst = 1 επιλέγεται η διεύθυνση του Rd και έτσι ορίζεται ο καταχωρητής εγγραφής.
=10 Δεν χρησιμοποιείται αφού δεν είναι I-type εντολή Απομονώνεται το Function μόνο και πάει στον έλεγχο της ALU Συμψηφίζεται το Func με το ALUOp = 10 και βγάζει ένα αποτέλεσμα που χρησιμοποιείται από την ALU για να καταλάβει η CPU τι πράξη πρέπει να κάνει.
=0 Αφού πάρουμε τα δεδομένα ανάγνωσης 1 και 2 και αφού έχουμε R-type εντολή, η ALUSrc = 0 (Σήμα που πάει στον mux). Έτσι περνάνε τα data στην ALU και γίνεται η πράξη μας (πρόσθεση). =0 Το αποτέλεσμα από την ALU περνάει στον mux. Εδώ επειδή δεν μας ενδιαφέρει η τιμή της μνήμης αλλά το αποτέλεσμα από την ALU, ο mux θα πάρει την τιμή 0 (με την βοήθεια του MemtoReg = 0).
Τέλος, το αποτέλεσμα που βγήκε από την ALU πάει στα δεδομένα εγγραφής. =1 Το RegWrite παίρνει τη τιμή 1 για να δηλωθεί ότι η τιμή που υπολογίστηκε πρέπει να καταχωρηθεί εκεί
Το op της lw Διεύθυνση του Base =0 Επιλέγεται με την βοήθεια του RegDst =0 η είσοδος του Rt ως ο καταχωρητής αποθήκευσης Εδώ χρησιμοποιείται η επέκταση προσήμου και γίνεται το offset από 16 -> 32 bit για να μπορεί να γίνει είσοδος στην ALU =1 = 00 Εδώ τώρα προστίθενται τα δεδομένα ανάγνωσης 1 (Base) Και το offset επεκταμένο, ώστε να βγει η θέση μνήμης
=1 =0 Αφού γίνει η άθροιση, μπαίνουμε στη μνήμη και με την βοήθεια των MemWrite και MemRead (H MemRead χρησιμοποιείται διότι διαβάζουμε από τη μνήμη) βρίσκουμε Το δεδομένο που ψάχνουμε. =1 Με την βοήθεια του MemtoReg =1 επιλέγεται από τον mux το δεδομένο από την μνήμη και =1 Περνάει στην εγγραφή δεδομένων στο καταχωρητή Rt
Παρόμοια με τις άλλες εντολές, ξεκινά ο PC να δίνει την τιμή του +4 από τον αθροιστή. PC+4 Φορτώνεται η εντολή και αναλύεται στα bits της. Φορτώνεται ο Rs Φορτώνεται ο Rt Φορτώνεται το offset και επεκτείνεται στα 32 bits Κάνει αριστελή ολίσθηση κατά 2 Προστίθεται η ολίσθηση στο PC+4 H ALU δίνει τη διεύθυνση διακλάδωσης PC+4
Ο mux θα πάρει είτε τη τιμή PC+4 είτε την έξοδο από την ALU. PC+4+ offset =0 Φορτώνονται τα δεδομένα ανάγνωσης στην ALU με την βοήθεια του ALUSrc=0 =01 Μόλις φορτωθούν τα στοιχεία στην ALU γίνεται μια αφαίρεση για να δούμε αν η διαφορά των δεδομένων μας είναι 0 Αν το αποτέλεσμα βγει ίσο με 0 (έξοδος 1 στη zero της ALU) Τότε με την βοήθεια της AND καταλαβαίνει ο MUX ότι πρέπει Να χρησιμοποιήσει το 1 σαν είσοδό του. =1
Links FV8 FV8 ti8I ti8I 4Zz0 4Zz0 iebU iebU