Datapath
Transcript
Datapath
Elementi base per la realizzazione dell’unità di calcolo Memoria istruzioni elemento di stato dove le istruzioni vengono memorizzate e recuperate tramite un indirizzo. ind. istruzione Memoria istruzioni istruzione Contatore di programma (program counter) PC elemento di stato dove viene memorizzato l’indirizzo dell’istruzione corrente. PC segnale di controllo per la scrittura ALU la rete combinatoria per le operazioni aritmetico-logiche Addizionatore (ALU semplificata) rete combinatoria per incrementare il program counter (di 4 byte ogni volta). Add 4 Banco di registri (register file) elemento di stato, contiene tutti i registri. registro lettura #1 numero registro registro lettura #2 dato #1 registro scrittura dato dato in scrittura dati dato #2 segnale di controllo scrittura Lettura da un registro Per leggere il contenuto di un registro deve essere dato in input il numero del registro (che sara' codificato con 5 bit per identificare uno dei 32 registri: 25 = 32), l’output sarà il dato contenuto nel registro. # reg1 Registro 0 Registro 1 … … … . Registro n M u x dato1 M u x dato2 # reg2 Scrittura in un registro Per la scrittura viene utilizzato un decodificatore che trasforma il segnale in ingresso (5 bit che rappresentano il numero del registro) in 25 segnali d’uscita, uno solo dei quali è asserito per ogni configurazione in input. write C # registro dato d e c o d e r D C D C D Nucleo istruzioni MIPS - istruzioni di riferimento a memoria: lw, sw - istruzioni aritmetico logiche: add, sub, and, or, slt - istruzioni di salto: condizionato beq ed incondizionato j (jump). Il primo passo per la realizzare una di queste istruzioni consiste - nell’inviare il contenuto del PC alla memoria istruzioni per leggere l’istruzione corrente; ed aggiornare il PC sulla successiva istruzione da eseguire (il cui indirizzo di norma si ottiene sommando 4 (byte) all’indirizzo dell’istruzione corrente). 4 PC Memoria istruzioni I passi successivi dipendono dalla classe di istruzioni che si considera. Consideriamo prima le istruzioni aritmetico logiche: add, sub, and, or, slt la cui forma generale è codice-istruzione n-reg1, n-reg2, n-reg3 0 rs rt rd 6 bit 5 bit 5 bit 5 bit funct 5 bit 6 bit Per queste istruzioni i passi successivi consistono nel - leggere dai registri n-reg2 e n-reg3 i dati su cui operare; - inviare i dati all’ALU - scrivere nel registro di scrittura (n-reg1) il dato calcolato dall’ALU. 5 Registro lettura 1 5 Registro lettura 2 controllo ALU Lettura dati 1 5 Zero Registro scrittura Scrittura dati Lettura dati 2 write Il segnale di write deve essere opportunamente sincronizzato per abilitare la scrittura al momento giusto: non deve essere permessa la scrittura finchè tutti i dati non sono stati letti. Ammettendo la transizione solo durante i fronti attivi del clock verrà sempre letto il dato scritto durante il precedente fronte attivo. Istruzioni di riferimento a memoria: lw, sw La forma generale per le istruzioni load-word e store-word è: codice-istruzione op 6 bit n-reg1, offset (n-reg2) rs rt ind 5 bit 5 bit 16 bit Per realizzare queste istruzioni si deve - calcolare l’indirizzo di memoria sommando l’offset al contenuto del registro base. Poiché l’offset è contenuto in 16 bit serve un’ulteriore componente: unità di estensione del segno. 16 32 - leggere il dato in memoria e caricarlo sul registro indicato oppure scrivere in memoria il dato registrato nel registro indicato. write Indirizzo dato (lettura) Memoria Dato (scrittura) read Istruzione di salto condizionato: beq La forma dell’istruzione è: beq 4 6 bit n-reg1, n-reg2, label rs rt offset 5 bit 5 bit 16 bit La realizzazione di questa istruzione richiede una modifica all’aggiornamento del PC sviluppato per le istruzioni nelle altre due classi. Ricordiamo che se i registri rs ed rt contengono lo stesso dato l’istruzione che deve seguire quella corrente si trova calcolando PC + 4 (= istruzione successiva a quella attuale) + offset × 4. offset × 4 PC + 4 si calcola applicando uno shift di due bit a sinistra è il valore già calcolato per le altre istruzioni Per verificare se i registri rs ed rt contengono lo stesso dato si inviano all’ALU i due dati con la richiesta dell’operazione di sottrazione e si utilizza poi l’uscita ‘Zero’. Istruzione di salto incondizionato: j La forma dell’istruzione è: 2 6 bit j indirizzo ind 26 bit Come per il salto condizionato l’indirizzo deve essere moltiplicato per 4. Composizione delle diverse parti dell’unità di calcolo Alcune delle unità sviluppate per le varie classi di istruzioni possono essere condivise da piu’classi anche se ci sono delle differenze sulla provenienza degli input. Per dirottare i segnali in modo opportuno si utilizzano i selettori (multiplexor). Esempio. L’ALU viene utilizzata sia dalle istruzioni di tipo R (add, sub, etc.) che dalle istruzioni di riferimento a memoria. Le prime passano all’ALU i contenuti di due registri; le seconde il contenuto di un registro ed il dato ottenuto estendendo a 32 bit l’offset. Registri M u x 16 32