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 dal- Data 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'