Architetture dei Calcolatori (Lettere j-z ) Il Processore Ing. Davide D’Amico Architettura a Livelli: Livelli 1 e 2 Livello 2: Livello del Linguaggio Macchina (ISA) Macchina nuda come appare al programmatore di sistema. Le istruzioni del suo linguaggio sono interpretate ed eseguite dai microprogrammi del processore Moduli: Programmi L2: Linguaggio macchina R2: Registri, spazio di memoria Livello 1: Macchina Firmware – Microarchitettura Interpreta ed esegue le istruzioni del linguaggio macchina E’ direttamente realizzato con i componenti della macchina hardware Moduli - Unita’ di Elaborazione: CPU, Memoria, Unita’ di I/O L1: Linguaggio di Microprogrammazione R1: Reti combinatorie e sequenziali CPU 2 Organizzazione di un Calcolatore Processore Unità di controllo Unità di elaborazione dati Bus Dispositivi di I/O Dispositivi di I/O Interfaccia di I/O Interfaccia di I/O Memoria dati indirizzi controllo CPU 3 Processore - Central Processing Unit (CPU) Provvede all’esecuzione delle istruzioni macchina Ciclo di Esecuzione 1. 2. 3. Prelievo Istruzione dalla Memoria Decodifica Istruzione Esecuzione Istruzione Processore e’ composto da due sottosistemi: 1. Unità di Controllo (Control) – Parte di Controllo Controlla il sequenziamento e l’esecuzione delle istruzioni generando i segnali di controllo 2. Unita’ di Elaborazione Dati (Datapath) – Parte Operativa Esegue le istruzioni ALU Banco di Registri (Register File) Program Counter (PC) Instruction Register (IR) Esegue operazioni logico aritmetiche sui dati Memoria interna CPU – Indirizzo Prossima Istruzione – Codice Istruzione da eseguire CPU 4 Processore - Central Processing Unit (CPU) Implementazione set ridotto del MIPS Lunghezza formato: 32 bit; i tre formati delle istruzioni: Istruzioni di accesso alla memoria: lw e sw Istruzioni logico-aritmetiche: add, sub, and, or e slt Istruzioni di branch: beq Istruzioni di jump: j Tipo R Tipo I Tipo J I campi 31 26 op 31 6 bits rs 26 op 31 6 bits op 6 bits 21 5 bits rs 26 5 bits 16 rt 21 11 rd 5 bits 16 5 bits 6 shamt 5 bits 0 funct 6 bits 0 immediate rt 5 bits 16 bits 0 target address 26 bits op: operazione dell’istruzione rs, rt, rd: registri sorgente (due) e destinazione shamt: shift amount funct: seleziona la variante dell’operazione nel campo op address/immediate: offset dell’indirizzo o valore immediato target address: indirizzo dell’istruzione di jump CPU 5 Passi di Progetto 1. Analizzare il set di Istruzioni: Requisiti del Dapapath Analizzare la semantica di ogni istruzione Espressa intermini di trasferimenti e operazioni tra registri Il datapath deve includere il banco dei registri (register file) Sono necessari altri registri, non visibili a livello ISA, e.g., PC Il datapath deve fornire i cammini per permettere tutti i trasferimenti tra registri necessari, e gli accessi in memoria Includeremo la memoria nel progetto (per semplicita’) 2. Selezionare i Componenti del Datapath 3. Assemblare il Datapath secondo i requisiti aggiungendo i segnali di controllo 4. Analizzare l’implementazione di ogni istruzione per determinare quali segnali di controllo devo essere affermato o meno per permetterne l’esecuzione 5. Realizzare la Parte di Controllo (Control) in accordo a quanto stabilito al punto 4 CPU 6 Semantica Istruzioni e RTL RTL (Register-Transfer Language): Linguaggio per esprimere i trasferimenti tra registri (e memoria), Permette di definire la semantica di ogni istruzione M[x] contenuto della memoria indirizzo x R[y] contenuto registro y Es: add rd, rs, rt R[rd]=R[rs]+R[rt], PC=PC+4; Es:load rt, offset(rs) R[rt]=M[R[rs]+sign_ext(offset)], PC=PC+4; Es: beq rs, rt, address If(R[rs]==R[rt]) then PC=PC+4+sign_ext(address)<<2; else PC=PC+4; Tutte richiedono come passo preliminare il prelievo dell’istruzione dalle memoria (fetch) Istruzione=M[PC] CPU 7 Implementazione del set ridotto I primi due passi da implementare sono comuni a tutte le istruzioni,indipendentemente dalla classe di istruzione: Inviare l’uscita del Program Counter (PC) alla memoria che contiene il programma e caricare l’istruzione (Fetch) ed aggiornare PC Decodifica dell’Istruzione (Decode) (e lettura registri) La fase di esecuzione (Execute) dipende dall’istruzione Sono comunque raggruppabili per classi di istruzioni Dopo aver letto i registri, tutte le istruzioni usano l’ALU (eccetto j) Le istruzioni di accesso alla memoria per calcolare l’indirizzo Le istruzioni logico-aritmetiche per effettuare l’operazione L’istruzione beq per verificare l’uguaglianza fra registri CPU 8 Implementazione del set ridotto (2) Poi il comportamento delle istruzioni si differenzia Istruzioni di accesso alla memoria Devono accedere alla memoria per leggere/scrivere il dato Istruzioni logico-aritmetiche Devono accedere ad un registro per scrivere il risultato Istruzioni di branch e jump Devono modificare il Program Counter Vantaggio della semplicità nella progettazione Pochi formati di istruzione facilitano l’implementazione dell’unità di elaborazione CPU 9 I cinque passi delle istruzioni I cinque passi delle istruzioni da effettuare Fetch (caricamento) dell’istruzione dalla memoria 2. Decode dell’istruzione e fetch dei registri 3. Execute 1. Uso della ALU (esecuzione dell’operazione o calcolo dell’indirizzo) 4. Memory Access Accesso ad un operando in memoria 5. Write-back Scrittura del risultato in un registro CPU 10 Una visione astratta 5: write-back 1: fetch 2: decode e register fetch 3: execute 4: mem. CPU 11 Progettazione dell’unità di elaborazioni dati e prestazioni Le prestazioni di un calcolatore sono determinate da: CPI Numero di istruzioni Instruction Count (IC) Durata del ciclo di clock (TCLOCK) Cicli di clock per istruzione Clock cycle Per Instruction (CPI) IC TCLOCK La progettazione del processore (unità di elaborazione e unità di controllo) determina Durata del ciclo di clock Cicli di clock per istruzione (CPI) CPU 12 Implementazione del Processore: Approcci Singolo Ciclo Esecuzione di ogni istruzione richiede 1 ciclo di clock Il ciclo di clock deve essere abbastanza lungo da permettere il completamento dell’istruzione piu’ lenta Svantaggio: velocita’ limitata dall’istruzione piu’ lenta supportata, alcune risorse devono essere replicate Multi-Ciclo Suddividere l’esecuzione in piu’ passi Eseguire un passo per ciclo Vantaggio: ogni istruzione richiede il solo numero di cicli (tempo) richiesto Tclock(Singolo Ciclo)> Tclock (Multiplo Ciclo) Pipelined Suddividere l’esecuzione in piu’ passi Eseguire un passo per ciclo Processare piu’ istruzioni in parallelo Elaborazione in contemporanea di step diversi di istruzioni consecutive (linea di assemblaggio) CPU 13 Implementazione Singolo Ciclo Prima implementazione impiega in singolo ciclo di clock per ogni istruzione Ogni istruzione inizia sul fronte attivo di un ciclo di clock e termina sul fronte attivo del ciclo di clock successivo Approccio non pratico e inefficiente rispetto ad una implementazione multiciclo Ogni istruzione richiede esattamente tanto tempo quanto il tempo di esecuzone dell’istruzione piu’ lenta Nell’implementazioni multiciclo questo problema si evita permettendo alle istruzioni piu’ veloci di essere eseguite in un numero inferiore di cicli Tuttavia e’ semplice e utile da un punto di vista didattico Nota: Implementeremo il jump solo alla fine della trattazione CPU 14 I Blocchi della Progettazione 1. Fase di Fetch Accedere all’istruzioni in memoria ed aggiornare PC 2. Decode, Accesso ai registri ed esecuzione istruzioni formato R Istruzioni logico-aritmetiche 3. Decode, Accesso ai registri ed operazioni di accesso alla memoria Istruzioni load/store 4. Decode, Accesso ai registri per i branch Istruzione beq CPU 15 Datapath: Fetch Istruzione e aggiornamento PC Instruction = M[PC] PC = PC + 4 Instruction address Add PC Instruction Add Sum 4 Instruction memory PC a. Instruction memory b. Program counter Read address c. Adder Instruction Instruction memory CPU 16 Datapath: Fetch Istruzione e aggiornamento PC Instruction = M[PC] PC = PC + 4 ADD 4 PC ADDR Memory RD Instruction CPU 17 Datapath: Istruzioni formato R add rd, rs, rt R[rd] =R[rs] + R[rt]; Register numbers 5 Read register 1 5 Read register 2 Registers Write register 5 Data Write data 3 ALU control Read data 1 Data ALU Zero ALU result Read data 2 Instruction Read register 2 Registers Write register Write data RegWrite 3 Read register 1 ALU operation Read data 1 Zero ALU ALU result Read data 2 RegWrite a. Registers b. ALU CPU 18 Datapath: Istruzioni formato R add rd, rs, rt Instruction op rs rt 5 rd 5 5 shamt funct R[rd] =R[rs] + R[rt]; Operation 3 RN1 RN2 WN RD1 Register File ALU Zero WD RD2 RegWrite CPU 19 Datapath: Istruzioni Load/Store lw rt, offset(rs) Register numbers 5 Read register 1 5 Read register 2 Registers Write register 5 Data Write data ALU control 3 R[rt] =M[R[rs] + sign_ext(offset)]; Read data 1 Data ALU Zero ALU result Read data 2 3 Read register 1 RegWrite a. Registers b. ALU Instruction Read register 2 Registers Write register Write data MemWrite MemWrite Read data 1 Zero ALU ALU result Write data Read data Data memory 16 Sign extend 32 Write data 16 Read data Address Read data 2 RegWrite Address ALU operation Sign extend Data memory 32 MemRead MemRead a. Data memory unit b. Sign-extension unit CPU 20 Datapath: Istruzione Load lw rt, offset(rs) R[rt] =M[R[rs] + sign_ext(offset)]; CPU 21 Datapath: Istruzione Store sw rt, offset(rs) M[R[rs] + sign_extend(offset)]=R[rt] CPU 22 Datapath: Istruzione di Salto beq rs, rt, offset PC + 4 from instruction datapath if (R[rs] == R[rt]) then PC = PC+4 + sign_ext(offset)<<2 Add Sum Branch target Shift left 2 Instruction 3 Read register 1 Read register 2 Registers Write register Write data ALU operation Read data 1 ALU Zero To branch control logic Read data 2 RegWrite 16 Sign extend 32 CPU 23 Datapath: Istruzione di Salto beq beq rs, rt, offset if (R[rs] == R[rt]) then PC = PC+4 + sign_ext(offset)<<2 CPU 24 Composizione dei blocchi Uniamo il blocco relativo alle istruzioni di accesso alla memoria con quello per le istruzioni di tipo R Multiplexer per scegliere se il secondo operando è un indirizzo (tipo I) oppure il dato in un registro (tipo R) Multiplexer per scegliere se ai registri va il dato dalla memoria (tipo I) oppure il risultato dell’operazione (tipo R) CPU 25 Datapath: Istruzioni formato R add rd,rs,rt Instruction 32 5 5 RN1 RN2 16 Operation 5 3 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 E X T N D 32 M U X ALUSrc MemWrite MemtoReg ADDR Data Memory WD RD M U X MemRead CPU 26 Datapath: Istruzione Load lw rt,offset(rs) Instruction 32 5 5 RN1 RN2 16 Operation 5 3 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 E X T N D 32 M U X ALUSrc MemWrite MemtoReg ADDR Data Memory WD RD M U X MemRead CPU 27 Datapath: Istruzione Store sw rt,offset(rs) Instruction 32 5 5 RN1 RN2 16 Operation 5 3 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 E X T N D 32 M U X ALUSrc MemWrite MemtoReg ADDR Data Memory WD RD M U X MemRead CPU 28 Composizione dei blocchi Aggiungere il blocco che esegue il fetch Add ALU e Adder Separati perche’ entrambi devono Poter essere usati nello stesso ciclo 4 PC Read address Instruction Instruction memory Registers Read register 1 Read Read data 1 register 2 3 Write data Memoria Istruzioni e dati Separate per Poter leggere e scrivere nello stesso ciclo M u x Zero ALU ALU result Address Write data RegWrite 16 MemWrite MemtoReg ALUSrc Read data 2 Write register ALU operation Sign 32 extend Read data Data memory M u x MemRead CPU 29 Composizione dei blocchi Multiplexer per scegliere indirizzo della prossima istruzione Aggiungiamo il blocco per il beq PCSrc M u x Add Add ALU result 4 Adder addizionale Shift left 2 PC Read address Instruction Instruction memory Registers Read register 1 Read Read data 1 register 2 Write register Write data RegWrite 16 ALUSrc Read data 2 M u x 3 ALU operation Zero ALU ALU result MemtoReg Address Write data Sign extend MemWrite Read data Data memory M u x 32 MemRead CPU 30 Datapath: add ADD M U X ADD ADD 4 PC <<2 Instruction ADDR Instruction Memory RD 32 5 16 5 PCSrc Operation 5 3 RN1 RN2 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 add rd, rs, rt E X T N D 32 M U X ALUSrc MemWrite ADDR Data Memory MemtoReg RD WD M U X MemRead CPU 31 Datapath: lw ADD M U X ADD ADD 4 PC <<2 Instruction ADDR Instruction Memory RD 32 5 16 5 PCSrc Operation 5 3 RN1 RN2 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 lw rt,offset(rs) E X T N D 32 M U X ALUSrc MemWrite ADDR Data Memory MemtoReg RD WD M U X MemRead CPU 32 Datapath: sw ADD M U X ADD ADD 4 PC <<2 Instruction ADDR Instruction Memory RD 32 5 16 5 PCSrc Operation 5 3 RN1 RN2 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 sw rt,offset(rs) E X T N D 32 M U X ALUSrc MemWrite ADDR Data Memory MemtoReg RD WD M U X MemRead CPU 33 Datapath: beq ADD M U X ADD ADD 4 PC <<2 Instruction ADDR Instruction Memory RD 32 5 16 5 PCSrc Operation 5 3 RN1 RN2 WN RD1 Register File ALU Zero WD RD2 RegWrite 16 beq r1,r2,offset E X T N D 32 M U X ALUSrc MemWrite ADDR Data Memory MemtoReg RD WD M U X MemRead CPU 34 Controllo L’Unita di Controllo deve generare: I segnali di controllo dell’ALU Opcode I segnali di controllo dei vari multiplexer I segnali di abilitazione alla scrittura/lettura dei 6 diversi elementi di memoria Basandosi su… Istruzione di tipo R Istruzione di load o store Istruzione beq 31 31 Controllo MUX 6 Controllo ALU 11 10 6 5 0 rd shamt funct 5 bit 5 bit 6 bit 26 25 21 20 16 15 35 o 43 rs rt 6 bit 5 bit 5 bit 0 4 6 bit 26 25 rs 5 bit rs 5 bit 21 20 Controllo 16 15 0 6 bit 26 25 Memorie Funct I segnali in ingresso all’unita’ di Controllo I bit del campo opcode (e funct nel caso del formato R) dell’istruzione 31 Read/Write 21 20 rt 5 bit rt 5 bit 16 15 address 16 bit address 16 bit 0 CPU 35 Suddivisione in Main Control e ALU Control Per semplificare la progettazione/circuito Bit di funct (formato R) servono solo per il controllo dell’ALU Specificano l’operazione da eseguire: add,sub,and,or, o slt ALUOp serve per specificare il tipo di istruzione lw/sw beq o formato R) Opcode Read/Write Memorie 6 Controllo Opcode Controllo MUX Read/Write Memorie 6 Controllo MUX Controllo Funct 6 Controllo ALU Opcode ed ALUOp load/store ALUOp=00 beq ALUOp=01 Formato R ALUOp=10 ALUOp 2 ALU Funct Controllo ALU Control 6 CPU 36 Controllo dell’ALU Istruzioni ed Operazioni Richieste Load/store beq Formato R ALUOp=00 ALUOp=01 ALUOp=10 somma sottrazione spec. dal campo funct Linee di controllo Ainvert (1 bit), Bnegate (1 bit) e Operation (2 bit) dell’ALU 0000 0001 0010 0110 0111 1100 = = = = = = and or add sub slt nor ALUOp 2 ALU Funct Controllo ALU=ALU operation Control 6 Poiche’ manca nor nel set ristetto ignoriamo Ainvert Il controllo dell’ALU richiede solo gli ultimi 3 bit CPU 37 Controllo dell’ALU (2) Instruction AluOp opcode Instruction Funct Field Desired operation ALU action LW SW Branch eq R-type R-type R-type R-type R-type load word store word branch eq add sub AND OR set on less 00 00 01 10 10 10 10 10 Tabella di Verita’ dell’ ALU Control ALUOp 2 ALU Funct 6 Control Controllo ALU xxxxxx xxxxxx xxxxxx 100000 100010 100100 100101 101010 add add sub add sub and or set on less ALUOp ALUOp1 ALUOp0 0 0 0* 1 1 X 1 X 1 X 1 X 1 X Input F5 X X X X X X X ALU control 010 010 110 010 110 000 001 111 Funct field F4 F3 F2 F1 X X X X X X X X X 0 0 0 X 0 0 1 X 0 1 0 X 0 1 0 X 1 0 1 Output F0 X X 0 0 0 1 0 ALU Control 010 110 010 110 000 001 111 CPU 38 Controllo dell’ALU: Implementazione Input Tabella di Verita’ dell’ ALU Control ALUOp ALUOp1 ALUOp0 0 0 0* 1 1 X 1 X 1 X 1 X 1 X F5 X X X X X X X Funct field F4 F3 F2 F1 X X X X X X X X X 0 0 0 X 0 0 1 X 0 1 0 X 0 1 0 X 1 0 1 Output F0 X X 0 0 0 1 0 ALU Control 010 110 010 110 000 001 111 ALUOp ALU control block ALUOp0 ALUOp1 F3 F2 F (5– 0) Operation2 Operation1 Operation F1 Operation0 F0 CPU 39 Progettazione dell’Unita’ di Controllo R-type opcode 31-26 Load/store or branch opcode 31-26 rs 25-21 rt 20-16 rs rt 25-21 20-16 rd 15-11 shamt 10-6 funct 5-0 addres s15-0 Osservazioni sul formato Istruzioni MIPS Il codice operativo (campo opcode) e’ sempre nei bit 31-26 I due registri da leggere sono sempre rs (bit 25-21) e rt (bit 20-16) Il registro base per load e store e’ sempre il registro rs (bit 25-21) L’offset a 16-bit per beq,load e store e’ sempre nei bit 15-0 Il registro di destinazione e’ bit 20-16 (rt) per load bits 15-11 (rd) per le istruzioni R Occorre un ulteriore multiplexer per indicare quale campo CPU dell’istruzione indica il registro destinazione 40 Datapath e Controllo I PCSrc Add ALU Add result 4 Shift left 2 RegWrite Instruction [25– 21] PC Read address Instruction [31– 0] Instruction memory Registro da scrivere viene da rt o da rd Instruction [20– 16] 0 M u Instruction [15– 11] x 1 RegDst Instruction [15– 0] Read register 1 Read register 2 Read data 1 MemWrite ALUSrc Read Write data 2 register Write Registers data 16 Sign extend 0 M u x 1 0 M u x 1 Zero ALU ALU result MemtoReg Address Write data 32 ALU control Read data Data memory 1 M u x 0 MemRead Instruction [5– 0] ALUOp CPU 41 I segnali di controllo ad 1 bit Segnale Effetto quando vale 0 Effetto quando vale 1 RegDst Registro destinazione = rt Registro destinazione = rd RegWrite Nessuno Nel registro indicato sull’ingresso Write register viene scritto il valore Write data ALUSrc Il secondo operando di ALU viene da Read data 2 Il secondo operando di ALU viene dall’estensione di segno PCSrc Scrittura di PC con PC+4 Scrittura di PC con l’output del sommatore per il branch MemRead Nessuno Lettura della locazione di memoria indicata da Address MemWrite Nessuno Scrittura della locazione di memoria indicata da Address MemtoReg Il valore in Write data (registri) Il valore in Write data (registri) viene dalla ALU viene dalla memoria dati CPU 42 Datapath e Controllo II 0 M u x ALU Add result Add 4 Instruction [31 26] Control Instruction [25 21] PC Read address Instruction memory Instruction [15 11] Shift left 2 RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite PCSrc Read register 1 Instruction [20 16] Instruction [31– 0] 1 0 M u x 1 Read data 1 Read register 2 Registers Read Write data 2 register 0 M u x 1 Write data Zero ALU ALU result Address Write data Instruction [15 0] 16 Sign extend Read data Data memory 1 M u x 0 32 ALU control Instruction [5 0] CPU 43 0 M u x ALU Add result Add 4 Instruction [31 26] Control Instruction [25 21] PC Read address Instruction memory Datapath con Controllo II Instruction [15 11] Shift left 2 RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite PCSrc Read register 1 Instruction [20 16] Instruction [31– 0] 1 0 M u x 1 Read data 1 Read register 2 Registers Read Write data 2 register 0 M u x 1 Write data Zero ALU ALU result Address Write data Instruction [15 0] PCSrc non dipende dal solo opcode PCSrc=1 se l’istruzione e’ beq e Zero=1 16 Sign extend Read data Data memory 1 M u x 0 32 ALU control Instruction [5 0] Opcode Istruzione e Segnali di Controllo Memto- Reg Mem Mem Instruction RegDst ALUSrc Reg Write Read Write Branch ALUOp1 ALUp0 R-format 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 CPU 44 Segnali di Controllo: Istruzioni Formato R ADD 0 M U X ADD ADD 4 rs rt rd I[25:21] I[20:16] I[15:11] PC Instruction ADDR RD Instruction Memory I 32 5 0 5 5 RN1 RN2 RegDst 1 5 Register File immediate/ offset I[15:0] Value depends on funct 3 ALU 0 Zero 0 M U X RD2 RegWrite 1 Control signals shown in blue ??? Operation WN RD1 WD PCSrc 0 1 MUX 16 1 <<2 16 E X T N D 1 32 ALUSrc 0 0 MemWrite ADDR Data Memory MemtoReg 1 RD M U X WD MemRead 0 0 CPU 45 Segnali di Controllo: Istruzione lw ADD 0 M U X ADD ADD 4 rs rt rd I[25:21] I[20:16] I[15:11] PC Instruction ADDR RD Instruction Memory I 32 5 0 5 5 RN1 RN2 RegDst 0 5 010 Operation WN RD1 Register File WD immediate/ offset I[15:0] 3 ALU 0 Zero 0 M U X RD2 RegWrite 1 Control signals shown in blue PCSrc 0 1 MUX 16 1 <<2 16 E X T N D 1 32 ALUSrc 1 1 MemWrite ADDR Data Memory MemtoReg 1 RD M U X WD MemRead 0 1 CPU 46 Segnali di Controllo: Istruzione sw ADD 0 M U X ADD ADD 4 rs rt rd I[25:21] I[20:16] I[15:11] PC Instruction ADDR RD Instruction Memory I 32 5 0 5 5 RN1 RN2 RegDst X 5 WN RD1 WD 3 ALU 1 Zero 0 M U X RD2 RegWrite 0 Control signals shown in blue 010 Operation Register File immediate/ offset I[15:0] PCSrc 0 1 MUX 16 1 <<2 16 E X T N D 1 32 ALUSrc 1 X MemWrite ADDR Data Memory MemtoReg 1 RD M U X WD MemRead 0 0 CPU 47 Segnali di Controllo: Istruzione beq ADD 0 M U X ADD ADD 4 rs rt rd I[25:21] I[20:16] I[15:11] PC Instruction ADDR RD Instruction Memory I 32 5 0 5 5 RN1 RN2 RegDst X 5 110 Operation WN RD1 Register File WD immediate/ offset I[15:0] 3 ALU 0 Zero 0 M U X RD2 RegWrite 0 Control signals shown in blue PCSrc 1 if Zero=1 1 MUX 16 1 <<2 16 E X T N D 1 32 ALUSrc 0 X MemWrite ADDR Data Memory MemtoReg 1 RD M U X WD MemRead 0 0 CPU 48 Implementazione dell’unita’ di Controllo Principale Tabella di verita’ dell’unita’ di Controllo Outputs Inputs =Opcode Segnale Op5 Op4 Op3 Op2 Op1 Op0 RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOP0 form. lw R 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 sw beq Rete Combinatoria realizzabile tramite PLA Inputs Op5 1 0 1 0 1 1 x 1 x 0 0 1 0 0 0 0 0 0 1 0 0 x 0 x 0 0 0 1 0 1 Op4 Op3 Op2 Op1 Op0 Outputs R-format Iw sw beq RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO CPU 49 Controllo a Singolo Ciclo Controllo a singolo ciclo Definito da una coppia di tabelle di verita’ Zero Controllo Principale e Controllo ALU PCSrc Rete Combinatoria Inputs Op5 Op4 ALUOp Op3 ALU control block Op2 ALUOp0 Op1 ALUOp1 Op0 F3 Operation2 Outputs R-format Iw sw beq F2 RegDst F (5– 0) Operation F1 Operation0 ALUSrc MemtoReg Operation1 F0 RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO CPU 50 Controllo a Singolo Ciclo Il Controllo della CPU a singolo ciclo e’ una rete combinatoria Il Datapath e’ una rete sequenziale L’output dipende dagli ingressi e dai valori dagli elementi di memoria (Registri e PC) Il ciclo di clock deve durare abbastanza da stabilizzare le uscite di tutte le reti combinatorie prima del fronte di discesa del clock Clock in AND con i segnali di controllo di scrittura I Valori in ingresso vengono scritti solo se i segnali sono affermati Ciclo di Clock determinato sulla base del percorso piu’ lungo CPU 51 Diagramma a blocchi della CPU (Datapath e Control) e Memoria Addr rs,rt,rd,Imm Mem. Istr. Opcode <5:0> <31:26> Istruzione Funct Operation=f(ALUOp,funct) RegDst CONTROLLO PCRsr=Branch∙Zero ALUSrc MemtoReg MemWr MemRd RegWr Zero PC Addr ALU DATAPATH Register file Mem. Dati CPU 52 Datapath e Controllo III: Istruzione j Jump address opcode 31-26 Calcolo dell’indirizzo di salto Instruction [25– 0] 26 Shift left 2 25-0 Ulteriore multiplexer con Segnale di controllo jump Jump address [31– 0] 28 0 1 M u x M u x ALU Add result 1 0 Zero ALU ALU result Address PC+4 [31– 28] Add 4 Instruction [31– 26] Control Instruction [25– 21] PC Read address Instruction memory Read register 1 Instruction [20– 16] Instruction [31– 0] Instruction [15– 11] Shift left 2 RegDst Jump Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite 0 M u x 1 Read data 1 Read register 2 Registers Read Write data 2 register 0 M u x 1 Write data Write data Instruction [15– 0] 16 Instruction [5– 0] Sign extend Read data Data memory 1 M u x 0 32 ALU control CPU 53 Datapath e Controllo III: Istruzione j CPU 54 Ciclo di Clock dell’Implementazione a singolo ciclo L’implementazione singolo ciclo e’ inefficiente Una istruzione per ciclo, CPI=1, ma… Il tempo di ciclo e’ determinato dall’istruzione piu’ lunga Quale? CPU 55 Ciclo di Clock dell’Implementazione a singolo ciclo Calcolo del tempo di ciclo assumendo ritardi nulli per multiplexer, unita’ di controllo, estensione del segno, accesso PC, shift left, linee) eccetto : Memoria Istruzione e Dati (2ns) ALU ed addizionatori (2ns) Accesso al banco dei registri (1ns) Instr. Mem I Reg Rd ALU Op Mem D R-type 2 1 2 load 2 1 2 2 store 2 1 2 2 beq 2 1 2 jump 2 Reg Wr Total 1 6 1 8 7 5 2 CPU 56 Problemi con l’Implementazione a Singolo Ciclo Il tempo di ciclo e’ determinato dall’istruzione piu’ lenta Nel nostro caso e’ load, ma cosa succederebbe se considerassimo anche istruzioni floating point? Perdita di tempo moltre istruzioni possono essere eseguite in un tempo minore Le risorse che devono essere usate piu’ di una volta nello stesso ciclo devono essere duplicate Spreco di hardware/chip area CPU 57 Problemi con l’Implementazione a Singolo Ciclo Possibili soluzioni 1. Usare un periodo di clock variabile per ogni tipo di istruzione Soluzione non pratica 2. Approccio Multiciclo Usare un tempo di ciclo piu’ piccolo… Ma permettere l’esecuzione di istruzioni diverse sia completata in piu’ cicli Dividendo l’esecuzione in passi Eseguendo un singolo passo per ciclo CPU 58