Unità aritmetico-logica (ALU)
In questa pagina 5
In questa pagina 3
L'ALU è la parte del processore che produce nuova informazione: tutto il resto sposta o memorizza dati. Riceve due operandi (da registri o dall'istruzione), un codice di operazione dall'Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo →, e produce il risultato e i flag N, Z, C, V che vanno nel registro di stato (vedi Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).
ALU a 1 bit
Per il bit : una porta AND, una porta OR, un sommatore completo (vedi Circuiti combinatori notevoliMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli →) e un multiplexer che sceglie quale risultato mandare in uscita.
- ingressi: , , riporto , selezione dell'operazione;
- uscite: risultato , riporto .
ALU a bit
ALU a 1 bit con i riporti in cascata (o con anticipo del riporto). Aggiunte:
- Sottrazione: un segnale Binvert fa passare invece di e mette (complemento a 2, vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →).
- NOR: con Ainvert e Binvert, l'AND diventa (De Morgan).
- Set less than (
sltdi MIPS): si calcola e il bit di segno del risultato (corretto per l'overflow) diventa il bit 0 dell'uscita, gli altri bit sono 0. - Zero: (NOR di tutti i bit del risultato). Usato per i salti condizionati su uguaglianza.
- Overflow: .
Codifica tipica dei segnali (stile MIPS):
| Ainvert | Binvert | Operazione | Funzione |
|---|---|---|---|
| 0 | 0 | AND | |
| 0 | 0 | OR | |
| 0 | 0 | somma | aritmetico |
| 0 | 1 | somma con | |
| 0 | 1 | less | slt |
| 1 | 1 | AND | NOR |
Esempio: flag dopo una sottrazione a 8 bit
(80), (112). .
- risultato con segno ✓;
- N = 1, Z = 0;
- C = 0: nessun riporto in uscita, cioè c'è stato un prestito: senza segno ;
- V = 0: una sottrazione tra due numeri dello stesso segno non può andare in overflow (in termini di somma: , operandi di segno diverso).
È esattamente ciò che fa CMP in ARM prima di un salto condizionato (vedi Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →).
Altre unità di calcolo
- Moltiplicatore: sequenziale (somme e scorrimenti, algoritmo di Booth) o combinatorio (albero di sommatori, risultato in pochi cicli).
- Divisore: sequenziale, molti cicli.
- Barrel shifter: scorrimento di un numero qualsiasi di posizioni in un ciclo (in ARM è davanti al secondo ingresso dell'ALU).
- Unità in virgola mobile (FPU): allineamento degli esponenti, somma delle mantisse, normalizzazione e arrotondamento (vedi Numeri in virgola mobile IEEE 754Virgola fissa e virgola mobile; formato IEEE 754 a 32 e 64 bit (segno, esponente in eccesso 127, mantissa con 1 implicito); conversioni svolte nei due versi; valori speciali, denormalizzati, intervallo, precisione e arrotondamento.Numeri in virgola mobile IEEE 754 →); in ARM è un coprocessore con registri propri (VFP/NEON).
Errori tipici
- Pensare che in ARM C = 1 dopo una sottrazione indichi un prestito: è il contrario, C = 1 significa nessun prestito ( senza segno).
- Calcolare Z guardando solo il bit più significativo.
Versione ripasso
Produce nuova informazione: da due operandi e un codice di operazione dall'Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo → dà il risultato e i flag N, Z, C, V (Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).
Costruzione
- A 1 bit: AND, OR, sommatore completo (Circuiti combinatori notevoliMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli →) e un multiplexer che sceglie l'uscita.
- A bit: ALU a 1 bit con riporti in cascata (o anticipo del riporto).
- Sottrazione: Binvert passa e (Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →). NOR: Ainvert e Binvert (De Morgan).
- Set less than: si calcola e il segno (corretto per l'overflow) diventa il bit 0, gli altri sono 0.
- Zero: . Overflow: .
Esempio
(80), (112): . N = 1, Z = 0; C = 0 (nessun riporto, cioè prestito: senza segno); V = 0 (operandi di segno diverso nella somma). È ciò che fa CMP prima di un salto (Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →).
Altre unità
Moltiplicatore (sequenziale con Booth, o combinatorio), divisore sequenziale, barrel shifter (scorrimento in un ciclo, davanti al secondo ingresso dell'ALU in ARM), FPU (Numeri in virgola mobile IEEE 754Virgola fissa e virgola mobile; formato IEEE 754 a 32 e 64 bit (segno, esponente in eccesso 127, mantissa con 1 implicito); conversioni svolte nei due versi; valori speciali, denormalizzati, intervallo, precisione e arrotondamento.Numeri in virgola mobile IEEE 754 →; in ARM coprocessore VFP/NEON).
Errori tipici: in ARM C = 1 dopo una sottrazione significa nessun prestito ( senza segno); Z non si ricava dal solo MSB.