Anteprima
Vedrai una selezione di 6 pagine su 22
Architettura MIPS - Calcolatori elettronici Pag. 1 Architettura MIPS - Calcolatori elettronici Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Architettura MIPS - Calcolatori elettronici Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Architettura MIPS - Calcolatori elettronici Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Architettura MIPS - Calcolatori elettronici Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Architettura MIPS - Calcolatori elettronici Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ISTRUZIONI

Load/Store → - I dati sono scaricati (lw) in o caricati (sw) da un registro nel register file indirizzo a 5 bit. - L’indirizzo di memoria, a 32 birs, è formato aggiungendo al contenuto dell’indirizzo base del registro il valoredi offset. Per muovere i byte utilizziamo le istruzioni: lb e sb. Gli 8 bits presi in considerazione (scaricati o caricati) sonoquelli più a destra.

Immediate - Mettiamo una costante tipica nella memoria e scarichiamola da lì. - Creiamo un registro apposito per la costante ($zero). - Utilizziamo speciali istruzioni che contengono la costante (es. slt, stli). Se volessimo utilizzare costanti a 32 bits dovremmo utilizzare due istruzioni: → - lui (load upper immediate) posiziona i primi 16 bits a sinistra. → - ori posiziona gli ultimi 16 bits a destra.

Shift Operation Abbiamo bisogno di operazioni che spostino pacchetti di 8-bit in parole da 32 bit: → - sll shift left. → - srl shift right.

Branch condizionali

→Salti condizionati da una condizione bne, beq. Come specificiamo la destinazione? → →Usiamo un registro a cui sommiamo 16 bit di offset Instruction Address Register (PC Program Counter)→ il suo uso è implicato automaticamente dall'istruzione e si aggiorna ad ogni ciclo di fetch così sa l'indirizzo della prossima istruzione. In supporto a queste istruzioni abbiamo l'assembler, che utilizzando un registro riservato ad esso ($at) permette di includere istruzioni speciali quali: →- ble be less than or equal to. →- bgt be greater than. →- bge be greater than or equal to. Jump, Jump and link e Jump return → →Salti incondizionati j, jal e jr ($ra return address). I 6 steps nell'esecuzione di una procedura sono: 1) La Main (caller) posiziona i parametri dove la procedura (callee) può accedere ($a0, ..., $a3). 2) La Main trasferisce il controllo alla procedura. 3) La procedura prende le risorse di cui ha bisogno. 4) La procedura esegue le sue operazioni. 5) La procedura restituisce i risultati alla Main. 6) La Main riprende il controllo e utilizza i risultati ottenuti.

bisogno.

  1. La procedura esegue l'istruzione richiesta.
  2. La procedura posiziona il risultato dove la Main può accedere ($vo, ..., $v1).
  3. La procedura ripassa il controllo alla Main ($ra).

Se la procedura dovesse avere bisogno di più registri per allocare argomenti e ritornare valori allora useremo uno stack (LIFO Last In First Out) $sp (Stack Pointer):

  • Push: aggiungiamo dati nello stack.
  • Pop: rimoviamo dati dallo stack.

2 tipi di segmento dati:

  • Statico: costanti statiche come gli arrays.
  • Dinamico (heap): strutture che crescono e decrescono come le liste.

Il segmento dello stack che contiene i registri salvati della procedura e le variabili locali è il procedure frame:

Il Frame Pointer ($fp) punta alla prima parola del frame della procedura e provvede ad un registro base stabile per la procedura. $fp è inizializzato usando $sp in chiamata e $sp è restaurato usando $fp in ritorno.

Special: Atomic

Exchange scambia un valore in un registro con un valore in memoria automaticamente una sola istruzione. In alternativa, possiamo utilizzare speciali istruzioni configurate:

  • ll load linked
  • sc store linked

Se il contenuto della locazione di memoria specificata da ll cambia prima che sc si verifichi allo stesso indirizzo, questo fallisce e ritorna zero.

Gerarchia Traduzione codice C:

  1. Programma in C
  2. Compilatore
  3. Codice assembler
  4. Assembler
  5. Codice oggetto (codice macchina)
  6. Linker + librerie (codice macchina)
  7. Eseguibile (codice macchina)
  8. Loader memoria (codice macchina)

Gerarchi Traduzione codice Java:

  1. Programma in Java
  2. Compilatore
  3. Class files (Java bytecodes)
  4. Compilatore Just In Time (JIT) + Macchina Virtuale Java (+ Librerie Java (codice macchina))
  5. Metodi Java compilati (codice macchina)

CPU:

Clocking methodology definisce quando un dato in un elemento di stato è valido e stabile relativo.

al clock: →- Elementi di stato elemento di memoria come un registro. →- Edge triggered tutti i cambiamenti di stato si verificano sul bordo del clock. →Assumiamo che gli elementi di stato siano scritti su tutti i cicli di clock se non è così abbiamo bisogno diesplicitare il segnale di controllo write: la scrittura si verifica solo quando il segnale di controllo write èasserito e si verifica il bordo del clock.

DATAPATH SENZA PIPELINE Utilizzo del clock. Fasi: Fetch (IF): →- PC (Program Counter) si aggiorna ad ogni giro di clock per l'istruzione successiva con un adder (PC+4). →- Memoria Istruzioni legge l'istruzione da eseguire. →- Il PC è aggiornato ad ogni ciclo di clock non ha bisogno di un segnale di controllo esplicito write. →- La lettura dalla Memoria Istruzioni è una attività combinatoria non ha bisogno di un segnale di controllo esplicito write.

Decoding (ID): →- Registro file vengono letti i

registri RS, RT, RD e, in caso di load word, viene scritto il dato caricato dalla memoria. E' controllato dell'ingresso RegWrite. In uscita vengono letti due valori.

- Unità di Controllo riceve l'opcode e controlla tutti i segnali necessari ad eseguire l'istruzione.

Executing (EX):

- ALU riceve i dati dal registro file ed esegue l'operazione. E' controllato dalla ALU control che a sua volta riceve in ingresso il controllo ALUOp, dall'Unità di Controllo, e il segnale dell'istruzione [5-0]. L'uscita zero è utilizzata per le operazioni di branch. Nel caso di istruzioni di tipo R il risultato non entra nella Memoria Data ma va oltre.

- Esegue l'operazione (op e funct) con in valori in rs e rt carica il risultato nel Register File (nella locazione rd).

- Il Register File non è scritto ad ogni ciclo di clock abbiamo bisogno di esplicitare una segnale di controllo esplicito write.

Aggiungiamo al registro base i 16 bit di offset estesi a 32 con il Sign Extended calcoliamo l'indirizzo di memoria.
Store: valore store (letto dal Register File durante il decode) scritto nella Memoria Dati.
Load: valore load (letto dalla memoria Dati) scritto nel Register File.
Branch: compariamo gli operandi letti dal Register File durante il decode (zero ALU output) calcoliamo l'indirizzo di branch aggiungendo PC+4 ai 16 bit di offset estesi a 32 dal Sign Extended.
Jump: riposizioniamo i 28 bits inferiori del PC con i 26 bits inferiori della fetched instruction shiftata a sinistra di 2 bit.
Memory (MEM): Memoria Dati riceve in ingresso il risultato della ALU e, in caso di store word, il dato da caricare nella memoria. È controllata dai segnali di controllo MemWrite e MemRead.
WB: Multiplexer con controllo MemToReg viene caricato il dato nella porta Write Data in ingresso al Registro File.
Altri componenti.sono utilizzati per selezionare l'uscita corretta tra PC+4 e il risultato dell'Adder 2 in base al segnale di controllo PCSrc.→- MUX 5 riceve in ingresso il risultato dell'Adder 1 e il risultato dell'Adder 2 ed è controllato dal segnale di controllo PCWrite.→- MUX 6 riceve in ingresso il risultato dell'Adder 1 e il risultato dell'Adder 2 ed è controllato dal segnale di controllo PCWriteCond.→- MUX 7 riceve in ingresso il risultato dell'ALU e il risultato dell'Adder 1 ed è controllato dal segnale di controllo MemWrite.→- MUX 8 riceve in ingresso il risultato dell'ALU e il risultato dell'Adder 1 ed è controllato dal segnale di controllo MemRead.→- MUX 9 riceve in ingresso il risultato dell'ALU e il risultato dell'Adder 1 ed è controllato dal segnale di controllo RegWrite.→- MUX 10 riceve in ingresso il risultato dell'ALU e il risultato dell'Adder 1 ed è controllato dal segnale di controllo ALUOp.dall'uscita zero della ALU.
- Shift left 2 Jump utilizzato per istruzioni di jump, riceve in ingresso il segnale dell'istruzione [25-0] passando da 26 a 28 bits e viene aggiornato in uscita con il segnale PC+4 [31-28] passando così da 28 a 32 bits.
- MUX 5 riceve in ingresso il segnale jump e l'uscita del MUX 4 ed è controllato dal segnale di controllo Jump.
Assembliamo i segmenti del datapath e aggiungiamo le linee di controllo e i multiplexors necessari.
Single cycle design
Fetch, decode e execute in un ciclo di clock:
- Nessuna risorsa del datapath può essere utilizzata più di una volta per istruzione, alcune dovranno essere duplicate.
- I multiplexors hanno bisogno di segnali di controllo per la selezione.
- Segnali di scrittura per controllare il Register File e la Memoria Dati.
Il tempo di clock è determinato dalla lunghezza del percorso più lungo.
Svantaggi:
- Usiamo il ciclo di clock inefficientemente deve

essere temporizzato per accomodare le istruzioni più lente.→- Spreco di area dobbiamo duplicare alcune unità funzionali (es. adders) poiché non possono essere condivise durante il ciclo di clock.

Vantaggio:- È semplice e facile da capire.

DATAPATH CON PIPELINE

Per velocizzare il Datapath andiamo ad utilizzare la Pipeline che ci permette di iniziare l'istruzione successiva senza che l'altra abbia eseguito tutte le fasi ma sono quella di Fetch. Facendo così ottimizziamo la quantità di lavoro per unità di tempo (throughput) e la latenza dell'istruzione→non è ridotta. Per alcune istruzioni non saranno necessari tutti gli stadi wasted cycles. Posizioniamo degli State Registers tra ogni stage della pipeline per isolarli. Tutti i segnali di controllo sono determinati durante il Decode e sono mantenuti negli State Registers tra gli stadi della pipeline. Incorriamo in 3 categorie di errori:→- Errori strutturali sono

dovuti all'utilizzo della stessa risorsa da parte di due istruzioni differenti allo stesso tempo. →- Errori di dati dovuto all'utilizzo di un dato prima che sia pronto .→- Errori di controllo dovuto al prendere una decisione prima che la condizione sia stata valutata e che il nuovo target del PC sia stato calcolato (istruzioni di salto).
Per risolvere gli Errori di dati possiamo:→- Inserire degli stalli fermiamo la pipeline fino a che non sarà possibile eseguire l'istruzione successiva senza errori. L'inserimento di stalli implica l'inserimento di una Hazard Unit all'interno del Datapa
Dettagli
A.A. 2019-2020
22 pagine
4 download
SSD Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Simone.Contorno di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Genova o del prof Baglietto Pierpaolo.