Cammino dei Dati (Datapath) R e g i s t r # D a m o y A d P C I n u c L U 1 2 3 4 5
Fetch & Execute Fetch (Prelievo) dell’istruzione (Fetch) Decodifica dell’Istruzione ed accesso ai registri (Dec) Esecuzione, Calcolo dell’indirizzo di memoria, Branch (Exe) Accesso alla Memoria, termina una istruzione di tipo R (Mem) Write-back (WB) Le ISTRUZIONI utilizzano da 3 a 5 fasi
Fetch & Execute Le cinque fasi sono sincronizzate Si utilizza un Clock, ogni fase viene eseguita durante un ciclo di clock tempo di ciclo Fronte di salita Fronte di discesa
Fetch & Execute 1 2 3 4 5 Fetch Dec Exe Mem WB Le ISTRUZIONI utilizzano da 3 a 5 cicli di clock
Fetch & Execute Una esecuzione tipica di una fase: Legge il contenuto da registro o memoria (elementi di stato), Invia i valori ad un circuito combinatorio Scrive i risultati in registri o memoria Mem1 Circuito Combinatorio Mem2 Ciclo di clock
Elementi Funzionali A L U c o n t r l e s u Z 3 P C
Elementi Funzionali Banco dei registri (lettura) W r i t e Registro Lettura 1 Registro Lettura 2 Registro Lettura 1 Registro Scrittura R e g i s t e r R e g i s t e r 1 M u Data W r i t e R e g i s t e r n – 2 x R e g i s t e r n-1 Registro Lettura 2 M u x
Elementi Funzionali Banco dei registri (Scrittura) W r i t e C R e g i R e g i s t e r 1 D Registro Decoder C R e g i s t e r 1 D n – 2 n-1 C R e g i s t e r n – 2 D C R e g i s t e r n-1 d a t a D
Elementi Funzionali M e m W r i t e A d d r e s s R e a d d a t a 1 6 3 2 S i g n e x t e n d W r i t e d a t a Memoria M e m R e a d
Flip-flop D il flip-flop D (delay) un unico input che viene dato al flip-flop l’output (e quindi lo stato) del flip-flop D è uguale all’input precedentemente dato
La Memoria 8 bit 32 bit Decoder 32 a 232 232 parole MEMWRITE MEMREAD
La Memoria Decoder MEMWRITE Ck MEMREAD
La Memoria 2 a 4 8x230 8x230 8x230 8x230 MAR (30 bit) MBR (32 bit)
Cammino dei Dati (Tipo R) y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 11] A L U l Z B O
Cammino dei Dati (Tipo R) y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 11] A L U l Z B O x 3
Cammino dei Dati (Tipo R + sw) y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 0] A L U l Z B O x 3 S
Cammino dei Dati (Tipo R + sw) y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 0] A L U l Z B O x 3 S
Cammino dei Dati (Tipo R + sw) 43 2 1 100 P C I n s t r u c t i o n M R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n x M e m o r y R e a d R e a d A Z e r o 1 [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 A L U M e m D a t a R e g i s t e r s A L U A L U O u t I n s t r u c t i o n W r i t e r e s u l t R e a d [ 1 5 – 0] I n s t r u c t i o r e g i s t e r d a t a 2 B W r i t e [ 1 5 – 1 1 ] I n s t r u c t i o n 4 1 M d a t a W r i t e r e g i s t e r u d a t a 2 x 3 1 6 3 2 S i g n e x t e n d
Cammino dei Dati (Tipo R + sw + lw) 35 2 1 100 P C M e m o r y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 0] A L U l Z B O x 3 S
Cammino dei Dati (R + sw + lw + beq(?)) 1000 4 8 17 249 P C M e m o r y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 0] A L U l Z B O x 3 S h f
Cammino dei Dati (Tipo R + sw + lw + beq + j) y D a t W i d R g s 1 2 4 I n u c [ 5 – ] 6 0] A L U l Z B O x 3 S h f 8 J p -
Fase 1: Fetch Si utilizza PC per prelevare l’istruzione e registrarla nel Registro Istruzione (IR). Si incrementa il PC di 4. IR = Memory[PC]; PC = PC + 4;
Fase 2: Decodifica ed Accesso ai Registri Si leggono i registri rs ed rt (potremmo averne bisogno) Si calcola l’indirizzo del Salto Condizionato (qualora l’instruzione sia una BEQ o BNE) A = Reg[IR[25-21]]; B = Reg[IR[20-16]]; ALUOut = PC + (sign-extend(IR[15-0]) << 2); Non abbiamo utilizzato ancora nulla della istruzione specifica
Fase 3: Esecuzione (dipende dalla istruzione) L’ALU esegue una delle seguenti operazioni sulla base della istruzione lw, sw : ALUOut = A + sign-extend(IR[15-0]); tipo R: ALUOut = A op B; Beq: if (A==B) PC = ALUOut; Bne: if (A!=B) PC = ALUOut;
Fase 4 Tipo R o Accesso alla memoria lw o sw: MDR = Memory[ALUOut]; o Memory[ALUOut] = B; Istruzione di tipo R Reg[IR[15-11]] = ALUOut;
Fase 5: Write-back lw: Reg[IR[20-16]]= MDR;
In sintesi Nome della fase Tipo R Lw o Sw Beq o Bne jump fetch IR = Memory[PC] PC = PC + 4 A = Reg [IR[25-21]] dec B = Reg [IR[20-16]] ALUOut = PC + (sign-extend (IR[15-0]) << 2) ALUOut = A op B ALUOut = A + sign-extend if (salto) then PC = PC [31-28] II Exe (IR[15-0]) PC = ALUOut (IR[25-0]<<2) Reg [IR[15-11]] = Load: MDR = Memory[ALUOut] Mem ALUOut or Store: Memory [ALUOut] = B Wb Load: Reg[IR[20-16]] = MDR
Cammino dei Dati (Segnali di Controllo) PC S r c P C W r i t e C o n d P C W r i t e PCWrt R e g D s t R e g W r i t e A L U S r c A I o r D M e m R e a d M e m W r i t e I R W r i t e 1 M J u m p u I n s t r u c t i o n [ 2 5 – ] 2 6 2 8 S h i f t a d d r e s s [ 3 1 - ] x 2 l e f t 2 P C P C [ 3 1 - 2 8 ] I n s t r u c t i o n M R e a d u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 M u x I n s t r u c t i o n R e a d R e a d A x 1 M e m o r y Z e r o [ 2 – 1 6 ] r e g i s t e r 2 d a t a 1 1 A L U M e m D a t a R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e r e s u l t R e a d [ 1 5 – 0] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e x I n s t r u c t i o n [ 1 5 – 1 1 ] 1 W r i t e 4 1 M d a t a r e g i s t e r u d a t a 2 x 3 M u x A L U M e m o r y 1 c o n t r o l 1 6 3 2 d a t a S i g n S h i f t r e g i s t e r e x t e n d l e f t 2 M e m t o R e g A L U S r c B
Cammino dei Dati (Segnali di Controllo) PC S r c P C W r i t e C o n d P C W r i t e PCWrt R e g D s t R e g W r i t e A L U S r c A I o r D M e m R e a d M e m W r i t e I R W r i t e 1 M J u m p u I n s t r u c t i o n [ 2 5 – ] 2 6 2 8 x S h i f t a d d r e s s [ 3 1 - ] 2 l e f t 2 P C P C [ 3 1 - 2 8 ] I n s t r u c t i o n M R e a d M u A d d r e s s [ 2 5 – 2 1 ] r e g i s t e r 1 u x I n s t r u c t i o n R e a d A x 1 M e m o r y R e a d d a t a 1 Z e r o [ 2 – 1 6 ] r e g i s t e r 2 1 A L U M e m D a t a R e g i s t e r s A L U A L U O u t I n s t r u c t i o n M W r i t e r e s u l t R e a d [ 1 5 – 0] I n s t r u c t i o n u r e g i s t e r d a t a 2 B W r i t e x I n s t r u c t i o n [ 1 5 – 1 1 ] 4 1 M d a t a 1 W r i t e r e g i s t e r u d a t a 2 x 3 M u x M e m o r y 1 1 6 3 2 d a t a A L U S i g n S h i f t r e g i s t e r c o n t r o l e x t e n d l e f t 2 I n s t r u c t i o n [ 5 – ] M e m t o R e g A L U O p A L U S r c B
ALU Control Decidere l’operazione da effettuare (ADD, SUB, …) sulla base dei 32 bit della istruzione Esempio: add $8, $17, $18 Formato Istruzione: 0 17 18 8 0 32 op rs rt rd shamt funct L’operazione dell’ALU è basata sul tipo di istruzione e sul campo funct
ALU Control Se la istruzione è di tipo diverso cosa deve fare l’ALU ? Esempio: lw $1, 100($2) 35 2 1 100 op rs rt 16 bit offset Gli input all’ALU sono: 000 AND 001 OR 010 add 110 subtract 111 set-on-less-than
ALU Control Descriviamo il circuito logico che calcola i 3-bit di controllo dell’ALU dato il tipo di istruzione 00 = lw, sw 01 = beq, 11 = arithmetic dato il campo funct dell’istruzione di tipo R Il campo funct per le istruzioni di tipo R è ADD 100000 SUB 100010 AND 100100 OR 100101 SLT 101010 Codifica arbitraria sulla base del Codice Operativo
ALU Control Utilizziamo la tavola di verità: ALUOp Funct field Operation ALUOp1 ALUOp0 F5 F4 F3 F2 F1 F0 X X X X X X 010 1 X X X X X X 110 1 1 1 010 1 1 1 1 110 1 1 1 1 000 1 1 1 1 1 001 1 1 1 1 1 111
ALU Control La tavola di verità modificata: ALUOp Funct field Operation ALUOp1 ALUOp0 F5 F4 F3 F2 F1 F0 X X X X X X 010 1 X X X X X X 110 1 X X X 010 1 X X X 1 110 1 X X X 1 000 1 X X X 1 1 001 1 X X X 1 1 111
ALU Control Realizzazione con circuito logico A L U O p A L U c o n t b l o c k A L U O p A L U O p 1 O p e r a t i o n 2 F 3 O p e r a t i o n F 2 O p e r a t i o n 1 F ( 5 – ) F 1 O p e r a t i o n F
Cammino dei Dati (istruzione lw) 35 2 1 100 I o r D M e m R e a d M e m W r i t e I R W r i t e R e g D s t R e g W r i t e A L U S r c A M u M x u 1 x 1 Z e r o A L U A L U M r e s u l t u x 1 4 1 M 2 u x 3 M u x 1 1 6 S i g n 3 2 S h i f t A L U e x t e n d l e f t 2 c o n t r o l M e m t o R e g A L U S r c B A L U O p
Cammino dei Dati (istruzione add) 0 17 18 8 0 32 I o r D M e m R e a d M e m W r i t e I R W r i t e R e g D s t R e g W r i t e A L U S r c A M u M x u 1 x 1 Z e r o A L U A L U M r e s u l t u x 1 4 1 M 2 u x 3 M u x 1 1 6 S i g n 3 2 S h i f t A L U e x t e n d l e f t 2 c o n t r o l M e m t o R e g A L U S r c B A L U O p
Cammino dei Dati (istruzione beq) 1000 4 8 17 249 I o r D M e m R e a d M e m W r i t e I R W r i t e R e g D s t R e g W r i t e A L U S r c A PC S r c P C W r i t e C o n d P C W r i t e 2 6 2 8 a J u M d m d r p e s s [ 3 1 - ] 1 u x S h i f t I n s t r u c t i o n [ 2 5 – ] l e f t 2 2 P C [ 3 1 - 2 8 ] M M u x u A x 1 1 Z e r o A L U A L U M r e s u l t u B x 1 4 1 M u 2 x 3 M u x 1 1 6 3 2 S i g n S h i f t e x t e n d l e f t 2 M e m t o R e g A L U S r c B A L U c o n t r o l
Cammino dei Dati (Datapath) S h i f t l e 2 P C M u x 1 R g s r W d a I n c o [ 5 – ] 4 3 6 A L U Z m y B D O p - J 8