Sommatori veloci - carry-bypass, carry-select e square-root
In questa pagina 6
Il ripple-carry (Sommatori - full adder e ripple-carryLa somma di due bit con riporto in ingresso è realizzata dal full adder: S = A ⊕ B ⊕ C_in, C_out = AB + BC_in + AC_in. Con generate G = AB, propagate P = A ⊕ B (e delete D = Ā B̄) si scrive C_out = G + P·C_in e S = P ⊕ C_in: G e P non dipendono dal riporto in ingresso (fase di set-up), solo C_out ed S ne dipendono. Il sommatore ripple-carry collega N full adder in cascata: il riporto attraversa gli stadi uno dopo l'altro, nel caso peggiore t_add = (N−1) t_carry + t_sum (lineare in N). Il ritardo effettivo dipende dagli operandi: un generate o un delete azzera la catena, un propagate la prolunga; per operandi uguali bit a bit vale t_carry + t_sum.Sommatori - full adder e ripple-carry →) ha , lineare in : a bit il riporto deve attraversare stadi. Le architetture veloci mantengono lo stesso full adder ma accorciano il cammino critico del riporto con logica aggiuntiva. Notazione: (calcolo di , ), (propagazione in uno stadio), (ritardo di un multiplexer), .
Carry-bypass (carry-skip)
I bit si dividono in blocchi di bit. In ciascun blocco si calcola . Idea: se tutti i propagate del blocco valgono , il riporto in uscita è uguale al riporto in ingresso (): un multiplexer comandato da lo fa saltare direttamente, senza aspettare che attraversi i stadi.
Formula (ritardo del carry-bypass e dimensione ottima dei blocchi). Ritardo nel caso peggiore ( bit, blocchi da ): il riporto deve (1) essere generato nel primo stadio del primo blocco e attraversare lo stesso blocco (), (2) saltare i blocchi successivi attraverso i loro multiplexer ( multiplexer in totale, uno per ogni blocco dopo il primo), (3) attraversare i stadi dell'ultimo blocco e produrre la somma: Il termine in è : aumentando cresce la parte di ripple dentro i blocchi estremi, diminuendo crescono i multiplexer. Derivando rispetto a :
Esempio. Con e tutti i ritardi uguali a : e .
Con il ritardo cresce come (con fisso resta lineare ma con un coefficiente molto minore del ripple). In questa architettura il tempo di ritardo per il calcolo della somma finale è determinato principalmente dal tempo di riporto (), non da o dal set-up, che compaiono una sola volta.
Carry-select
Per eliminare l'attesa del riporto in ingresso, in ciascun blocco (tranne il primo) si calcolano due volte le somme e i riporti: una assumendo riporto in ingresso (0-carry) e una assumendo (1-carry). Quando il riporto vero del blocco precedente arriva, un multiplexer sceglie il risultato corretto (di riporto e di somma). I due calcoli avvengono in parallelo al calcolo del riporto del blocco precedente: la selezione è l'unico lavoro che resta.
Formula (ritardo del linear carry-select e dimensione ottima dei blocchi). Linear carry-select (blocchi tutti da bit, blocchi):
Esempio. Con , e tutti i ritardi uguali a : .
(: ogni blocco calcola i suoi riporti in parallelo; poi i multiplexer si propagano in cascata, uno per blocco.) Costo: circa il doppio dei full adder, più i multiplexer.
Caso a dati specifici (tema d'esame): bit, blocchi da , con , e (LSB a sinistra). Il primo blocco è un ripple-carry normale: (1,1) G, (1,0) P, (1,0) P, (1,1) G, (1,0) P: il riporto in uscita è pronto dopo (generate nel quarto bit e un propagate). Nei blocchi i riporti per entrambe le ipotesi si calcolano comunque in (i bit sono tutti propagate, con , e la catena di stadi è completa), cioè più tardi del riporto del primo blocco: il tempo è dominato da . Poi il riporto attraversa i multiplexer dei blocchi e e il mux finale che sceglie le somme del blocco : tre multiplexer in cascata (il primo blocco non ne ha), quindi . La formula generale con ne conta quattro ed è quindi un limite superiore. (Esercizio 17 · quesiti rapidi sui sommatori con dati numerici (temi d'esame 2025-2026).)
Square-root carry-select
Formula (ritardo del square-root carry-select). Nel linear carry-select il blocco aspetta il riporto del blocco , che arriva un multiplexer dopo il precedente: nel frattempo ha già finito di calcolare le due alternative. Si può quindi dare ai blocchi successivi un bit in più del precedente: ciascuno impiega in più per il riporto, e può quindi elaborare un bit in più in parallelo (con per bit). Blocchi di bit:
Esempio. Con e : blocchi da bit ( bit), e, con ritardi tutti uguali a , .
Il ritardo cresce come invece che linearmente. Se i tempi si bilanciano: il riporto del blocco arriva a e il blocco , con un bit in più, finisce di calcolare le sue due alternative esattamente allora. Nel caso generale i blocchi crescono di bit alla volta.
Confronto
Con :
| ripple | carry-bypass | linear select | square-root select | |
|---|---|---|---|---|
| 16 | () | () | ||
| 32 | () | (–) | ||
| 64 | () | () |
(Per il square-root select: con : blocchi da ( bit), e .) Al crescere di il vantaggio delle strutture a blocchi variabili aumenta; il costo è l'area (le architetture select duplicano i full adder) e la complessità del routing.
Altre soluzioni
Esistono anche sommatori carry-lookahead e ad albero (prefix adders, per esempio Kogge-Stone), che calcolano i riporti in tempo combinando i segnali di generate e propagate di gruppi di bit; nelle FPGA (FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →) la catena di riporto dedicata (carry chain) fa tutto questo con un cammino fisico veloce.
Errori comuni
- Dimenticare di contare i multiplexer come (bypass) o (select): sono tanti quanti i blocchi attraversati.
- Applicare al carry-select (che ha il fattore in meno: ).
- Dimenticare che nel carry-bypass il caso peggiore è determinato dal riporto (non dalla somma).
- Credere che i blocchi del square-root select siano uguali: crescono di un bit per blocco.
Versione ripasso
- Carry-bypass (carry-skip): blocchi da bit; se un multiplexer fa saltare il riporto al blocco successivo. Caso peggiore: , cioè più i multiplexer. Ottimo: . Esempio: con e ritardi uguali a , e . Il ritardo è dominato dal riporto.
- Linear carry-select: in ogni blocco si calcolano in parallelo le somme con riporto e con riporto , e un multiplexer sceglie quella giusta: , . Esempio: con , e ritardi uguali a , . Costo: circa il doppio dei full adder.
- Caso d'esame (, quattro blocchi da , ): il primo blocco è ripple normale e il riporto è pronto dopo ; i blocchi hanno riporti pronti dopo (catena completa di propagate con ). Il ritardo è : tre multiplexer in cascata, meno dei quattro della formula generale, che è quindi un limite superiore (Esercizio 17 · quesiti rapidi sui sommatori con dati numerici (temi d'esame 2025-2026)).
- Square-root carry-select: i blocchi crescono di un bit alla volta, , perché il blocco successivo riceve il riporto un multiplexer dopo e può quindi elaborare un bit in più. Con blocchi: , quindi e , cioè ritardo proporzionale a . Esempio: e danno blocchi da bit, e .
- Confronto con unitario: : ripple , bypass , linear select , sqrt select ; : , , , ; : , , , . Il vantaggio cresce con ; il costo è in area e routing.
- Altre soluzioni: carry-lookahead e prefix adder (per esempio Kogge-Stone) calcolano i riporti in tempo ; nelle FPGA la catena di riporto dedicata fa il lavoro in modo veloce (FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →).
- Errori: dimenticare i multiplexer ( nel bypass, nel select); del bypass con il fattore dimenticato, o applicato al carry-select (che non lo ha); dire che nel bypass il caso peggiore dipende dalla somma e non dal riporto; credere che i blocchi del square-root select siano uguali (crescono di un bit).