Esercizio 30istruzione MAC con accumulatore a 32 bit e arrotondamento (tema d'esame luglio 2020)
In questa pagina 5
Testo (tema d'esame del 7 luglio 2020, terzo appello, problema 4). L'unità di moltiplicazione di un DSP esegue l'istruzione MAC (moltiplicazione e somma sull'accumulatore) sui due registri a 16 bit e , il cui valore esadecimale è dato di seguito. La moltiplicazione è eseguita in modalità frazionaria (1.15) automatica, con segno, con arrotondamento, e il risultato è sommato, nello stesso ciclo di clock, all'accumulatore a 32 bit. Indicare il valore esadecimale presente nella parte alta dell'accumulatore al termine. Si faccia uso di arrotondamento ove necessario. Dati: , , .
Teoria usata: Operazioni in virgola fissa - somma, prodotto e riallineamentoIn virgola fissa il processore opera sugli interi e non sa dov'è la virgola: tocca al programmatore. Regola 1: si sommano solo dati con lo stesso formato (stesso $m$). Regola 2: il prodotto di $n_1.m_1$ per $n_2.m_2$ ha $m_1+m_2$ bit frazionari e il doppio dei bit: va riallineato con uno shift a destra di $m_2$ posizioni (per riportarlo a $m_1$) o preso dalla parte alta. Con la normalizzazione frazionaria $1.15$ il prodotto è $2.30$ e basta uno shift a sinistra di 1 prima di prendere la parte alta. I fattori di scala si scelgono per evitare overflow e perdita di risoluzione.Operazioni in virgola fissa - somma, prodotto e riallineamento →, Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamentoL'architettura è l'insieme delle risorse visibili al programmatore (istruzioni, modi di indirizzamento). RISC: poche istruzioni semplici, di uguale lunghezza, decodifica cablata, quasi tutte a 1 ciclo; CISC: molte istruzioni complesse, decodifica microprogrammata, più cicli. I DSP sono RISC "potenziati" (MAC, saturazione, barrel shifter, arrotondamento, VLIW, SIMD); i modi di indirizzamento tipici sono immediato, a registro, diretto, indiretto, con auto-incremento, circolare e a bit rovesciati (per la FFT).Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento →, Quantizzazione, fattori di scala e cicli limiteUn algoritmo di filtro o regolatore pensato per un processore ideale va adattato alla realtà: temporizzazionedistribuzione nel tempo delle operazioni di un algoritmo (l'algoritmo nella ISR dell'ADC, durata minore di $T_c$), acquisizione (condizionamento del segnale per sfruttare tutto il fondo scala dell'ADC), fattori di scala (normalizzazione intera o 1.15; evitare overflow), quantizzazione di ingresso, uscita, coefficienti e prodotti (sposta i poli, genera errori a regime e cicli limite). Una frequenza di campionamento troppo alta rende più critica la quantizzazione dei coefficienti: va scelta coerente con la lunghezza di parola.Quantizzazione, fattori di scala e cicli limite →.
Interpretazione dei dati
In formato frazionario 1.15 con segno, , cioè (quasi ). , bit di segno 1: , cioè . è un numero positivo a 32 bit che in formato 1.31 vale .
Moltiplicazione
Il prodotto intero dei due codici è (in complemento a 2 a 32 bit): è un numero in formato 2.30 ( bit frazionari). La modalità frazionaria automatica sposta il risultato a sinistra di 1 bit (perché il prodotto di due frazioni 1.15 deve essere letto in 1.31): (valore , coerente con ).
Somma sull'accumulatore
(somma modulo , il secondo addendo è negativo): in decimale , cioè Non c'è overflow (positivo più negativo: segni opposti).
Parte alta con arrotondamento
La parte alta dell'accumulatore è (troncamento) e la parte bassa è . Per ridurre l'accumulatore da 32 a 16 bit con arrotondamento si somma metà LSB della parte alta () prima di scartare la parte bassa: poiché (il primo bit scartato è 1), la parte alta si incrementa di 1:
Verifica del valore: ; in 1.15: ✓ (la parte bassa vale circa LSB della parte alta, quindi si arrotonda per eccesso).
Errori comuni
- Dimenticare lo shift a sinistra di 1 della modalità frazionaria (il prodotto sarebbe interpretato come 2.30).
- Trattare come positivo (): è negativo ().
- Sommare la parte alta del prodotto alla parte alta di senza tenere conto della parte bassa e del riporto.
- Troncare invece di arrotondare quando la parte bassa è .
Versione ripasso
Testo. MAC frazionaria 1.15 con arrotondamento: , , ; finale (luglio 2020).
- Prodotto: (2.30); modalità frazionaria: ().
- Somma: ; parte alta , parte bassa .
- Arrotondamento: .
- Errori: shift frazionario dimenticato; positivo; riporto della parte bassa; troncamento (Operazioni in virgola fissa - somma, prodotto e riallineamentoIn virgola fissa il processore opera sugli interi e non sa dov'è la virgola: tocca al programmatore. Regola 1: si sommano solo dati con lo stesso formato (stesso $m$). Regola 2: il prodotto di $n_1.m_1$ per $n_2.m_2$ ha $m_1+m_2$ bit frazionari e il doppio dei bit: va riallineato con uno shift a destra di $m_2$ posizioni (per riportarlo a $m_1$) o preso dalla parte alta. Con la normalizzazione frazionaria $1.15$ il prodotto è $2.30$ e basta uno shift a sinistra di 1 prima di prendere la parte alta. I fattori di scala si scelgono per evitare overflow e perdita di risoluzione.Operazioni in virgola fissa - somma, prodotto e riallineamento →).