• Non ci sono risultati.

Richiami sull’architettura del Richiami sull’architettura del processore MIPS a 32 bit processore MIPS a 32 bit

N/A
N/A
Protected

Academic year: 2022

Condividi "Richiami sull’architettura del Richiami sull’architettura del processore MIPS a 32 bit processore MIPS a 32 bit"

Copied!
35
0
0

Testo completo

(1)

Richiami sull’architettura del Richiami sull’architettura del

processore MIPS a 32 bit processore MIPS a 32 bit

Lucidi fatti in collaborazione con dell’Ing. Valeria Cardellini

(2)

Caratteristiche principali dell’architettura Caratteristiche principali dell’architettura

del processore MIPS del processore MIPS

• E’ un’architettura RISC (Reduced Instruction Set Computer)

– Esegue soltanto istruzioni con un ciclo base ridotto, con l’obiettivo di migliorare le prestazioni fornite dalle architetture CICS

• Le istruzioni più comuni vengono eseguite nel modo più veloce possibile

• Si riduce la flessibilità di indirizzamento della memoria (p.e. non si prevedono accessi in memoria di tipo indiretto)

• Architettura di tipo registro-registro (load/store)

– Gli operandi della ALU possono provenire solo dai registri di uso generale interni al processore e non possono provenire

direttamente dalla memoria (cache)

• Operazioni di load: caricamento dei dati dalla memoria ai registri del processore

• Operazioni di store: memorizzazione dei dati contenuti nei registri del processore in memoria

(3)

Richiami riguardanti … Richiami riguardanti …

• Sottoinsieme di istruzioni

(sufficiente però a far vedere l’architettura del processore)

• Esecuzione delle istruzioni

(cicli istruzioni)

• Struttura del processore

(tre possibili soluzioni, SCA-SCO)

(4)

Insieme di istruzioni semplificato del MIPS Insieme di istruzioni semplificato del MIPS

• Consideriamo un’implementazione semplificata del processore MIPS

– In particolare, no istruzioni di I/O

• Tre classi di istruzioni

– Istruzioni logico-aritmetiche

– Istruzioni di trasferimento da/verso la memoria (load/store) – Istruzioni di salto (condizionato e incondizionato) per il

controllo del flusso di programma

(5)

Esempi di istruzioni Esempi di istruzioni

• Istruzioni logico-aritmetiche

(tra registri) – add $s0, $s0, $s1 # $s0 = $s0 + $s1

– and $s1, $s2, $s3 # $s1 = $s2 && $s3

• Istruzioni logico-aritmetiche

(con immediato) – addi $t0, $t0, 1 # $t0 = $t0 + 1

• Istruzioni di trasferimento dati

(da/verso la memoria)

– lw $s1, 8($s2) # $s1 = Mem[$s2+8]

– sw $s1, 8($s2) # Mem[$s2+8] = $s1

(6)

Esempi di istruzioni (2) Esempi di istruzioni (2)

• Istruzioni di salto condizionato

– beq $s0, $s1, L1 # salta all’indirizzo L1 se ($s0 == $s1)

– bne $s0, $s1, L1 # salta all’indirizzo L1 se ($s0 != $s1)

• Istruzioni di salto incondizionato

– j L1 # salta a L1

– jr $s1 # salta all’indirizzo in $s1 – jal L1 # salta a L1; salva l’indirizzo

della prossima istruzione in $ra

(vedere lucido successivo)

(7)

Registri del processore MIPS a 32 bit Registri del processore MIPS a 32 bit

• 32 registri di uso generale

– Per convenzione si usano nomi simbolici preceduti da $

• $s0, $s1, …, $s7 (detti registri saved) per contenere variabili

• $t0, $t1, …, $t9 (detti registri temporanei) per contenere variabili temporanee

– I registri possono anche essere indicati dal loro numero preceduto da $: $0, …, $31

• Dei 32 registri alcuni sono special-purpose, ossia dedicati per l’esecuzione di alcune istruzioni

– Es.: $ra (= $31) è il registro di ritorno

• 32 registri in virgola mobile

– $f0, …, $f31

(8)

Formato delle istruzioni MIPS Formato delle istruzioni MIPS

• Tutte le istruzioni MIPS hanno la stessa lunghezza (32 bit)

• Le istruzioni MIPS che vedremo sono di 3 formati

– Formato R (registro)

• Istruzioni logico-aritmetiche (con operandi solo nei registri)

– Formato I (immediato/indirizzo)

• Istruzioni con operandi immediati

• Istruzioni di accesso in memoria (load/store)

• Istruzioni di salto condizionato

– Formato J (jump)

• Istruzioni di salto incondizionato

• I diversi formati sono riconosciuti tramite il valore dei 6 bit

del primo campo, detto codice operativo (opcode), che

indica anche come trattare i rimanenti 26 bit dell’istruzione

(9)

Formato delle istruzioni MIPS (2) Formato delle istruzioni MIPS (2)

Formato R

Formato I

Formato J

• I campi delle istruzioni

op (opcode): identifica il formato di istruzione rs, rt, rd:

• Caso R: registri sorgente (rs e rt) e registro destinazione (rd)

• Caso load: registro sorgente (rs) e registro destinazione (rt)

• Caso altre I: registri sorgente (rs e rt)

shamt (shift amount): necessario per le operazioni di scorrimento funct: indica la variante specifica dell’operazione nel campo op indirizzo/immediato: offset dell’indirizzo o valore immediato indirizzo di destinazione: una parte dell’indirizzo di destinazione

op indirizzo di destinazione

0 26

31

6 bit 26 bit

op rs rt rd shamt funct

0 6

11 16

21 26

31

6 bit 5 bit 5 bit 5 bit 5 bit 6 bit

op rs rt indirizzo/immediato

0 16

21 26

31

6 bit 5 bit 5 bit 16 bit

(10)

Modalità di indirizzamento Modalità di indirizzamento

• Le modalità di indirizzamento indicano i diversi modi con i quali fare riferimento agli operandi nelle istruzioni

• MIPS ha solo 5 modalità di indirizzamento:

– tramite registro – immediato

– tramite base o spiazzamento – relativo al Program Counter – pseudo-diretto

• Una singola istruzione può usare più modalità di indirizzamento (es.: addi $t0, $t0, 4,

che non

implementeremo

)

(11)

Modalità di indirizzamento (2) Modalità di indirizzamento (2)

• Indirizzamento tramite registro

– L’operando è il contenuto di un registro del processore – Esempio: add $s0, $s1, $s2 (formato tipo R)

• Indirizzamento immediato

(che non implementeremo) – L’operando è una costante, il cui valore è specificato

nell’istruzione

– Esempio: addi $s0, $s1, 1 (formato tipo I)

• Indirizzamento con base o spiazzamento

– L’operando è in una locazione di memoria, il cui indirizzo si ottiene sommando il contenuto di un registro base ad un valore costante (offset o spiazzamento) specificato nell’istruzione

– Esempio: lw $t1, 4($s0) (formato tipo I)

(12)

Modalità di indirizzamento (3) Modalità di indirizzamento (3)

• Indirizzamento relativo al Program Counter

– L’operando è in una locazione di memoria, il cui indirizzo si ottiene sommando il contenuto del Program Counter (PC) ad un valore costante (offset o spiazzamento) specificato nell’istruzione

– Esempio: beq $s0, $s1, L1 (formato tipo I)

» Indirizzo= PC+4+L1

• Indirizzamento pseudo-diretto

– Una parte dell’indirizzo è presente come valore costante (offset) nell’istruzione, ma deve essere completato

– L’indirizzo di destinazione del salto si ottiene traslando a sinistra di 2 bit i 26 bit di offset specificati nell’istruzione e concatenando i 28 bit così ottenuti con i 4 bit più significativi del PC

– Esempio: j L2 (formato tipo J)

» Indirizzo = 4 bit più sign.di (PC+4)*L2*00

(13)

Il processore (1) Il processore (1)

Distinguiamo unità di elaborazione (SCA) e unità di controllo (SCO)

• Unità di elaborazione dati

– Hardware per compiere le operazioni necessarie all’esecuzione delle istruzioni

• Unità di controllo

– Riceve dei segnali di ingresso e genera in uscita segnali per la lettura/scrittura degli elementi di memoria, segnali di selezione per i multiplexer, segnali per il controllo della ALU

(14)

Il processore (2) Il processore (2)

• Implementazione dell’unità di elaborazione a ciclo singolo

– tutte le istruzioni vengono eseguite in un solo ciclo di clock, la cui durata è determinata dal percorso critico

• Implementazione dell’unità di elaborazione a ciclo multiplo

– l’esecuzione di un’istruzione richiede più cicli di clock

• Implementazione dell’unità di elaborazione a pipeline

– l’esecuzione di un’istruzione richiede più cicli di clock

– nel SCA ci sono tante istruzioni per quanti sono gli stadi della pipeline

(15)

I cinque passi delle istruzioni I cinque passi delle istruzioni

• Ogni istruzione può al più essere eseguita in cinque passi

(i primi tre vengono sempre eseguiti):

– prelievo dell’istruzione (Instruction fetch: IF)

– decodifica dell’istruzione/prelievo dei dati dai registri (Instruction decode: ID)

– Esecuzione e/o calcolo dell’indirizzo di memoria (Execute:

EX)

– accesso alla memoria in lettura o scrittura (Memory access: MEM)

– scrittura del risultato nel registro destinazione (Write-back:

WB)

IF ID EX MEM WB

(16)

Esecuzione delle istruzioni logico-aritmetiche Esecuzione delle istruzioni logico-aritmetiche

• Esempio: op $x, $y, $z

• Un’istruzione logico-aritmetica viene eseguita in 4 passi

1. Prelievo dell’istruzione dalla memoria istruzioni e incremento del PC

2. Lettura dei due registri sorgente ($y e $z) dal banco dei registri

3. Esecuzione dell’operazione (op) da parte dell’ALU sui valori letti dal banco dei registri

4. Scrittura del risultato dell’ALU nel registro destinazione ($x) del banco dei registri

(17)

Esecuzione delle istruzioni di load Esecuzione delle istruzioni di load

• Esempio: lw $x, offset($y)

• Un’istruzione di load viene eseguita in 5 passi

1. Prelievo dell’istruzione dalla memoria istruzioni e incremento del PC

2. Lettura del registro base ($y) dal banco dei registri

3. Esecuzione dell’operazione (somma) da parte dell’ALU per calcolare l’indirizzo di memoria ($y + offset), notare che i registri sono a 32 bit mentre l’offset è di 16 bit (estensione del segno)

4. Lettura del dato dalla memoria dati (Mem[$y + offset]) utilizzando come indirizzo il risultato della ALU

5. Scrittura del dato proveniente dalla memoria nel registro destinazione ($x) del banco dei registri

(18)

Esecuzione delle istruzioni di store Esecuzione delle istruzioni di store

• Esempio: sw $x, offset($y)

• Un’istruzione di store viene eseguita in 4 passi

1. Prelievo dell’istruzione dalla memoria istruzioni e incremento del PC

2. Lettura del registro base ($y) e del valore da memorizzare in memoria ($x) dal banco dei registri

3. Esecuzione dell’operazione (somma) da parte dell’ALU per calcolare l’indirizzo di memoria ($y + offset), notare che i registri sono a 32 bit mentre l’offset è di 16 bit (estensione del segno)

4. Scrittura del dato proveniente dal banco dei registri ($x) nella memoria dati (Mem[$y + offset]) utilizzando come indirizzo il risultato della ALU

(19)

Esecuzione delle istruzioni di salto condizionato Esecuzione delle istruzioni di salto condizionato

• Esempio: beq $x, $y, offset

• Un’istruzione di salto condizionato viene eseguita in 4 passi

1. Prelievo dell’istruzione dalla memoria istruzioni e incremento del PC

2. Lettura dei due registri sorgente ($x e $y) dal banco dei registri

3. Esecuzione dell’operazione (sottrazione) da parte dell’ALU per confrontare i valori letti dal banco dei registri ($x - $y) e calcolo dell’indirizzo di destinazione del salto

4. L’uscita Zero della ALU viene utilizzata per decidere quale valore deve essere memorizzato nel PC: (PC+4) oppure (PC+4+offset, notare che il registro PC è a 32 bit mentre l’offset è di 16 bit (estensione del segno)

(20)

Esecuzione delle istruzioni Esecuzione delle istruzioni

• Per ogni tipo di istruzione, i primi due passi da eseguire sono uguali

– Prelievo dell’istruzione dalla memoria istruzioni e incremento del PC

– Lettura di uno o due registri dal banco dei registri, selezionando i registri a cui accedere tramite i campi dell’istruzione

• Le azioni successive dipendono dal tipo di istruzione (codice operativo), sebbene tutte le istruzioni utilizzino l’ALU dopo il secondo passo

– Le istruzioni logico-aritmetiche per eseguire l’operazione

– Le istruzioni di load e store per calcolare l’indirizzo di memoria – Le istruzioni di salto condizionato per effettuare il confronto

(21)

Esecuzione delle istruzioni (2) Esecuzione delle istruzioni (2)

• Dopo aver utilizzato l’ALU, le azioni richieste per completare le varie istruzioni si differenziano

ulteriormente

– Le istruzioni logico-aritmetiche devono scrivere il risultato della ALU nel registro destinazione

– Le istruzioni di load richiedono l’accesso in lettura alla

memoria dati ed eseguono il caricamento del dato letto nel registro di destinazione

– Le istruzioni di store richiedono l’accesso in scrittura alla memoria dati ed eseguono la memorizzazione del dato proveniente dal registro sorgente

– Le istruzioni di salto condizionato devono scrivere il valore del PC in base al risultato del confronto

(22)

SCO-SCA uniciclo

SCO-SCA uniciclo

(23)

Struttura di base del processore MIPS Struttura di base del processore MIPS

• Per eseguire tutte le istruzioni in un solo ciclo di clock

– Ogni risorsa/unità funzionale può essere utilizzata una sola volta per istruzione

– Occorre duplicare le risorse/unità funzionali di cui si ha bisogno più di una volta nello stesso ciclo di clock

• Memoria dati distinta dalla memoria istruzioni

• ALU e sommatori

– Alcune risorse/unità funzionali possono essere condivise da differenti flussi di esecuzione

• Tramite l’introduzione di multiplexer

(24)

PC Instruction Memory

address Instruction

ALU control

ALU zero

<

Adder sum

Componenti di base (1) Componenti di base (1)

Load (nel seguito non lo evidenzieremo... Ck)

(25)

Componenti di base (2) Componenti di base (2)

Data Memory

address

Read data

Registers

Reg Write

(Reg-sorg 1) Reg-sorg 1

Reg-sorg 2

Reg-dest

Data-to-write

5 5 32 5

32 32

(Reg-sorg 2)

Write data

Mem Read Mem Write

Sign 32

extend

16 I registri commutano

sul fronte positivo

(26)

Banco dei registri (scrittura)

R0 R1 R31

w0 w1 w31

Decoder

Reg write

Reg dest

(27)

Banco dei registri (lettura)

R0 R1 R31

B31-1

B0-1 B1-2 B31-2

Reg source 2

Decoder Decoder

Reg source 1

(Reg source 2) (Reg source 1)

(28)

HW per eseguire istruzioni CLASSE R

(29)

HW per eseguire istruzioni CLASSE I

(30)

L’unità di elaborazione a ciclo singolo L’unità di elaborazione a ciclo singolo

con i segnali di controllo

con i segnali di controllo

(31)

Il significato dei segnali di controllo Il significato dei segnali di controllo

Segnale Effetto quando vale 0 Effetto quando vale 1

RegDst Registro destinazione = rt Registro destinazione = rd

RegWrite Nessuno Nel registro indicato

sull’ingresso Write register

viene scritto il valore Write data ALUSrc Il secondo operando di ALU

viene da Read data 2 Il secondo operando di ALU viene dall’estensione di segno PCSrc =

Branch AND zero

Scrittura di PC con PC+4 Scrittura di PC con l’output del sommatore per il branch

MemRead Nessuno Lettura della locazione di

memoria indicata da Address

MemWrite Nessuno Scrittura della locazione di

memoria indicata da Address

(32)

L’unità di elaborazione a ciclo singolo L’unità di elaborazione a ciclo singolo

con l’unità di controllo

con l’unità di controllo

(33)

Il valore dei segnali di controllo Il valore dei segnali di controllo

Istruzione RegDst ALUSrc Memto

Reg Reg

Write Mem

Read Mem

Write Branch ALUOp

tipo-R 1 0 0 1 0 0 0 10

lw 0 1 1 1 1 0 0 00

sw X 1 X 0 0 1 0 00

beq X 0 X 0 0 0 1 01

(34)

SCO-SCA multiciclo

SCO-SCA multiciclo

(35)

L’unità di elaborazione a ciclo multiplo L’unità di elaborazione a ciclo multiplo

• L’esecuzione di un’istruzione è distribuita su più cicli

• Si utilizza un ciclo di clock di durata inferiore rispetto a quello dell’implementazione a ciclo singolo

• Implementazione dell’unità di elaborazione a ciclo multiplo

– Più complessa del ciclo singolo

– Ogni fase di esecuzione di un’istruzione richiede un ciclo di clock – Un’unità funzionale può essere usata più di una volta per istruzione

in cicli differenti (condivisione di unità funzionali ed eliminazione di ridondanze hardware)

• Singola unità di memoria per istruzioni e dati anziché due memorie distinte

• Una sola ALU anziché una ALU e due sommatori

– Occorre introdurre dei registri interni addizionali per memorizzare i valori da usare nei cicli di clock successivi

Riferimenti

Documenti correlati

[r]

Esiste un programma chiamato interprete che è in grado di prendere in ingresso le istruzioni scritte in linguaggio ad alto livello (una alla volta) e fornire in uscita le

Un Operando può essere una costante o un indirizzo di memoria Un’istruzione può essere registrata in più locazioni di memoria Il valore di un operando può essere registrato in

Le istruzioni sono codificate in binario secondo un formato predefinito Ciascuna istruzione è formata da un Codice Operativo e da uno o più Operandiw. Un Operando può essere

Un Operando può essere una costante o un indirizzo di memoria Il Codice Operativo indica l’operazione che deve essere eseguita Un’istruzione può essere registrata in più

– leggo da file i valori della matrice A – trasformo la matrice A nella matrice B – predispongo la scrittura del file Output – salvo su file i valori della matrice risultante B

• L’indirizzo (lineare) prodotto dall’unità di segmentazione viene assunto come indirizzo virtuale lineare, cioè pertinente ad una memoria virtuale lineare, a cui viene

When using the physical address extension, the CR3 register contains the base address of the page-directory-pointer table In IA-32e mode, the CR3 register contains the base address