Κεφάλαιο 3 | Ενότητα 2| Προηγούμενο | Επόμενο | Λεξικό όρων

Πως σχεδιάζουμε τη βασική μονάδα ελέγχου ενός κύκλου

Αφού εξετάσαμε το σχεδιασμό της ALU η οποία χρησιμοποιεί τον κωδικό function και ένα σήμα των 2 bits σαν είσοδο στη μονάδα ελέγχου, μπορούμε να επιστρέψουμε στο σχεδιασμό της υπόλοιπης μονάδας ελέγχου. Για να ξεκινήσουμε αυτή τη διαδικασία ας προσδιορίσουμε όλες τις γραμμές ελέγχου και τα απαιτούμενα κυκλώματα για κάθε εντολή, όπως τα σχεδιάσαμε στη δίοδο δεδομένων του σχήματος 3.2.14. Για να δούμε τον τρόπο με τον οποίο θα προσθέσουμε τις αρτηρίες έτσι ώστε να κατευθύνουμε τις εντολές στη δίοδο δεδομένων, είναι χρήσιμο να επαναλάβουμε την διάταξη των πεδίων για τους τρεις διαφορετικούς τύπους εντολών: τις εντολές τύπου R, διακλάδωσης και φόρτωσης ή αποθήκευσης. Η διάταξη των πεδίων για κάθε τύπο εντολής φαίνεται στο σχήμα 3.2.19.

Για την διάταξη των πεδίων της εντολής βασιζόμαστε στις παρακάτω σημαντικές παρατηρήσεις:

  Το πεδίο op, το οποίο ονομάζεται και κωδικός λειτουργίας (opcode), βρίσκεται πάντα στα bits 31-26. Το πεδίο αυτό θα το αναφέρουμε ως Op[5-0].

  Οι δύο πηγαίοι καταχωρητές που πρόκειται να διαβαστούν τα περιεχόμενά τους, καθορίζονται πάντα από τα πεδία rs και rt στα bits 25-21 και 20-16. Αυτό ισχύει για τις εντολές τύπου R, τις εντολές διακλάδωσης και τις εντολές αποθήκευσης.

  Ο βασικός καταχωρητής για τις εντολές φόρτωσης και αποθήκευσης βρίσκεται πάντα στα bits 25-21(rs).

  Το πεδίο offset (16 bits) για τις εντολές διακλάδωσης, φόρτωσης και αποθήκευσης βρίσκεται πάντα στα bits 15-0.

  Ο καταχωρητής προορισμού για μία εντολή φόρτωσης βρίσκεται στα bits 20-16(rt), ενώ για τις εντολές τύπου R βρίσκεται στα bits 15-11(rd). Έτσι πρέπει να προσθέσουμε ένα πολυπλέκτη για να επιλέγει το πεδίο της εντολής που χρησιμοποιείται, για να μας δείχνει τον αριθμό του καταχωρητή στον οποίο θα γίνει εγγραφή.

Πεδίο 0 rs rt rd shamt funct
Θέση των bits
31-26
25-21
20-16
15-11
10-6
5-0
a. Εντολές τύπου R

Πεδίο 35 ή 43 rs rt address
Θέση των bits
31-26
25-21
20-16
15-0
b. Εντολές φόρτωσης ή αποθήκευσης

Πεδίο 4 rs rt address
Θέση των bits
31-26
25-21
20-16
15-0
c. Εντολές διακλάδωσης

Σχήμα 3.2.19 - Οι τρεις τύποι εντολών χρησιμοποιούν δύο διαφορετικούς τρόπους για την διάταξη των πεδίων τους. Οι εντολές μεταπήδησης (jump) χρησιμοποιούν άλλη διάταξη των πεδίων τους την οποία θα αναφέρουμε περιληπτικά.

  1. Η διάταξη των πεδίων της εντολής για τις εντολές τύπου R, οι οποίες έχουν όλες κωδικό λειτουργίας (opcode) 0. Αυτές οι εντολές έχουν τρεις τελεστέους καταχωρητή: rs, rt και rd. Τα πεδία rs και rt είναι πηγαίοι τελεστέοι και το rd είναι ο τελεστέος προορισμού. Η συνάρτηση της ALU βρίσκεται στο πεδίο funct και αποκωδικοποιείται από τη μονάδα ελέγχου της ALU. Οι εντολές που υλοποιούνται με αυτή τη μορφή είναι οι: add, sub, and, or και slt. Το πεδίο shamt χρησιμοποιείται μόνο για ολίσθηση, και το αγνοούμε.
  2. Η διάταξη των πεδίων της εντολής για τις εντολές φόρτωσης (κωδικός λειτουργίας=35) και αποθήκευσης (κωδικός λειτουργίας=43). Ο καταχωρητής rs είναι ο βασικός καταχωρητής που προστίθεται στο πεδίο address (16 bits), για να παράγει την διεύθυνση της μνήμης. Στις εντολές φόρτωσης ο rs είναι ο καταχωρητής προορισμού για την τιμή που φορτώθηκε. Στις εντολές αποθήκευσης ο rt είναι ο πηγαίος καταχωρητής του οποίου η τιμή θα αποθηκευτεί στη μνήμη.
  3. Η διάταξη των πεδίων της εντολής για τις εντολές διακλάδωσης (κωδικός λειτουργίας=4). Οι καταχωρητές rs και rt είναι οι πηγαίοι καταχωρητές οι οποίοι συγκρίνονται μεταξύ τους για το αν είναι ίσοι. Το πεδίο address (16 bits) ολισθαίνει και προστίθεται στον απαριθμητή προγράμματος για τον υπολογισμό της διεύθυνσης του στόχου διακλάδωσης.

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 13

Να περιγράψετε τη διάταξη των πεδίων για τις εντολές τύπου R, τις εντολές φόρτωσης ή αποθήκευσης και τις εντολές διακλάδωσης.

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

Σχήμα 3.2.20 - Η δίοδος δεδομένων του σχήματος 3.2.14 με τους πολυπλέκτες και με όλες τις γραμμές ελέγχου. Οι γραμμές ελέγχου είναι χρωματισμένες στο σχήμα. Επίσης έχει προστεθεί η μονάδα ελέγχου της ALU.

Το σχήμα 3.2.20 απεικονίζει τις επτά γραμμές ελέγχου (οι οποίες αποτελούνται από ένα μόνο bit), μαζί με το σήμα ελέγχου του ALUOp (το οποίο αποτελείται από δύο bits). Έχουμε ήδη εξηγήσει τον τρόπο με τον οποίο λειτουργεί το σήμα ελέγχου του ALUOp. Επομένως είναι απαραίτητο να εξηγήσουμε τις εργασίες που επιτελούν οι άλλες επτά γραμμές ελέγχου, πριν τις χρησιμοποιήσουμε κατά την διάρκεια της εκτέλεσης των εντολών. Το σχήμα 3.2.21 περιγράφει τη λειτουργία αυτών των επτά γραμμών ελέγχου.

Σήμα ελέγχου Επίδραση όταν
δεν είναι ενεργά
Επίδραση όταν
είναι ενεργά
ΜemRead
Τίποτα
Το περιεχόμενο της μνήμης δεδομένων που βρίσκεται στην διεύθυνση που έχει δοθεί για ανάγνωση, τοποθετείται στην έξοδο ανάγνωσης δεδομένων.
MemWrite
Τίποτα
Το περιεχόμενο της μνήμης δεδομένων που βρίσκεται στην διεύθυνση που έχει δοθεί για εγγραφή, αντικαθίσταται από την τιμή που βρίσκεται στην είσοδο εγγραφής των δεδομένων.
ALUSrc
Ο δεύτερος τελεστέος της ALU προέρχεται από τη δεύτερη έξοδο του αρχείου καταχωρητών. Ο δεύτερος τελεστέος της ALU είναι τα 16 λιγότερα σημαντικά ψηφία της εντολής, μετά από επέκταση προσήμου.
RegDst
Ο αριθμός του καταχωρητή προορισμού στον οποίο θα γίνει η εγγραφή προέρχεται από το πεδίο rt. Ο αριθμός του καταχωρητή προορισμού στον οποίο θα γίνει εγγραφή προέρχεται από το πεδίο rd.
RegWrite
Τίποτα
Στον καταχωρητή που προσδιορίζεται από την τιμή που έχει δοθεί στην είσοδο εγγραφή καταχωρητή, εγγράφεται η τιμή που έχει δοθεί στην είσοδο εγγραφής δεδομένων.
PCSrc
Ο απαριθμητής προγράμματος (PC) αντικαθίσταται από την έξοδο του αθροιστή που υπολογίζει την τιμή PC + 4. Ο απαριθμητής προγράμματος (PC) αντικαθίσταται από την έξοδο του αθροιστή, ο οποίος υπολογίζει τον στόχο διακλάδωσης.
MemtoReg
Η τιμή που δίνεται στην είσοδο εγγραφή καταχωρητή προέρχεται από την ALU. Η τιμή που δίνεται στην είσοδο εγγραφή καταχωρητή προέρχεται από την μνήμη δεδομένων.

Σχήμα 3.2.21 - Η λειτουργία για κάθε ένα από τα επτά σήματα ελέγχου. Όταν είναι ενεργό το ένα από τα δύο bit σε ένα πολυπλέκτη, η είσοδος επιλογής του πολυπλέκτη έχει την τιμή 1. Διαφορετικά, εάν δεν είναι ενεργό, η είσοδος επιλογής έχει την τιμή 0.


Η μονάδα ελέγχου μπορεί να ενεργοποιήσει όλα αυτά τα σήματα εκτός από το σήμα PCSrc, βασιζόμενη αποκλειστικά στο πεδίο του κωδικού λειτουργίας (opcode field) της εντολής. Η γραμμή ελέγχου ενεργοποιείται μόνο εάν η μονάδα ελέγχου αποφασίσει ότι έχουμε εντολή διακλάδωσης ή ισότητας και η έξοδος 0 (Zero output) της ALU, η οποία χρησιμοποιείται για σύγκριση, είναι αληθής. Για να δημιουργήσουμε το σήμα PCSrc πρέπει να χρησιμοποιήσουμε μια πύλη AND με είσοδο το σήμα από τη μονάδα ελέγχου, το οποίο ονομάζουμε σήμα διακλάδωσης (Branch), και το σήμα της εξόδου 0 της ALU.

Τα εννέα αυτά σήματα ελέγχου ενεργοποιούνται βάσει των έξι σημάτων στην είσοδο της μονάδας ελέγχου, τα οποία είναι τα ψηφία του κωδικού λειτουργίας (opcode bits).

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 14

Να συμπληρώσετε στο σχήμα 3.2.20 τη μονάδα ελέγχου και τις γραμμές ελέγχου, μέσα από τις οποίες μεταφέρονται τα σήματα ελέγχου στα διάφορα κυκλώματα της διόδου δεδομένων. Να συγκρίνετε το κύκλωμα που σχεδιάσατε με το σχήμα που ακολουθεί (σχήμα 3.2.22).

Σχήμα 3.2.22 - Η δίοδος δεδομένων με την μονάδα ελέγχου. Η είσοδος στην μονάδα ελέγχου είναι το πεδίο του κωδικού λειτουργίας (opcode) της εντολής το οποίο αποτελείται από 6 bits. Οι έξοδοι της μονάδας ελέγχου αποτελούνται από τρία σήματα του ενός bit, τα οποία χρησιμοποιούνται στον έλεγχο των πολυπλεκτών (RegDst, ALUSrc, και MemtoReg), από τρία σήματα για τον έλεγχο της εγγραφής και της ανάγνωσης στο αρχείο καταχωρητών και τη μνήμη δεδομένων (RegWrite, MemRead και MemWrite), από ένα σήμα του ενός ψηφίου το οποίο καθορίζει τη διακλάδωση (Branch), και ένα σήμα ελέγχου των 2 ψηφίων για την ALU (ALUOp). Μία πύλη ΚΑΙ χρησιμοποιείται για να συνδέσει το σήμα ελέγχου διακλάδωσης και την έξοδο 0 από την ALU. Η πύλη ΚΑΙ ελέγχει την επιλογή της επόμενη τιμής του απαριθμητή προγράμματος.


Η ενεργοποίηση των γραμμών ελέγχου εξαρτάται μόνο από το πεδίο του κωδικού λειτουργίας (opcode). Επομένως πρέπει να καθορίσουμε εάν το κάθε ένα από τα σήματα ελέγχου είναι 0, 1 ή είναι αδιάφορος όρος (Χ).

Το σχήμα 3.2.23 καθορίζει τον τρόπο με τον οποίο πρέπει να ενεργοποιηθούν τα σήματα ελέγχου για κάθε κωδικό λειτουργίας, και προέρχεται από τα σχήματα 3.2.15, 3.2.21 και 3.2.22.

Εντολή RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUop1 ALUop0
Τύπου R
1
0
0
1
0
0
0
1
0
lw
0
1
1
1
1
0
0
0
0
sw
X
1
X
0
0
1
0
0
0
beq
X
0
X
0
0
0
1
0
1

Σχήμα 3.2.23 - Η πρώτη γραμμή του πίνακα αντιστοιχεί στις εντολές τύπου R (add, subtract, and, or και slt). Για όλες τις εντολές, τα πεδία του πηγαίου καταχωρητή είναι τα rs και rt και του καταχωρητή προορισμού είναι το rd. Αυτό καθορίζει τον τρόπο με τον οποίο ενεργοποιούνται τα σήματα ALUSrc και RegDst. Επιπλέον μια εντολή τύπου R γράφει σε ένα καταχωρητή (RegWrite = 1), αλλά ούτε διαβάζει ούτε γράφει στη μνήμη δεδομένων. Το πεδίο ALUOp για τις εντολές τύπου R είναι 10 για να δηλώσει πως η μονάδα ελέγχου της ALU πρέπει να παραχθεί από το πεδίο funct. Η δεύτερη και η τρίτη γραμμή του πίνακα είναι για τις εντολές φόρτωσης και αποθήκευσης. Τα ALUSrc και ALUOp καθορίζουν τον υπολογισμό της ενεργής διεύθυνσης. Τα MemRead και MemWrite καθορίζουν την προσπέλαση της μνήμης. Τέλος τα RegDst και RegWrite καθορίζουν ότι στην εντολή φόρτωσης, το αποτέλεσμα αποθηκεύεται στον καταχωρητή rt. Η εντολή διακλάδωσης είναι παρόμοια στη λειτουργία με τις εντολές τύπου R, αφού στέλνει τους καταχωρητές rs και rt στην ALU. Το πεδίο ALUOp για την εντολή διακλάδωσης καθορίζει την αφαίρεση, η οποία χρησιμοποιείται για σύγκριση. Παρατηρούμε πως το πεδίο MemReg δεν έχει σχέση με το αν το σήμα RegWrite είναι 0, (αφού δεν γίνεται εγγραφή στον καταχωρητή, η τιμή των δεδομένων στην είσοδο εγγραφής δεδομένων δεν χρησιμοποιείται). Συνεπώς το MemtoReg στις δύο τελευταίες γραμμές του πίνακα έχει αντικατασταθεί από Χ, είναι δηλαδή αδιάφορος όρος. Αυτού του τύπου οι αδιάφοροι όροι πρέπει να προστεθούν από τον σχεδιαστή, αφού εξαρτώνται από τον τρόπο λειτουργίας της διόδου δεδομένων. Αδιάφοροι όροι μπορούν επίσης να προστεθούν στο RegDst όταν το RegWrite είναι 0.

Σύμφωνα με τα σχήματα 3.2.21 και 3.2.23, μπορούμε να σχεδιάσουμε τη λογική μονάδα ελέγχου. Πριν τον σχεδιασμό θα εξηγήσουμε τον τρόπο με τον οποίο χρησιμοποιεί κάθε εντολή, τη δίοδο δεδομένων. Σημειώστε ότι ένας πολυπλέκτης ο οποίος βρίσκεται στο 0, αντιδρά με τον ίδιο τρόπο ακόμα και αν η γραμμή ελέγχου δεν είναι ενεργή.

Αντί να εξετάζουμε ολόκληρη τη δίοδο σαν ένα τμήμα συνδυαστικής λογικής, είναι πιο εύκολο να δούμε την εκτέλεση της εντολής σαν μια σειρά από βήματα, εστιάζοντας την προσοχή μας στο κομμάτι της διόδου που αφορά το κάθε βήμα.