Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate
Architettura degli elaboratori
CPU multiciclo
Marco Tarini
Dipartimento di Scienze Teoriche e Applicate marco.tarini@uninsubria.it
Cosa non va in un processore con CPI=1?
Il tempo di ciclo è lungo
Tutte le istruzioni impiegano lo stesso tempo della più lenta La memoria reale non si comporta come quella ipotizzata
Non riesce a completare letture o scritture in un solo ciclo ragionevolmente breve
CPU multiciclo
Architettura degli elaboratori - 2 -
Arithmetic & Logical
Load
Store
Branch
Critical Path
PC Inst Memory Reg File mux ALU mux setup
PC Inst Memory Reg File mux ALU Data Mem mux setup
PC Inst Memory Reg File mux ALU Data Mem
PC Inst Memory Reg File cmp mux
Riduzione del tempo di ciclo
Si spezza la rete combinatoria in due parti con un registro in mezzo Il lavoro che prima si faceva in un unico ciclo lento si può fare in due cicli, più veloci
CPU multiciclo
Architettura degli elaboratori - 3 -
storage element
Combinational Logic
storage element
storage element
Combinational Logic (A)
storage element storage element
Combinational Logic (B)
=>
Partizionamento del Datapath
PC
Next PC Operand Fetch Exec Reg. File
Mem Access Data Mem
Instruction Fetch Result Store
ALUctr RegDst
ALUSrc
ExtOp MemWr
nPC_sel RegWr
MemWrMemRd
Control Unit
Qui memorizziamo i dati intermedi (in appositi registri)
Datapath Multiciclo
CPU multiciclo
Architettura degli elaboratori - 5 -
PC
Next PC Operand Fetch Ext ALU Reg. File
Mem Access Data Mem
Instruction Fetch Result Store
ALUctr RegDst
ALUSrc
ExtOp
nPC_sel RegWr
MemWrMemRd
IR
A B
R
M Reg
File
MemToReg Equal
ALU exec Mem access
CPU multiciclo: vantaggio ulteriore
Nella CPU a 1 ciclo, abbiamo dovuto replicare delle parti del datapath:
memoria:
per LW, in uno stesso ciclo devo
sia leggere una istruzione sia leggere un dato dalla RAM:
Soluzioni (poco realistiche):
o separazione di RAM istruzioni dalla RAM dati:-(
o memoria a doppio bus di uscita (caro!) :-(
ALU:
per BEQ, in uno stesso ciclo devo sia computare la condizione (zero),
sia eseguire una somma calcolare il valore del nuovo PC soluzione:
un addizionatore ulteriore fuori dalla ALU solo per il computo del PC:-(
Nella CPU multiciclo, le stessa memoria e la stessa ALU possono assolvere funzioni diverse in passi diversi! :-)
CPU multiciclo
Architettura degli elaboratori - 6 -
Progetto di un processore passo passo
1. Istruzioni Trasferimenti Logici tra Registri 2. Componenti del Datapath
3. RTL + Componenti Datapath 4. Datapath + RT logici RT fisici 5. RT fisici Controllo
CPU multiciclo
Architettura degli elaboratori - 7 -
Passo 4: R-rtype (add, sub, . . .)
PC
Next PC Exec Reg. File
Mem Access Data Mem
IR
A B
S
M Reg
File
Equal
Istruz. Trasferimento logico tra Registri ADDU R[rd] R[rs] + R[rt];
PC PC + 4
Istruz. Trasferimento fisico tra Registri IR MEM[PC]
ADDU
A R[rs]; B R[rt]
S A + B
R[rd] S; PC PC + 4
Passo 4: Operazione logica con valore immediato
Istruz. Trasferimento logico tra Registri
ORi R[rt] R[rs] OR zx(Im16);
PC PC + 4
Istruz. Trasferimento fisico tra Registri
IR MEM[PC]
ORi
A R[rs]; B R[rt]
S A or ZeroExt(Im16) R[rt] S; PC PC + 4
CPU multiciclo
Architettura degli elaboratori - 9 -
PC
Next PC Exec Reg. File
Mem Access Data Mem
IR
A B
S
M Reg
File
Equal
Passo 4: Load
Istruz. Trasferimento logico tra Registri
LW R[rt] MEM[R[rs] + sx(Im16)]
Istruz. Trasferimento fisico tra Registri
IR MEM[PC]
LW
A R[rs]; B R[rt]
S A+SignExt(Im16) M Mem[S]
R[rt] M; PC PC + 4
CPU multiciclo
Architettura degli elaboratori - 10 -
PC
Next PC Exec Reg. File
Mem Access Data Mem
IR
A B
S
M Reg
File
Equal
Passo 4: Store
Istruz. Trasferimento logico tra Registri SW MEM[ R[rs] + sx(Im16) ] R[rt];
Istruz. Trasferimento fisico tra Registri IR MEM[PC]
SW
A R[rs]; B R[rt]
S A+SignExt(Im16) Mem[S] B; PC PC + 4
CPU multiciclo
Architettura degli elaboratori - 11 -
PC
Next PC Exec Reg. File
Mem Access Data Mem
IR
A B
S
M Reg
File
Equal
Passo 4: Branch
Istruz. Trasferimento logico tra Registri BEQ if R[rs] == R[rt]
then PC PC+4+ sx(Im16) || 00 else PC PC+4
Istruz. Trasfer. fisico tra Registri IR MEM[PC]
BEQ|Eq PC PC + sx(Im16) || 00 BEQ|/Eq PC PC + 4
PC
Next PC Exec Reg. File
Mem Access Data Mem
IR
A B
S
M Reg
File
Equal
Si ipotizza che il banco dei registri sia capace di valutare
l’uguaglianza di Rs e Rt
Datapath multiciclo
CPU multiciclo
Architettura degli elaboratori - 14 -
Memory Din Adr
Dout MemWr
ALU
ALUOp
InstructionReg
IRWr
Reg File Ra
Rw busW 5 Rb
5 busA
busB RegWr
Rs Rt Rt
Rd
PCWr RegDst ALUSelA
PC
MemtoReg Extend
ExtOp
4
Imm 16
ALUSelB
0
Zero PCSrc IorD
ALU Out
A B
MDR
[25:0]
<< 2
1
1 0
1 0
1 0
1 0
1 0
3 2
<< 2
Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate
Un altro modo di progettare una CPU
Ricorda: la CPU si connette alla memoria centrael attraverso un Bus (esterno)
Architettura degli elaboratori
Memory BU
S
CPU
CPU a Singolo Bus: note 1/2
Idea:
usare un Bus interno alla CPU per connettere tutti i suoi componenti I registri utente R0…R31
altri registri di uso interno (PC incluso) la ALU
la Control Unit…
Ciascuno dei passi in cui è scomposta ogni istruzione dell’Instruction Set viene formulato come un trasferimento di valore fra i registri
(compreso quello che avviene attraverso la ALU)
attraverso three state buffers che connettono registri al BUS, pilotati da comandi provenienti dalla CU,
pilotiamo la copia da un registro ad un altro
L’interazione con la memoria centrale avviene attraverso degli appositi registri (dato e address: MDR MAR), cablati sul BUS esterno
CPU a Singolo Bus: note 2/2
Ad ogni ciclo, solo UN registro può essere immesso sul CPU BUS Per gli altri registri, l’ordine Routvale 0
Il valore di quel registro viene trasferito su tutti i registri in cui Rin= 1 Nota: tutti i registri sono sincronizzati in scrittura con il clock.
Limitazione: dato che abbiamo un unico bus interno, ad ogni ciclo di clock potremmo copiare il contenuto di UN SOLO registro
(in uno o più altri registri, o/e nella ALU, etc)
CPU multiciclo
Architettura degli elaboratori - 19 -
Datapath a singolo bus CPU
CPU multiciclo
Architettura degli elaboratori - 20 -
ALU PC MAR
MDR
Memory IR
ordini . . .
Temp Addr
Data
V
Z 4
select
ALU Op
BUS
Control Unit
CPU BUS
Imm16ext Realistica
(possibile gerarchia)
e altre estensioni
R31 R0 R1
…
Controllo del bus interno
CPU multiciclo
Architettura degli elaboratori - 21 -
Ri V
Z
CPU BUS
Riin
Riout Vin
Zin
Zout
IRin IR
PC PCin
MAR MARin
alla ALU dalla ALU
alla CU
MDR MDRin
MDRout PCout
dalla Immout CU
Immediate value
…
Uso del bus CPU-RAM
CPU BUS
MAR MARin
MDR MDRin
MDRout
BUS
Memory addr
data in data out
Bus che connette la CPU alla RAM:
note
Consiste di 3 fasci di connessioni:
Address(qui 32 bits – se 32 è lunghezza della parola) Connette l’apposito registro MAR
alla porta ADDR del banco di memoria
Data(32 bits – se 32 è lunghezza della parola)
Connette il campo Data della memoria a MDR, e viceversa.
Percorso in un verso o l’altro (o nessuno dei due)
a seconda di appositi tri-state buffers controllati dal banco di memoria (detti Output Enable e Chip Select, come sappiamo)
Controllo(qui 3 bits)
i segnali read and write dalla CU, il segnale MFC verso la CU (vedi dopo)
fra le altre cose, determinano l’Output Enable e il Chip Select
E’ questa la composizione di tutti i tipici bus
CPU multiciclo
Architettura degli elaboratori - 23 -
Interfaccia della CPU CPU
CPU multiciclo
Architettura degli elaboratori - 24 -
ALU PC MAR
MDR
Memory IR
ordini . . .
Temp Addr
Data
V
Z 4
select
ALU Op
BUS
Control Unit
CPU BUS
Imm16ext
e altre estensioni
R31 R0 R1
…
Registri utente
CPU multiciclo
Architettura degli elaboratori - 25 -
ALU PC MAR MDR
Memory
IR ordini
. . .
Temp Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Control Unit
MUX
CPU BUS
Imm16ext
R31 R0 R1
…
CPU
Registri utente
Sono gli unici “visibili” al programmatore.
Cioè quelli che compaiono nelle istruzioni dell’Instruction Set.
attraverso le istruzioni, il programmatore ne controlla il contenuto.
(o, più spesso, il compilatore,
quando il programmatore scrive codice ad alto livello) Sono quei 32 registri R0…R31 previsti dal MIPS
Nel nostro schema precedente, erano contenuti nel Register File In questo schema, è più comodo gestirli come 32 registri separati Dall’esterno vengono spesso chiamati semplicemente «i registri»
(nei contesti in cui CPU la usiamo, piuttosto che chiederci come sia fatta)
Gli altri registri dello schema sono di uso interno alla CPU:
servono all’esecuzione delle istruzioni
I registri utente non devono essere “sporcati” nell’esecuzione.
Registri di uso interno
CPU multiciclo
Architettura degli elaboratori - 27 -
ALU PC MAR MDR
Memory
IR ordini
. . .
Temp Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Control Unit
MUX
CPU BUS
Imm16ext
R31 R0 R1
…
CPU
Registri di uso interno (non utente)
Hanno ruoli specifici (i nomi sono, naturalmente, arbitrari) PC (Program Counter):
contiene l’indirizzo della prossima istruzione IR (Instruction Register):
contiene l’istruzione corrente MAR (Memory Address Register):
contiene l’indirizzo di memoria centrale a cui compiere l’accesso (in lettura o scrittura)
MDR (Memory Data Register):
contiene la parola letta dalla memoria o da scrivere in memoria VeZ:
il (potenziale) primo parametro della ALU, e il suo risultato Temp:
registro temporaneo generico
Alcuni solo scritti dal BUS, altri sia scritti che letti (e sono cablati di conseguenza sui Bus)
CPU multiciclo
Architettura degli elaboratori - 28 -
(quali? Vedi lo schema)
Unità di controllo
CPU multiciclo
Architettura degli elaboratori - 29 -
ALU PC MAR MDR
Memory
IR ordini
. . .
Temp Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Control Unit
MUX
CPU BUS
Imm16ext
R31 R0 R1
…
CPU
Unità di controllo
clock
IR
next step WMFC
dalla memoria MFC
Step No go
bit
S R
Q
dalla ALU equal
read write alla memoria
Logica di controllo (combinatorio)
alla ALU
op
…
al datapath
L
Logica (combinatoria!) dell’unità di controllo
Prende in input:
Istruzione corrente Comprende Op/Func, indice registri, imm16…
Numero del passo corrente Ogni istruz = tanti passi Bits di esito della ALU
Es: zero: esito del confronto Determina se il salto condizionato avviene o no
CPU multiciclo
Architettura degli elaboratori - 31 -
Produce in output ordini/segnali…:
…verso la memoria RAM Read, Write
(passeranno attraverso il BUS esterno)
…verso la ALU
Quale op, (e quale input), usare…
…da riversare sul BUS interno valore appropriatamente esteso di Imm
…di controllo del BUS interno Tutti i valori dei three state buffer Determinano quale registro viene copiato in quale/i registro/i
…verso la Control Unit stessa Il numero del prossimo passo!
Il comando WMFC
«Wait (for) MFC»
Se 1: resetta il bit “Go”, mettendo in pausa la CU fino a quando la RAM non la risveglia mandando MFC
«Memory Function Completed»
Temporizzazione: lettura da memoria
CPU multiciclo
Architettura degli elaboratori - 32 -
Clock
1° ciclo 2° ciclo 3° ciclo
MARin Indir.
read R/W MDRinE
4° ciclo 5° ciclo
dato
MFC MDRout
attesa della lettua !
Come implementare l’attesa variabile della memoria
L’accesso in memoria centrale può richiedere un numero variabile di cicli, durante i quali la CU deve rimanere in attesa / in pausa
Il numero esatto dipende da quale caso si verifica -- per es : cache hitin L1: nessun ciclo di attesa
cache miss in L1, cache hit in L2: 3 cicli di attesa cache miss in L1, cache miss in L2: 10 cicli di attesa Come implementare questo comportamento?
Introduciamo il bit di «GO»: (implementazione: un RS-latch!)
1: aggiorna il passo con il prossimo valore (quando il clock scatta) 0: freeze: non aggiornarlo tutto rimane fermo allo stato attuale Quando la CU si appresta a utilizzare la memoria, manda WFCP
… il quale resetta il bit di «GO» la CU si mette in pausa
Appena la memoria ha terminato l’operazione, manda il segnale MFC
…il quale setta (nb: asinconamente!) il bit di «GO»
Qualsiasi numero di cicli di clock può essere passato nel frattempo
CPU multiciclo
Architettura degli elaboratori - 33 -
Esecuzione di istruzione R-rtype (add, sub, . . .)
ADDU: Trasferimento Logico tra Registri R[rd] R[rs] + R[rt]; PC PC + 4 ADDU: Trasferimento fisico tra Registri
Esempio: rd=R3, rs=R2, rt=R1 Passo
(ciclo di clock)
Comandi Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[PC];
3 MDRout, IRin IR ← MDR;
4 R2out, Vin V ← R2;
5 R1out, select V, add, Zin Z ← R1 + V;
6 Zout, R3in, end R3 ← Z; goto 0
Simulazione passo 1
PCout, MARin, read, select 4, add, Zin
CPU multiciclo
Architettura degli elaboratori - 35 -
ALU PC MAR
Memory MDR IR
RD
ordini . . .
R1 Addr
Data
V
Z
A B
R 4
Select 4
ADD
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
Read
Legge la parola all’indirizzo 1000, dove c’è l’istruzione
add R3 R2 R1
1000
1000
1004
Simulazione passo 2 (inizio) Zout, PCin, Vin, WMFC
CPU multiciclo
Architettura degli elaboratori - 36 -
ALU PC MAR
MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
1004 1004
1004
Simulazione passo 2 (conclusione) Zout, PCin, Vin, WMFC
CPU multiciclo
Architettura degli elaboratori - 37 -
ALU PC MAR
MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
Istruzione add R3 R2 R1
MFC Inviato quando la
lettura è completata
Simulazione passo 3 MDRout, IRin
ALU PC MAR MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
Istruzione
add R3 R2 R1 Istruzione
add R3 R2 R1
Simulazione passo 4
R2out, Vin
CPU multiciclo
Architettura degli elaboratori - 39 -
ALU PC MAR MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
23 23
Simulazione passo 5
R1out, select V, add, Zin
CPU multiciclo
Architettura degli elaboratori - 40 -
ALU PC MAR MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
Select V
Add
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
15 23
38
Simulazione passo 6
Zout, R3in, end
CPU multiciclo
Architettura degli elaboratori - 41 -
ALU PC MAR MDR
Memory
IR ordini
. . .
R1 Addr
Data
V
Z
A B
R 4
select
Controllo ALU
BUS
Decodifica e controllo
MUX
R2
R3
CPU BUS
38
38
Esecuzione di istruzione R-rtype (add, sub, . . .)
ADDU: Trasferimento Logico tra Registri R[rd] R[rs] + R[rt]; PC PC + 4 ADDU: Trasferimento fisico tra Registri
Esempio: rd=R3, rs=R2, rt=R1 Passo
(ciclo di clock)
Comandi Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[PC];
3 MDRout, IRin IR ← MDR;
4 R2out, Vin V ← R2;
5 R1out, select V, add, Zin Z ← R1 + V;
6 Zout, R3in, end R3 ← Z; goto 0
Qui c’è un salto implicito
end indica che si torna al fetch
Esecuzione di un’istruzione di operazione logica con valore immediato
ORI: Trasferimento Logico tra Registri
R[rt] R[rs] or ZeroExt(Im16); PC PC + 4 ORI: Trasferimento Fisico tra Registri
Esempio: rs=R2, rt=R1 Passo
(ciclo di clock)
Comandi Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[MAR];
3 MDRout, IRin IR ← MDR;
4 ZeroExtImmout, Vin V ← ZeroExt(IR[16..31]);
5 R2out, select V, or, Zin Z ← R2 OR V;
6 Zout, R1in, end R1 ← Z; goto 0
CPU multiciclo
Architettura degli elaboratori - 43 -
Esecuzione di un’istruzione di salto condizionato
BEQ: Trasferimento Logico tra Registri if R[rs] == R[rt]
then PC PC + 4 + sx(Im16) || 00 else PC PC + 4 BEQ: Trasferimento fisico tra Registri
Esempio: rs=R2, rt=R1
Passo Azione Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[MAR];
3 MDRout, IRin IR ← MDR;
4 R2out, Vin V ← R2;
5 R1out, select V, sub, jumponzero 7 if (V-R1==0) goto 7;
6 end goto 1
7 SignExtImmoutSHL2, Vin V ← SignExt(IR[16..31]) << 2;
8 PCout, select V, add, Zin Z ← PC+V;
9 Zout, PCin, end PC←Z;
CPU multiciclo
Architettura degli elaboratori - 44 -
salto nella sequenza di controllo
Esecuzione di un’istruzione Load
LW: Trasferimento Logico tra Registri
R[rt] MEM(R[rs] + sx(Im16); PC PC + 4 LW: Trasferimento fisico tra Registri
Esempio: rs=R1, rt=R2
Passo Azione Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[MAR];
3 MDRout, IRin IR ← MDR;
4 SignExtImmout, Vin V ← SignExt(IR[16..31]);
5 R1out, select V, add, Zin Z ← R1 + V
6 Zout, MARin, read, WMFC MAR ← Z; MDR ← MEM[MAR]
7 MDRout, R2in, end R2 ← MDR; goto 0
CPU multiciclo
Architettura degli elaboratori - 45 -
Esecuzione di un’istruzione Store
SW: Trasferimento Logico tra Registri
MEM(R[rs] + sx(Im16) R[rt]; PC PC + 4 SW: Trasferimento fisico tra Registri
Esempio: rs=R1, rt=R2
Passo Azione Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[MAR];
3 MDRout, IRin IR ← MDR;
4 R2out, MDRin R2 ← MDR;
5 SignExtImmout, Vin V ← SignExt(IR[16..31]);
6 R1out, select V, add, Zin Z ← R1 + V
7 Zout, MARin, write, WFMC MAR ← Z; MEM[MAR] ←MDR
8 end goto 0
Esecuzione di un’istruzione di salto non condizionato relativo
JMP: Trasferimento Logico tra Registri PC PC + 4 + sx(Im16) || 00
JMP: Trasferimento Fisico tra Registri:
Passo (ciclo di clock)
Azione Effetti
1 PCout, MARin, read, select 4, add, Zin MAR ← PC; Z ← PC+4;
2 Zout, PCin, Vin, WMFC PC←Z; V←Z; MDR←MEM[MAR];
3 MDRout, IRin IR ← MDR;
4 SignExtImmSHL2out, select V, add, Zin Z ← V + SignExt(IR[16..31])<<2;
5 Zout, PCin, end PC←Z; goto 0
CPU multiciclo
Architettura degli elaboratori - 47 -
CPU a Tre Bus
Idea:
se incrementiamo il numero di BUS interni fino a K,
allora ad ogni ciclo di clock possiamo eseguire contemporaneamente K trasferimenti di valore
Ciascun trasferimento: da un registro ad uno o più registri (NB: registri utente o di uso interno, non fa differenza) Meno cicli per istruzione!
CPU multiciclo
Architettura degli elaboratori - 48 -
CPU a Tre Bus
Progettiamo una CPU a tre bus (A, B, C)
Scelte: possiamo decidere di cablare ciascun registro
(utente o interno) in modo da poter leggere da alcuni dei bus e/o scrivere su altri.
Es: scegliamo che ogni registro utente Ri viene cablato per poter scrivere sui BUS A e/o BUS B, e/o leggere da BUS C
CPU multiciclo
Architettura degli elaboratori - 49 -
BUS A
Ri Riin
RioutA
BUS C
RioutB
BUS B
Datapath a 3 bus (esempio)
ALU
MAR IR 4
Addr
PC
MUX
Data MDR
BUS A
R00..31
BUS C
imm
BUS B
alla CU
Esempio di CPU a tre bus:
note su alcune delle scelte fatte 1/2
I registri utente leggono da C, scrivono in A o B
La ALU prende un input dal Bus A, uno da Bus B, e scrive nel Bus C Nessun’altro scrive nel Bus C!
Conseguenza: per scrivere in un registro, devo sempre passare dalla ALU.
A questo scopo, la ALU avrà Operazioni:
«R=A» («Passa A») il Risultato è il primo operatore, inalterato.
«R=B» («Passa B») il Risultato è il secondo operatore, inalterato.
Coseguenza 2: non ho bisogno di Three-state buffers per isolare l’Uscita della ALU: consento sempre alla ALU di riversare l’uscita sul Bus C. (quindi, neanche nell’entrata)
CPU multiciclo
Architettura degli elaboratori - 51 -
Datapath a 3 bus: i three state-buffer
CPU multiciclo
Architettura degli elaboratori - 52 -
ALU
MAR IR 4
Addr
PC
MUX
Data MDR
BUS A
R00..31
BUS C
BUS B
alla CU imm
Esempio di CPU a tre bus:
note su alcune delle scelte fatte 2/2
IR, PC, MAR, MDR: possono leggere solo dal BUS C
(MDR ovviamente anche dal Bus esterno che connette alla memoria) MDR scrive sui Bus A o B
IR scrive in A la parte «immediate»
(che viene opportunamente espansa da appositi blocchi combinatori, pilotati dalla CU – omessi nel disegno)
Vediamo con quali passi eseguire i comandi su questa architettura…
CPU multiciclo
Architettura degli elaboratori - 53 -
Datapath a 3 bus: copiare in un registro il risultato di una op fra due registri
ALU
MAR IR 4
Addr
PC
MUX
Data MDR
BUS A
R00..31
BUS C
alla CU
Possibile in un solo ciclo!
BUS B
imm
Datapath a 3 bus: copiare un registro (es MDR) in un altro registro (es R01)
CPU multiciclo
Architettura degli elaboratori - 55 -
ALU
MAR IR 4
Addr
PC
MUX
Data MDR
BUS A
R00..31
BUS C
alla CU
Devo sempre passare per la ALU (un solo ciclo
comunque)
BUS B
imm
«Passa B»
cioè
«Res = B»
Datapath a tre bus: velocità di esecuzione
Add R3, R4, R5 Datapath a un bus
1. PCout, MARin, read,select 4, add, Zin 2. Zout, PCin, Vin, WMFC
3. MDRout, IRin 4. R3out, Vin
5. R4out, select V, add, Zin 6. Zout, R5in
6 cicli di clock
Add R3, R4, R5 Datapath a tre bus
1. PCoutB, R=B, MARin, read 2. PCoutB, R=B+4, PCin, WMFC 3. MDRoutB, R=B, IRin
4. R3outA, R4outB, add, R5in
4 cicli di clock !!!
CPU multiciclo
Architettura degli elaboratori - 56 -
Datapath a tre bus: velocità di esecuzione
ORi R5, R3, imm Datapath a un bus
1. PCout, MARin, read,select 4, add, Zin 2. Zout, PCin, Vin, WMFC
3. MDRout, IRin 4. R3out, Vin
5. ZeroExtImmout, select V, add, Zin 6. Zout, R5in
6 cicli di clock
Add R3, R4, R5 Datapath a tre bus
1. PCoutB, R=B, MARin, read 2. PCoutB, R=B+4, PCin, WMFC 3. MDRoutB, R=B, IRin
4. ZeroExtImmoutA, R3outB, or, R5in
4 cicli di clock !!!
CPU multiciclo
Architettura degli elaboratori - 57 -
Unità di controllo
clock
IR
next step WMFC
dalla memoria MFC
Step No go
bit
S R
Q
dalla ALU equal
read write alla memoria
Logica di controllo (combinatorio)
alla ALU
op
…
al datapath
L
Unità di controllo come macchina a stati finiti
Possiamo vedere l’unità di controllo come una FSM:
Il numero di passo: lo stato attuale OpCode, Esiti: gli input
Ordini al datapath: gli output
Il prossimo passo: lo stato successivo La tabella di transizioni
specifica, per ogni stato e per ogni input, lo stato successivo e l’output
CPU multiciclo
Architettura degli elaboratori - 66 -
Tabella delle transizioni (1/2)
Passo Opcode Esiti Controlli generati Passo
successivo
0 X X PCout, MARin, read, select 4, add, Zin 1
1 X X Zout, PCin, Vin, WMFC 2
2 X X MDRout, IRin 3
3 ADDU X Rs_out, Vin 4
4 ADDU X Rt_out, select V, add, Zin 5
5 ADDU X Zout, Rd_in 0
3 ORI X ZeroExtImmout, Vin 4
4 ORI X Rs_out, select V, or, Zin 5
5 ORI X Zout, Rt_in 0
3 BEQ X Rs_out, Vin 4
4 BEQ /zero Rt_out, select V, sub 0
4 BEQ zero Rt_out, select V, sub 5
5 BEQ X SignExtImmoutSHL2, Vin 6
6 BEQ X PCout, select V, add, Zin 7
7 BEQ X Zout, PCin 0
CPU multiciclo
Architettura degli elaboratori - 67 -
Tabella delle transizioni (1/2) - alternativa
Passo Opcode Esiti Controlli generati Passo
successivo
0 X X PCout, MARin, read, select 4, add, Zin 1
1 X X Zout, PCin, Vin, WMFC 2
2 X X MDRout, IRin 3
3 Rtype X Rs_out, Vin 4
4 Rtype X Rt_out, select V, funct, Zin 5
5 Rtype X Zout, Rd_in 0
3 ORI X ZeroExtImmout, Vin 4
4 ORI X Rs_out, select V, or, Zin 5
5 ORI X Zout, Rt_in 0
3 BEQ X Rs_out, Vin 4
4 BEQ /zero Rt_out, select V, sub 0
4 BEQ zero Rt_out, select V, sub 5
5 BEQ X SignExtImmoutSHL2, Vin 6
6 BEQ X PCout, select V, add, Zin 7
7 BEQ X Zout, PCin 0
CPU multiciclo
Architettura degli elaboratori - 68 -
Tabella delle transizioni (2/2)
Passo Opcode Esiti Controlli generati Passo
successivo
3 JMP X SignExtImmSHL2out, add, Zin 4
4 JMP X Zout, PCin 0
3 LW X MDRout, IRin 4
4 LW X SignExtImmout, Vin 5
5 LW X Rs_out, select V, add, Zin 6
6 LW X Zout, MARin, read, WMFC 7
7 LW X MDRout, Rt_in 0
3 SW X Rt_out, MDRin 4
4 SW X SignExtImmout, Vin 5
5 SW X Rs_out, select V, add, Zin 6
6 SW X Zout, MARin, write, WFMC 0
Tabella delle transizioni: note
I passi 0-1-2 implementano l’instruction fetch e l’aggiornamento del PC a PC+4
Non dipendono dal Opcode (l’IR non è ancora aggiornato!) Ogni passo 3 è l’inizio di un’Istruzione dell’Instruction Set (è il primo passo in cui IR è disponibile!)
Quando il passo successivo è 0, l’istruzione corrente è finita.
Si ricomincia dal fetch dell’istruzione successiva.
Negli altri casi, il passo successivo è di solito passo corrente +1 Il passo 4 di BEQ ha, come passo successivo, due valori diversi a seconda del bit di esito (dalla ALU) «zero»
A seconda di quale dei due casi si applica (zero o non zero), si effettua il salto (aggiornamento del PC nei passi 5-7) oppure no.
Il bit zero significa:
« è zero la differenza fra i due registri che ho sottratto? »…
per testare l’ugualianza due registri,
si sottrae uno all’altro e si vede se il risultato è zero
CPU multiciclo
Architettura degli elaboratori - 70 -
Realizzazione della logica della UC
Si tratta di un circuito combinatorio che prende in input : passo, opcode, esiti,
e restituisce in output:
prossimo-passo, ordini-al-datapath
La sua tabella di verità è la tabella delle transizioni vista
Possiamo progettarlo come un qualsiasi altro circuito combinatorio … (come abbiamo imparato nelle lezioni precedenti)
Alternativa:
microprogramming ! (vedi dopo)
CPU multiciclo
Architettura degli elaboratori - 72 -
Esempio di circuito per la
generazione di segnale di controllo 1/1
CPU multiciclo
Architettura degli elaboratori - 73 -
D E C
storew addu load beq
…
D E
C …
OPCODE
STEP NO.
P0
3 6
P1 P2
ESITI ALU
Esempio di circuito per la
generazione di segnale di controllo 2/2
Zinè emesso:
Al passo 0 sempre Al passo 4 dell’istruzione addu tra registri
Al passo 5 dell’istruzione storew
…
Zin
P0 P4 addu P5 storew
...
...