DLX sequenziale
Transcript
DLX sequenziale
Calcolatori Elettronici T ISA DLX: Implementazione Tramite Struttura Sequenziale 1 E’ disponibile un interprete e simulatore (EasyDLX) per un insieme semplificato dell’ISA DLX realizzato da Daniele Biagi nell’ambito di un progetto del corso di Linguaggi e Modelli computazionali (prof. Denti). Il simulatore è in grado di eseguire salti, evidenziando step by step la prossima istruzione che verrà eseguita. Supporta tutte operazioni logiche e aritmetiche con operandi interi. Home page (Google code): http://code.google.com/p/easydlx/ Pagina web sul sito di Linguaggi e Modelli computazionali: http://edenti.deis.unibo.it/Ling/2010-2011/BestProjects/Biagi/ index.html 2 Riassunto delle principali caratteristiche dell’ISA del DLX • 32 registri da 32 bit di uso generale (R0..R31, con R0=0) • 32 registri floating point da 32 bit (utilizzati esclusivamente dalle unità funzionali in virgola mobile) • Istruzioni di lunghezza costante 32 bit allineate • Campi di dimensioni fisse nell’ambito di istruzioni diverse • 3 formati di istruzione: I, R, J • Non ci sono istruzioni specifiche per la gestione dello stack • Nelle istruzioni di tipo JL l’indirizzo di ritorno e’ salvato in R31 • Non c’è un registro di FLAG settato dalle istruzioni ALU; le condizioni vengono settate esplicitamente nei registri con il gruppo di istruzioni SET condition IN REGISTER (SCN): SetCoNdition Rd, Rs1, Rs2/Immediato (ex. Cond: EQ (if Rs1=Rs2 then Rd <- 1, else Rd <0), LT, NEQ, …) • C’è un registro di FLAG testabile a controllo di programma per le condizioni settate dall’unità Floating Point • Una sola modalità di indirizzamento di memoria (registro + offset) • MOVS2I e MOVI2S: sposta un registro speciale (eg IAR) da/verso un registro general purpose (i.e. R0..R31). Utile per implementare annidamento degli interrupt (stack...) 3 Il set di istruzioni del DLX • Le principali istruzioni aritmetiche e logiche • Istruzioni logiche anche con op. immediato: AND, ANDI, OR, ORI, XOR, XORI • Istruzioni aritmetiche: ADD, ADDI, SUB, SUBI, MULT, DIV • Istruzioni di traslazione logica (a destra anche aritmetica): SLL(I)1, SRL(I), SRA(I)2 • Istruzioni di SET CONDITION: Scn, ScnI(mmediate), con cn = EQ, NE, LT, GT, LE, GE • Le principali istruzioni di trasferimento dati • Load byte (signed/unsigned), Load Halfword (signed/unsigend), Load Word (LB, LBU, LH, LHU, LW) • Store byte, Store Halfword, Store Word (SB, SH, SW) • Load/Store Floating Point in singola o doppia precisione (LF/SF e LD/SD) • Copia un dato da un GPR a un FPR e viceversa (MOVI2FP e MOVFP2I) • Le principali istruzioni di trasferimento del controllo • Istruzioni di salto condizionato (PC+4 relative): BNEZ, BEQZ • Istruzioni di salto incondizionato diretto e indiretto(PC+4 relative): J, JR • Istruzioni di chiamata a procedura (Jump and Link, l’indirizzo di ritorno viene automaticamente salvato in R31): JAL, JALR • Istruzione di ritorno dalla procedura di servizio delle interruzioni: RFE 1) Shift logico a sinistra e shift aritmetico a sinistra coincidono (entrano 0 nei bit meno significativi). Per questa ragione NON esiste SLA. Fare attenzione con shift a sinistra, non preserva il segno e può generare overaflow. 2) NB. Trascinando a destra di una posizione un registro e inserendo a sinistra sempre il bit del segno si mantiene il segno del dato mentre lo si divide successivamente per 2 4 Formato tipico delle istruzioni nelle architetture R - R (Es. DLX) Attenzione: in alcune istruzioni I (LOAD e ALU) RS2 rappresenta il registro destinazione Codice operativo I RS2/Rd RS1 Operando immediato di 16 bit Load, Store, Branch condizionale, JR e JALR (trasf. controllo via registro), SetCond e ALU con op. imm. Nelle operazioni di LD e ALU RS2=Rdest, nelle ST RS2=sorg. -- RS1 per indirizzo o sorgente (con imm.) 6 bit Codice operativo R 5 bit 5 bit 5 bit RS2 RS1 Rd 11 bit Estensione al Cod. op (11 bit) • Istruzioni aritmetiche e logiche del tipo Rd ← Rs1 op Rs2 oppure SetCond fra registri Codice operativo J Offset di 26 bit (PC relative) 31 0 • Trasferimento del controllo diretto e incondizionato (J e JAL) 5 Numerazione dei bits ISTRUZIONI ARITMETICHE E LOGICHE (ALU) • Istruzioni a 3 operandi – 2 operandi “sorgente” – 1 operando “destinazione”. • “destinazione”: registro • “sorgente” : registro, registro / operando immediato (16 bit) • Esempi: R1 in posizione Rd nel formato della istruzione ADD R1, R2, R3 R1 ß R2+R3 formato R ADDI R1, R2, 3 R1 ß R2+3 ADDI R1, R0, 5 R1 ß 0+5 (cioè : R1 ß 5 ) formato I ADD R1, R5, R0 R1 ß R5+R0 (cioè : formato R formato I R1 ß R5 ) R1 in posizione Rd, R2 e R0 in posizione RS1 nel formato della istruzione 6 Set Condition Queste istruzioni confrontano i due operandi sorgente e mettono a “1” oppure a “0” l’operando destinazione in funzione del risultato del confronto “SET EQUAL” (SE, =), “SET NOT EQUAL” (SNE, =), “SET LESS THAN” (SLT, <), …………….. ESEMPI: SLT R1,R2,R3 ß 1 else R1 ß 0 if (R2<R3): R1 formato R R1 in posizione RS2 e R2 in posizione RS1 nel formato della istruzione Nel caso di operando sorgente immediato: SLTI R1,R2,5 if (R2<5): ß 1 else R1 ß 0 R1 formato I Nel caso di confronto fra operandi “unsigned” : SLTU R1,R2,R4 if (R2<R4): R1 ß 1 else R1 ß 0 formato R 7 ISTRUZIONI DI TRASFERIMENTO DATI (formato I) • Sono istruzioni che accedono alla memoria (load e store) • L’indirizzo dell’operando in memoria è la somma del contenuto di un registro con un “offset” di 16 bit • L’istruzione è codificata secondo il formato I • Esempi: LW R1, 40(R3) R1 ß32 M[40+R3] LB R1, 40(R3) R1 ß (M[40+R3]7)24 ## M[40+R3] “Sign Extension” LBU R1,40(R3) R1 ß LH R1, 40(R3) R1 ß (M[41+R3]7)16 SW R7,10(R5) M[10+R5] (0)24 ## M[40+R3] ß32 R7 ## M[41+R3] ## M[40+R3] 8 ISTRUZIONI DI TRASFERIMENTO DEL CONTROLLO • • • “JUMP”: Trasferimento del controllo (o salto) incondizionato “JUMP AND LINK: Trasferimento di controllo con salvataggio dell’indirizzo di ritorno (chiamata a procedura) “BRANCH”: Trasferimento di controllo condizionato (salto condizionato) “JUMP” J alfa PC ß (PC +4) + OFFSET(alfa) Formato Istruz. di tipo J (“PC relative”, OFFSET di 26 bit) J R3 Formato Istruz. di tipo I PC ß R3 “JUMP AND LINK” (salto a procedura e ritorno) JAL alfa R31 ß PC+4 ; PC ß (PC +4) + OFFSET(alfa) JALR R3 R31 ß PC+4 ; PC ß R3 J R31 PC ß R31 Questa è l’istruzione di ritorno da procedura (senza stack è possibile un solo livello di nesting !!) 9 ISTRUZIONI DI TRASFERIMENTO DEL CONTROLLO (salto condizionato) “BRANCH” N.B. il registro da cui dipende il salto è indicato nel formato della istruzione nella posizione RS1 – “BRANCH EQUAL ZERO” – “BRANCH NOT EQUAL ZERO” BEQZ R4, alfa if (R4=0):PC ß (PC +4)+OFFSET(alfa) BNEZ R4, alfa if (R4=0):PC ß (PC +4)+OFFSET(alfa) ( sono entrambe istruzioni “PC relative”, con OFFSET di 16 bit) BEQZ e BNEZ sono istruzioni di formato I Con una istruzione di tipo set condition seguita da un’istruzione di salto condizionato si realizza la funzione di Compare and Branch (confronto e salto condizionato dal risultato del confronto) senza 10 bisogno di flag dedicati Esempio di codice in Assembler di una macchina R-R Si scriva il codice assembler per il calcolo della somma degli elementi di un vettore di indirizzo iniziale A (<2^15) di 8 elementi (32 bytes) e lo si scriva all’indirizzo Z utilizzando i seguenti registri: – R1 per la somma corrente – R2 per l’indice – R3 per il contatore delle iterazioni CICLO ADD ADD ADDI R1, R0, R0 R2, R0, R0 R3, R0, 8 ; azzera la somma corrente ; azzera R2 registro indice ; inizializza il contatore dei cicli LW ADD ADDI ADDI BNEZ R4, A(R2) R1, R1, R4 R2, R2, 4 R3, R3, -1 R3, CICLO ; indirizzo dell’operando in memoria (calcolato a run time ) ; aggiorna somma corrente ; 4 e’ il numero di bytes per word SW ….. Z(R0), R1 ; Qui niente SCN: implicita nella istruzione precedente ; vero se il test è fatto sull’intero contenuto del registro : altrimenti SC ; Z e’ l’indirizzo della variabile con il risultato (R0=0) Come si sarebbe dovuto trasformare il codice se A>= 2^15 ? 11 Calcolatore Istruzioni Programma Unità di controllo (rete sequenziale) Ingressi Xi (dalla memoria) Ingressi secondari o variabili di stato Yi(n+1) Segnali di controllo Sommatore e moltiplicatore per n (variabile) Registri Uscite Oi (alla memoria) Uscite di stato Yi(n) 12 Datapath e Unità di Controllo • • La struttura di una CPU, come tutte le reti logiche sincrone che elaborano dati, può essere strutturata in due blocchi Unità di Controllo e Datapath. La CPU, per funzionare, ha bisogno della memoria esterna su cui risiedono il programma e i dati. Rete logica processore indirizzi ready interrupt reset istruzioni U.d.C. memoria clock Dati (in) Dati (out) Data Path CPU 13 Datapath e Unità di Controllo • Datapath: contiene tutte le unità di elaborazione ed i registri necessari per l’esecuzione delle istruzioni della CPU. Ogni istruzione appartenente all’Instruction Set è eseguita mediante una successione di operazioni elementari, dette micro-operazioni. • Micro-operazione: operazione eseguita all’interno del DATAPATH in un ciclo di clock (esempi: trasferimento di un dato da un registro ad un altro registro, elaborazione ALU) • Unità di Controllo: è una RSS che in ogni ciclo di clock invia un ben preciso insieme di segnali di controllo al DATAPATH al fine di specificare l’esecuzione di una determinata microoperazione. 14 Struttura del DLX (esecuzione sequenziale) S1 C O N T R O S2 dest alu U A N B I Register file C PC T TEMP L IAR MAR MDR Instruction register CPU dati in scrittura fetch Indirizzi Parallelismo dell’architettura: 32 bit (bus, alu e registri hanno parallelismo 32) Memoria dati/istruzioni in lettura I segnali di controllo non sono riportati ! execute 15 I registri del DLX (tutti a 32 bit) A parte il Register File questi registri NON sono noti al programmatore !!! • Register file : 32 Registri General Purpose Registers R0….R31 con R0=0 • IAR: Interrupt Address Register – Deposito dell’indirizzo di ritorno in caso di interruzione • PC: Program Counter • MAR: Memory Address Register – Contiene l’indirizzo del dato da scrivere o leggere in memoria • IR: Instruction Register – Contiene l’istruzione attualmente in esecuzione • TEMP: Temporary Register – Registro di deposito temporaneo di risultati • MDR: Memory Data Register – Registro di transito temporaneo dei dati da e per la memoria • A e B – Registri di uscita dal Register File 16 Funzioni della ALU Dest (uscite) – 4 bit di comando S1 + S2 S1 – S2 S1 and S2 S1 or S2 S1 exor S2 Shift S1 a sinistra di S2 posizioni Shift S1 a destra di S2 posizioni Shfit S1 aritmetico a destra di S2 posizioni S1 S2 0 1 Flag di uscita Zero Segno negativo Carry La ALU è una rete PURAMENTE combinatoria 17 Trasferimento dati sul datapath • I bus S1 ed S2 sono multiplexati (tri-state) con parallelismo 32 bit. • I registri campionano sul fronte positivo del clock, hanno due porte di uscita O1 e O2 per i due bus (o i registri A e B) e dispongono di tre ingressi di controllo: – un ingresso di Write Enable (WE*) ed uno di Output Enable per ogni porta di uscita, una per ogni bus S1 e S2 (OE1* e OE2*). • Al fine di valutare la massima frequenza a cui è possibile far funzionare il datapath è importante conoscere le seguenti temporizzazioni: – TC (max) : ritardo max tra il fronte positivo del clock e l’istante in cui i segnali di controllo generati dall’unità di controllo sono validi; – TOE (max): ritardo max tra l’arrivo del segnale OE e l’istante in cui i dati del registro sono disponibili sul bus; – TALU (max): ritardo massimo introdotto dalla ALU; – TSU (min) : tempo di set-up minimo dei registri (requisito minimo per il corretto campionamento da parte dei registri). • La massima frequenza di funzionamento del data path si calcola come segue: TCK > TC (max) + TOE (max) + TALU (max) + TSU (min) fCK(max) = 1/TCK 18 Esempio : esecuzione della microistruzione Rin ← Rout Clock sempre collegato: write enable ! I segnali in blu (segnali di controllo) provengono dall’Unità di Controllo S1 S2 OE1* OE2Rout* OE2* (e.g. TEMP) O1 Rout I O2 WE* OE1* OE2* O1 O2 Rin I WE* WERin* i2 i1 (e.g. MAR) u = i2 alu clock dest I segnali di controllo in grassetto sono attivi nel ciclo di clock in cui il micro-step Rin ← Rout viene eseguito 19 Il set di istruzioni non floating-point del DLX Data Transfer LW LB LBU LH SW SH SB LHI *MOVS2I *MOVI2S Ra, offset(Rb) Ra, offset(Rb) Ra, offset(Rb) Ra, offset(Rb) Ra, offset(Rb) Ra, offset(Rb) Ra, offset(Rb) Ra, value Ra, Rs Rs, Ra * Special register Rs (IAR) Aritmetiche/logiche ADD ADDI ADDU ADDUI SUB SUBI SUBU SUBUI DIV DIVI MULU MULI SLL SLLI SHR SHRI SLA SLAI OR ORI XOR XORI AND ANDI Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb, value Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb, value Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb, value Ra ,Rb,Rc Ra,Rb;value Ra,Rb.Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb,value Ra,Rb,Rc Ra,Rb,value Controllo SETx SETIx BEQZ BNEQZ J JR JL JLR Ra,Rb,Rc Ra,Rb,value Ra, offset Ra, offset offset Ra offset Ra N.B. x può essere LT, GT, LE, GE, EQ, NE 20 Il progetto dell’Unità di Controllo • Una volta definito il Set di Istruzioni e progettato il DATAPATH, il passo successivo del progetto di una CPU è il progetto dell’Unità di Controllo (CONTROLLER). • Il CONTROLLER è una RSS: il suo funzionamento può essere specificato tramite un diagramma degli stati. • Il CONTROLLER (come tutte le RSS) permane in un determinato stato per un ciclo di clock e transita (può transitare) da uno stato all’altro in corrispondenza degli istanti di sincronismo (fronti del clock). • Ad ogni stato corrisponde quindi un ciclo di clock. Le micro-operazioni che devono essere eseguite in quel ciclo di clock sono specificate (in linguaggio RTL) nel diagramma degli stati che descrive il funzionamento del CONTROLLER all’interno degli stati. • A partire dalla descrizione RTL si sintetizzano poi i segnali di controllo che devono essere inviati al DATAPATH per eseguire le operazioni elementari associate ad ogni stato. 21 Il diagramma degli stati del controller Qui non si sa ancora quale sia l’istruzione ma il trasferimento ai registri è fatto comunque !! MAR <- PC Ready ? IR <- M [MAR] PC<- PC+4 A <- RS1 B <- RS2 INSTRUCTION FETCH INSTRUCTION DECODE* Oltre a decodificare l’istruzione si prelevano gli operandi sorgente dal RF (anche se non utilizzati !) e si incrementa il PC. Data transfer ALU Set N.B. I primi tre stadi sono comuni a tutte le istruzioni Jump Branch 22 Estrazione “automatica” dei registri durante la fase di decode di una istruzione (qualsiasi) B A < I Codice operativo RS2/Rd RS1 R Codice operativo RS2 RS1 J Codice operativo 31 Operando immediato di 16 bit Rd Estensione al Cod. op (11 bit) Offset di 26 bit (PC relative) 0 Questi 5 + 5 bit sono utilizzati per estrarre, preventivamente e ancora prima di conoscere che tipo di istruzione che è stata letta dalla memoria, dal Register File due registri in A e B. Nel caso di istruzione J non ci sono registri coinvolti e quindi saranno estratti bit corrispondenti all’offset. Nel caso di istruzione I, in B potrebbe finire il valore del registro destinazione (e.g. in una LD o operazione ALU (tipo I)). Infine: i 5 + 5 bit rappresentano gli indici (o presunti tali) ma non il valore dei due registri che è contenuto nel Register File. Gli stati della fase di fetch • In questa fase si deve verificare se è presente un interrupt (evento esterno asincrono che la CPU deve “servire” con apposito software); • se l’interrupt è presente e può essere servito (IEN = true) si esegue implicitamente l’istruzione di chiamata a procedura all’indirizzo 0, e si salva l’indirizzo di ritorno nell’apposito registro IAR; • se l’interrupt non è presente o le interruzioni non sono abilitate, si va a leggere in memoria la prossima istruzione da eseguire (il cui indirizzo è in PC) Dall’ultimo stato dell’istruzione precedente (int and IEN) = 1 (int and IEN) = 0 MAR ← PC IAR ← PC Ready = 0 IR ← M(MAR) PC ← 0 Ready = 1 Alla fase di decodifica IEN ← 0 IAR: Interrupt Address Register IEN: Interrupt Enable Flag 24 Il diagramma degli stati del controller Si modifica il DATAPATH in maniera da poter indirizzare la memoria dal PC. Meno stati ma maggiore complessità Ready ? IR <- M [PC] INSTRUCTION FETCH PC <- PC +4 A <- RS1 B <- RS2 INSTRUCTION DECODE* Data transfer Tutte le istruzioni impiegano un clock in meno per essere eseguite ! Ma potenzialmente aggiore lentezza -> minore freq. clock ALU Set Jump Branch 25 Controllo per l’istruzione LB (LOAD BYTE) IR <- M [PC] Ready ? Parte comune PC <- PC +4 A <- RS1 B <- RS2 LOAD MAR <- A + Ready ? (IR15)16 ## IR15..0 MDR <- M[MAR] ALU (A) = (RS1) Estensione segno LB C <- (MDR7)24 ## MDR7..0 ALU RD <- C RS2 è da intendersi come registro di destinazione 26 Estensione del segno (IR15)16 ## IR15..0 IR Da UdC 0 15 31 31 30…………17 16 15-0 BUS S1 o S0 27 Controllo per le istruzioni di DATA TRANSFER NB: in lettura la parte meno significativa del dato viene letta sempre allineata al registro MDR per permettere il filling Mancano nell’esempio SH e SB (sempre unsigned) che corrispondono a attivazione degli specifici WE delle memorie e “traslatori” dei bytes del registro MDR. Come si realizzerebbero ? STORE Byte -> SB Half Word –> SH Word -> SW Il contenuto di A come unsigned MAR <- A + (IR15)16 ## IR15..0 LW LOAD Ready ? SW STORE MDR <- M[MAR] LBU LBU LB LB C <-(MDR7)24 ## MDR7..0 LH LH C <- (0)24 ## MDR7..0 LHU LHU C <- (MDR15)16 ## MDR15..0 C <-(0)16 ## MDR. 15..0 LW C <- MDR RD <- C Ready ? INIT M[MAR] <-MDR MDR <- B 28 Memoria logica Memoria fisica 8 i 8 7 h 7 6 g 6 5 f 5 4 e 4 3 d 2 c 1 b h 0 a d bit 31 24 BUS 3 23 2 l i g 1 f e c 0 b a BUS 2 16 15 BUS 1 8 7 BUS 0 0 Trasferimenti BYTE, HW • I trasferimenti di bytes sono SEMPRE considerati allineati • I trasferimenti di HW debbono avvenire a indirizzi multipli di 2 • I trasferimenti di Word debbono sempre avvenire a indirizzi multipli di 4 • In caso di disallineamento: fault • Nel caso di store di dati di dimensione inferiore alla word NON si ha estensione del segno • La lettura/scrittura di bytes e HW (a causa del reciproco disallineamento fra i registri e la memoria) implica che fra i registri e la memoria siano interposti dei mux/demux (realizzati con tristate) Registro MDR Come sono attivati i WE delle memorie ? Progettare la rete Memoria 30 Trasferimento “unsigned” MDR 31 Trasferimenti BYTE, HW 24 23 16 0 “0” Mux Mux Demux Demux Solo in lettura Bit più signif. byte precedenti Memoria I MUX 23-16 e 31-24 hanno come ingresso anche il bit 7 del byte 7-0 della memoria (LB) e il bit 15 del byte 15-8 della memoria (LH) Ad esempio in una LB il MUX 7-0 si collega direttamente alla memoria mentre i MUX 15-8, 23-16 e 31-24 si collegano al bit 7 del MUX 7-0 proveniente dalla memoria. In una SH a indirizzo multiplo di 2 e non di 4 il DEMUX 7-0 dal MDR si collega alla memoria 23-16 e il DEMUX 15-8 alla memoria 31-24. Gli altri due bytes della memoria rimangono invariati 31 Registro (formato R) Esempi di istruzioni ALU Lo stesso schema si può usare per gli shift etc. Temp <- (IR15)16 ## IR15..0 Temp <- B Il contenuto dei registri come signed se op aritmetica ADD Duplicando i percorsi si potrebbe risparmiare il passaggio in TEMP Immediato (formato I) C <- A + Temp SUB C <- A - Temp AND C <- A and Temp XOR C <- A xor Temp RD <- C OR C <- A or Temp INIT 32 Controllo per le istruzioni di SET (confronto) ex. SLT R1,R2,R3 Registro (formato R) Immediato (formato I) Temp <- (IR15)16 ## IR15..0 Temp<- B SLT SEQ A = Temp SGE A < Temp A >= Temp Il contenuto dei registri come signed Duplicando i percorsi si potrebbe risparmiare il passaggio in TEMP I micropassi sono eseguiti in ALU ma il risultato NON è memorizzato in un registro: i flag sono utilizzati dalla ALU per impostare (almeno) il bit 0 del registro C SNE SGT A! = Temp YES SLE A > Temp A <= Temp Il risultato del test è un input per il controller ! NO C <- 1 C <- 0 RD <- C INIT 33 Per il salvataggio in R31 JALR Controllo per le istruzioni di JUMP C <- PC JAL JR C <- PC JMP JAL JALR Istruzione formato I PC <- A (IR15)16 ## IR15..0 Istruzione formato J PC <- PC + (IR25)6 ## IR25..0 JAL JALR JR R31 <- C JMP JALR JAL INIT 34 Controllo per le istruzioni di BRANCH Ex. BNEQZ R5, 100 Il controllo se 0 (o !=0) è fatto sull’intero registro A (a 32 bit) e non solo sul bit meno significativo BRANCH BEQZ BNEZ A=0 YES A! = 0 NO YES NO PC <- PC + (IR15)16 ## IR15..0 INIT 35 Numero di clock necessari per eseguire le istruzioni Istruzione Load Store ALU Set Jump Jump and link Branch (taken) Branch (not taken) Cicli Wait 6 5 5 6 3 5 4 3 2 2 1 1 1 1 1 1 n CPI = ( CPI ∑ i=1 i * Totale 8 7 6 7 4 6 5 4 Ni numero totale di istruzioni ) Esempio su DLX LOAD: 21%, STORE: 12%, ALU: 37%, SET: 6%, JUMP: 2% BRANCH (taken): 12%, BRANCH (not-taken): 11% CPI = 6.3 36 Controllo cablato (“hardwired”) U.d.C. Segnali di controllo 228 righe Rete combinatoria che genera uscite e stato futuro Datapath 40 2 6+11 3 Int e ready Opcode + OpCode Extension Rs1, Rs2, Rd 6 Stato futuro Stato presente IR25..0 Flag INSTRUCTION REGISTER (IR) 32 bit dalla memoria - Indici di Rs1, Rs2 e Rd provengono da IR - IR25..0 sono portati ai bus S1 ed S2 del data path attraverso due buffer tristate - U.d.C. genera anche i segnali di comando 37 per la memoria (MEMRD e MEMWR) I passi dell’esecuzione delle istruzioni Nel DLX l’esecuzione di tutte le istruzioni può essere scomposta in 5 passi, ciascuno eseguito in uno o più cicli di clock. Tali passi sono detti: 1) FETCH: l’istruzione viene prelevata dalla memoria e posta in IR. 2) DECODE: l’istruzione in IR viene decodificata e vengono prelevati gli operandi sorgente dal Register File. 3) EXECUTE: elaborazione aritmetica o logica mediante la ALU. 4) MEMORY: accesso alla memoria e, nel caso di BRANCH aggiornamento del PC (“branch completion”). 5) WRITE-BACK: scrittura sul Register File. 38 Le micro-operazioni eseguite in ciascun passo 1) FETCH MAR ß PC ; IR ß M[MAR]; 2) DECODE Aß RS1, Bß RS2, PC ß PC+4 39 Le micro-operazioni eseguite in ciascun passo 3) EXECUTE MEMORIA: MAR ß A + (IR15)16 ## IR15..0 ; MDR ß B; (utilizzano ALU, S1, S2, dest) (NB: serve nelle Store ove RD=RS2 operazione non significativa nelle LOAD) ALU: C <- A op B (oppure A op (IR15)16 ## IR15..0) ; C <- sign( A op B (oppure A op (IR15)16 ## IR15..0)); se SCn BRANCH: Temp ß PC + (IR15)16 ## IR15..0) ; (utilizza ALU, S1, S2, dest: qui non si sa ancora se si deve saltare) J e JAL Temp ß PC + (IR25)6 ## IR25..0) ; JR e JALR Temp ß A; 40 40 Le micro-operazioni eseguite in ciascun passo 4) MEMORY Memoria: MDR ß M[MAR]; (LOAD) M[MAR] ß MDR; (STORE) BRANCH: If (Cond) PC ß Temp; [A] è il registro che condiziona il salto (Cond) ; JAL e JALR: C ß PC; 41 Le micro-operazioni eseguite in ciascun passo 5) WRITE-BACK istruzioni diverse da J, JR, JAL, JALR C ß MDR; (se è una LOAD – due micropassi)) RD ß C ; istruzioni J, JR, JAL, JALR PC ß Temp; RD ß C ; 42