ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Αρχιτεκτονικό σύνολο εντολών Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Σχεδίαση επεξεργαστή Αρης Ευθυμίου Πηγή: Διαφάνειες CS61C, UCB
Το σημερινό μάθημα!!!!! Σχεδίαση επεξεργαστή Δίαυλος δεδομένων, τμήμα ελέγχου Στάδια εκτέλεσης Βήματα σχεδίασης επεξεργαστή Χρονισμός 2
5 κύρια τμήματα υπολογιστή 3
Ο επεξεργαστής! Επεξεργαστής, Processor (CPU): Το τμήμα του υπολογιστή που κάνει όλη τη δουλειά (υπολογισμοί και αποφάσεις)! Δίαυλος δεδομένων, Datapath: το τμήμα του επεξεργαστή που περιλαμβάνει όλα τα κυκλώματα που απαιτούνται για να γίνουν οι «δουλειές» (οι μύες)! Ελεγχος, Control: το τμήμα του επεξεργαστή που καθοδηγεί το δίαυλο δεδομένων ώστε να γίνει η «δουλειά» (το μυαλό)! Σε πολυπύρινα συστήματα, όπου «επεξεργαστής» σκεφτείτε «πυρήνας» 4
Στάδια εκτέλεσης! Για καλύτερη οργάνωση σκεφτόμαστε την εκτέλεση εντολών ως ένα αριθμό από βήματα/στάδια! Πολλά από τα στάδια εκτέλεσης είναι ίδια ή έχουν σημαντικές ομοιώτητες για όλες τις εντολές! Τα δύο πρώτα στάδια είναι ίδια για κάθε εντολή Instrucoon Fetch: Δίνοντας τον PC ως διευθυνση στη μνήμη, διαβάζουμε την εντολή που θα εκτελεστεί Instrucoon Decode: αποκωδικοποίηση της εντολής ώστε να καταλάβουμε τί είδους είναι και τι ακριβώς πρέπει να γίνει 5
Στάδια εκτέλεσης! Τα υπόλοιπα στάδια εξαρτώνται από το είδος της εντολής αριθμητικές/λογικές πράξεις διαβάζουν καταχωρητές, κάνουν κάποιο υπολογισμό και γράφουν το αποτέλεσμα σε έναν καταχωρητή μεταφορές από/προς μνήμη: διαβάζουν καταχωρητές, υπολογίζουν τη διεύθυνση και κάνουν τη μεταφορά! οι load γράφουν τιμή σε καταχωρητή διακλαδώσεις: διαβάζουν καταχωρητές, υπολογίζουν τη συνθήκη, και αν ισχύει, υπολογίζουν τη διεύθυνση στόχου και αλλάζουν τον PC! Ολες, εκτός από άλματα και «ακολουθούμενες» διακλαδώσεις (taken branches) θέτουν τον PC = PC+4 6
Ομοιώτητες σταδίων εκτέλεσης! Δεν είναι τυχαίες: προέρχονται από την ομοιομορφία και απλότητα του σετ εντολών! Ολες οι εντολές διαβάζουν 1 ή 2 καταχωρητές επειδή τα πεδία στην κωδικοποίηση είναι σε σταθερά σημεία, η ανάγνωση μπορεί να γίνει ταυτόχρονα με την αποκωδικοποίηση πρίν καν γνωρίζουμε το είδος της εντολής!! Ολες, εκτός από άλματα, κάνουν κάποιο υπολογισμό αριθμητικές/λογικές μεταφορές δεδομένων: υπολογισμός διεύθυνσης διακλαδώσεις με συνθήκη: συνθήκη, διεύθυνση στόχου! Εγγραφή καταχωρητή: όλες εκτός από store, διακλαδώσεις, άλματα 7
Τα 5 στάδια εκτέλεσης 1. 2. 3. 4. 5. Προσκόμιση εντολής Αποκωδικοποίηση (+ ανάγνωση καταχωρητών) Υπολογισμός (χρήση ALU) Προσπέλαση μνήμης Εγγραφή αποτελέσματος! Δεν είναι όλα τα στάδια απαραίτητα για κάθε εντολή: π.χ. προσπέλαση μνήμης για εντολές επεξεργασίας ή διακλαδόσεις παρακάμπτονται ή η εντολή είναι αδρανής σε αυτό το στάδιο! Η load είναι η πιο απαιτητική: χρειάζεται όλα τα στάδια 8
Προσκόμιση εντολής! Ανάγνωση μνήμης στη διεύθυνση που έχει ο PC μία λέξη 32 bit - εντολή! Ταυτόχρονα μπορούμε να υπολογίσουμε το PC+4 που θα χρειαστεί για την επόμενη εντολή εκτός αν η εντολή είναι διακλάδωση, ή άλμα 9
Αποκωδικοποίηση! Πρώτα εξετάζεται το πεδίο opcode (bits 31:26) που θα καθορίσει τα υπόλοιπα πεδία της εντολής! Ανάγνωση καταχωρητών ο rs πάντα διαβάζεται ο rt τις περισσότερες φορές! η ανάγνωση δεν κάνει κακό! Διαβάζουμε και αν, τελικά, δεν χρειάζεται, αγνοούμε την τιμή! «Εύρεση» της σταθεράς (εντολές τύπου I, J) 10
Στάδιο υπολογισμού (ALU)! Αριθμητικές εντολές: η κύρια δουλειά γίνεται εδώ add, sub, slt, Δύο παραλλαγές: 2 καταχωρητές ή καταχωρητής - σταθερά! Εντολές διακλάδοσης: υπολογισμός της συνθήκης beq, bne: σύγκριση ισότητας (π.χ. με αφαίρεση)! Εντολές μεταφοράς: υπολογισμός διεύθυνσης τιμή καταχωρητή + σταθερά 11
Προσπέλαση μνήμης! Χρειάζεται μόνο για τις εντολές load, store! Οι υπόλοιπες εντολές το παραλείπουν! Store: Αποθήκευσε την τιμή του καταχωρητή που διαβάστηκε ήδη στην υπολογισμένη διεύθυνση! Load Διάβασε από την διεύθυνση 12
Εγγραφή καταχωρητή! Το αποτέλεσμα του υπολογισμού! ή η τιμή που διαβάσαμε από τη μνήμη! Αποθηκεύεται σε έναν καταχωρητή rd για τύπου R rt για τύπου I 13
Πρόχειρη υλοποίηση +4 1. Instrucoon Fetch ALU registers rs rt Data memory rd registers PC instruction memory του δίαυλου δεδομένων imm 2. Decode/ Register Read 3. Execute 4. Memory 5. Register Write Πηγή: UCB CS61C 14
Περιήγηση 1: R- type add $r3,$r1,$r2 # r3 = r1+r2 στάδιο 1: προσκόμιση εντολής, αύξηση PC στάδιο 2: αποκωδικοποίση: είναι add, διάβασε καταχωρητές $r1 και $r2 στάδιο 3: πρόσθεσε τις τιμές από το στάδιο 2 στάδιο 4: αδρανές (μή πειράξεις τη μνήμη) στάδιο 5: γράψε το αποτέλεσμα του στάδιου 3 στον καταχωρητή $r3 15
add $r3,$r1,$r2 +4 1 2 reg[1] reg[2] reg[1] + reg[2] ALU Data memory 3 registers PC instruction memory add r3, r1, r2 imm 16
Περιήγηση 2: αριθμητική I- type slti $r3,$r1,17 # if (r1<17) r3=1 else r3=0 στάδιο 1: προσκόμιση εντολής, αύξηση PC στάδιο 2: αποκωδικοποίση: είναι slo, διάβασε καταχωρητή $r1 στάδιο 3: σύγκρινε την τιμή από το στάδιο 2 με τη σταθερά 17 στάδιο 4: αδρανές (μή πειράξεις τη μνήμη) στάδιο 5: γράψε το αποτέλεσμα του στάδιου 3 στον καταχωρητή $r3 17
slti $r3,$r1,17 +4 3 imm 17 1 reg[1] reg[1] < 17? ALU Data memory x registers PC instruction memory slo r3, r1, 17 18
Περιήγηση 3 I- type sw! sw $r3,17($r1) # Mem[r1+17]=r3 στάδιο 1: προσκόμιση εντολής, αύξηση PC στάδιο 2: αποκωδικοποίση: είναι sw, διάβασε καταχωρητές $r1, $r3 στάδιο 3: πρόσθεσε την τιμή από το στάδιο 2 με τη σταθερά 17 για να υπολογίσεις τη διεύθυνση στάδιο 4: εγγραφή τιμής $r3 (στάδιο 2) στη διεύθυνση από το στάδιο 3 στάδιο 5: αδρανές (δεν υπάρχει εγγραφή σε καταχωρητή) 19
sw $r3,17($r1) +4 1 3 imm reg[1] reg[3] reg[1] + 17 ALU Data memory x registers PC instruction memory sw r3, 17(r1) 17 MEM[r1+17] = r3 20
Περιήγηση 3 I- type, lw! lw $r3,17($r1) # r3=mem[r1+17] στάδιο 1: προσκόμιση εντολής, αύξηση PC στάδιο 2: αποκωδικοποίση: είναι lw, διάβασε καταχωρητή $r1 στάδιο 3: πρόσθεσε την τιμή από το στάδιο 2 με τη σταθερά 17 για να υπολογίσεις τη διεύθυνση στάδιο 4: ανάγνωση μνήμης στη διεύθυνση από το στάδιο 3 στάδιο 5: εγγραφή τιμής από το στάδιο 4, στον $r3 21
lw $r3,17($r1) +4 1 3 imm reg[1] reg[1] + 17 ALU Data memory x registers PC instruction memory lw r3, 17(r1) 17 MEM[r1+17] 22
Δίαυλος δεδομένων και έλεγχος +4 rs rt ALU Data memory rd registers PC instruction memory! Ο δίαυλος σχεδιάζεται ώστε να υποστηρίζει όλες τις ροές δεδομένων που χρειάζονται οι εντολές! Ο έλεγχος προκαλεί τις ροές των δεδομένων μέσα στο δίαυλο imm opcode, funct Control Unit 23
Βήματα σχεδίασης! Βήμα 1: Ανάλυση του σετ εντολών για καθορισμό απαιτήσεων του διαύλου δεδομένων! Βήμα 2: Επιλογή δομικών στοιχείων διαύλου δεδομένων και καθορισμός χρονισμού (clock methodology)! Βήμα 3: Συνένωση των δομικών στοιχείων σε ένα πλήρη δίαυλο δεδομένων! Βήμα 4: Ανάλυση της υλοποίησης κάθε εντολής για να καθοριστούν τα σημεία ελέγχου που πραγματοποιούν τις μεταβάσεις/μεταφορές στο δίαυλο! Βήμα 5: Συνένωση της λογικής ελέγχου 24
Μορφές εντολών MIPS R: opcode rs rt I: opcode rs rt J: opcode rd shamt funct offset/immediate target address! Πεδία: opcode: κωδικός λειτουργίας (operaoon code) της εντολής rs, rt, rd: οι αριθμοί/ονόματα των καταχωρητών πηγής και προορισμού (register specifiers) shamt: «ποσότητα» ολίσθησης (μικρή, θετική σταθερά) funct: παραλαγή της λειτουργίας (στην ουσία το opcode για εντολές τύπου R) offset/ immediate: address offset ή σταθερά (immediate) target address: Διεύθυνση στόχος (target address) για άλματα 25
Υποσύνολο εντολών για υλοποίηση Για απλοποίηση θα υλοποιήσουμε ένα υποσύνολο των εντολών MIPS! Εντολές μεταφοράς δεδομένων: load word (lw) store word (sw)! Εντολές επεξεργασίας δεδομένων add, sub, AND, OR, and slt! Εντολές αλλαγής ροής ελέγχου branch equal (beq) jump (j), στο τέλος 26
Καθορισμός απαιτήσεων! Μνήμη (MEM) Εντολές και δεδομένα! χρησιμοποιούμε 2 ξεχωριστές μνήμες! απλούστευση, αλλά οι επεξεργ. έχουν χωριστές κρυφές μνήμες! Καραχωρητές (αρχείο καταχωρητών register file) 32, των 32- bit. Λεπτομέρεια του $zero, δεν εξετάζεται! Ανάγνωση RS, RT Εγγραφή RT ή RD! Program Counter (PC)! Επέκταση σταθεράς σε 32 bit (sign extend) απλά καλώδια!! Αριθμητική- Λογική Μονάδα (ALU) για πράξεις με τιμές καταχωρητών ή (μία) σταθερά και σύγκριση καταχωρητών (beq)! Αθροιστής +4 (ή + σταθερά) για το επόμενο PC 27
Χρονισμός 1/3! Καθορίζει πότε τα σήματα διαβάζονται και γράφονται! Απλούστερος χρονισμός: ακμοπυροδότητος (edge triggered) οι αποθηκευμένες τιμές ενημερώνονται (αλλάζουν) μόνο στην ακμή του σήματος ρολογιού Ολα τα στοιχεία αποθήκευσης (state elements) είναι D flip- flop! Αποθήκευση μόνο σε (D) flip- flop - > όλες οι είδοδοι συνδιαστικής λογικής προέρχονται από flip- flop και οι έξοδοι γράφονται σε flip- flop clock input clock D Q output D Q 28
Χρονισμός 2/3 Clk............! Ολα τα flip- flop ενεργοποιούνται στην ίδια ακμή (ανόδου)! Τα Flip- flops (FFs) και συνδιαστική λογική έχουν καθυστερήσεις Πύλες: καθυστέρηση απο αλλαγή τιμής εισόδου μέχρι η αλλαγή να εμφανιστεί στην εξόδο FF: είσοδοι D πρέπει να έχουν σταθερή τιμή πριν την ακμή (set- up ome), και καθυστέρηση από ακμή ρολογιού μέχρι η (νέα) τιμή να περάσει στην έξοδο (clock- to- Q delay)! Κρίσιμο μονοπάτι (Criocal path): μεγαλύτερη διαδρομή στη λογική (longest path) καθορίζει την περίοδο ρολογιού 29
Χρονισμός 3/3! Ακμοπυροδότητος χρονισμός επιτρέπει «ανάγνωση και εγγραφή» στο ίδιο στοιχείο αποθήκευσης Χρειάζεται προσεκτική σχεδίαση ώστε να τηρούνται set- up ome, hold ome! Η ανάγνωση και αποθήκευση γίνονται σε διαδοχικούς κύκλους όχι στον ίδιο! 30
Χρονισμός επεξεργαστή! Τρόπος 1: υλοποίηση ενός κύκλου ρολογιού κάθε εντολή εκτελείται σε ένα κύκλο ρολογιού! Και τα πέντε στάδια εκτέλεσης ολοκληρώνονται στον ίδιο κύκλο Ακμή ρολογιού: νέα τιμή PC, ανάγνωση μνήμης εντολών,... Μέχρι την επόμενη ακμή έτοιμα: νέα τιμή PC, τιμές προς αποθήκευση (μνήμη ή καταχωρητής προορισμού) 1. Instrucoon Fetch 2. Decode/ Register Read 3. Execute 4. Memory 5. Register Write 31
Χρονισμός 4/3! Κάποια στοιχεία αποθήκευσης παίρνουν νέα τιμή σε κάθε κύκλο π.χ. PC! Αλλα στοιχεία αποθήκευσης παίρνουν νέα τιμή σε συγκεκριμένους κύκλους ανάλογα με την εντολή Π.χ. καταχωρητής προορισμού δεν αλλάζει τιμή για sw, beq.! Χρειάζεται ειδικό σήμα επίτρεψης φόρτωσης/έγγραφης load/write enable η είσοδος «περνάει» στην έξοδο αν το σήμα είναι ενεργοποιημένο (asserted) και όταν έρθει η ακμή του ρολογιού. 32
Χρονισμός επεξεργαστή! Ενας επεξεργαστής μπορεί να υλοποιηθεί ώστε να εκτελεί εντολές σε πολλούς κύκλους πλεονεκτήματα: οικονομία υλικού (1 ALU για πολλές δουλειές), ανενεργά στάδια παρακάμπτονται,... 1. Instrucoon 2. Decode/ Register Fetch Read 3. Execute 4. Memory 5. Register Write! Αργότερα θα δούμε ένα συνδιασμό των 2 αυτών υλοποιήσεων: pipelining (διοχέτευση, ομοχειρία) 33
Δομικά στοιχεία διαύλου δεδ.! Συνδιαστικά κυκλώματα, στοιχεία αποθήκευσης Συνδιαστικά κυκλώματα: OP Select A Sum B 32 Adder A 32 32 32 Muloplexer 32 ALU 32 A MUX Adder B 32 Y B 32 Result 32 ALU 34
Μνήμη (εξιδανικευμένη) Write Enable! Είσοδοι- έξοδοι Data In DataIn τιμή για εγγραφή 32 DataOut Clk Address διεύθυνση προσπέλασης WriteEnable 1: εγγραφή Address DataOut 32! Clock (Clk) χρησιμοποιείται μόνο για την εγγραφή «ασύγχρονη» ανάγνωση! Γιατί εξιδανικευμένη; υλοποιήσιμη (επόμενη διαφάνεια), αλλά πολύ ακριβή για κανονικό μέγεθος μνήμης πραγματικές μνήμες: ανάγνωση χρειάζεται το σήμα ρολογιού 35
Μνήμη - υλοποίηση Mem DataIn clk Data Out Mem[0] DEC Write Enable Data In 32 Mem[1] Mem[2] Mem[3] 2 32 MUX 32 Write Enable 2 Mem Address Mem DataOut 36
Αρχείο καταχωρητών RW RA RB Write Enable 5 5 5! Ομαδοποιεί τους 32 καταχωρητές: Δύο 32- bit έξοδοι (θύρες): busw busa, busb 32 Μία 32- bit είσοδος: busw Clk Μνήμη 2 θυρών ανάγνωσης και 1ας εγγραφής busa 32 32 x 32- bit Registers busb 32! Επιλογή καταχωρητή: RA επιλογή καταχωρητή για το busa RB επιλογή καταχωρητή για το busb RW επιλογή καταχωρητή για εγγραφή όταν το σήμα WriteEnable είναι 1! Δεδομένα εισόδου από το busw! Clock (clk) χρησιμοποιείται μόνο για την εγγραφή «ασύγχρονη» ανάγνωση 37
Μονάδα προσκόμισης εντολών! Συνδιάζουμε τα δομικά στοιχεία για να κατασκευάσουμε τη μονάδα προσκόμισης εντολών clk 38
Μονάδα προσκόμισης! Γνωρίζοντας ότι το επόμενο PC είναι μερικές φορές διαφορετικό από το PC+4 (άλματα, διακλαδώσεις), γενικεύεται σε: clk PC Next Address Logic Address Instrucoon Word Instrucoon Memory 32 39
Εντολές επεξεργασίας! Τύπου R: add, sub, slt, and, or R[rd] = R[rs] op R[rt] (op rd,rs,rt) Instrucoon Word 31 26 op 6 bits 21 rs 5 bits rt 5 bits Rd Σήμα ελέγχου: Rs Rt εγγραφή καταχ. RegWr 5 5 5 32 clk Rw Ra Rb 32 x 32- bit Registers 11 rd 5 bits 6 shamt 5 bits 0 funct 6 bits ALUctr Σήμα ελέγχου: τί πράξη να κάνει η ALU busa 32 busb ALU busw 16 Result 32 32 40
Χρονισμός εντολής τύπου R Clk New Value PC Old Value Instrucoon Memory Access Time Rs, Rt, Rd, Old Value New Value Op, Func Delay through Control Logic ALUctr Old Value New Value RegWr Old Value busa, B Old Value busw Old Value New Value Register File Access Time New Value ALU Delay New Value Register Write Occurs Here 41
Εντολές μεταφοράς, lw! Τύπου I R[rt] = Mem[R[rs]+sgn_ext(ofst)] lw rt, ofst(rs) 31 26 op 6 bits 21 rs 5 bits rt 5 bits Rt RegWr 5 5 Rs 5 32 clk Rw Ra Rb offset 16 bits sgnext busa 32 32 x 32- bit Registers busb 32 ALUctr ALU busw 16 Result 32 Data In 0 MemRd Clk MemWr Address Instrucoon Word DataOut 32 42
Συνδιασμός προηγούμενων 43
Εντολές διακλάδωσης Επιπλέον αθροιστής για υπολογισμό στόχου ALU υπολογίζει τη σύγκριση Δεν μπορώ να ξαναχρησιμοποιήσω μονάδες στον ίδιο κύκλο ρολογιού 44
Συνολικός δίαυλος δεδομένων Εκτός από την εντολή j 45
Ανακοινώσεις! Η 5η εργαστηριακή άσκηση διαθέσιμη (βλ ecourse) Εισαγωγή στη σχεδίαση με το Quartus II Εγκατάσταση Quartus (ειδικά σε 64b Linux) θέλει λίγη δουλειά! κάντε την εγκατάσταση νωρίς! ή δουλέψτε από τα μηχανήματα του εργαστηρίου παράδοση μέχρι την Παρασκευή 3/4 ώρα 23.00 46
Επόμενο μάθημα Συνέχεια σχεδίασης επεξεργαστή: το τμήμα ελέγχου 47
Τέλος Ενότητας
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σημειώματα
Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Αρχιτεκτονικό σύνολο εντολών». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.