ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Οργάνωση επεξεργαστή Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Σχεδίαση επεξεργαστή, έλεγχος Αρης Ευθυμίου Πηγή: Διαφάνειες CS61C, UCB
Το σημερινό μάθημα! Ο δίαυλος δεδομένων αναλυτικά: Εντολές επεξεργασίας δεδομένων τύπου R Προσθήκη εντολών μεταφοράς δεδομένων Προσθήκη εντολής διακλάδωσης! Σχεδίαση τμήματος ελέγχου τα σήματα ελέγχου επιλογή επόμενης διεύθυνσης PC έλεγχος της ALU κεντρικός αποκωδικοποιητής! Προσθήκη εντολής άλματος 2
Μονάδα προσκόμισης εντολών clk 3
Εντολές επεξεργασίας! Τύπου R: add, sub, slt, and, or R[rd] = R[rs] op R[rt] (op rd,rs,rt) Instructon Word 3 26 op 6 bits 2 rs 5 bits 16 rt 5 bits 1 rd 5 bits 6 shamt 5 bits funct 6 bits Rd RegWr 5 5 Rs 5 Rt clk Rw Ra Rb x 32- bit Registers busa busb ALU busw ALUctr Result 4
Χρονισμός εντολής τύπου R Clk New Value PC Old Value Instructon 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 5
Εντολή lw R[rt] = Mem[R[rs]+sgn_ext(imm16)] lw rt, imm16(rs) 3 26 2 op 6 bits rs 5 bits 16 rt 5 bits RegDst Rd Rt RegWr busw clk Rs Rt 5 5 MemtoReg Rw Ra Rb busa RegFile busb ALUctr ALU 16 imm16 16 bits Extender 5 clk ALUSrc Adr Data Memory 6
Εντολή sw Mem[R[rs]+sgn_ext(imm16)] = R[rt] sw rt, imm16(rs) 3 26 2 op 6 bits rs 5 bits 16 rt 5 bits RegDst Rd Rt RegWr busw clk Rs Rt 5 5 Rw Ra Rb busa RegFile busb ALUctr clk Data In ALUSrc MemtoReg MemWr ALU 16 imm16 16 bits Extender 5 WrEn Adr Data Memory 7
Εντολή beq 31 26 op 6 bits 21 rs 5 bits 16 rt 5 bits imm16 16 bits 0 beq rs, rt, imm16! Equal = (R[rs] == R[rt]) Συνθήκη διακλάδωσης if (Equal) Υπολογισε τον στόχο: PC = PC + 4 + ( SignExt(imm16) x 4 ) else PC = PC + 4 8
Εντολή beq! ALU υπολογίζει ισότητα με αφαίρεση: αποτέλεσμα σημαίνει ισότητα! Προσθέτουμε στο next Address logic του PC PC Mux clk >> 2 op 6 bits 21 rs 5 bits 16 rt 5 bits RegWr 5 Extender imm16 16 bits Rs Rt 5 5 Rw Ra Rb busa RegFile busb clk 0 ALUctr ALU Adder Inst Address PCSrc Adder 4 26 imm16 31 Zero 9
Ο πλήρης δίαυλος δεδομένων 10
Τα σήματα ελέγχου! ALUsrc: regb; immed με επέκταση προσήμου! ALUctr: ADD, SUB, OR, AND, SLTI! MemWr: write memory! MemtoReg: ALU; Mem! RegDst: rt ; rd! RegWr: write register! PCSrc: nextpc = PC+4; nextpc = PC+4+sgnExt(Imm16); 11
Σήμα ελέγχου PCSrc! Τα υπόλοιπα σήματα καθορίζονται από το είδος της εντολής π.χ. MemWr μόνο για εντολές sw! PCSrc εξαρτάται και από τα δεδομένα θα είναι (επιλέγει PC+4+sgnExt(Imm16)) αν η εντολή είναι beq και το zero είναι (οι καταχωρητές έχουν ίσες τιμές)! Νέο σήμα Branch η εντολή είναι διακλάδωση εξαρτάται μόνο από το είδος της εντολής Branch zero PCSrc Η νέα πύλη είναι μέρος του διαύλου δεδομένων ή του ελέγχου; 12
Ελεγχος ALU Η ALU υποστηρίζει πολλές εντολές/λειτουργίες! Οι lw,sw χρειάζονται πρόσθεση! Η beq χρειάζεται αφαίρεση! Οι εντολές τύπου R πρόσθεση, αφαίρεση, λογικό ΚΑΙ, Η σύγκριση <, και αποτέλεσμα αν μικρότερο, αλλιώς! αφαίρεση, με κάτι παραπάνω! 13
Υλοποίηση ALU σε Verilog module alu (input [31:0] a, b, input [2:0] alucont, output reg [31:0] result, output zero); wire [31:0] b2, sum, slt; assign b2 = alucont[2]? ~b : b; // optionally invert 2nd input assign sum = a + b2 + alucont[2]; // ADD + carry in for subtraction assign slt = sum[31]; // Sign bit is slt! always @(*) case(alucont[1:0]) // Essentially a MUX + logical AND, OR 2'b00: result = a & b; 2'b01: result = a b; 2'b10: result = sum; 2'b11: result = slt; endcase assign zero = (result == 32'b0); // The zero output endmodule 14
Αποκωδικοποιητής ALU! Για lw, sw, beq θέλουμε το σήμα να έχει τις τιμές που είδαμε (προσθ, προσθ, αφαιρ)! Για R- type εντολές, θέλουμε το σήμα να καθορίζεται από το πεδίο funct της εντολής! Μικρός ελεγκτής/αποκωδικοποιητής για την ALU, παράγει το σήμα ALUctr είσοδος ένα σήμα ALUOp από τον κύριο ελεγκτή/αποκωδικοποιητή και το πεδίο funct! Σήμα ALUOp: 0 ADD, για lw, sw 0 SUB, για beq, 1 σύμφωνα με το funct, για τις υπόλοιπες εντολές 15
Πίνακας αλήθειας ALUdec don t care lw,sw beq add sub and or slt! Το X στον πίνακα σημαίνει: ή 1, δεν έχει σημασία! π.χ. 1η σειρά: το ALUOp ζητάει πρόσθεση, το πεδίο funct δεν λαμβάνεται υπ όψη Τα F[5], F[4] του funct, είναι πάντα 1(για μελοντικές εντολές) Οι περιπτώσεις που το ALUOp[0] είναι X μπορούν να απλοποιήσουν το κύκλωμα. Στην ουσία θα είναι 0, αλλά αφού δεν χρησιμοποιούμε την τιμή 2 b1για ALUOp, 16
Υλοποίηση ALUdec σε Verilog module aludec(input [5:0] funct, input [1:0] aluop, output reg [2:0] alucontrol); Δεν χρησιμοποιεί τα X της προηγούμενης διαφάνειας. Γιατί; always @(*) case(aluop) 2'b00: alucontrol = 3'b010; // add 2'b01: alucontrol = 3'b110; // sub default: case(funct) // RTYPE 6'b100000: alucontrol = 3'b010; // ADD 6'b100010: alucontrol = 3'b110; // SUB 6'b100100: alucontrol = 3'b000; // AND 6'b100101: alucontrol = 3'b001; // OR 6'b101010: alucontrol = 3'b111; // SLT default: alucontrol = 3'bxxx; //??? endcase 1. Αν δεν υπήρχε, τι τιμή θα έπαιρνε το alucontrol ; endcase endmodule την προηγούμενη! Υπονόηση μανταλωτή. ΛΑΘΟΣ!!! 2. Χρήσιμο για να πιάνουμε λάθη στα προγράμματα 17
Ελεγχος και δίαυλος δεδομένων Instructon<31:0> Rd <0:15> Rs <11:15> Rt <16:20> Op Fun <21:25> <0:5> <26:31> Inst Memory Adr Imm16 Control Branch RegWr RegDst ALUSrc ALUOp MemWr MemtoReg DATA PATH 18
Παράδειγμα add R[rd]=R[rs]+R[rt] busw Rs Rt 5 5 Rw Ra Rb busa RegFile busb imm16 16 Extender clk = ALU Rs Rt Rd Imm16 zero ALUOp=1 MemtoReg= 5 <0:15> RegWr= <11:15> clk <16:20> Rd Rt <21:25> instr fetch unit Branch= RegDst= Instructon<31:0> Data In ALUSrc= clk MemWr= WrEn Adr Data Memory 19
Κύριος αποκωδικοποιητής Σήμα ελέγχου πολυπλέκτη! ALUSrc: regb; immed με επέκταση προσήμου! ALUOp: 0 ADD 0 SUB 1 σύμφωνα με το πεδίο funct! MemWr: write memory! MemtoReg: ALU; Mem! RegDst: rt ; rd! RegWr: write register! Branch: είναι διακλάδωση 20
Υλοποίηση main decoder! Οι έξοδοι εξαρτώνται μόνο από το opcode ο ελεγκτής της ALU καθορίζει ακριβώς την πράξη! Οι τύπου R, lw γράφουν καταχωρητή (RegWrite = 1) όταν είναι 0, η τιμές των πολυπλεκτών δεν έχουν σημασία: X! Τα σήματα ελέγχου εγγραφής δεν είναι ποτέ X MemWrite, RegWrite Εμμεσα το Branch, γιατί ο PC πάντοτε γράφεται 21
Αναλυτικός πίνακας func 1000 1001 10010 1010 XX XXXX op 0000 0000 0000 0000 1001 1101 0010 and add sub or lw sw beq RegDst x x ALUSrc MemtoReg x x RegWrite MemWrite Branch ALUOp[2:0] 1 1 1 1 0 0 0! Επιβεβαιώστε ότι οι τιμές σημάτων εξόδου είναι ίδιες για όλες τις εντολές τύπου R 22
Υλοποίηση αποκωδικοποιητή opcode Rtype AND logic lw sw beq OR logic RegDst ALUSrc MemtoReg RegWrite MemWrite Branch ALUOp[0] ALUOp[1]! Τμήμα AND: με πύλες AND και αντιστροφείς το opcode αποκωδικοποιείται σε σήμα ανά εντολή (+ τύπου R)! Τμήμα OR: Με πύλες OR υπολογίζουμε τις εξόδους π.χ. RegWrite = Rtype lw 23
Verilog: maindec.v module maindec(input [5:0] op, output memtoreg, memwrite, Δεν χρησιμοποιεί τα X. output branch, alusrc, Γιατί; output regdst, regwrite, output jump, output [1:0] aluop); reg [8:0] controls; assign {regwrite, regdst, alusrc, branch, memwrite, memtoreg, jump, aluop} = controls; Πύλη OR ανά στήλη: always @(*) 1- σύνδεση, 0- όχι σύνδεση case(op) Πύλη AND 6'b000000: controls = 9'b1_1_0_0_0_0_0_10; //Rtype ανά σειρά 6'b100011: controls = 9'b1_0_1_0_0_1_0_00; //LW 6'b101011: controls = 9'b0_0_1_0_1_0_0_00; //SW 1- σύνδεση 6'b000100: controls = 9'b0_0_0_1_0_0_0_01; //BEQ 0- αντιστροφή default: controls = 9'bxxxxxxxxx; //??? endcase endmodule 24
Προσθήκη εντολής j New PC = { PC[31:28], instr[25:0], 2 b0} Instructon<31:0> Jump= <0:25> WrEn Adr Mux Clk Data In ALUSrc = x <0:15> Extender 16 <11:15> busa Rw Ra Rb x 32- bit Registers busb imm16 Rs Rd Imm16 TA26 MemtoReg = x Zero MemWr = Mux Clk Rt ALUOp =x ALU busw Clk <16:20> Rd Rt RegDst = x Mux Rs Rt RegWr = 5 5 5 <21:25> Instructon Fetch Unit Branch=? Data Memory 25
Προσθήκη εντολής j! Νέο σήμα ελέγχου: Jump! Νέος πολυπλέκτης Instructon[25:0] 26 4 imm16 Mux Adder PCSrc PC 4 (MSBs) Mux Adder Jump Clk Branch zero 26
Mars εργαλείο MIPS x- ray! Στο μενού tools του Mars υπάρχει το παραπάνω εργαλείο! Δείχνει με animaton πως δουλεύει ένας MIPS σαν αυτόν που εξετάσαμε (αλλά με περισσότερες (όλες;) εντολές)! Στο κυρίως παράθυρο του Mars: ανοίξτε ένα αρχείο με ένα πρόγραμμα και κάντε assemble! Ξεκινήστε το MIPS X- Ray και πατήστε το κουμπί Connect to MIPS! Μετά εκτελέστε εντολή προς εντολή το πρόγραμμα και δείτε τι ακριβώς συμβαίνει στον επεξεργαστή! 27
Lab06 MIPS σε quartus! Ο απλός MIPS που εξετάσαμε έχει υλοποιηθεί στο Quartus! Στο Lab06, θα τρέξετε προγράμματα με προσομοίωση παρόμοιο με το MIPS Χ- ray, αλλά με waveforms! Θα προσθέσετε μερικές εντολές και βέβαια, θα επιβεβαιώσετε ότι δουλεύουν σωστά!! Μπορούμε να τον βάλουμε να δουλέψει πραγματικά στις πλακέτες του εργαστηρίου (DE2); Δυστυχώς όχι. Οι μνήμες που χρησιμοποιούμε δεν μπορούν να υλοποιηθούν! 28
Επόμενο μάθημα Συνέχεια σχεδίασης επεξεργαστή: διοχέτευση 29
Τέλος Ενότητας
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σημειώματα
Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 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/.