Livello di micro – architettura
Transcript
Livello di micro – architettura
Architettura degli Elaboratori 06 – Livello di micro – architettura Livello di micro – architettura Architettura degli Elaboratori 06 – Livello di micro – architettura Pagina 2 Architettura degli Elaboratori 06 – Livello di micro – architettura Introduzione - il livello di micro – architettura implementa le funzioni del livello sovrastante (ISA) - come livello ISA di riferimento si sceglie una parte della JVM (Java Virtual Machine), in particolare quella riferita ai numeri interi (IJVM) - la micro – architettura contiene un microprogramma (registrato in una ROM) che preleva, decodifica ed esegue le istruzioni IJVM - il microprogramma contiene variabili che rappresentano lo stato del computer (per esempio, il PC) Pagina 3 Architettura degli Elaboratori - istruzione IJVM: - 06 – Livello di micro – architettura codice operativo (opcode) istruzione operando/i struttura del microprogramma: - ciclo infinito - la funzione da eseguire viene determinata ed eseguita Pagina 4 Architettura degli Elaboratori 06 – Livello di micro – architettura ALU Pagina 5 Architettura degli Elaboratori 06 – Livello di micro – architettura Percorso dati Pagina 6 Architettura degli Elaboratori 06 – Livello di micro – architettura Percorso dati Pagina 7 Architettura degli Elaboratori 06 – Livello di micro – architettura Percorso dati Segnali di controllo della ALU: - F0 - F1 - ENA - ENB - INVA - INC Segnali di controllo dello shifter: - SLL8 - SRA1 Pagina 8 Architettura degli Elaboratori 06 – Livello di micro – architettura Percorso dati Valori di input della ALU - contenuto di H - proveniente dal bus B La lettura/scrittura dello stesso registro può essere effettuata durante lo stesso ciclo. Incremento di SP: - valore di SP sul bus B - disattivare l'input sinistro ALU - attivare il segnale INC - memorizzare il risultato in SP Pagina 9 Architettura degli Elaboratori 06 – Livello di micro – architettura Percorso dati: temporizzazione Pagina 10 Architettura degli Elaboratori Operazioni della memoria 06 – Livello di micro – architettura 2 porte di comunicazione con la memoria: - porta a 32 bit controllata dai registri MAR e MDR - porta a 8 bit controllata dal registro PC che legge il byte meno significativo di MBR Indirizzi: MAR PC (parole) (byte) Pagina 11 Architettura degli Elaboratori Operazioni della memoria 06 – Livello di micro – architettura MAR/MDR: lettura – scrittura parole di dati PC/MBR: lettura programma eseguibile - i 2 bit più significativi di MAR vengono scartati (4 GB max) - MBR può contenere istruzioni o dati (da estendere da 8 a 32 bit, con segno o meno) Pagina 12 Architettura degli Elaboratori Microistruzioni 06 – Livello di micro – architettura 29 segnali: - 9 scrittura dati dal bus C - 9 scrittura sul bus B - 8 funzioni ALU + shifter - 2 per leggere/scrivere mediante MAR/MDR - 1 per leggere e poi scrivere su PC/MBR In caso di accesso alla memoria: - caricamento di MAR - dati scritti su MBR o MDR - dati utilizzabili Pagina 13 Architettura degli Elaboratori Microistruzioni 06 – Livello di micro – architettura - scrittura sul bus B: 9 possibili registri (cioè 4 bit per la codifica) Pagina 14 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Addr JAM ALU C Mem B indirizzo di una potenziale successiva microistruzione come viene selezionata la prossima microistruzione seleziona la funzione della ALU + shifter seleziona quali registri vengono scritti dal bus C seleziona la funzione della memoria selezione la sorgente del bus B Pagina 15 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-1 Pagina 16 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-1 - memoria centrale - memoria di controllo: MPC (MicroProgram Counter) MIR (MicroIstruction Register) Pagina 17 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-1 - la parola contenuta nella memoria di controllo puntata da MPC viene trasferita in MIR - i segnali si propagano nel percorso dati: - il contenuto di un registro viene inserito nel bus B - la ALU “sa” quale operazione Svolgere - gli output di N e Z vengono memorizzati in una coppia di flip-flop - L'output della ALU viene trasferita nello shifter - l'output dello shifter giunge ai registri mediante il bus C Pagina 18 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-1 - prossima istruzione: - i 9 bit del campo NEXT_ADDRESS vengono copiati in MPC - viene controllato il valore di JAM (JMPC + JAMN + JAMZ): - se vale 000 nessuna operazione è necessaria; - se JAMZ e/o JAMN sono settati, si calcola OR con Z e/o N (ordinatamente) F = (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS[8] Pagina 19 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-1 F = (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS[8] Pagina 20 Architettura degli Elaboratori 06 – Livello di micro – architettura Stack - in (quasi) tutti i linguaggi di programmazione sono definite le procedure (subroutine, metodi, funzioni, … ), ognuna con un insieme di variabili locali - le variabili locali hanno visibilità (scope) limitata alla durata dell'esecuzione della procedura - dove (e come) memorizzare queste variabili? - viene utilizzata una porzione di memoria detta stack, al cui interno NON si utilizzano indirizzi assoluti di memoria per le variabili. Pagina 21 Architettura degli Elaboratori 06 – Livello di micro – architettura Stack - vengono utilizzati i registri SP (Stack Pointer) e LV (Local Variables Block) Pagina 22 Architettura degli Elaboratori 06 – Livello di micro – architettura Stack (degli operandi) a1 = a2 + a3 Pagina 23 Architettura degli Elaboratori 06 – Livello di micro – architettura Modello della memoria di IJVM La memoria di IJVM si compone di: - porzione costante di memoria Contiene costanti, stringhe, puntatori ad altre aree di memoria Registro CPP (indirizzo della prima parola) - blocco delle variabili locali Utilizzata per le variabili locali invocate da ogni metodo Registro LV (punta alla prima locazione, parola, del blocco delle variabili locali) Pagina 24 Architettura degli Elaboratori 06 – Livello di micro – architettura Modello della memoria di IJVM - stack degli operandi Registro SP (indirizzo della parola in cima allo stack, si aggiorna durante l'esecuzione) - area dei metodi Contiene il programma Registro PC (indirizzo della prossima istruzione, in byte) Pagina 25 Architettura degli Elaboratori 06 – Livello di micro – architettura Modello della memoria di IJVM Pagina 26 Architettura degli Elaboratori 06 – Livello di micro – architettura MAR/MDR: Lettura/scrittura parole di dati dal livello ISA PC/MBR: Lettura di istruzioni dal livello ISA Pagina 27 Architettura degli Elaboratori ● ● ● 06 – Livello di micro – architettura Un'operazione di lettura dalla memoria inizia alla fine del ciclo di clock, quando MAR (o PC) vengono caricati se l'operazione di lettura/scrittura richiede un ciclo di clock, i dati saranno disponibili alla fine del ciclo seguente e utilizzabili al ciclo ancora successivo pertanto, una lettura che inizia alla fine del ciclo i fornisce dati utilizzabili al ciclo i + 2 Pagina 28 Architettura degli Elaboratori 06 – Livello di micro – architettura ● ● ● ● ● ● L'indirizzo della memoria di controllo contenuto in MPC viene letto e caricato in MIR I segnali si propagano da MIR verso il datapath e il registro selezionato viene caricato nel bus B ALU e shifter elaborano e producono un risultato stabile Il bus C e i registri di memoria diventano stabili In corrispondenza al fronte di salita del clock, i registri e i flipflop N e Z vengono caricati Appena i registri e i flip-flop sono stabili si carica MPC con la nuova istruzione Pagina 29 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM Pagina 30 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM: esempio applicativo Pagina 31 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM BIPUSH byte scrive un byte in cima allo stack DUP legge la parola in cima allo stack e la inserisce in cima allo stack ILOAD varnum scrive una variabile locale, proveniente dal blocco delle variabili locali, in cima allo stack LDC_W index scrive in cima allo stack una costante proveniente dalla porzione costante di memoria ISTORE varnum preleva una parola dalla cima dello stack e la memorizza in una variabile locale nel blocco delle variabili locali POP rimuove la parola di memoria posta in cima allo stack Pagina 32 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM IADD sostituisce le due parole in cima allo stack con la loro somma IAND sostituisce le due parole in cima allo stack con il loro AND logico IINC varnum const aggiunge const ad una variabile locale nel blocco delle variabili locali IOR sostituisce le due parole in cima allo stack con il loro OR logico ISUB sostituisce le due parole in cima allo stack con la loro differenza Pagina 33 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM GOTO offset diramazione incondizionata IFEQ offset estrae una parola in cima allo stack ed effettua una diramazione se vale zero IFLT offset estrae una parola in cima allo stack ed effettua una diramazione se ha un valore negativo IF_ICMPEQ offset estrae due parole dalla cima dello stack ed effettua una diramazione se sono uguali Pagina 34 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM NOP Nessuna operazione SWAP Scambio di due parole poste in cima allo stack WIDE Prefisso per indicare che l'istruzione successiva ha un indice a 16 bit Pagina 35 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM - Inserimento nello stack di una parola proveniente da: - porzione costante di memoria (LDC_W) - blocco variabili locali (ILOAD) - istruzione stessa (BIPUSH) - Inserimento nel blocco variabili locali di una parola proveniente da: - stack (ISTORE) - Operazioni aritmetiche e logiche: - IADD, ISUB - IAND, IOR sugli operandi che si trovano in cima allo stack (il risultato viene posto in cima allo stack) Pagina 36 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM - Operazioni per i salti: - GOTO (salto incondizionato) - IFEQ, IFLT, IF_ICMPEQ modificano il valore di PC in base al valore dello spiazzamento - Operazioni sugli operandi in cima allo stack: - scambio di due parole (SWAP) - duplicazione di una parola (DUP) - rimozione di una parola (POP) Pagina 37 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM - Invocazione di un altro metodo: - INVOKEVIRTUAL disp - Terminazione di un altro metodo: - IRETURN Nella simulazione IJVM le invocazioni ad altri metodi vengono viste equivalenti alle CALL di (quasi) tutti i linguaggi di programmazione. Pagina 38 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM: invocazione di un metodo Pagina 39 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM: invocazione di un metodo L'istruzione INVOKEVIRTUAL contiene l'indirizzo dell'area dei metodi del metodo invocato. I primi 4 byte dell'area del codice del metodo contengono: - 2 byte (intero a 16 bit) numero dei parametri del metodo - 2 byte (intero a 16 bit) dimensione del blocco delle variabili locali del metodo - 5° byte codice operativo della prima istruzione da eseguire Pagina 40 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM: ritorno da un metodo Pagina 41 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni - descrizione delle microistruzioni di Mic-1 che implementano IJVM - elenco delle 512 parole da 36 bit (contenuto della memoria di controllo) - meglio: elenco dei segnali che devono essere attivati durante ogni ciclo di clock. - notazione: su una singola linea il codice di tutte le attività che avvengono durante un ciclo di clock Pagina 42 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Le microistruzioni vengono descritte mediante un linguaggio di “alto” livello, MAL (Micro Assembly Language): - una riga di codice indica tutte le attività che hanno luogo durante un ciclo di clock - durante ogni ciclo: - un registro è collegato al bus B - il registro H è collegato ad uno dei due ingressi della ALU - possono essere scritti uno o più registri - l'operazione da eseguire viene indicata con il costrutto di assegnazione (=) Pagina 43 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Operazioni fondamentali di MAL: - assegnazione - inizio lettura / scrittura da / in memoria - istruzione di salto (goto) Pagina 44 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Operazioni consentite: Pagina 45 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Operazioni tipiche: - MDR = SP (copia del contenuto di SP in MDR) - MDR = H + SP (addizione del contenuto di H e SP, scrittura della somma in MDR) - Sono lecite soltanto le operazioni che possono essere realizzate tramite il percorso dati - MDR = SP + MDR NON è valida perché uno dei due operandi deve essere il registro H Pagina 46 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Operazioni tipiche: - H = H – MDR NON è valida perché H può contenere soltanto il sottraendo - H = MDR – H E' valida - il risultato di un'operazione logica o aritmetica può essere assegnato a più registri: - SP = MDR = SP + 1 Pagina 47 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni - Inizio di un'operazione di lettura/scrittura: rd / wr - Prelievo di 1 byte (PC/MBR): fetch - Le due operazioni possono avvenire in modo simultaneo, ma lo stesso registro non può contenere dati provenienti dalla memoria e dal percorso dati durante lo stesso ciclo - Assegnazioni ed operazioni in memoria possono svolgersi durante lo stesso ciclo, basta indicarle sulla stessa linea di codice: - MAR = SP; rd - Ogni istruzione contiene esplicitamente l'indirizzo dell'istruzione seguente: di norma istruzioni consecutive vengono eseguite in sequenza (tranne che per le diramazioni!!!) Pagina 48 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni - i salti incondizionati vengono indicati con la notazione: goto label - i salti condizionali richiedono una notazione differente: - se Z = 1 se N = 1 l'output della ALU è nullo l'output della ALU è negativo - il valore di un (generico) registro R per verificarne il valore richiede che: - Z = R oppure che N = R In questo modo il contenuto di R viene fatto passare attraverso la ALU per impostare i flip-flop Z o N (senza modificare alcun registro) Pagina 49 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni - un salto condizionato al valore del registro R viene effettuato come: - Z = R; if (Z) goto label1 else goto label2 - N = R; if (N) goto label1 else goto label2 Si ottiene come risultato di impostare JAMZ o JAMN. I valori label1 e label2 differiscono soltanto per il bit più significativo: Pagina 50 Architettura degli Elaboratori 06 – Livello di micro – architettura Microistruzioni Per utilizzare il bit JMPC si utilizza la notazione: - goto (MBR OR valore) In cui si indica al micro - assemblatore di: - utilizzare valore come NEXT_ADDRESS - impostare JMPC in modo che in MPC venga calcolato l'OR logico tra MBR e NEXT_ADDRESS Pagina 51 Architettura degli Elaboratori 06 – Livello di micro – architettura Interpretazione di IJVM con Mic-1 - un'istruzione IJVM è interpretata da una sequenza di microistruzioni - microistruzioni consecutive non sono necessariamente memorizzate in modo consecutivo nella memoria di controllo - il micro – assemblatore collega le istruzioni mediante NEXT_ADDRESS - ogni sequenza inizia all'indirizzo corrispondente al valore numerico dell'opcode IJVM che interpreta Pagina 52 Architettura degli Elaboratori 06 – Livello di micro – architettura Interpretazione di IJVM con Mic-1 - l'interprete è composto da 112 microistruzioni - vengono utilizzati 10 registri - TOS contiene il valore puntato da SP - OPC è un registro temporaneo - l'interprete realizza un ciclo principale che si occupa di prelevare ed eseguire le istruzioni IJVM: Main1 PC = PC + 1; fetch; goto (MBR) Pagina 53 Architettura degli Elaboratori 06 – Livello di micro – architettura Insieme delle istruzioni IJVM Pagina 54 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IADD Sostituisce le due parole in cima allo stack con la loro somma - Main1 PC = PC + 1; fetch; goto (MBR) - iadd1 MAR = SP = SP – 1; rd - iadd2 H = TOS - iadd3 MDR = TOS = MDR + H; wr; goto Main1 Pagina 55 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 ISUB Sostituisce le due parole in cima allo stack con la loro differenza - Main1 PC = PC + 1; fetch; goto (MBR) - isub1 MAR = SP = SP – 1; rd - isub2 H = TOS - isub3 MDR = TOS = MDR - H; wr; goto Main1 Pagina 56 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IAND Sostituisce le due parole in cima allo stack con il loro AND logico - Main1 PC = PC + 1; fetch; goto (MBR) - iand1 MAR = SP = SP – 1; rd - iand2 H = TOS - iand3 MDR = TOS = MDR AND H; wr; goto Main1 Pagina 57 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 DUP Replica la parola in cima allo stack - idup1 MAR = SP = SP + 1 - idup2 MDR = TOS; wr; goto Main1 Pagina 58 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 BIPUSH Bipush byte scrive byte in cima allo stack - bipush1 SP = MAR = SP + 1 - bipush2 PC = PC + 1; fetch - bipush3 MDR = TOS = MBR; wr; goto Main1 Pagina 59 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 ILOAD Iload offset scrive in cima allo stack una variabile locale in offset - iload1 H = LV - iload2 MAR = MBRU + H; rd - iload3 MAR = SP = SP + 1 - iload4 PC = PC + 1; fetch; wr - iload5 TOS = MDR; goto Main1 Pagina 60 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 POP pop rimuove la parola dalla cima dello stack - pop1 - pop2 - pop3 MAR = SP = SP – 1; rd TOS = MDR; goto Main1 Pagina 61 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 WIDE ILOAD ILOAD prevede che offset abbia 8 bit - è possibile accedere soltanto a 256 variabili locali - per accedere alle altre (eventuali variabili) si utilizza un opcode speciale, WIDE - WIDE ILOAD specifica che offset è di 16 bit Pagina 62 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 WIDE ILOAD wide1 PC = PC + 1; fetch wide2 goto (MBR OR 0x100) In wide1 si incrementa PC per mettere il primo byte in MBR In wide2 si esegue un secondo salto usando l'opcode contenuto in MBR (0x15, ILOAD) L'interpretazione di WIDE ILOAD inizia a 0x115 Pagina 63 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 WIDE ILOAD wide_iload1 PC = PC + 1; fetch wide_iload2 H = MBRU << 8 wide_iload3 H = MBRU OR H wide_iload4 MAR = LV + H; rd; goto iload3 iload3 MAR = SP = SP + 1 iload4 PC = PC + 1; fetch; wr iload5 TOS = MDR; goto Main1 Pagina 64 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 GOTO GOTO offset esegue una diramazione incondizionata in modo che la prossima istruzione da eseguire sia quella che si trova nell'indirizzo che si ottiene dalla somma di offset (16 bit) all'opcode del salto. goto1 OPC = PC - 1 goto2 PC = PC + 1; fetch goto3 H = MBR << 8 goto4 H = MBRU OR H goto5 PC = OPC + H; fetch goto6 goto Main1 Pagina 65 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 GOTO Pagina 66 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IFLT IFLT offset estrae una parola dalla cima dello stack ed esegue una diramazione se ha valore negativo iflt1 iflt2 iflt3 iflt4 T F F2 F3 MAR = SP = SP – 1; rd OPC = TOS TOS = MDR N = OPC; if (N) goto T else goto F OPC = PC – 1; goto goto2 PC = PC + 1; PC = PC + 1; fetch goto Main1 Pagina 67 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IFEQ IFEQ offset estrae una parola dalla cima dello stack ed esegue una diramazione se ha valore zero ifeq1 ifeq2 ifeq3 ifeq4 T F F2 F3 MAR = SP = SP – 1; rd OPC = TOS TOS = MDR Z = OPC; if (Z) goto T else goto F OPC = PC – 1; goto goto2 PC = PC + 1; PC = PC + 1; fetch goto Main1 Pagina 68 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IF_ICMPEQ IF_ICMPEQ offset estrae le due parole dalla cima dello stack ed esegue una diramazione se sono uguali if_icmpeq1 if_icmpeq2 if_icmpeq3 if_icmpeq4 if_icmpeq5 if_icmpeq6 T F F2 F3 MAR = SP = SP – 1; rd MAR = SP = SP – 1 H = MDR; rd OPC = TOS TOS = MDR Z = OPC - H; if (Z) goto T else goto F OPC = PC – 1; goto goto2 PC = PC + 1; PC = PC + 1; fetch goto Main1 Pagina 69 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 INVOKEVIRTUAL Pagina 70 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 INVOKEVIRTUAL Invokevirtual disp - puntatore all'oggetto da chiamare (OBJREF) - inserimento sullo stack dei parametri del metodo - disp (16 bit) per indicare l'indirizzo dell'area dei metodi in cui si trova il metodo da invocare - i primi 4 byte del metodo contengono: - 1 intero 16 bit (numero di parametri del metodo) - 1 intero 16 bit (dimensione blocco variabili del metodo invocato) Pagina 71 Architettura degli Elaboratori invokevirtual1 invokevirtual2 invokevirtual3 invokevirtual4 invokevirtual5 invokevirtual6 invokevirtual7 invokevirtual8 invokevirtual9 invokevirtual10 invokevirtual11 invokevirtual12 invokevirtual13 invokevirtual14 invokevirtual15 invokevirtual16 invokevirtual17 invokevirtual18 invokevirtual19 invokevirtual20 invokevirtual21 invokevirtual22 06 – Livello di micro – architettura PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MAR = CPP + H; rd OPC = PC + 1 PC = MDR; fetch PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H PC = PC + 1; fetch TOS = SP – H TOS = MAR = TOS + 1 PC = PC + 1; fetch H = MBRU << 8 H = MBRU OR H MDR = SP + H + 1; wr MAR = SP = MDR MDR = OPC; wr S MAR = SP = SP + 1 MDR = LV; wr PC = PC + 1; fetch LV = TOS; goto Main1 Pagina 72 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IRETURN Pagina 73 Architettura degli Elaboratori 06 – Livello di micro – architettura Implementazione di IJVM con Mic-1 IRETURN ireturn1 ireturn2 ireturn3 ireturn4 ireturn5 ireturn6 ireturn7 ireturn8 MAR = SP = LV; rd LV = MAR = MDR; rd MAR = LV + 1 PC = MDR; rd; fetch MAR = SP LV = MDR MDR = TOS; wr; goto Main1 Pagina 74 Architettura degli Elaboratori 06 – Livello di micro – architettura Progettazione del livello di micro - architettura La progettazione di un livello di micro-architettura richiede lo studio di molti aspetti: - velocità - costi - affidabilità - facilità di utilizzo - consumi energetici - dimensioni fisiche Alcuni di questi aspetti sono conflittuali e pertanto la soluzione migliore richiede l'adozione di compromessi, per esempio scegliendo un punto di equilibrio tra velocità e costi Pagina 75 Architettura degli Elaboratori 06 – Livello di micro – architettura Progettazione del livello di micro - architettura Gli approcci che normalmente si possono seguire per incrementare la velocità di esecuzione sono: - ridurre la lunghezza del percorso dati - semplificare l'organizzazione per ottenere un ciclo di clock più breve - sovrapporre l'esecuzione di più istruzioni (pipelining) La conseguenza è, spesso, l'aggiunta di nuovi componenti. Con le conseguenze che: - lo spazio sul chip è limitato - il costo di un componente dipende dall'area occupata - i componenti più veloci occupano più spazio Pagina 76 Architettura degli Elaboratori 06 – Livello di micro – architettura Progettazione del livello di micro - architettura E' possibile, per esempio, lavorare sul numero delle linee degli indirizzi: - un aumento del numero delle linee comporta migliori prestazioni - l'impiego di un decoder per la riduzione del numero delle linee degli indirizzi comporta maggiori economie Pagina 77 Architettura degli Elaboratori 06 – Livello di micro – architettura Riduzione della lunghezza del percorso Sono possibili tre tecniche: - sovrapporre l'esecuzione di Main1 all'esecuzione di una delle ultime micro – istruzioni di ogni istruzione IJVM Si consideri per esempio l'istruzione POP Pagina 78 Architettura degli Elaboratori 06 – Livello di micro – architettura Riduzione della lunghezza del percorso - pop1 MAR = SP = SP – 1; rd pop2 pop3 TOS = MDR; goto Main1 Main1 PC = PC + 1; fetch; goto (MBR) Può diventare: - pop1 MAR = SP = SP – 1; rd Main1 PC = PC + 1; fetch; goto (MBR) pop3 TOS = MDR; goto Main1 Con la conseguente riduzione del numero di istruzioni da 4 a 3 (e con gli stessi rusultati finali!!!) Pagina 79 Architettura degli Elaboratori 06 – Livello di micro – architettura Riduzione della lunghezza del percorso Seconda tecnica: - utilizzare due bus di input (A e B) per la ALU, adottando un'architettura a 3 bus - si possono sommare due registri qualsiasi in un ciclo - Per esempio: iload1 iload2 iload3 iload4 iload5 Main1 H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 PC = PC + 1; fetch; goto (MBR) Pagina 80 Architettura degli Elaboratori 06 – Livello di micro – architettura Riduzione della lunghezza del percorso iload1 iload2 iload3 iload4 iload5 Main1 H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 PC = PC + 1; fetch; goto (MBR) Diventa: iload1 iload2 iload3 iload4 iload5 MAR = MBRU + LV; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR PC = PC + 1; fetch; goto (MBR) Pagina 81 Architettura degli Elaboratori 06 – Livello di micro – architettura Riduzione della lunghezza del percorso Entrambe le tecniche sono valide, ma un miglioramento delle prestazioni può essere ottenuto soltanto riprogettando la fase di fetch degli operandi - se un'istruzione contiene operandi, questi devono essere prelevati un byte per volta e assemblati prima del loro utilizzo - per prelevare un operando si impegna l'ALU per un ciclo soltanto per incrementare PC e assemblare l'offset - in Mic-1, gran parte del lavoro dell'ALU può essere eliminato mediante una struttura dedicata, IFU (Instruction Fetch Unit) che: - incrementa il PC (incrementa e NON somma) - preleva istruzioni e operandi dalla memoria Pagina 82 Architettura degli Elaboratori 06 – Livello di micro – architettura Instruction Fetch Unit Tramite l'IFU, il registro MBR a 8 bit viene sostituito da: - MBR1 a 8 bit - rende disponibile il byte successivo - preleva e memorizza il byte successivo quando viene letto il contenuto corrente - ha due interfacce con il bus B: MBR1 e MBR1U - MBR2 a 16 bit - svolge le stesse funzioni di MBR1 memorizzando i successivi 2 byte - presenta due interfacce con il bus B: MBR2 e MBR2U Pagina 83 Architettura degli Elaboratori 06 – Livello di micro – architettura Instruction Fetch Unit Pagina 84 Architettura degli Elaboratori 06 – Livello di micro – architettura Instruction Fetch Unit quando viene letto MBR1 sul bus B, lo shifter trasla a destra di 1 byte e carica MBR1 quando viene letto MBR2 sul bus B, lo shifter trasla a destra di 2 byte e carica MBR2 dopo lo shift, l'IFU inizia un nuovo ciclo di lettura per caricare i registri Pagina 85 Architettura degli Elaboratori 06 – Livello di micro – architettura Instruction Fetch Unit l'IFU ha un proprio registro IMAR per indirizzare la porzione di memoria da leggere IMAR e PC possiedono degli incrementatori, per eliminare l'uso dell'ALU l'ALU modifica il registro PC soltanto per le istruzioni INVOKEVIRTUAL e IRETURN, e per le diramazioni Pagina 86 Architettura degli Elaboratori 06 – Livello di micro – architettura Instruction Fetch Unit quando PC viene modificato dall'ALU, il nuovo valore viene copiato in IMAR il microprogramma non aggiorna più PC, quindi il compito viene delegato all'IFU quando vengono letti MBR1 o MBR2, PC viene incrementato dal proprio incrementatore PC contiene così l'indirizzo del primo byte non ancora utilizzato Pagina 87 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-2 Pagina 88 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-2 L'IFU permette di: - evitare Main1 risparmiare ALU l'incremento di PC per ridurre la lunghezza del percorso quando viene calcolato un offset a 16 bit Pagina 89 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-2 iload1 iload2 iload3 iload4 iload5 Main1 H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 PC = PC + 1; fetch; goto (MBR) Diventa quindi: iload1 iload2 iload3 MAR = LV + MBR1U; rd MAR = SP = SP + 1 TOS = MDR; wr; goto (MBR1) Pagina 90 Architettura degli Elaboratori 06 – Livello di micro – architettura Architettura a pipeline - Mic-2 può essere migliorata introducendo un livello di parallelismo nell'architettura - Il ciclo di clock del percorso dati è condizionato dal tempo necessario affinché i segnali si propaghino lungo il percorso - Il ciclo è composto da tre elementi: - il tempo per portare i registri selezionati sui bus A e B - il tempo di elaborazione (ALU + shifter) - il tempo di trasferimento dei risultati sui registri Pagina 91 Architettura degli Elaboratori 06 – Livello di micro – architettura Architettura a pipeline Se il percorso dati viene diviso in tre parti è possibile: - ridurre il ritardo massimo, quindi accelerare il clock utilizzare tutte le parti durante ogni ciclo (aumento della larghezza di banda del processore) Infatti: - durante i trasferimenti da/verso i registri l'ALU è inattiva dividendo il percorso in tre parti, è possibile utilizzare l'ALU durante ogni ciclo, triplicando la quantità di lavoro eseguito Pagina 92 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-3 oltre all'IFU sono presenti 3 latch (registri) i registri sono scritti a ogni ciclo il percorso dati viene diviso in tre parti che possono funzionare indipendentemente Pagina 93 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-3 Pagina 94 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-4 Pagina 95 Architettura degli Elaboratori 06 – Livello di micro – architettura Mic-4 Pagina 96