Anteprima
Vedrai una selezione di 14 pagine su 62
Elettronica Pag. 1 Elettronica Pag. 2
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 6
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 11
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 16
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 21
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 26
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 31
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 36
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 41
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 46
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 51
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 56
Anteprima di 14 pagg. su 62.
Scarica il documento per vederlo tutto.
Elettronica Pag. 61
1 su 62
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

FLOATING POINT UNIT (FPU)

Esistono decodifiche Half (16 bit) / single (32 bit) /double (64 bit) precision, a seconda della precisione che vogliamo ottenere.

La codifica HALF PRECISION ha:

  • 1 bit per il segno;
  • 5 bit di esponente;
  • 10 bit di Mantissa;

per un totale di 16 bit.

La codifica SINGLE PRECISION, che è la più utilizzata (usata anche nella nostra fpu) ha:

  • 1 bit per il segno;
  • 8 bit per l'esponente;
  • 23 bit di Mantissa;

La DOUBLE PRECISION è una codifica a 64 bit, che ha una dinamica molto elevata e un'elevata precisione, però è una codifica molto costosa dal punto di vista delle risorse.

FORMATO A 8 BIT

Non è un formato standardizzato. Quando rappresentiamo un numero abbiamo 3 possibili formati:

  1. INTEGERS FORMAT (formato intero) che può essere:
    • Unsigned;
    • Signed;

    Viene usato solo per i numeri interi.

  2. FIXED POINT FORMAT (formato a virgola fissa, è un buon compromesso):
  3. è un intero,

Il quale però i bit vengono suddivisi tra una parte intera e una parte decimale, come nella rappresentazione a fianco dove vi sono 4 bit per la parte intera e 3 bit per la parte decimale. Questo viene chiamato formato Q4.3. Poi abbiamo un formato, il Q0.7, abbiamo 0 bit per la parte intera e 7 bit per la parte decimale.

3) FLOATING POINT FORMAT: per utilizzare questo formato serve un grosso dispendio di energia. È emulabile tramite software.

  • IEEE754 like (8bits) è il Floating Point Format. In questo formato non abbiamo una risoluzione costante.
  • Signed integers è un intervallo più esteso, ma comunque non sufficiente.

NUMERO NORMALIZZATO (floating point)

  • Viene codificato come: Nsegno + parte (fixed) tra 1.0 e 2.0 moltiplicata per 2
  • Segno (1 bit):
    • 0: positivo
    • 1: negativo
  • Esponente (fixed) (8-bit):
    • ha un valore compreso tra 0 e 254
    • ha un range che varia da -126 a +127
  • Mantissa (risoluzione) (23-bit): è un valore tra 0
e 1. La codifica di un numero in floating point è la seguente: VALORI SPECIALI Oltre alla rappresentazione dei normali valori, ci sono anche alcuni valori particolari: - Valori DENORMALIZZATI: sono i valori in cui il campo esponente ha tutti zero, ma la mantissa è diversa da zero. Qui ci sono i numeri troppo piccoli per essere normalizzati; - Valori dell'INFINITO: sono valori simbolici, quando tutti i campi dell'esponente sono a 1 e quelli della mantissa sono tutti a 0. Questi numeri servono per creare valori o eccezioni in seguito ad un overflow o per fare divisioni per zero. Questi valori sono codificati, ma non possono essere utilizzati come operando. - Valori NOT A NUMBER (indeterminati): gli esponenti hanno tutti 1, ma la mantissa non è tutta a zero. Possono essere propagati in alcuni casi nell'istruzione successiva, ad es. l'operazione indeterminata 0/0. - Numeri SIGNED ZERO: sono i numeri che vengono messi con segno per la rappresentazione del valore zero.

saturazione(tramite i quali possiamo gestire una saturazione).Riassumendo… La precisione ha dei limiti però, perché cipotrebbero essere degli errori diarrotondamento, dovuti al fatto che ilnumero lo rappresentiamo con una certaapprossimazione. Questi errori diarrotondamento possono accumularsi conil susseguirsi di operazioni e potrei avereun risultato che non è preciso.Lo schema rappresenta la differenza tra calcoli di somme o moltiplicazionicon FPU e senza FPU.Si nota che abbiamo un fattore di guadagno 10x.SPECIFICHE FPU NEL CORTE-M4• La nostra scheda lavora con single precision FPU• Effettua le conversioni tra:- Numeri interi;- Single precision floating point;- Half precision floating point;• Riesce a gestire le eccezioni di floating point;• Il programmer’s model ha una struttura con 16 registri ed ha un proprio status register.ISTRUZIONI ARITMETICHE Ogni istruzione ha la ‘V’ avanti, che sta per‘Vector’

caratteristica delle FPU. La nostra floating point unit è complied, non tutte le istruzioni, con IEEE754-2008.

Ad esempio, non possiamo:

  • arrotondare i floating point number a interi;
  • convertire da binario a decimale e viceversa;
  • compaire diretta tra SP (Single Precision) e DP (Double Precision).

Il FLUSH TO ZERO entra in azione quando abbiamo valori molto piccoli. Tutti i valori sotto una certa soglia li mette a zero, è settabile attraverso il bit FZ della FPU.

FPU PROGRAMMER’S MODEL

Anche la FPU ha il suo programmer’s model. Quindi anch’essa ha la sua lista dei registri e le sue modalità di funzionamento. Durante l’esecuzione del programma nella pipeline abbiamo il primo ciclo di fetch incomune e successivamente si decide se è un’istruzione normale o una delle FPU.

La FPU ha una sua piccola pipeline che tiene separate le funzioni di decode ed execute.

Principalmente i registri sono divisi nel seguente modo:

  • CPACR

(Co-processor Access Control Register): gestisce la modalità di accesso, cioè se in modalità privilegiata o no, oppure se l'accesso è negato;

FPSCR (Floating Point Status and Control Register): sono dei registri di controllo che gestiscono alcune funzioni come il flush to zero oppure l'alternate half precision format;

ADDITIONAL REGISTER.FPU REGISTER

Dato che l'FPU è un co-processore, anche lei ha una lista di registri general purpose che vengono utilizzati per l'esecuzione delle varie istruzioni.

Abbiamo 32 registri, a single precision (32 registri a 32 bit che possono diventare 16 registri, R0-R15, a 64 bit).

I registri da R0 a R15 sono chiamati CALLER SAVED: se una funzione A chiama una funzione B, la funzione A deve salvare il contenuto di questi registri prima di chiamare la funzione B.

I registri da R16 a R31 sono i registri CALLEE SAVED: se la funzione A chiama la funzione B e la funzione B ha bisogno di utilizzare

più di 16 registri per i suoi calcoli, bisogna salvare il contenuto di questi registri ad es. all'interno dello stack e poi può fare il restore dei registri prima di tornare alla funzione A.

ECCEZIONI FPU

Lo status control register della FPU può generare delle eccezioni che vengono gestite in un modo nonstandard, ma che il nostro FPU in generale è capace di gestire.

STACK FRAME IN FPU

/*La FPU è un co-processore, perché ha le sue modalità di funzionamento, i suoi registri, le sue funzioni di interrupt e quindi complica l'architettura interna. */

Quando bisogna eseguire una routine di interrupt, c'è bisogno di un piccolo overhead nei sistemi che richiedono questo interrupt, nel quale vengono eseguite alcune operazioni. Una delle quali è salvare i valori dei registri usati nell'operazione corrente. Quindi ogni volta che c'è un'interruzione devo salvare il doppio della roba sullo stack,

Causando un notevole ritardo. Come possiamo notare c'è una bella differenza di coseda salvare sullo stack tra Frame con FPU e senza FPU,così facendo invece di migliorare le prestazioni le storiducendo, vediamo come migliorare la situazione.

Per gestire al meglio il controllo dell'implementazione delcontext switching l'FPU ha un registro di controllo apposito,FPCCR, che a seconda di come è configurato vengono inseriti idati sullo stack in modo differente.

2 flag hanno il funzionamento più importante: -ASPEN -LSPEN.

Guardando la figura di sopra possiamo dire che:

  1. ASPEN=0: non viene riservato lo spazio e i registri non sono caricati automaticamente;
  2. ASPEN=1, LSPEN=1: viene riservato lo spazio, ma i registri non vengono caricati automaticamente;
  3. ASPEN=1, LSPEN=0: viene riservato lo spazio e i registri vengono caricati automaticamente.

Quando il flag di ASPEN è settato, esso abilita la conservazione automatica dello stato dei registri.

da S0 a S15 e del FPSCR. Se settato il flag LSPEN, consente di abilitare il Lazy stacking, che è una tecnica utile per abbassare la latenza del context switching. Essa permette di allocare lo spazio di memoria dello stack, ma i registri non sono caricati automaticamente.

Riguardo la FPU un problema molto importante riguarda gli arrotondamenti delle cifre dopo la virgola che possono implicare risultati leggermente differenti. Riguardo a questo problema è consigliabile sempre di evitare di lasciare decidere al compilatore; quindi, bisogna specificare sempre il tipo di dato.

Si raccomanda di utilizzare sempre tipologie di conversioni semplici. Non bisogna nemmeno fare tatti accumulazioni, arrotondando sempre, perché si può avere un errore. Anche nella parte di sottrazione e addizione ci possono essere errori di approssimazione.

ISTRUZIONI DSP (Data Signal Processing)

Inizialmente i processori compivano task molto semplici e ripetuti, attualmente invece

Effettuiamo innumerevoli task differenti e abbiamo applicazioni che richiedono una grossa quantità di calcolo dei dati. Per questo motivo sono state fornite al processore degli algoritmi per semplificare i calcoli e dargli un po' di capacità computazionale in più.

Nell'instruction set dell'ARM c'è un blocchetto chiamato SINGLE-CYCLE MULTIPLY-ACCUMULATE UNIT che si occupa di effettuare operazioni come la moltiplicazione e l'accumulazione in un singolo ciclo di clock. Nel Cortex M3 invece ci vogliono molti più cicli.

Con questo blocchetto possiamo fare operazioni in un singolo ciclo del tipo:

  • Moltiplicazione con e senza segno;
  • Accumulazioni-moltiplicazioni con e senza segno;
  • Accumulazioni-moltiplicazioni con e senza segno con accumulazione long (64bit).

I benefici sono molto evidenti:

  • Guadagno di performance 4x riguardo le MAC a 16bit (dual 16-bit MAC);
  • Guadagno di performance 2x riguardo le MAC a 32bit;

Guadagno di performance 7x riguardo le MAC a 64bit (perché fare un'operazione in hardware ci porta un certo numero di cicli, emularla con un software richiede un overhead molto maggiore, perciò avendo un M4 che ha la possibilità di poter svolgere operazioni tramite hardware interni (M4), ci fa guadagnare a livello prestazionale ed è anche più semplice riguardo l'emularlo su un software (M3), motivo per il quale è più performante l'M4 che l'M3).

ESEMPI MAC è l'operazione che moltiplica 2 unsigned int (Rm ed Rn) e somma il valore ottenuto ad un altro unsigned int a 64 bit contenuto nel registro di destinazione a 64 bit RdLo e RdHi che sono la parte bassa e la parte alta del registro di destinazione.

Dettagli
Publisher
A.A. 2021-2022
62 pagine
1 download
SSD Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Victor_luc_99 di informazioni apprese con la frequenza delle lezioni di Elettronica 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 Modena e Reggio Emilia o del prof Benatti Simone.