ALU - sommatore, overflow, carry look-ahead e shift
In questa pagina 5
In ogni sistema a microprocessore si individuano ALU, unità di controllo, memoria e I/O (Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registriOgni processore ha ALU, memoria e dispositivi di I/O. Nell'organizzazione Von Neumann dati e istruzioni stanno nella stessa memoria e viaggiano su un solo sistema di bus (semplice ed economica, usata nei µC più semplici); nell'organizzazione Harvard memorie e bus sono separati (più accessi per ciclo: tipica di DSP e µC veloci). I bus sono pilotati da porte tri-state; l'ALU lavora su registri (accumulatore o molti registri); il controllo è cablato o microprogrammato; la gerarchia di memoria va dai registri alla RAM interna e a quella esterna.Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registri →). L'ALU (unità aritmetico-logica) è l'insieme di circuiti digitali che permette al processore di eseguire le operazioni di base: somma e differenza, funzioni logiche (AND, OR, ...), scorrimenti e rotazioni per il cambio di scala dei dati; in alcuni processori anche prodotto e divisione.
Cella elementare e ALU a bit
I circuiti fondamentali sono: reti combinatorie per le funzioni logiche, il sommatore/sottrattore, i registri a scorrimento, i multiplexer (selettori) e il moltiplicatore.
- Il multiplexercircuito che sceglie una tra più linee di ingresso in base a un segnale di selezione con lascia passare , con lascia passare . Con un selettore si ottiene una cella che calcola oppure .
- Il full addersommatore completo: somma due bit e un riporto entrante e produce un bit di somma e un riporto uscente (sommatore completo) di una cella ha ingressi , e il riporto entrante , e uscite il risultato e il riporto uscente : Con segnali di controllolinee con cui l'unità di controllo abilita o seleziona le operazioni dell'ALU ( per scegliere l'uscita, per negare ) la cella esegue AND, OR, somma o sottrazione.
Collegando in parallelo celle (il di una è il della successiva) si opera su tutta la parola quasi simultaneamente. Il ritardo del circuito è dovuto solo alla propagazione del riporto, e limita la frequenza di clock (che è fissata dall'operazione più lenta eseguita in un ciclo).
La sottrazione si ottiene dalla stessa struttura: (Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →). Basta attivare l'inversione di e caricare il riporto iniziale a 1 (invece che 0). La rappresentazione in complemento a 2 permette così di unificare i circuiti di somma e sottrazione.
Carry look-ahead
Nel sommatore a propagazioneuna cella propaga il riporto entrante all'uscita quando almeno uno dei suoi bit vale 1 del riporto (ripple carrysommatore in cui il riporto si propaga da una cella alla successiva, con ritardo proporzionale al numero di bit), se ogni cella introduce un ritardo sul riporto, per bit servono . Per un sommatore a 8 bit con ns: ns (l'ultimo serve per formare il bit di somma).
Con il carry look-ahead (CLA) i riporti si calcolano direttamente dagli ingressi. Per ogni cella si definiscono Il riporto uscente è prodotto se la cella lo genera da sola () o se lo propaga ( oppure ) quando ce n'è uno in ingresso. Iterando: Poiché e si ottengono da con una porta, ogni riporto richiede solo 3 livelli di logica (uno per , due per i termini AND/OR) indipendentemente dalla posizione. Per più di 4 bit si ragiona a blocchi: ogni blocco da 4 celle è un "supersommatoreblocco di 4 celle trattato come un'unica cella, con generazione e propagazione proprie" con generazioneuna cella genera un riporto da sola quando entrambi i suoi bit valgono 1 e propagazione di blocco (, ) e lo stesso schema si ripete tra i blocchi. Per 16 bit i riporti richiedono livelli () contro del ripple: il CLA è 5-6 volte più veloce. Per 8 bit con due blocchi da 4 si hanno per i riporti più per la somma: ns contro i ns del ripple (con ns).
Rivelazione dell'overflow
Sommando due numeri con lo stesso segno può verificarsi overflow; con segni diversi mai (il risultato è compreso tra i due operandi). Detti i bit di segno degli addendi e quello della somma, l'overflow si ha quando è diverso da entrambi: Questa espressione è scomoda perché richiede di memorizzare i segni degli addendi (uno dei quali viene sovrascritto dalla somma). Una condizione equivalente e più economica usa i riporti dell'ultima cella: Dimostrazione. Si analizza l'ultima cella (), con .
- Due positivi (): e . Il risultato è corretto (positivo) se e solo se ; c'è overflow se : coincide con il termine (con ).
- Due negativi (): e . Il risultato è corretto (negativo) se , cioè ; c'è overflow se : coincide con il termine .
- Segni diversi (): e , quindi e : nessun overflow.
Registri a scorrimento (shifter)
Lo shifter serve per allineare i dati prima o dopo operazioni aritmetiche, per moltiplicare o dividere per potenze di 2, per gestire la modalità intera o frazionaria del moltiplicatore, per funzioni logiche. A destra:
- shift logico: entrano 0 da sinistra;
- shift aritmetico: il bit di segno viene esteso (copiato). Lo shift a sinistra è sempre uguale (entra 0 da destra). Esempio su 8 bit: : logico , aritmetico (a destra di 2 posti equivale a dividere per 4 mantenendo il segno: ). I C più semplici offrono solo shift di un bit per volta; i processori più veloci hanno il barrel shifter, che sposta di bit nelle due direzioni in un ciclo; alcuni hanno anche lo shift circolare.
Realizzazione: una catena di flip-flopelemento di memoria a un bit, che cambia stato sul fronte del clock (D o J-K, con comando sul fronte e struttura master-slavestruttura a due latch in serie che impedisce all'ingresso di attraversare il registro nello stesso fronte di clock per evitare il fenomeno di ripple lungo il registro) con multiplexer che permettono il caricamento in parallelo (CTRL=1), il caricamento in serie e lo shift a destra di posti con impulsi di clock. Un generatore di impulsi programmabile ( impulsi) si ottiene con un contatore binario (sincrono o asincrono "ripple") e un comparatorecircuito che confronta due parole e segnala se sono uguali binario (array di porte XNOR) che ferma il conteggio quando il contatorecircuito sequenziale che incrementa un numero binario a ogni impulso di clock raggiunge il valore del registro.
Errori comuni
- Sommare due numeri di segno uguale senza controllare l'overflow, e credere che l'overflow possa esserci con segni diversi.
- Dire che l'overflow coincide con il riporto uscente dall'ultima cella: è invece lo XOR dei riporti in ingresso e in uscita (un riporto uscente da solo è normale per numeri negativi).
- Applicare lo shift logico a destra a un numero negativo (cambia segno).
- Dimenticare di caricare il riporto iniziale a 1 nella sottrazione.
Versione ripasso
- Cella: , ; celle in parallelo; sottrazione: e riporto iniziale 1.
- CLA: , , ; 3 livelli in un blocco da 4, a 16 bit contro ; 8 bit con ns: ripple 17 ns, CLA 6 ns.
- Overflow: (dimostrazione: positivi → , negativi → , segni diversi → ).
- Shift: logico (0 da sinistra), aritmetico (segno esteso); barrel shifter ( posti in un ciclo); contatore + comparatore = generatore di impulsi.
- Errori: overflow con segni diversi o = riporto uscente; shift logico su negativi; dimenticare il riporto a 1 (Moltiplicazione e algoritmo di BoothLa moltiplicazione hardware imita il calcolo a mano: somme e shift ripetuti. Per numeri senza segno si somma il moltiplicando se il bit del moltiplicatore è 1 e si fa shift a destra del prodotto parziale; il moltiplicatore sta nella metà bassa del registro del prodotto. Per i numeri con segno serve l'algoritmo di Booth: si guardano i bit del moltiplicatore a coppie (bit corrente, bit precedente, all'inizio 0): 10 → si sottrae il moltiplicando, 01 → si somma, 00/11 → niente; poi shift aritmeticoscorrimento che conserva il segno: a destra ripete il bit di segno a destra. Dopo $n$ passi si hanno $2n$ bit in complemento a 2. Va eseguito sui compiti d'esame a mano con lo schema di registri $A,|,Q,|,q_{-1}$.Moltiplicazione e algoritmo di Booth →).