giacomo fiumara g [email protected]/teaching/ade/lezioni/micro.pdf · enb...
TRANSCRIPT
Introduzione
2 / 101
Introduzione
Il livello di micro-architettura implementa le funzioni del livellosovrastante ISA (Instruction Set Architecture)
La progettazione del livello di micro-architettura dipendepertanto dall'ISA che si vuole implementare (tenendo inconsiderazione costi e prestazioni)
Alcuni livelli ISA (in particolare le piattaforme RISC) hannoistruzioni semplici che possono essere eseguite in un solo ciclodi clock
Altri livelli ISA, come quello del Core i7, possono richiedere piùcicli per l'esecuzione di una singola istruzione
L'esecuzione di un'istruzione può richiedere (di norma)l'identi�cazione degli operandi in memoria, la loro lettura,l'esecuzione vera e propria, la memorizzazione dei risultati inmemoria
3 / 101
Introduzione
Il livello ISA è caratterizzato dall'assenza di uno schemagenerale applicabile a tutte le piattaforme
Pertanto è necessario trattare un esempio particolare
A tale scopo è stato scelto un sottoinsieme della Java VirtualMachine, in particolare quella preposta alla manipolazione deinumeri interi
Questo sottoinsieme prende il nome di IJVM (Integer JavaVirtual Machine)
4 / 101
Introduzione
La micro-architettura in esame conterrà un microprogramma ilcui compito consiste nell'eseguire le operazioni di fetch,decode ed execute delle operazioni IJVM
Il microprogramma presenta un insieme di variabili, chede�nisce lo stato del computer, che possono essere acceduteda tutte le funzioni: ogni funzione modi�ca almeno una diqueste variabili
Per esempio, il Program Counter (PC) fa parte dello stato:indica la locazione di memoria contenente la prossima funzione(istruzione ISA) da eseguire
5 / 101
Datapath
6 / 101
ALU
7 / 101
Shifter
8 / 101
Sommatore
9 / 101
Registro
10 / 101
Datapath
11 / 101
Datapath
Il datapath è quella parte della CPU che contiene la ALU, isuoi input e i suoi output
Il datapath dell'architettura in studio è abbastanza simile aquello utilizzato nella maggior parte delle architetture
Contiene alcuni registri a 32 bit
Alcuni di essi possono �inviare� i loro contenuti sul bus B, altriricevono dati dal bus C
I dati presenti sul bus C possono essere scritti su più registricontemporaneamente
12 / 101
Datapath
13 / 101
Datapath: segnali di controllo
Segnali di controllo della ALU
F0
F1
ENA
ENB
INVA
INC
Segnali di controllo delloshifter
SLL8
SRA1
14 / 101
Datapath
Input della ALU
Contenuto del registro H
Segnale proveniente dalregistro B
Incremento di SP:
Valore di SP sul bus B
Disattivare l'input sinistrodella ALU
Attivare il segnale INC
memorizzare il risultato inSP
15 / 101
Datapath: temporizzazione
16 / 101
Datapath: temporizzazione
Impostazione dei segnali per guidare il datapath (∆w)
Impostazione del registro H e del bus B (∆x)
Esecuzione delle operazioni nella ALU e nello shifter (∆y)
Propagazione dei segnali dallo shifter ai registri (∆z)
17 / 101
Datapath: operazioni della memoria
Porte di comunicazione con lamemoria
Porta a 32 bit (controllatadai registri MAR e MDR)
Porta a 8 bit (controllatadal registro PC che leggeil byte meno signi�cativodi MBR)
18 / 101
Datapath: operazioni della memoria
Registri MAR/MDR:lettura/scrittura parole didati
Registri PC/MBR: letturaprogramma eseguibile
Il registro MBR può contenereistruzioni o dati (da estendereda 8 a 32 bit, con segno omeno)
19 / 101
Datapath: operazioni della memoria
Il registro MAR contieneindirizzi espressi in parole(i valori 0, 1, 2, . . . siriferiscono a paroleconsecutive)
il registro PC contieneindirizzi espressi in byte (ivalori 0, 1, 2, . . . siriferiscono a byteconsecutivi)
20 / 101
Datapath: operazioni della memoria
� Assegnare il valore 2 alregistro MAR e avviare unalettura in memoria signi�caleggere i byte 8�11 (la parola2) e scriverli sul registro MDR
� Assegnare il valore 2 alregistro PC e avviare unalettura in memoria signi�caleggere il byte 2 dalla memoriae scriverlo sugli 8 bit menosigni�cativi di MBR
21 / 101
Datapath: operazioni della memoria
� Questa di�erenza dicomportamento è dovuta al fattoche MAR e PC accedono a parti(semanticamente) di�erenti dellamemoria
� La combinazione MAR/MDRviene usata per leggere/scrivereparole di dati del livello ISA
� La combinazione PC/MBRviene usata per leggere ilprogramma eseguibile al livelloISA, che consiste di un �usso dibyte
� Tutti gli altri registri che
contengono indirizzi si
comportano come MAR
22 / 101
Datapath: operazioni della memoria
� Nelle implementazioni reali esiste un solo tipo di memoria(orientata al byte)
� Per consentire al registro MAR di contare in parole si opera comein �gura:
Si scartano i due bit più signi�cativi di MAR
Si e�ettua uno shift verso sinistra di due bit
Si inseriscono due zeri nei bit meno signi�cativi di MAR
23 / 101
Datapath: operazioni della memoria
I dati letti dalla memoria mediante la port di memoria a 8 bitvengono scritti sul registro MBR
Il contenuto di MBR può essere copiato sul registro B consegno o senza segno
Con segno: gli 8 bit di MBR possono essere considerati comeun numero compreso tra -128 e +127. Il segno (bit piùsigni�cativo tra gli 8 di MBR) viene esteso duplicandolo 24volte
Senza segno: i 32 bit scritti sul bus B si compongono degli 8bit letti da MBR (meno signi�cativi) e di zeri nei restanti bitpiù signi�cativi
La scelta se convertire gli 8 bit di MBR in un valore a 32 bitcon o senza segno viene determinato da quale dei due segnalidi controllo viene settato
24 / 101
Microistruzioni
� Il controllo del datapathrichiede 29 segnali:
9 per controllare la scritturadei dati dal bus C ai registri
9 per controllare la scritturadei dati sul bus B dai registri
8 per il controllo dellefunzioni di ALU e shifter
2 per indicare gli accessi allamemoria (R/W) mediante iregistri MAR/MDR
1 per indicare il fetch dallamemoria mediante i registriPC/MBR
25 / 101
Microistruzioni
� Il valore di questi 29 segnali di controllo speci�ca le operazioni diun ciclo del datapath
� Un ciclo consiste nel:
Copiare i valori dai registri sul bus B
Propagare i segnali lungo la ALU e lo shifter
Dirigerli sul bus C
Scrivere i risultati sul/i registro/i appropriato/i
26 / 101
Microistruzioni
� Inoltre, se viene asserito un segnale di lettura dati dalla memoria,l'operazione di lettura viene avviata soltanto al termine del ciclo deldatapath, quando l'indirizzo è stato caricato sul registro MAR
� I dati della memoria sono disponibili al termine del ciclosuccessivo nel registro MBR o MDR e possono essere usati nelciclo ancora successivo
� Questo signi�ca che una lettura dalla memoria avviata al terminedel ciclo k produce dati che saranno disponibili soltanto nel ciclok + 2
27 / 101
Microistruzioni
28 / 101
Microistruzioni
Addr Contiene l'indirizzo di una potenziale prossimaistruzione
JAM Modalità di selezione della prossima istruzioneALU Selezione della funzione della ALU e dello shifterC Selezione dei registri sui quali copiare il contenuto del
bus CMem Selezione della funzione della memoriaB Selezione del registro dal quale scrivere sul bus B
29 / 101
Mic-1
30 / 101
Controllo delle microistruzioni
� Quali segnali di controllo debbano essere abilitati ad ogni cicloviene stabilito da un sequencer
� Si tratta di un dispositivo incaricato di far avanzare passo-passo lasequenza di istruzioni per l'esecuzione di ogni singola istruzione ISA
� Il sequencer deve produrre due tipi di informazione ad ogni ciclo:
Lo stato di ogni segnale di controllo nel sistema
L'indirizzo della prossima microistruzione da eseguire
31 / 101
Memoria di controllo
� La memoria di controllo contiene l'intero microprogramma
� Si tratta di un dispositivo che contiene 512 parole, ognunaconsistenti di una microistruzione di 36 bit, aventi la struttura:
32 / 101
Memoria di controllo
� La memoria di controllo ha bisogno di un registro di indirizzo edi un registro dei dati
MPC (MicroProgram Counter), anche se non si tratta di uncontatore perché le microistruzioni non possono esseredisposte in modo sequenziale
MIR (MicroInstruction Register), che contiene lamicroistruzione corrente i cui bit determinano i segnali dicontrollo che pilotano il datapath
33 / 101
Mic-1
34 / 101
Memoria di controlloCiclo delle operazioni
All'inizio di ogni ciclo di clock (sul fronte di discesa), MIRviene caricato dalla parola nella memoria di controllo puntatada MPC (tempo ∆w)Una volta che la microistruzione viene caricata in MIR, i varisegnali si propagano lungo il datapath: il contenuto di unregistro viene copiato sul bus B, la ALU sa quale operazionedeve essere eseguita
35 / 101
Memoria di controlloCiclo delle operazioni /2
Il tempo necessario ad eseguire queste operazioni è indicato da∆x ; dopo un tempo ∆w + ∆x gli input della ALU sono stabili
Dopo un intervallo ∆y sono stabili gli output della ALU, delloshifter e dei valori di N e Z
36 / 101
Memoria di controlloCiclo delle operazioni /3
I valori di N e Z vengono memorizzati in due memorie ad unbit (una coppia di �ip-�op)
Dopo un intervallo ∆z l'output dello shifter raggiunge i registrilungo il bus C
37 / 101
Memoria di controlloCiclo delle operazioni /4
Parallelamente alla guida del datapath, il microprogrammadeve determinare la microistruzione successiva da eseguire (chenon è necessariamente quella che segue la microistruzionecorrente nella memoria di controllo)
Il calcolo dell'indirizzo della microistruzione successiva avvienedopo che MIR è stato caricato ed è stabile
Dapprima il campo NEXT_ADDRESS viene copiato in MPC
Successivamente viene esaminato il campo JAM: se contiene ilvalore 0 non è richiesto alcun intervento perché lamicroistruzione successiva sarà quella che segue lamicroistruzione corrente
38 / 101
Memoria di controlloCiclo delle operazioni /5
Se invece uno o più dei bit di JAM sono settati a 1 si possonoveri�care diverse azioni
Se JAMN è settato, viene calcolato l'OR logico con il �ip-�opN
Analogamente, se JAMZ è settato, viene calcolato l'OR logicocon il �ip-�op Z
Se risultano settati entrambi, si calcola l'OR rispetto adentrambi
39 / 101
Memoria di controlloCiclo delle operazioni /6
40 / 101
Memoria di controlloCiclo delle operazioni /7
F = (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS
[8]
� MPC può assumere uno solo dei due possibili valori:NEXT_ADDRESS
NEXT_ADDRESS con il bit più signi�cativo in OR con 1
41 / 101
Memoria di controlloCiclo delle operazioni /8
Quando tutti i bit di JAM valgono zero, l'indirizzo dellamicroistruzione successiva è semplicemente il numero a 9 bitnel campo NEXT_ADDRESS
Quando invece JAMN o JAMZ valgono 1, ci sono duepotenziali microistruzioni successive: NEXT_ADDRESSoppure NEXT_ADDRESS in OR con 0x100
42 / 101
Memoria di controlloCiclo delle operazioni /9
Il terzo bit del campo JAM è JMPC
Se è settato, gli 8 bit di MBR vengono posti in OR (bit a bit)con gli 8 bit meno signi�cativi di NEXT_ADDRESS prelevatidalla microistruzione corrente; il risultato viene inviato a MPC
Il dispositivo indicato con �O� e�ettua un OR di MBR conNEXT_ADDRESS se JMPC vale 1, ma inviaNEXT_ADDRESS a MPC se JMPC vale zero
Questo permette di implementare una diramazione,speci�cando uno dei 256 possibili indirizzi
43 / 101
Ciclo delle operazioni /10
44 / 101
Stack
Praticamente tutti i linguaggi di programmazione supportano ilconcetto di procedura (con un insieme di variabili locali)
Queste variabili possono essere accedute soltanto dallaprocedura in cui sono de�nite e cessano di esistere al terminedella procedura
La gestione di queste variabili viene e�ettuata medianteun'area di memoria chiamata stack riservata alle variabili
Vi si accede mediante un registro chiamato LV che punta allabase delle variabili locali della procedura corrente, mentre ilregistro SP punta alla parola in cima allo stack (in e�etticontiene l'indirizzo di memoria della variabile il cui contenuto èstato copiato nello stack)
45 / 101
Stack /2
46 / 101
Stack /3
In Figura (a) viene invocata una procedura, chiamata A, cheistanzia tre variabili locali, a1, a2 e a3
Successivamente (Figura (b)), all'interno della procedura A èpresente l'invocazione alla procedura B, che istanzia quattrovariabili locali, b1, b2, b3 e b4
47 / 101
Stack /4
In Figura (c), all'interno della procedura B viene invocata laprocedura C che provvede ad istanziare due variabili locali, c1 ec2
In�ne (Figura (d)), le procedure C e B hanno completato laloro esecuzione, le loro variabili locali sono state distrutte eall'interno della procedura A è stata invocata una nuovaprocedura, chiamata D, che ha provveduto ad istanziare levariabili locali d1, d2, d3, d4 e d5
48 / 101
Stack /5Stack degli operandi
Oltre ad ospitare le variabili locali, lo stack contiene glioperandi delle espressioni aritmetiche
Si consideri ad esempio l'operazione a1 = a2 + a3
49 / 101
Modello di memoria
� La memoria della macchina IJVM (4 GB) può essere consideratacome un array di 4.294.967.296 byte oppure come un array di1.073.741.824 parole di 4 byte
� Al livello ISA, la JVM non rende disponibile alcun indirizzo dimemoria assoluto, soltanto degli indirizzi impliciti che forniscono ilpunto di partenza per dei puntatori: è il caso, per esempio deipuntatori PC (Program Counter), il registro che contiene l'indirizzodell'istruzione successiva da eseguire
50 / 101
Modello di memoria /2
� Sono de�nite le seguenti aree di memoria:
Constant pool (porzione costante): contiene costanti, stringhe,puntatori e non è modi�cabile (vi si può accedere soltanto inlettura)
Local variable frame (blocco delle variabili locali): contiene levariabili locali allocate al momento dell'invocazione di unaprocedura. Contiene anche i parametri con cui il metodo èstato invocato
Operand stack (stack degli operandi)
Method area (area dei metodi): contiene il programma. Ilregistro PC contiene l'indirizzo dell'istruzione successiva daprelevare
51 / 101
Modello di memoria /3
52 / 101
Insieme delle istruzioni IJVM
53 / 101
Insieme delle istruzioni IJVM /2Esempio applicativo
54 / 101
Insieme delle istruzioni IJVM /3
� Inserimento nello stack di una parola proveniente da:
porzione costante di memoria (LDC_W)
blocco variabili locali (ILOAD)
istruzione stessa (BIPUSH)
� Inserimento nel blocco delle variabili locali di una parolaproveniente da:
stack (ISTORE)
55 / 101
Insieme delle istruzioni IJVM /4
� Operazioni logiche e aritmetiche:
IADD, ISUB
IAND, IOR
sugli operandi che si trovano in cima allo stack (il risultato vieneposto in cima allo stack, al posto della penultima parola)
� Operazioni per i salti:
GOTO (salto incondizionato)
IFEQ, IFLT, IF_ICMPEQ
modi�cano il valore di PC in base al valore di o�set
56 / 101
Insieme delle istruzioni IJVM /5
� Operazioni sugli operandi in cima allo stack:
scambio di due parole (SWAP)
duplicazione di una parola (DUP)
rimozione di una parola (POP)
� Invocazione di un altro metodo:
INVOKEVIRTUAL [o�set]
� Terminazione di un metodo:
IRETURN
57 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura
La procedura chiamante carica sulla stack un riferimento allaprocedura chiamata (OBJREF)Successivamente, carica i parametri della proceduraA questo punto viene eseguita INVOKEVIRTUAL
58 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura /2
INVOKEVIRTUAL richiede un argomento, disp (displacement)che indica la posizione nel constant pool che contienel'indirizzo di inizio nell'area dei metodi per la procedurachiamata
In e�etti l'indirizzo iniziale nell'area dei metodi non coincidecon l'indirizzo del primo opcode della procedura
I primi due byte (interpretati come un intero a 16 bit) indicanoil numero di parametri della procedura
Altri due byte indicano la dimensione dell'area delle variabililocali della procedura chiamata (necessaria per ildimensionamento dello stack della procedura chiamata)
Il quinto byte dell'area dei metodi contiene il primo opcode daeseguire
59 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura /3
60 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura /4
Due informazioni fondamentali per il corretto funzionamentodi una procedura (chiamante o chiamata) sono contenute neiregistri PC e LV
E' necessario salvare lo stato di questi registri allo scopo diripristinare l'esecuzione della procedura chiamante (al terminedella procedura chiamata) e avere i corretti riferimenti nellostack
I primi quattro byte prelevati dall'area dei metodi dellaprocedura chiamata servono a calcolare la prima parola dimemoria libera dello stack può essere usata
A partire dalla prima parola libera dello stack vengono salvati icontenuti dei registri PC e LV della procedura chiamante (inquest'ordine)
61 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura /5
La parola precedentemente utilizzata per allocare OBJREFviene utilizzata per salvare un puntatore (link) alla parola checontiene il PC della procedura chiamante, e il suo indirizzoviene salvato nel registro LVA partire da adesso indica l'indirizzo iniziale dello stack dellaprocedura corrente 62 / 101
Insieme delle istruzioni IJVMInvocazione di una procedura /6
Il valore di SP viene aggiornato alla parola dello stack checontiene il registro LV della procedura chiamante
Il valore di PC viene aggiornato al quinto byte dell'area deimetodi (prima vera istruzione della procedura chiamata)
63 / 101
Insieme delle istruzioni IJVMRitorno da una procedura
64 / 101
Insieme delle istruzioni IJVMRitorno da una procedura /2
L'istruzione IRETURN inverte le operazioni diINVOKEVIRTUALDealloca lo spazio utilizzato dalla procedura in rientroRipristina lo stack allo stato precedente l'invocazione dellaprocedura
65 / 101
Insieme delle istruzioni IJVMRitorno da una procedura /3
IRETURN deve ripristinare i puntatori PC e LV al loro valoreoriginario
Questo viene e�ettuato accedendo al puntatore link
Il valore di ritorno (solitamente il risultato del calcolo eseguitonella procedura) viene copiato dalla cima dello stack alpuntatore link
Il registro SP viene aggiornato a puntare a questa locazione
Una volta ripristinato il valore originario di PC, l'esecuzioneprosegue con la prima istruzione successiva aINVOKEVIRTUAL
66 / 101
Microistruzioni
Dopo la descrizione della microarchitettura e dellamacroarchitettura è la volta dell'implementazione
Ovvero, bisogna descrivere il programma che viene eseguitosulla microarchitettura e che interpreta la macroarchitettura
Le istruzioni potrebbero essere scritte in binario, 36 bit perparola
E' decisamente vantaggioso introdurre una notazione sintetica
In altre parole: l'elenco dei segnali che devono essere attivatiad ogni ciclo di clock viene sostituito con una istruzionesintetica che illustra l'operazione in corso
67 / 101
Microistruzioni
Le microistruzioni vengono descritte mediante un linguaggio di�alto� livello, MAL (Micro Assembly Language), seguendo leconvenzioni:
� Una riga di codice indica tutte le attività che hanno luogodurante 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 ad opera del bus C
� L'operazione da eseguire viene indicata con il simbolo diassegnazione (=)
68 / 101
Microistruzioni
Per esempio, in un ciclo si desidera incrementare il valore di SP einiziare una lettura
� L'istruzione corrispondente può essere scritta come:
SP = SP + 1; rd
69 / 101
Microistruzioni
Operazioni fondamentali di MAL:
Assegnazione
Inizio lettura/scrittura da/in memoria
Istruzioni di salto
70 / 101
Microistruzioni
71 / 101
Microistruzioni
SOURCE può essere unoqualsiasi dei registri MDR, PC,MBR, MBRU, SP, LV, CPP,TOS, OPC
DEST può essere uno qualsiasidei registri MAR, MDR, PC,SP, LV, CPP, OPC, H
72 / 101
MicroistruzioniOperazioni tipiche
MDR = SP (copia del contenuto di SP in MDR)
MDR = H + SP (addizione del contenuto di H e SP, scritturadella somma in MDR)
� Sono lecite soltanto le operazioni che possono essere realizzatetramite il percorso dati
� MDR = SP + MDR non è valida perché uno dei due operandideve essere contenuto nel registro H
73 / 101
MicroistruzioniOperazioni tipiche
H = H � MDR non è valida perché H può contenere soltantoil sottraendo
H = MDR � H è valida
� Il risultato di un'operazione logica o aritmetica può essereassegnato a più registri:
SP = MDR = SP + 1
74 / 101
MicroistruzioniOperazioni tipiche
L'inizio di un'operazione di lettura/scrittura si indica conrd/wr
Il prelievo di un byte si indica con fetch
Le due operazioni possono avveenire in modo simultaneo, malo stesso registro non può contenere dati provenienti dallamemoria e dal datapath nello stesso ciclo
Assegnazioni e operazioni in memoria possono svolgersidurante lo stesso ciclo, basta indicarle sulla stessa linea dicodice (per esempio, MAR = SP; rd)
Ogni istruzione contiene esplicitamente l'indirizzodell'istruzione seguente: di norma istruzioni consecutivevengono eseguite in sequenza (tranne che per le diramazioni)
75 / 101
MicroistruzioniOperazioni tipiche
I salti incondizionati vengono indicati con la notazione gotolabel
I salti condizionati richiedono invece una notazione di�erenteperché dipendono dallo stato dei bit Z e/o N:
se Z = 1, l'output della ALU è zerose N = 1, l'output della ALU è negativo
I salti condizionati vengono e�ettuati se la parola in cima allostack è negativa oppure nulla. La veri�ca di ciò viene fattafacendo passare la parola dalla ALU: se negativa il bit Nrisulterà settato, così come verrà settato il bit Z se la parola ènulla
L'istruzione che veri�ca se una parola è zero è: Z = TOS
76 / 101
MicroistruzioniOperazioni tipiche
� Un salto condizionato al valore di un generico registro R vienee�ettuato come:
Z = R; if (Z) goto label1 else goto label2
N = R, if (N) goto label1 else goto label2
Il risultato consiste nell'impostazione dei bit JAMZ oppure JAMN
77 / 101
Microistruzioni
78 / 101
Implementazione di IJVM con Mic-1IADD
� 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
79 / 101
Implementazione di IJVM con Mic-1ISUB
� Sostituisce le due parole in cima allo stack con la loro di�erenza
Main1 PC = PC + 1; fetch; goto (MBR)
isub1 MAR = SP = SP - 1; rd
isub2 H = TOS
isub3 MDR = TOS = MDR - H; wr; goto Main1
80 / 101
Implementazione di IJVM con Mic-1IAND
� 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
81 / 101
Implementazione di IJVM con Mic-1IOR
� Sostituisce le due parole in cima allo stack con il loro OR logico
Main1 PC = PC + 1; fetch; goto (MBR)
ior1 MAR = SP = SP - 1; rd
ior2 H = TOS
ior3 MDR = TOS = MDR or H; wr; goto Main1
82 / 101
Implementazione di IJVM con Mic-1DUP
� Duplica la parola in cima allo stack
Main1 PC = PC + 1; fetch; goto (MBR)
idup1 MAR = SP = SP + 1
idup2 MDR = TOS; wr; goto Main1
83 / 101
Implementazione di IJVM con Mic-1BIPUSH
� BIPUSH byte scrive byte in cima allo stack
Main1 PC = PC + 1; fetch; goto (MBR)
bipush1 SP = MAR = SP + 1
bipush2 PC = PC + 1; fetch
bipush3 MDR = TOS = MBR; wr; goto Main1
84 / 101
Implementazione di IJVM con Mic-1ILOAD
� ILOAD o�set scrive in cima allo stack una variabile localememorizzata in o�set
Main1 PC = PC + 1; fetch; goto (MBR)
iload1 H = LV
iload2 MAR = MBRU + H; rd
iload3 MAR = SP = SP + 1
iload4 PC = PC + 1; fetch; wr
iload5 TOS = MDR; goto Main1
85 / 101
Implementazione di IJVM con Mic-1ISTORE
� ISTORE o�set rimuove dalla cima dello stack una parola e lamemorizza nella locazione di memoria assegnata alla variabile localeindicata con o�set
Main1 PC = PC + 1; fetch; goto (MBR)
istore1 H = LV
istore2 MAR = MBRU + H
istore3 MDR = TOS; wr
istore4 SP = MAR = SP - 1; rd
istore5 PC = PC + 1; fetch
istore6 TOS = MDR; goto Main1
86 / 101
Implementazione di IJVM con Mic-1POP
� POP rimuove la parola in cima allo stack
Main1 PC = PC + 1; fetch; goto (MBR)
pop1 MAR = SP = SP - 1; rd
pop2
pop3 TOS = MDR; goto Main1
87 / 101
Implementazione di IJVM con Mic-1SWAP
� SWAP scambia tra loro le due parole in cima allo stack
Main1 PC = PC + 1; fetch; goto (MBR)
swap1 MAR = SP - 1; rd
swap2 MAR = SP
swap3 H = MDR; wr
swap4 MDR = TOS
swap5 MAR = SP - 1; wr
swap6 TOS = H; goto Main1
88 / 101
Implementazione di IJVM con Mic-1IINC
� IINC varnum const incrementa di una quantità const il valoredella variabile di numero varnum
Main1 PC = PC + 1; fetch; goto (MBR)
iinc1 H = LV
iinc2 MAR = MBRU + H; rd
iinc3 PC = PC + 1; fetch
iinc4 H = MDR
iinc5 PC = PC + 1; fetch
iinc6 MDR = MBR + H; wr, goto Main1
89 / 101
Implementazione di IJVM con Mic-1GOTO
� GOTO o�set e�ettua un salto incondizionato. Si noti che o�set èuna parola di 16 bit che viene prelevata in due operazioni successivedi fetch
Main1 PC = PC + 1; fetch; goto (MBR)
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
90 / 101
Implementazione di IJVM con Mic-1GOTO
91 / 101
Implementazione di IJVM con Mic-1IFLT
� IFLT o�set e�ettua un salto a o�set se e solo se la parola in cimaallo stack risulta minore di zero
Main1 PC = PC + 1; fetch; goto (MBR)
iflt1 MAR = SP = SP - 1; rd
iflt2 OPC = TOS
iflt3 TOS = MDR
iflt4 N = OPC; if (N) goto T; else goto F
T OPC = PC - 1; goto goto2
F PC = PC + 1
F1 PC = PC + 1; fetch
F2 goto Main1
92 / 101
Implementazione di IJVM con Mic-1IFEQ
� IFEQ o�set e�ettua un salto a o�set se e solo se la parola in cimaallo stack risulta uguale a zero
Main1 PC = PC + 1; fetch; goto (MBR)
ifeq1 MAR = SP = SP - 1; rd
ifeq2 OPC = TOS
ifeq3 TOS = MDR
ifeq4 Z = OPC; if (Z) goto T; else goto F
T OPC = PC - 1; goto goto2
F PC = PC + 1
F1 PC = PC + 1; fetch
F2 goto Main1
93 / 101
Implementazione di IJVM con Mic-1IF_ICMPEQ
� IF_ICMPEQ o�set e�ettua un salto a o�set se e solo se le dueparole in cima allo stack risultano uguali
Main1 PC = PC + 1; fetch; goto (MBR)
if_icmpeq1 MAR = SP = SP - 1; rd
if_icmpeq2 MAR = SP = SP - 1
if_icmpeq3 H = MDR; rd
if_icmpeq4 OPC = TOS
if_icmpeq5 TOS = MDR
if_icmpeq6 Z = OPC - H; if (Z) goto T; else
goto F
T OPC = PC - 1; goto goto2
F PC = PC + 1
F1 PC = PC + 1; fetch
F2 goto Main194 / 101
Progettazione del livello di microarchitettura /1
La progettazione di un livello di microarchitettura richiede lo studiodi molti aspetti:
Velocità
Costi
A�dabilità
Facilità di utilizzo
Consumi energetici
Dimensioni �siche
Alcuni di questi aspetti sono con�ittuali fra loro. La soluzionemigliore richiede pertanto l'adozione di soluzioni di compromesso,per esempio scegliendo un punto di equilibrio tra velocità e costi
95 / 101
Progettazione del livello di microarchitettura /2
L'incremento della velocità di esecuzione può essere raggiuntomediante varie soluzioni:
Riduzione il numero di cicli di clock necessari per l'esecuzionedi un'istruzione
Sempli�cazione dell'organizzazione per ottenere un ciclo diclock più breve
Sovrapposizione dell'esecuzione di più istruzioni (pipelining)
96 / 101
Progettazione del livello di microarchitettura /3
� Il numero di cicli di clock necessari per l'esecuzione di un insiemedi operazioni è noto come path length e può essere ridottomediante l'impiego di hardware specializzato
� Una possibilità consiste, per esempio, nell'adozione di unincrementatore (tecnicamente un sommatore con un operando �ssoa 1) che opera su PC, in modo da evitare che la ALU debbaprovvedere all'incremento di PC
� Il costo dovuto all'adozione di un nuovo sommatore non ripagaperò in termini di riduzione dei cicli di clock, in quanto in molteistruzioni insieme all'incremento di PC vengono eseguite operazionidi lettura
97 / 101
Progettazione del livello di microarchitettura /4
� La riduzione dei cicli necessari per il fetch delle istruzioni richiedela sovrapposizione dell'esecuzione di più istruzioni
� La separazione dei circuiti predisposti al fetch delle istruzioni(porta verso la memoria e registri PC/MBR) è molto più e�cace sequest'unità viene resa indipendente dal datapath principale
� In questo modo il fetch del prossimo opcode (oppuredell'operando) può essere eseguito separatamente dal resto dellemicroistruzioni, eventualmente in modo asincrono rispetto al restodella CPU. In questo modo potrebbe essere possibile eseguire ilfetch di più operazioni in anticipo alla loro esecuzione
98 / 101
Progettazione del livello di microarchitettura /5
� Una delle fasi più dispendiosa in molte istruzioni consiste adesempio nel fetch di un o�set a 16 bit, nella sua estensione e nellamemorizzazione nel registro H
� Una possibile soluzione consiste nell'aumentare la dimensionedella porta della memoria per portarla a 16 bit. Ma questo nonrisolve i problemi, in quanto la memoria è composta di parole di 32bit
� La soluzione più e�cace resta in conclusione la sovrapposizionedell'esecuzione delle istruzioni, che può consentire aumentisigni�cativi della velocità
99 / 101
Progettazione del livello di microarchitettura /7Riduzione della lunghezza del percorso di esecuzione
� In Mic-1 il ciclo principale consiste in una microistruzione daeseguire all'inizio di ogni istruzione IJVM. In alcuni casi è possibilesovrapporla all'istruzione precedente
� Infatti, quando Main1 viene eseguito il codice operativo dainterpretare è già presente nel registro MBR (prelevato dalprecedente ciclo principale oppure durante l'esecuzionedell'istruzione precedente)
� In alcuni casi è possibile ridurre la microistruzione Main1 puòessere inserita nelle microistruzioni precedenti poiché alcuneistruzioni non sono completamente utilizzate
100 / 101
Progettazione del livello di microarchitettura /8Riduzione della lunghezza del percorso di esecuzione
Versione originale
pop1 MAR = SP = SP - 1; rd
pop2
pop3 TOS = MDR; goto Main1
Main1 PC = PC + 1; fetch; goto (MBR)
Versione ottimizata
pop1 MAR = SP = SP - 1; rd
Main1.pop PC = PC + 1; fetch
pop3 TOS = MDR; goto (MBR)
101 / 101