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.
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 : 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.
Linear carry-select (blocchi tutti da bit, blocchi): (: 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
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: 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: blocchi da ; mux fa saltare il riporto. , ; ritardo dominato dal riporto.
- Linear carry-select: per ogni blocco somme per riporto e in parallelo, mux sceglie: , . Esempio bit : dati specifici (formula generale: , limite superiore).
- Square-root select: blocchi ; , .
- Confronto ( unitario): : ripple , bypass , linear select , sqrt select ; : .
- Altro: carry-lookahead/prefix ; carry chain dedicata in FPGA.
- Errori: conteggio dei mux; con fattore sbagliato; bypass dominato da sum; blocchi uguali nel sqrt select.