Μικροπρογραμματιζόμενη μονάδα ελέγχου του DLX
Πριν ξεκινήσουμε με τον μικροπρογραμματισμό θα πρέπει να καθορίσουμε από τι μπορεί να αποτελούνται τα πεδία μιας μικροεντολής. Το πρώτο βήμα είναι να δημιουργηθεί μια λίστα με τις πιθανές εισόδους. Στα παρακάτω σχήματα παρουσιάζεται η λίστα αυτή, η οποία περιλαμβάνει τον τελεστέο προορισμού (Destination), τον πηγαίο τελεστέο1 (Source1), τον πηγαίο τελεστέο2 (Source2), το πεδίο που καθορίζει τι πράξη κάνει η ALU, το πεδίο misc και το πεδίο cond.
|
|
|
|
|
|
|
|
Σχήμα 3.4.5 - Στον πίνακα αυτό παρουσιάζονται οι πιθανοί τελεστέοι προορισμού μιας μικροεντολής (το πεδίο Destination της μικροεντολής του σχήματος 3.4.2).
Source1/Source2 |
A/B |
Temp |
PC |
IAR |
MAR |
MDR |
IR(16-bit imm) |
IR(26-bit imm) |
Constant |
Σχήμα 3.4.6 - Στον πίνακα αυτό παρουσιάζονται οι πιθανοί πηγαίοι τελεστέοι μιας μικροεντολής (τα πεδία Source1 και Source2 της μικροεντολής του σχήματος 3.4.2). Το IR(16-bit imm) και το IR(26-bit imm) σημαίνουν ότι ο πηγαίος τελεστέος είναι μια 16-bit ή μια 26-bit αντίστοιχα απευθείας τιμή. Το Constant σημαίνει ότι ο πηγαίος τελεστέος είναι μια σταθερά, στην περίπτωση αυτή στο πεδίο C της μικροεντολής υπάρχει η τιμή της σταθεράς.
|
|
|
(reverse subtract) |
|
|
|
|
|
|
|
|
Σχήμα 3.4.7 - Στον πίνακα αυτό παρουσιάζεται το πεδίο ALU της μικροεντολής του σχήματος 3.4.2. Σε αυτό το πεδίο φαίνεται τι πράξη θα κάνει η ALU. Η πράξη RSUB σημαίνει αντίστροφη αφαίρεση, δηλαδή αντί για την αφαίρεση Α-Β κάνει την αφαίρεση Β-Α. Το Pass S1 και Pass S2 δηλώνουν ότι η ALU θα αφήσει να περάσουν τα δεδομένα που έρχονται από την αρτηρία S1 και S2 αντίστοιχα χωρίς να εκτελέσει καμία πράξη σ' αυτά.
|
Instr Read IR¬ M[PC] |
Data Read MDR¬ M[MAR] |
Write M[MAR]¬ MDR |
AB¬
RF
Load A&B from
Reg. File |
Rd¬ C Write Rd |
R31¬ C Write R31 |
Σχήμα 3.4.8 - Στον πίνακα αυτό παρουσιάζεται το πεδίο Misc της μικροεντολής του σχήματος 3.4.2. Στα αριστερά υπάρχει ο συμβολισμός που χρησιμοποιείται στην μικροεντολή και στα δεξιά υπάρχει η εξήγηση του συμβολισμού. Το Instr Read σημαίνει ότι η εντολή διαβάζεται από τη μνήμη. Το Data Read σημαίνει ότι καταχωρούνται τα δεδομένα που έχουν διαβαστεί από τη μνήμη στον MDR (Load). Το Write σημαίνει ότι αποθηκεύεται στη μνήμη το δεδομένο που ήταν καταχωρημένο στον MDR (Store). Το ΑΒ¬RF σημαίνει ότι διαβάζονται οι καταχωρητές από το αρχείο καταχωρητών.
|
---
Πήγαινε στην
επόμενη μικροντολή |
Uncond Πάντα μεταπήδηση |
Int? Έλεγχος για διακοπή |
Zero?
Είναι η έξοδος της
ALU μηδέν; |
Mem?
Έχει ολοκληρωθεί η
πρόσβαση στη μνήμη; |
Negative?
Είναι η έξοδος της ALU
αρνητική; |
Load?
Είναι μικροεντολή
φόρτωσης; |
Decode1
Ο πίνακας
διευθύνσεων 1 καθορίζει την επόμενη μικροεντολή |
Decode2
Ο πίνακας
διευθύνσεων 2 καθορίζει την επόμενη μικροεντολή |
Decode3
Ο πίνακας
διευθύνσεων 3 καθορίζει την επόμενη μικροεντολή |
Σχήμα 3.4.9 - Στον πίνακα αυτό παρουσιάζεται το πεδίο cond της μικροεντολής του σχήματος 3.4.2. Στα αριστερά υπάρχει ο συμβολισμός που χρησιμοποιείται στην μικροεντολή και στα δεξιά υπάρχει η εξήγηση του συμβολισμού. Αν δεν υπάρχει τίποτα στο πεδίο cond τότε εκτελείται η επόμενη κατά σειρά μικροεντολή. Το Uncond σημαίνει ότι η επόμενη μικροεντολή θα είναι εκείνη που καθορίζεται στο πεδίο Jump label. Τα Decode1, Decode2, Decode3 δηλώνουν ότι η επόμενη μικροεντολή καθορίζεται από τους πίνακες διευθύνσεων 1,2 και 3 αντίστοιχα. Οι πίνακες αυτοί παρουσιάζονται παρακάτω.
|
|
|
Memory |
|
|
Move to special |
|
|
Move from special |
|
|
S2=B |
|
|
S2=Immediate |
|
|
Branch equal zero |
|
|
Branch not equal zero |
|
|
Jump |
|
|
Jump register |
|
|
Jump and link |
|
|
Jump and link register |
|
|
Trap |
|
|
Πίνακας Διευθύνσεων 1 - Ο πίνακας αυτός καθορίζει ποια θα είναι η επόμενη μικροεντολή ανάλογα με τον κωδικό λειτουργίας της εντολής. Στην αριστερή στήλη παρουσιάζεται ο κωδικός λειτουργίας της εντολής, στη μεσαία στήλη η διεύθυνση της μικροεντολής που θα εκτελεστεί ανάλογα με τον κωδικό λειτουργίας της εντολής και στη δεξιά στήλη βρίσκεται ο τίτλος (label) της μικροεντολής που θα εκτελεστεί. Έτσι αν για παράδειγμα ο κωδικός λειτουργίας της εντολής δηλώνει ότι η εντολή είναι μια εντολή μεταπήδησης (Jump) τότε η επόμενη μικροεντολή βρίσκεται στη διεύθυνση 54 και έχει τίτλο (label) Jump: .
|
|
|
Load byte |
|
|
Load byte unsigned |
|
|
Load half |
|
|
Load half unsigned |
|
|
Load word |
|
|
ADD |
|
|
SUB |
|
|
AND |
|
|
OR |
|
|
XOR |
|
|
SLL |
|
|
SRL |
|
|
SRA |
|
|
LHI |
|
|
Set equal |
|
|
Set not equal |
|
|
Set less than |
|
|
Set greater than or equal |
|
|
Set greater than |
|
|
Set less than or equal |
|
|
Πίνακας Διευθύνσεων 2 και 3 - Ο πίνακας αυτός καθορίζει ποια θα είναι η επόμενη μικροεντολή ανάλογα με τον κωδικό λειτουργίας της εντολής. Στην αριστερή στήλη παρουσιάζεται ο κωδικός λειτουργίας της εντολής, στη μεσαία στήλη η διεύθυνση της μικροεντολής που θα εκτελεστεί ανάλογα με τον κωδικό λειτουργίας της εντολής και στη δεξιά στήλη βρίσκεται ο τίτλος (label) της μικροεντολής που θα εκτελεστεί. Έτσι αν για παράδειγμα ο κωδικός λειτουργίας της εντολής δηλώνει ότι η εντολή είναι μια εντολή πρόσθεσης (ADD) τότε η επόμενη μικροεντολή βρίσκεται στη διεύθυνση 25 και έχει τίτλο (label) ADD/I: .