LA CPU
• Contenuto della lezione
– Esame approfondito del funzionamento della CPU
• definizione di un'architettura semplificata ispirata alle macchine RISC
• sviluppo due prototipi
– Il primo prototipo (CPU1) è costruito in modo da eseguire le istruzioni in un solo periodo di clock
– Il secondo prototipo (CPU2) esegue istruzioni in più cicli
» Confronto delle prestazioni
Architettura di riferimento
• Gli indirizzi di memoria sono riferiti ai byte
• Istruzioni e dati occupano sempre e solo una parola di 32 bit.
• Istruzioni e dati si trovano in memoria allineate a indirizzi multipli di 4 (0, 4, 8, 12, ...).
• Se si escludono le istruzioni di salto, la regola di aggiornamento del registro PC è: PC:= PC + 4
• L'unità operativa presenta 32 registri di uso generale di 32 bit (R0,R1, …,R31).
• Repertorio di istruzioni estremamente ridotto.
Formato
Aritmetiche
Salto Incon.
Salto Condiz.
Load/Store
(F3) (F2)
(F2)
(F1)
Semplificazione
• Si fa l’ipotesi che dentro i campi che corrispondono a indirizzi/scostamenti ci sia l’indirizzo/lo scostamento effettivo
– Nella realtà le cose sono diverse. Ad esempio, tenuto conto della nostra architettura:
• conviene che campo IND del salto contenga l’indirizzo diviso per 4 (in modo da economizzare e rendere 4 volte più grande lo spazio indirizzato). Ovviamente, è necessario che in fase di esecuzione il contenuto di IND venga moltiplicato per 4 (shiftato di 2 a sinistra)
• Portare IND a 32 bit sarebbe 0000||IND||00
– Invece supporremo che portare IND a 32 bit corrisponda
all’operazione 000000||IND
Notazione
• La notazione 000000||IND si indica anche come X(IND)
• La notazione (OFFSET 16 ) 16 ||OFFSET
indica l’azione di portare OFFSET da 16 a 32 bit, estendendo il segno.
si indica anche come XS(OFFSET)
Assumeremo che ci sia anche l’istruzione NOP
Istruzioni aritmetiche tra registri
• Il campo OP contiene il codice di generica operazione aritmetica
• Il campo fALU identifica la specifica operazione da eseguire, per esempio: ADD, SUB, OR, MUL, etc.
• Le aritmetiche prevedono sempre due registri sorgente e un registro di destinazione.
• I campi Rs1 e Rs2 identificano i registri sorgente
• Il campo Rd identifica il registro di destinazione Esempio
ADD R1,R2,R3 ;R1:= R2+R3
SUB R4,R4,R2 ;R4:= R4-R2
Istruzioni LD (Load) e ST (Store)
• Il campo Rb contiene il numero d’ordine del registro base
• Il OFFSET contiene lo scostamento Esempio
LD R13,100(R6) ; R13:= M[R6+100]
; R13:= M[R6+XS(OFFSET)]
ST 2000(R7),R2 ; M[R7+2000]:= R2
; M[R7+ XS(OFFSET)]:= R2
Istr. di trasferimento del controllo
JMP : Jump, Salto incondizionato JAL : Jump and link
JE : Jump if equal JS : Jump on sign JR : Jump relative INT : Interrupt
RFI : Return from interrupt
Istruzioni di salto e diramazione
• Salto incondizionato
– Il campo OP contiene il codice di salto, il campo IND (sempre positivo) contiene l’indirizzo di destinazione.
Esempio
JMP label ;PC:= X(IND)
JAL label ;R31:= PC; PC:= X(IND)
• Diramazione (Salto se uguale/sul segno)
– Confronto tra il contenuto dei registri RS1 e RS2 e salto in caso di uguaglianza. Esempio
JE R1,R2,dest ;if R1=R2 then
; PC:= PC+ XS(OFFSET) JS R4,R21,dest2 ;if R21>R4 then
; PC:= PC+ XS(OFFSET)
Altri Trasferimenti
• JR JR R17 ; PC:= R17
• INT INT 5 ;…… ; R30:= PC
• RFI RFI ; PC:= R30
Fasi/Stadi di esecuzione
• IF – Instruction Fetch
• ID – Instruction decode
• EX – Execute
• ME – Memory
• WB – Write Back
Le fasi corrispondo a stadi
CAPIRE BENE COSA FANNO I DIFFERENTI STADI !
CPU1 (MONOCICLO)
• Esegue istruzioni in un solo periodo di clock
• Richiede che memoria Istruzioni e memoria dati siano separate (Harvard)
– La memoria istruzioni (MI) rende sempre disponibile il suo
contenuto (quello della cella indirizzata da PC)
Cosa serve in CPU1
• Una sezione dedicata al prelievo delle istruzioni dalla memoria, di cui fa parte PC.
– Ad ogni ciclo di clock PC viene incrementato (di 4) in modo da eseguire l’istruzione successiva
• Una sezione di decodifica dell'istruzione e di prelievo del contenuto degli eventuali registri sorgente.
• Una sezione relativa alla ALU.
• Una sezione dedicata alla lettura/scrittura nella memoria o alla scrittura nel registro di destinazione
• L’esecuzione consiste nella propagazione dei segnali:
– Da MI fino alla scrittura nei registri o in memoria
Propagazione Aritmetiche
Propagazione LD
Propagazione ST
Propagazione JMP
Propagazione JE
Register File
Interno RF
Schema ALU
Memoria
Durata del T del clock
T mono periodo del clock (per CPU1)
t i tempo richiesto dal generico stadio t mono,I richiesto dalla generica istruzione I t mono tempo per l’esecuzione di N istruzioni
t mono,I = t i
(la somma è estesa ai soli stadi interessati dall’istruzione I)
T mono = max t mono,I
t mono = N T mono
Esempio
• 30 ns per l'accesso alla memoria (MI o MD)
• 5 ns per la decodifica dell'istruzione e per lettura dei registri
• 12 ns per operazione di ALU
• 5 ns per la scrittura di un registro
T
mono= 82 ns
Per l’istruzione JMP il 57% del tempo è sprecato
MI ID ALU MD WR T
Aritm 30 5 12 5 52
LD 30 5 12 30 5 82
ST 30 5 12 30 77
JE/JS 30 5 12 47
JMP 30 5 35
JAL 30 5 5 40
Esempio
• 30 ns per l'accesso alla memoria (MI o MD)
• 5 ns per la decodifica dell'istruzione e per lettura dei registri
• 12 ns per operazione di ALU
• 5 ns per la scrittura di un registro
T
mono= 82 ns
Per l’istruzione JMP il 57% del tempo è sprecato
MI ID ALU MD WR T
Aritm 30 5 12 5 52
LD 30 5 12 30 5 82
ST 30 5 12 30 77
JE/JS 30 5 12 47
JMP 30 5 35
JAL 30 5 5 40
CPU1 con memoria unificata….
• Per una CPU a un solo ciclo di clock e memoria unificata si può ricorrere a questo stratagemma:
– nella prima fase del clock si legge dalla memoria (fetch) – nella seconda fase si esegue l’istruzione (execute)
• Comporta la presenza di un registro intermedio (IR)
su cui memorizzare l’istruzione
CPU1 con memoria unificata….
• Per una CPU a un solo ciclo di clock e memoria unificata si può ricorrere a questo stratagemma:
– nella prima fase del clock si legge dalla memoria (fetch) – nella seconda fase si esegue l’istruzione (execute)
• Comporta la presenza di un registro intermedio (IR) su cui memorizzare l’istruzione
Con riferimento a LD
CPU2
• Memoria unica
• Più cicli di clock, esecuzione in più passi:
– IF – ID – EX – ME – WB
• Elementi necessari (per ora): PC, IR, RF, ALU
• Ottimizzare l’uso delle risorse
• Controllo maggiore
IF
• Azioni svolte in IF: IR:= M[PC]; PC:= PC+4
(Durante IF ALU non viene utilizzata => si usa per incrementare PC)
ID
• Comprende il decodificatore del codice di istruzione
• Il formato dell’istruzione consente la lettura degli eventuali registri sorgente
• Siccome ancora la ALU non viene impiegata per
l’eventuale operazione richiesta dall’istruzione, si può impiegarla per il calcolo dell’indirizzo di destinazione della diramazione. A tal fine occorre un registro di appoggio (DEST)
• Azione svolta: DEST:= PC + OFFSET
• In realtà DEST := PC+XS(OFFSET)
ID
Il campo OFFSET deve essere esteso a 32 bit DEST := PC+OFFSET
EX
• Determinata dal codice di operazione
– Aritmetiche: ALUout:= A fALU B – LD/ST: ALUout:= A + OFFSET
– JE: ALUout:= A - B; if zero then PC:= DEST – JS: ALUout:= A - B; if segno then PC:= DEST
– JMP: PC:= IND
– JR PC:= RF.B
– JAL PC:= IND
EX -- Aritmetiche
ALUOut = A fALU B
EX -- LD/ST
ALUOut = A + OFFSET