Mic-1
Microarchitecture Dal Tanenbaum
Implementazione hardware di un interprete del linguaggio ISA IJVM
Composto da:
- Data Path
- Control Unit
Data Path
temporizzazione
Input NOR Not(Input)
- Input NOR InRitardato
- il
ritardointrodotto diventa l'intervallo altodel Clock
-
rd/wr/fetch
richiesta di lettura di memoria nel ciclo k –> ricevuta dei dati al ciclo k+2
Control Unit
Control Store
512
2^9 parole da 36 bit
NBMPC e MIR sono logicamente divisi dalData Path- fanno parte della
Control Unit
- fanno parte della
MIR
Micro Instruction Register
-
36 bit
definiscono le configurazioni della ALU
Addr JAM ALU C Mem B / 9 3 8 9 3 4 bit -
Address
- 0x100
-
JAM - controlla la Highbit Network
-
000
-
goto(Addr)
implicito tra ogni microistruzione, sottointeso in MAL
-
-
JMPC - salto incondizionato
- Ogni
opcodee' l’indirizzo della sua prima microistruzione nel suo microprogramma - Questo semplifica molto l’architettura
- L’unica connessione hardware da MBR e' verso MPC
- JMPC implementa il goto(MBR), usato nella fase di fetch nel Main1
- Ogni
-
JAMZ/JAMN - salto condizionato
Il bit Addr[8], piu' significativo, passa attraverso la la High-bit network
- 000
- passa senza cambiamenti
- 010/001
- high-bit utilizza Z/N
- (JAMZ AND Z)OR(AMN AND N)OR(Addr[8])
- un OR a 3 ingressi e 2 AND 5 IN, 1 OUT
- (JAMZ AND Z)OR(AMN AND N)OR(Addr[8])
- high-bit utilizza Z/N
- La
Highbit Networkdecide il bit alto di MPC- es. JAMZ=1, JAMN=0, Addr[8]=0 Highbit = Z <==> 1 se cio' che e' risultato dalla ALU = 0 quindi MPC = Addr O Addr+0x100 +256
- In questo modo non si usano 2 Registri per i salti (Addr1 e Addr2)
- inefficiente, la maggior parte delle volte il secondo indirizzo non sarebbe usato
- quindi usiamo il formato:
- X e X+k
- utilizzando dei semplici segnali di controllo
- X e X+k
- 000
-
-
-
SLL8
shift sinistra logico
- utilizzato per la consecuzione di 2 Byte
-
SRA1
shift destra aritmetico
- moltiplicazione per 2
-
ALU
a 32 bit
- f0
- f1
- EnA
- EnB
- InvA
- Inc
-
-
Controllo del Bus C
- segnali indipendenti
- controllano individualmente i 9 registri scritti dal bus C
- tutti tranne
MBR
- tutti tranne
-
Memoria
- rd
- wr
- riguardanti
MAReMDR
- riguardanti
- fetch
- riguardante
PCeMBR
- riguardante
-
Controllo del Bus B
- controlla un decoder a 4 bit, 2^4 uscite
- utilizziamo 9 delle 16 possibili uscite
- le uscite in piu' ci permettono una decima configurazione che sara' il segnale per la selezione di nessun registro
- tutti tranne
MAR - ho due configurazioni per MBR:
- signed -
MBR - unsigned -
MBRU(in MAL)
- signed -
- al piu' un registro e' attivato e scritto sul bus B
- le uscite dei registri sono in OR logico tra loro
-
vedi 8-bit Memory
-
implementato con:
Wired OR Connection- usando diodi e la terra, l’intersezione dei bit In rappresenta il valore logico dell’Out
-
- utilizziamo 9 delle 16 possibili uscite
- controlla un decoder a 4 bit, 2^4 uscite
-
MPC
-
OR
tra le entrate del registro (escluso highbit)
- Addr
- MBR
–> controllo: JMPC
- JMPC=1 Addr OR MRB ~ dove Addr=0x000/0x100
-
goto(Addr)
JMPC = 0 = JAMZ = JAMN
-
goto(MBR OR Addr)
JMPC = 1
NBil bit piu' significativo di Addr sara' comunque indipendentemente deciso dal Highbit Network
-
salti condizionati
~ if(N) goto(Addr+0x100) else goto(Addr)
~ if(Z) goto(Addr+0x100) else goto(Addr)
Registri virtuali
-
MPC
effettivamente un registro vero e proprio, come PC o LV…
- sono flip-flop (9 nel caso specifico)
- infatti per motivi di temporizzazione MPC deve essere caricato DOPO
il
fronte ascendentedel ciclo di clock, perche' ha bisogno di tutti i registri caricati alla fine del ciclo di datapath- viene impostato nella finestra alta
- sara' cosi' pronto per impostare il MIR durante il
fronte discendentesubito successivo
- sara' cosi' pronto per impostare il MIR durante il
- viene impostato nella finestra alta
-
MIR
non e' un registo, piuttosto una astrazione per motivi didattici
- e' semplicemeente l’uscita della memoria ROM Control Store
Micro Assembly Language
MAL
un linguaggio mnemonico che permette una microprogrammazione che sia
piu' semplice per un umano
configurazioni del Data Path
SOURCE{…}
DEST{…}
<<
>>
Z=TOS if(Z)
- T
- F
N=TOS if(N)
- T
- F
goto(MBR)
Limiti
Approcci per migliorare la velocita' di esecuzione
sempre con il riferimento dell'equilibrio costo/beneficio
- limiti
fisici- tempo di transizione tra livelli logici
- limite di velocita' della propagazione dei segnali
- rallentamento dovuto ai transistor nei circuiti implementati
Ridurre il numero di cicli di Clock necessari per un’istruzione
Fusione del ciclo di esecuzionedell’interprete (goto Main1)- introdurre il ciclo dell’interprete all’interno dei ogni microprogramma
pop2e' un ciclo di attesa- qui possiamo fondere un
Main1.pop
- qui possiamo fondere un
- questo non e' possibile con molte miscroistruzioni
- introdurre il ciclo dell’interprete all’interno dei ogni microprogramma
- Cambiare il DataPath
- H unico ingresso A della ALU
- rallentamento nel dover sempre inserire un registro in H per eseguire algerbra
- introdurre un
terzo Bus A- DataPath Mic-2
- permette operazioni piu' flessibili al prezzo di piu' del doppio della complessita'
- H unico ingresso A della ALU
- Introduzione di una Instruction Fetch Unit aka IFU
- INC sempre dello stesso registro PC
Pre-Fetching
- un incrementatore dedicato al PC
- 16 bit per la porta della memoria di lettura di offset a 2 byte
Semplificare l’organizzazione
rendendo il ciclo di clock piu' breve
Decoderper il bus B- la scrittura su B avviene molto spesso
- diviene un collo di bottiglia
Risolvibile estendendo il campo B in MIR da 4 bit a 9 bit
Sovrapporre l’esecuzione delle istruzioni
-
Pipeliningspezzare microistruzioni in sottocicli tra loro paralelizzabili
semplificando il ciclo fetch-decode-execute
- sovrapporre l’esecuzione delle istruzioni
-
il datapath mic-2 e' strettamente sequenziale
3 operazioni (sottocicli) che dipendono l’una dall’altra temporalmente
-
introduciamo 3 latch
scritti ad ogni ciclo
- A latch
- B latch
- C latch
-
microstep
ora il datapath precedente la ALU e il datapath successivo sono indipendenti Ora abbiamo 3
microstep(micropassi)- I registri scrivono sui latch A e B
- ALU legge i latch A e B, scrive nel latch C il risultato
- leggere dal latch C e scrivere sui registri abilitati
-
parallelismo
Abbiamo guadagnato
parallelismoPotremmo immaginare di triplicare il clock, ad ogni ciclo eseguiamo 1 microstepNon acceleriamo la velocita' di una microistruzione, il tempo lo guadagnamo iniziando il primo microstep della microistruzione
successivacontemporaneamente al secondo microstep dellaprecedentePuo' crearsi uno
stallose il esiste una condizione che constringe le microistruzioni ad operare sequenzialmente- es: aspettare il risultato di una
read
- es: aspettare il risultato di una
NB
c’e' sempre da tenere in conto la compatibilita' con il passato nella realta'