Processore
Memoria
Control
(Parte di controllo)
Datapath
(Parte operativa)
I/O
Memoria
•
La dimensione del Register File è piccola
• registri usati per memorizzare singole variabili di tipo semplice
• purtroppo per memorizzare dati strutturati e codice di programma, sono tipicamente
necessari diversi KB o MB
•
Memoria principale (RAM - Random Access Memory)
• meno veloce della memoria dei registri, ma molto più capiente
• è detta Random Access Memory perché i tempi di accesso sono indipendenti dal valore
dell’indirizzo della cella di memoria acceduta
•
Static RAM
• per la sua realizzazione vengono usati dei latch
• è usata per realizzare memorie veloci, come le memorie cache
• tempi di accesso (2008) intorno a 0,5 – 2,5 ns
•
Dynamic RAM
• non è realizzata tramite latch
• è usata per realizzare memorie capienti come quella principale
• tempi di accesso (2008) intorno a 50 – 70 ns
• è necessario “rinfrescare” il contenuto delle DRAM a intervalli di tempo prefissati
Static RAM
•
•
•
•
Una SRAM è realizzata come
matrice di latch H x W
• larghezza W = numero di latch
per ogni cella
• altezza H = numero di celle
indirizzabili
Singolo indirizzo per lettura o
scrittura
Non è possibile scrivere e leggere
contemporaneamente
Numero di bit dell’indirizzo: log2 H
0
1
2
H
SRAM
H×W
h-2
h-1
W
Static RAM
•
•
•
Chip select: da affermare per poter leggere o scrivere
Output enable: da affermare per poter abilitare l’uscita del
chip su un bus condiviso
• serve a poter collegare molti chip di memoria ad un singolo
bus
Write enable: impulso che, quando attivato, registra nella
linea di latch individuati da Address il valore presentato in Din
Dynamic RAM
•
•
•
La DRAM è meno costosa, perché è realizzata con un
solo transistor per bit, e un condensatore
I condensatori mantengono i valori memorizzati solo per
alcuni ms
Necessario il refresh dinamico delle DRAM, effettuato
leggendo, e subito riscrivendo i valori appena letti
Processore
Memoria
Control
(Parte di controllo)
Datapath
(Parte operativa)
I/O
Parte di Controllo
•
•
•
•
La Parte Controllo (Control) della CPU è un circuito
sequenziale
• istruzioni eseguite in più cicli di clock
• ad ogni ciclo, si esegue uno micropasso (microistruzione)
dell’istruzione
Lo stato interno al circuito sequenziale determina lo specifico
micropasso da eseguire
Gli output della Parte Controllo sono inviati alla Parte Operativa,
che li interpreta come comandi
• controlli dei multiplexer, controlli per le ALU, segnali per
abilitare la scrittura in registri, ecc.
Gli input della Parte Controllo giungono dalla Parte Operativa
• campi del registro che contiene l’istruzione corrente (IR),
risultati di operazioni di confronto, ecc.
Parte di Controllo
•
•
•
•
•
•
Esistono diverse ISA (MIPS, x86, ARM)
Abbiamo visto vari componenti di base comuni alla
realizzazione dei processori
Un progettista deve “implementare” una ISA usando
blocchi funzionali e logiche di controllo
Vedremo come implementare una versione molto semplice
dell’ISA MIPS.
Collegamenti della parte operativa (datapath)
Identificazione dei segnali della parte di controllo (control)
Istruzioni
•
•
•
•
Istruzioni di memory-reference: lw, sw
Istruzioni arithmetic-logic: add, sub, and, or, slt
Istruzioni di control-flow: beq, j
Tutte le istruzioni sono lunghe 32 bit
26
31
R-Type
rs
rt
rd
6 bit
5 bit
5 bit
5 bit
26
•
•
•
•
•
op:
6
shamt
rt
6 bit
5 bit
5 bit
funct
5 bit
6 bit
0
immediate
16 bit
26
op
0
16
rs
6 bit
•
21
op
31
J-Type
11
op
31
I-Type
16
21
0
target address
26 bit
codice operativo dell’istruzione
rs, rt, rd: dei registri sorgente (rs, rt) e destinazione (rd)
shamt: shift amount (è diverso da 0 solo per istruz. di shift)
funct: seleziona le varianti dell’operazione specificata in op
immediate: offset dell’indirizzo (load/store) o valore immediato (op. aritmetiche)
target address: indirizzo target di un’istruzione di jump
Progetto
1. Analizzare il set di istruzioni → verificare i requisiti del datapath
• il datapath deve includere gli elementi di memoria corrispondenti ai registri dell’ISA
• tipicamente sono necessari altri registri, usati internamente o non referenziabili
direttamente attraverso l’ISA
• es.: PC (Program counter)
• analizzare la semantica di ogni istruzione, data in termini di trasferimenti tra registri,
ed eventuali operazioni tra i registri
• ll datapath deve fornire i cammini per permettere tutti i register transfer
necessari, e gli accessi alla memoria
2. Selezionare i vari componenti del datapath (es. ALU) e stabilisci la metodologia di
clocking
3. Assemblare il datapath in accordo ai requisiti, aggiungendo i segnali di controllo
4. Analizzare l’implementazione di ogni istruzione per determinare il setting dei segnali
di controllo che provocano i vari register transfer
5. Assemblare la logica di controllo in accordo al punto 4
Proviamo a progettare una CPU in cui ogni istruzione viene eseguita all’interno di un
singolo ciclo di clock
Analisi dell’ISA
•
L’implementazione delle istruzioni è abbastanza simile:
1. Prelevare l’istruzione dalla memoria usando il contenuto del registro
PC
2. Leggere l’istruzione da eseguire dalla memoria (fetch)
3. Interpretare i campi dell’istruzione per decidere esattamente cosa fare
(decode)
4. Eseguire l’istruzione (execute)
a. Leggere uno o due registri
b. Usare l’ALU
c. Scrivere in memoria o in un registro
5. Aggiornare il contenuto del registro PC e ricominciare
Quindi ALU, Register File e PC devono essere inclusi nella Parte Operativa
Per comodità rappresenteremo la memoria assieme agli altri elementi della
Parte Operativa, ma essa non fa logicamente parte della CPU
Analisi dell’ISA
•
Per tutte le istruzioni, dobbiamo come prima cosa effettuare il fetch
op | rs | rt | rd | shamt | funct = M[ PC ]
op | rs | rt |
imm16
op | 26bit address
= M[ PC ]
= M[ PC ]
istruzioni trasferimenti tra registri
ADD
R[rd] ← R[rs] + R[rt];
PC ← PC + 4;
SUB
R[rd] ← R[rs] – R[rt];
PC ← PC + 4;
LOAD
R[rt] ← M[ R[rs] + sign_ext(imm16) ];
PC ← PC + 4;
STORE
M[ R[rs] + sign_ext(Imm16) ] ← R[rt];
PC ← PC + 4;
BEQ
if ( R[rs] == R[rt] ) then
else
PC ← PC + 4 +
(sign_ext(imm16) << 2);
PC ← PC + 4;
•
•
BEQ adotta un indirizzamento di tipo PC-relative
Al momento dell’aggiornamento il PC contiene già l’indirizzo dell’istruzione
successiva a quella corrente
Possibile implementazione
Gestione PC
Dati da scrivere
in un registro
Fetch
Campi rs, rt, rd
dell’istruzione
Campo
immediate
dell’istruzione
Dati letti
(LOAD)
Dati da
memorizzare
(STORE)
Gestione Program Counter
•
•
•
•
Necessario realizzare,
all’interno dello stesso ciclo di
clock, il fetch dell’istruzione e
l’incremento del PC
Non possiamo usare l’ALU
principale, perché questa è già
utilizzata per eseguire le
istruzioni
Stiamo implementando una
CPU a singolo ciclo →
risorse replicate
Nota che dalla memoria
istruzioni viene letta una nuova
istruzione ad ogni ciclo di clock
Estensione di segno
•
•
I 16 bit del campo immediato dell’istruzione (es. istruzioni di LOAD/STORE) sono
estesi di segno (16 bit → 32 bit) prima di essere sommati con il registro R[rs]
L’indirizzo così calcolato
(R[rs] + sign_ext(Imm16))
viene usato per accedere alla Memoria Dati in lettura/scrittura
M[R[rs] + sign_ext(Imm16)]
Calcolo del branch
•
•
Necessario per realizzare il calcolo dell’indirizzo di salto dei branch
PC ← PC + 4 + (sign_ext(Imm16) << 2)
Non possiamo usare l’ALU, perché viene già utilizzata per eseguire
l’operazione di confronto (sottrazione)
Linee di controllo e multiplexer
Registro da
scrivere in istruzioni
R-Type o I-Type
Secondo
ingresso ALU
R-Type o I-Type
Brach o
incremento
Scrittura
registro da
ALU o LOAD
Parte di controllo
Controllo ALU
•
Dobbiamo definire il circuito di controllo per calcolare i 4 bit di
controllo dell’ALU (ALU Operation) da assegnare in base al tipo di
istruzione
•
Il circuito sarà a 2 livelli:
• Il primo livello calcolerà ALUOp in base all’op code
• Il secondo livello calcolerà effettivamente ALU Operation in base al
campo funct e a ALUOp
Altri segnali di controllo
Nome del
segnale
RegDst
RegWrite
ALUSrc
PCSrc
Effetto quando deasserted
Effetto quando asserted
Il numero del registro di destinazione per
l’ingresso Write register proviene dal
campo rt dell’istruzione (bit 20:16)
Il numero del registro di destinazione per l’ingresso
Write register proviene dal campo rd dell’istruzione
(bit 15:11)
Nessuno
Il registro sull’ingresso Write register è scritto con il
valore sull’ingresso Write data
Il secondo operando della ALU proviene
dalla seconda uscita del Register File
(Read data 2)
Il secondo operando della ALU proviene
dell’estensione di segno dei 16 bit meno significativi
dell’istruzione
Il registro PC è aggiornato con l’uscita
Il registro PC è aggiornato con l’uscita
dell’addizionatore che calcola il valore PC
dell’addizionare che calcola il risultato del salto
+4
MemRead Nessuno
I contenuti della memoria dati identificati
dall’indirizzo sono inviati sull’uscita Read data
MemWrite Nessuno
I contenuti della memoria dati identificati
dall’indirizzo sono sostituiti con il value sull’ingresso
Write data
MemtoReg
Il valore riportato in ingresso al registro
Write data proviene dalla ALU
Il valore riportato in ingresso al registro Write data
proviene dalla memoria dati
Parte di controllo