ΗΥ-225: Οργάνωση Υπολογιστών
Άνοιξη 2018 |
Τμ. Επ. Υπολογιστών © Πανεπιστήμιο Κρήτης |
[Up - Table of Contents] [Prev - 7. Linked List] |
[printer version - PDF] [9. Pipelining - Next] |
Βιβλίο (4η έκδοση): Διαβάστε την §2.4, σελίδες 127 - 134 (και 169-170), και την §4.4, σελίδες 374 - 389· επιπροσθέτως, οι ενότητες 4.1 - 4.3 (σελ. 356-374) περιέχουν εισαγωγικό υλικό, χρήσιμο γιά την αρχική κατανόηση, αλλά υπερκαλύπτονται, όσον αφορά την τελική εκμάθηση, από την §4.4.
Γιά να διαβάσουμε (επιλέξουμε) έναν από τους 32 αυτούς καταχωρητές, όπως σε κάθε μνήμη, χρειαζόμαστε έναν τριανταδυάμπιτο πολυπλέκτη 32-σε-1, ο οποίος φυσικά χρειάζεται 5 εισόδους (5 bits) επιλογής γιά να του λένε ποιόν από τους 32 καταχωρητές θέλουμε να διαβάζουμε (επιλέγουμε) κάθε στιγμή· αυτά τα 5 bits είναι η διεύθυνση ανάγνωσης. Εάν τώρα προσθέσουμε και έναν δεύτερο πολυπλέκτη 32-σε-1 (τριανταδυάμπιτο και αυτόν), και τον ελέγξουμε με 5 άλλα bits "διεύθυνσης" (που έχουν εν γένει διαφορετική τιμή από τα πρώτα 5, χωρίς και να απαγορεύεται μερικές φορές να παίρνουν και την ίδια τιμή), τότε αυτός ο δεύτερος πολυπλέκτης θα μας διαβάζει (επιλέγει) έναν άλλον, δεύτερο καταχωρητή από τους 32 (που είναι εν γένει άλλος από τον πρώτον, χωρίς όμως και να αποκλείεται μερικές φορές να είναι ο ίδιος, εάν έτσι δοθούν οι δύο διευθύνσεις ανάγνωσης). Έτσι φτιάξαμε ένα αρχείο καταχωρητών Δίπορτης Ανάγνωσης (2-port read), δηλαδή, ανά πάσα στιγμή, μπορούμε να επιλέγουμε και βλέπουμε, στις δύο (τριανταδυάμπιτες) εξόδους δεδομένων, τα περιεχόμενα δύο οιονδήποτε από τους 32 καταχωρητές (διαφορετικών ή ίδιων, μεταξύ τους). Από άποψη καθυστέρησης, οι δύο πολυπλέκτες δουλεύουν εν παραλλήλω --ταυτόχρονα δηλαδή-- και άρα μέσα στο χρόνο μιάς και μόνο ανάγνωσης από μονόπορτο RF, εδώ επιτυγχάνουμε δύο αναγνώσεις αντί μίας.
Ταυτόχρονα με τα παραπάνω, εάν υπάρχει και ένας τρίτος αποκωδικοποιητής 5-σε-32 (τρίτο τον λέμε επειδή οι δύο πολυπλέκτες ανάγνωσης κρύβουν μέσα τους και από έναν αποκωδικοποιητή 5-σε-32, καθένας), και εάν αυτόν τον τρίτο αποκωδικοποιητή τον χρησιμοποιήσουμε γιά να ελέγξουμε τα 32 σήματα ενεργοποίησης φόρτωσης (load enable) των 32 καταχωρητών, τότε ταυτόχρονα με την ανάγνωση των δύο καταχωρητών, θα μπορούμε να έχουμε και εγγραφή σε έναν τρίτο (διαφορετικό ή και τον ίδιο με τους δύο πρώτους). Γιά να λειτουργήσει καθώς πρέπει η εγγραφή, και να μην εγγράφουμε σε κάποιον καταχωρητή κάθε κύκλο ρολογιού, καταστρέφοντας έτσι τα παλαιά περιεχόμενά του ακόμα κι αν δεν έχουμε τίποτα χρήσιμο να γράψουμε, χρειαζόμαστε κι ένα συνολικό σήμα ελέγχου φόρτωσης, που όταν είναι μηδέν αδρανοποιεί την εγγραφή γενικά, σε όλους τους καταχωρητές. Θα υποθέτουμε στις υλοποιήσεις μας ότι το Αρχείο Καταχωρητών του MIPS θα είναι έτσι "τρίπορτο" (three-port), με δύο πόρτες ανάγνωσης και μία πόρτα εγγραφής. Επομένως θα έχει τρείς (πεντάμπιτες) εισόδους διευθύνσεων --δύο ανάγνωσης και μία εγγραφής-- καθώς και τρείς τριανταδυάμπιτες πόρτες δεδομένων: δύο με δεδομένα εξόδου, γιά την ανάγνωση, και μία με δεδομένα εισόδου, γιά την εγγραφή. Επιπλέον, έχει και ένα bit ελέγχου επίτρεψης φόρτωσης ("load enable", ή "write enable").
Έστω ο προσημασμένος ακέραιος As,k με k bits, τον οποίο θέλουμε να μετατρέψουμε στον ίδιο αριθμό As,n με n bits: As,n = As,k όπου n>k. Εάν τα bits του As,k τα ερμηνεύσουμε σαν μη προσημασμένο (unsigned) ακέραιο, τότε θα μοιάζουν με (θα δηλώνουν) έναν αριθμό που ας το ονομάσουμε Au,k και ομοίως εάν τα bits του As,n τα ερμηνεύσουμε σαν unsigned τότε θα μοιάζουν με τον Au,n . Εάν ο As,k = As,n είναι μη αρνητικός (δηλ. θετικός ή μηδέν), τότε, κατά τον ορισμό της κωδικοποίησης συμπληρώματος ως-προς-2, (α) το αριστερό bit τους θα είναι μηδέν, και (β) οι απρόσημες ερμηνίες τους θα είναι: Au,k = As,k και Au,n = As,n , και αφού As,n = As,k τότε θα είναι και: Au,n = Au,k. Αυτοί οι δύο τελευταίοι, αφού είνα unsigned ακέραιοι, με n και k bits αντίστοιχα, και είναι ίσοι μεταξύ τους, προκύπτει ότι ο Au,n που έχει περισσότερα bits θα είναι ίδιος με τον Au,k αλλά με n-k μηδενικά προστεθημένα αριστερά από τον Au,k .
Αλλιώς, εάν οι As,n = As,k είναι αρνητικοί, τότε, κατά τον ορισμό μας, (α) το αριστερό bit τους θα είναι ένα, και (β) οι απρόσημες ερμηνίες τους θα είναι: Au,k = As,k + 2k και Au,n = As,n + 2n . Δεδομένου ότι: As,n = As,k προκύπτει ότι θα είναι και: Au,n - 2n = Au,k - 2k . Επομένως, η αναπαράσταση που ψάχνουμε είναι η: Au,n = Au,k - 2k + 2n = Au,k + (2n - 2k) = (2n-k - 1) · 2k + Au,k . Σε αυτήν την τελευταία έκφραση, ο μεν αριστερός προσθετέος, (2n-k - 1) · 2k, αποτελείται από (n-k) το πλήθος άσσους (που είναι ο αριθμός 2n-k - 1) ολισθημένους αριστερά κατά k θέσεις bits (που είναι ο πολλαπλασιασμός επί 2k), ο δε δεξιός προσθετέος, Au,k , είναι τα αρχικά k bits του αρχικού αριθμού που μας δόθηκε. Δεδομένου ότι ο πρώτος προσθετέος έχει όλο μηδενικά στις k δεξιές θέσεις, ο δε δεύτερος προσθετέος έχει όλο μηδενικά στις (n-k) αριστερές θέσεις, το άθροισμά τους θα είναι προφανώς απλώς η "συγκόλληση" (concatenation) των δύο αυτών ποσοτήτων. Επομένως, η αναπαράσταση με n bits του αρχικού αριθμού που μας δόθηκε θα αποτελείται από τα αρχικά k bits, δεξιά, μαζί με (n-k) άσσους κολλημένους ακριβώς αριστερά τους.
Συνολικά λοιπόν, γιά να μετατρέψουμε ένα προσημασμένο (signed) ακέραιο από k (λιγότερα) bits σε n (περισσότερα) bits, δεν έχουμε παρά να κάνουμε το εξής: Προσθέτουμε αριστερά από τα bits που μας δόθηκαν (n-k) πρόσθετα bits τα οποία είναι όλα τους αντίγραφα του αριστερού (most significant) bit του αριθμού που μας δόθηκε, δηλαδή αντίγραφα του bit που υποδεικνύει το πρόσημο του δοθέντος αριθμού (0 γιά θετικούς ή το μηδεν, 1 γιά αρνητικούς). Η πράξη αυτή ονομάζεται επομένως, προφανώς, επέκταση προσήμου (sign extension).
(1)
Μπορούν αυτές οι ψευδοεντολές να παραλειφθούν;
Θα μπορούσατε να τις αντικαταστήσετε με κανονικές εντολές του επεξεργαστή;
Εάν ναι, να γράψετε τις παρακάτω αρχικοποιήσεις με κανονικές εντολές:
.register $s1 1
.register $s2 2
Προσέξτε ότι στα προγράμματα που θα γράψετε
πρέπει να συμπεριλάβετε τα labels main: και exit:
όπως στα υπάρχοντα παραδείγματα,
για να λειτουργήσει κανονικά ο προσομοιωτής.
Επίσης, προσέξτε οτι η πρώτη εντολή
θα πρέπει να είναι στην ίδια γραμμή με το label "main:"
(2) Γράψτε ένα δικό σας πρόγραμμα σε ένα αντίστοιχο αρχείο .asm που να εκτελεί τις εντολές R-format που υποστηρίζει το ProcSim: add, sub, and, or, slt. Τις add, sub, και slt, επαναλάβετέ τις δύο φορές καθεμία, με διαφορετικά ορίσματα (καταχωρητές πηγής ή προορισμού) καθεμία. Μπορείτε να χρησιμοποιήσετε τις ψευδοεντολές αρχικοποίησης των καταχωρητών που είδαμε παραπάνω. Απο τα σήματα ελέγχου (μαζί και αυτά που ελέγχουν την ALU) ποιά είναι ίδια για όλες τις εντολές αυτού του τύπου, ποιά διαφέρουν, και γιατί;
(3) Μελετήστε (γράφοντας ένα δικό σας πρόγραμμα και τρέχοντας το στον προσοοιωτή) τις εντολές lw και sw, με όμοιο τρόπο όπως παραπάνω. Τι πράξη εκτελείται στην ALU για αυτές τις εντολές; Είναι η ίδια και για τις δύο και γιατί; Τα δύο σήματα "ALUop" (από τον κυρίως έλεγχο στον δευτερεύοντα, και από εκείνον στην ALU), που ελέγχουν την πράξη που θα γίνει στην ALU, τι τιμή έχουν για τις εντολές sw και lw και με ποιάν απο τις εντολές R-format του προηγούμενου ερωτήματος είναι ίδια;
(4) Δοκιμάστε την ίδια διαδικασία όπως παραπάνω και για τις εντολές I-format: addi, andi ori. Ποιά σήματα ελέγχου είναι ίδια για όλες τις εντολές και ποιά διαφέρουν; Ειναι τα σήματα ALUop και η αντίστοιχη πράξη που γίνεται στην ALU ίδια με αντίστοιχες εντολές R-format; Ποιά είναι η διαφορά ανάμεσα στις εισόδους της ALU; Από πού προέρχονται οι τελεστέτοι για κάθε πράξη, ποιός πολυπλέκτης το καθορίζει, και ποια είναι η διαφορά με τις αντίστοιχες εντολές R-format (π.χ add και addi);
(5) Γράψτε ένα πρόγραμμα που να χρησιμοποιεί τις εντολές διακλάδωσης, j (jump) και beq. Μελετήστε το κομμάτι του datapath που υπολογίζει την επόμενη τιμή του PC και δείτε πώς αλλάζει η επιλογή του επόμενου PC ανάλογα με την εντολή. Ποιές είναι οι δυνατές τιμές που μπορεί να πάρει ο PC στην εντολη beq, δηλαδή ποιά τιμή παίρνει αν είναι επιτυχημένη η διακλάδωση, και ποιά αν δεν είναι; Ποια τιμή παίρνει ο PC αν εκτελεστεί μια εντολή j (jump); Ποιό σήμα ελέγχου και ποιός πολυπλέκτης καθορίζει την τιμή που θα φορτωθεί τελικά;
Τρόπος Παράδοσης:
Παραδώστε την άσκηση αυτή on-line, σε μορφή PDF (μόνον)
(μπορεί να είναι κείμενο μηχανογραφημένο ή/και "σκαναρισμένο" χειρόγραφο,
αλλά μόνον σε μορφή PDF).
Παραδώστε μέσω turnin ex08@hy225 [directoryName]
ένα αρχείο ονόματι ex08.pdf
που θα περιέχει τις απαντήσεις σας
σε όλες τις παραπάνω ερωτήσεις (1) έως και (5),
καθώς και τα προγράμματα που γράψατε (αρχεία .asm)
σε μορφή απλού κειμένου μέσα στο κείμενο των απαντήσεών σας.