Πίσω


2. Βήμα αποκωδικοποίησης της εντολής και ανάκλησης των καταχωρητών

Στο προηγούμενο βήμα, καθώς και σε αυτό, δεν γνωρίζουμε το είδος της εντολής και παρουσιάζουμε ενέργειες που εφαρμόζονται σε όλες τις εντολές (όπως η ανάκληση της εντολής στο βήμα 1), ή δεν επηρεάζουν τη διαδικασία, στην περίπτωση που η εντολή δεν είναι αυτή στην οποία αναφερόμαστε. Έτσι σε αυτό το βήμα μπορούμε να διαβάσουμε τους δύο καταχωρητές που καθορίζουν τα πεδία rs και rt, αφού η ανάγνωση των καταχωρητών δεν είναι επιζήμια, ακόμα και αν δεν χρειάζεται. Τα περιεχόμενα των καταχωρητών μπορεί να χρειαστούν σε επόμενα στάδια, έτσι τα ονομάζουμε Α και Β στην παρακάτω περιγραφή. Οι έξοδοι των καταχωρητών δεν χρειάζεται να σωθούν σε προσωρινό καταχωρητή, αφού οι είσοδοι στο αρχείο καταχωρητών (επομένως και τα δεδομένα στις εξόδους), δεν αλλάζουν κατά την διάρκεια εκτέλεσης της εντολής.

Θα υπολογίσουμε επίσης την διεύθυνση του στόχου διακλάδωσης στην ALU, το οποίο επίσης δεν επηρεάζει την διαδικασία, επειδή μπορούμε να αγνοήσουμε την τιμή εάν δεν έχουμε εντολή διακλάδωσης. Επειδή δε γνωρίζουμε εάν έχουμε εντολή διακλάδωσης με συνθήκη και επειδή χρειάζεται να χρησιμοποιήσουμε την ALU στα επόμενα βήματα, πρέπει να σώσουμε την διεύθυνση του στόχου διακλάδωσης που υπολογίσαμε, σε έναν καινούριο καταχωρητή, τον οποίο ονομάζουμε Στόχο (Target).

Εκτελώντας αυτές τις λειτουργίες νωρίτερα, έχουμε το πλεονέκτημα της μείωσης του αριθμού κύκλων ρολογιού που απαιτούνται για την εκτέλεση μιας εντολής. Μπορούμε να κάνουμε αυτές τις ενέργειες εξαιτίας της δομής των εντολών. Για παράδειγμα, εάν η εντολή έχει δύο καταχωρητές εισόδου, είναι πάντα τα πεδία rs και rt και αν έχουμε εντολή διακλάδωσης με συνθήκη, το offset είναι πάντα τα 16 λιγότερο σημαντικά ψηφία:

A = Register[IR[25 - 21]];

B = Register[IR[20 - 16]];

Target = PC + (sign-extend (IR[15 - 0]) << 2);


Λειτουργία:Προσπέλαση του αρχείου καταχωρητών για την ανάγνωση των καταχωρητών με τη χρήση των πεδίων rs και rt. Δεν απαιτείται ενεργοποίηση των γραμμών ελέγχου. Υπολογισμός της διεύθυνσης του στόχου διακλάδωσης και αποθήκευση αυτής στον καταχωρητή Στόχο (Target). Αυτό απαιτεί το σήμα ALUSrcB να είναι 11 (έτσι ώστε να γίνει επέκταση προσήμου και ολίσθηση στο πεδίο offset), το σήμα ALUSrcA να είναι 0 (έτσι ώστε να πάρει την τιμή του απαριθμητή προγράμματος) και το σήμα ALUOp να είναι 00 (έτσι ώστε να γίνει πρόσθεση στην ALU). Επιπλέον πρέπει να προσθέσουμε μία γραμμή ελέγχου εγγραφής για τον καταχωρητή Στόχο, η οποία πρέπει να είναι ενεργοποιημένη κατά τη διάρκεια αυτού του βήματος. Οι προσπελάσεις των καταχωρητών και ο υπολογισμός της διεύθυνσης του στόχου διακλάδωσης γίνονται παράλληλα. Μετά από αυτόν τον κύκλο ρολογιού η λειτουργία που θα γίνει εξαρτάται από τον κωδικό της κάθε εντολής.