• Non ci sono risultati.

Register File

N/A
N/A
Protected

Academic year: 2021

Condividi "Register File "

Copied!
8
0
0

Testo completo

(1)

Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate

Architettura degli elaboratori

Register File

Marco Tarini

Dipartimento di Scienze Teoriche e Applicate marco.tarini@uninsubria.it

Register File

Spesso occorre utilizzare un certo numero di registri paralleli tutti aventi le stesse dimensioni e le stesse funzioni

Sono organizzati in una struttura a vettore, chiamata Register File

(in italiano, a volte: «Banco» dei Registri)

(nota linguistica: «File» nel senso di «filiera», «fila»:

il File System non centra nulla)

Un Register File =

un insieme di M registi da N bit

e, i circuiti di controllo: per accedervi in lettura e scrittura

(2)

Usi caratteristici

Il register file è un blocco funzionale essenziale dei processori (CPU)

È usato per realizzare i registri interni al processore

Registri che contengono gli operandi e i risultati (di tipo intero o float) delle istruzioni aritmetico-logiche del processore

Cioè gli input e l’output dei conti eseguiti dalla ALU

In molte architetture, sono l’unica cosa su cui la ALU può lavorare!

Memoria

Architettura degli elaboratori - 3 -

Esempio: i registri della CPU Schema concettuale

Qui: un registro viene sovrascritto con la somma di altri due (calcolata dalla ALU)

A B

Register File

A + B

A

L

U

(3)

Register File come blocco logico:

funzionamento

Memoria

Architettura degli elaboratori - 6 -

2

k

registri da n bits

n

n n

k

o

0

o

1

i

0

dato da memorizzare

Reg[ o1] Reg[ o0]

clock

Esempio: un Register File a 2 uscite e 1 entrata (altre combinazioni sono possibili)

k

k

Register file come blocco logico:

funzionamento

Un Register File a 2 uscite e 1 entrata, per m = 2k a n bit contiene: m = 2kregistri da n bit ciascuno

numerati da 0 a 2k – 1 in output, restituisce il valore attuale di due dei registri:

specificati dagli indici o0 e o1 (presi in ingresso)

in input, prende anche la parola (di n bit) che verrà memorizzata nel registro di indice i0

(appena il clock passa da 1 a 0) e il clock, per la sincronizzazione (come al solito)

2

k

registri da n bits

n

n n

k k k

o

0

o

1

i

0

dato da memorizzare

Reg[ o1] Reg[ o0]

clock

(4)

Register File

Uso di un Register File esempio

Reg[9]  Reg[12] + Reg[4]

Memoria

Architettura degli elaboratori - 8 -

n

n n

k k k

A L U 4

12

SUM

9

clock

Reg[12]

Reg[4]

Reg[12] + Reg[4]

o

0

o

1

i

0

Uso di un Register File esempio

Reg[9]  Reg[12] + Reg[4]

n

n n

k k k

A L U

Re g 4

Re g 12 Re g 9

4 12

SUM

9

clock

Reg[12]

Reg[4]

Reg[4] + reg[12]

(5)

Programmabilità

Il circuito di questo esempio sta eseguendo istruzioni del tipo:

«somma i registri R4 e R12 e metti il risultato in R9»

cioè « R9 = R4 + R12 »

in un Linguaggio Macchina, questo comando può apparire come:

in un Linguaggio Assembler, questo comando può apparire come

Memoria

Architettura degli elaboratori - 10 -

0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0

codice per l’operazione

«ADD»

(da mandare alla ALU come OPCode)

«9», indice del registro di destinazione

(da mandare al Register File

come i0)

«4», indice del primo operando (da mandare al Register File

come o0)

«12», indice del secondo

operando (da mandare al Register File

come o1)

ADD R9, R4, R12

Torniamo un secondo ad una visione complessiva dei livelli di astrazione

In un linguaggio ad alto livello (es. C o Java) scriveremo:

Il compilatore potrebbe (per es) decidere che le variabili con gli identificatori «tot_animali», «n_mucche», «n_pecore»

vadano memorizzati nei registri n. 10, 11, e 12 rispettivamente, e tradurre il comando di assegnamento come:

che in un linguaggio macchina binario diventa (per es):

int tot_animali, n_mucche, n_pecore;

… /* altro codice */

tot_animali = n_mucche + n_pecore;

ADD R10, R11, R12

0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0

(6)

Register File 32x64 (32 reg a 64 bit)

1 bus di input, 2 bus di output: implementaz.

Memoria

Architettura degli elaboratori - 12 -

CK

64 64

R0 U

I

L

R1 U I

L

64

R2 U I

L

64

R3 U I

L

64

R30 U

I

L

64

R31 U

I

L

D E C

32 31 30

64

64 64

M U X M U X

29 28 2

o

0

o

1

i

0 5

5 5

Register File e ALU:

note sul ciclo di clock

Fino a che il ciclo di clock non finisce (con un fronte in discesa):

il Register File manda gli operandi in uscita;

la ALU trova questi operandi nei propri ingresso;

la ALU manda il risultato computato nella propria uscita;

il Register File trova il risultato nel proprio ingresso.

Quando avviene il fronte in discesa, il Register File memorizza il risultato nel registro indicato

(nota: agli altri mandiamo L=0 e non si modificano) Alcune conseguenze importanti:

è possibile eseguire comandi del tipo R5  R5 + R9 infatti R5 viene sovrascritto solo alla fine del ciclo di clock.

Fino ad allora la ALU vede il vecchio R5 immutato come operando.

Il ciclo di clock deve essere sufficientemente lungo da permettere al segnale di propagarsi dall’output del Register File al suo input, (compreso il computo della ALU)

Questo mette un limite alla frequenza di clock!

(7)

Varianti e integrazioni dei register file

Numero di «bus», di entrata e di uscita nell‘esempio visto, ci sono:

2 di uscita

(da cui leggere il contenuto di 2 registri dati, contemporaneamente!) 1 di entrata

(da cui immettere il contenuto da memorizzare in 1 registro dato) Possono essere in numero diverso, es 2 di entrata

Puo’ esserci anche un solo bus con entrambe le funzioni, come vedremo

Bit ulteriori di comando possono che essere aggiunti:

WR (write): per abilitare/disabilitare la memorizzazione:

se WR = 0 non viene memorizzato alcun valore in alcun registro Reset: per azzerare uno o anche tutti i registri

contemporaneamente

Memoria

Architettura degli elaboratori - 14 -

Register File: note sull’uso

Ogni registro può contenere valori di qualsiasi tipo:

naturali in binario, virgola mobile, complemento a due, caratteri…

purché usino (al massimo) il numero di bit a disposizione nel reg.

Spetterà a chi definisce il programma in binario (cioè, tipicamente, al compilatore)

usare i dati memorizzati nei registri in modo coerente con il loro tipo Ricorda: per la ALU

«somma fra interi» e «somma fra numeri in virgola mobile»

sono due operazione distinte!

Con due sotto-circuiti diversi dentro la ALU.

Sono due istruzioni diverse in Assembler e in Linguaggio Macchina.

Anche se sono lo stesso comando « +» per es in C o Java Se in R5 memorizzo un numero in virgola mobile, e poi lo uso come operando in una somma fra interi,

il risultato non avrà molto senso

(8)

Register File: note sulle dimensioni

Per mregistri a nbit, ci vogliono:

k= log2m bit di input per ciascun indice due MUX a mingressi

m branching del dato in input (e un DEC da ka m bit) mregistri paralleli, con comando di caricamento (L) (quindi ben m xn Flip-Flop  )

3k bit nelle istruzioni in linguaggio macchina binario necessari solo per specificare i tre indici dei registri Dimensioni tipiche:

n è la dimensione della «parola» (un word) dell’architettura.

Macchine «a 32 bit»: n = 32 Macchine «a 64 bit»: n = 64

m in quasi tutte le architetture reali è piccolo (es da 8 a 64) valore più popolare: m = 32 (k = 5)

m piccolo = Istruzioni Corte  + Register File piccolo e veloce 

Memoria

Architettura degli elaboratori - 16 -

un prezzo molto caro, soprattutto per m

Memorie più grandi?

Se i nostri programmi richiedessero, per lavorare, solo una manciata di variabili in memoria, la lezione sulle memorie finirebbe qui.

Il tipico programma richiede invece migliaia, milioni, miliardi, o oltre, di parole (word) di dati.

(fra l’altro, le nostre architetture sono di Von Neumann: anche i programmi alloggiano in memoria. I programmi però non sono quasi mai il grosso dell’occupazione di memoria. I dati lo sono.) Il semplice Register File come lo abbiamo visto non si presta neanche lontanamente a dimensioni di questo tipo.

(cioè: questa archiettura non è scalabile, non scala facilmente a dimensioni molto maggiori di quelle viste)

Coming up next: vedremo molti compromessi, e alcuni nuovi dispositivi, per dotarci di memorie molto più capienti

Il Register File rimane comunque la memoria più veloce:

un comodo ed efficientissimo «banco di lavoro» della ALU.

Meglio riservare il suo uso ai dati che utilizziamo più spesso!

Riferimenti

Documenti correlati

ELENA, the European Legal Network on Asylum, is a forum for legal practitioners who aim to promote the highest human rights standards for the treatment of refugees, asylum

• Register events list reviewed and enhanced – Procedural actions that trigger a Register Alert notification.

il risultato non avrà molto senso.. I programmi però non sono quasi mai il grosso dell’occupazione di memoria. I dati lo sono.) Il semplice Register File come lo abbiamo visto non

Una volta aperto un file, su di esso si puo` accedere in lettura e/o scrittura, compatibilmente con quanto specificato in fase di apertura. Quattro

 Per leggere dati da un file presente sul disco, Per leggere dati da un file presente sul disco, occorre dapprima costruire un oggetto di tipo occorre dapprima costruire un

In Italia stiamo assistendo ad un continuo evolversi delle norme volte alla salvaguardia delle vite umane e dell’ambiente, purtroppo sollecitate da eventi dannosi a livello

sbrk, varia dinamicamente la dimensione del segmento dati modificando il valore di break assegnato dal sistema operativo (il primo indirizzo oltre il limite dell’area dati).. E’

Nonostante il recente Piano Nazionale per il diabete identifichi la condizione diabete e gravidanza come una delle aree ritenute prioritarie per il miglioramento