Questa è una domanda semplice con una risposta molto complessa.
Prima di tutto, alcuni retroscena.
Il design VLSI nel mondo reale è un campo estremamente tecnico che presenta un equilibrio di compromessi in continua evoluzione. Il tempo impiegato da un circuito per calcolare una risposta è raramente l'unico fattore importante. C'è anche assorbimento di potenza e area fisica, oltre a una serie di fattori che rivelano che i circuiti che stai progettando sono in realtà analogici (ad esempio resistenza del filo, capacità parassita). Tutti questi sono importanti in un circuito reale e possono influire sul design scelto.
In secondo luogo, devi considerare l'intero ciclo di vita di un progetto. Un sommatore che è appropriato per una realizzazione VLSI potrebbe non essere adatto per una realizzazione FPGA. Se il progetto passerà attraverso una fase in fase di test su un FPGA ... ottieni l'immagine.
In terzo luogo, non tutti i sommatori sono uguali. Su una CPU tipica, ci sono molti additivi in giro che svolgono compiti diversi; ci sono probabilmente diversi ALU interi, un sommatore a mantissa a virgola mobile, un sommatore che indirizza il calcolo, un sommatore che calcola gli obiettivi di diramazione e così via. Questo non conta gli additivi carry-save che trovi nelle moderne unità di moltiplicazione. Ognuno ha le sue peculiarità e vincoli.
Il calcolo del target di diramazione, ad esempio, implica in genere l'aggiunta di una piccola costante a una parola completa, il che suggerisce un diverso disegno sommatore da uno che aggiunge due parole intere insieme. Allo stesso modo, l'aggiunta in virgola mobile richiede una fase di arrotondamento post-aggiunta che potrebbe richiedere meno di un ciclo, quindi non c'è motivo per cui non si possa rubare il resto del ciclo per completare l'aggiunta.
Infine, e forse soprattutto, i grandi attori (ad esempio Intel, AMD, NVIDIA) sono abbastanza a corto di dettagli sull'implementazione di basso livello per ovvi motivi, a meno che non pensino di poter ottenere un documento e / o un brevetto da esso. Anche allora, spesso non si può essere sicuri di ciò che hanno effettivamente fatto senza il reverse engineering.
Detto questo, ci sono alcune cose che sappiamo.
La cosa chiave che devi capire è che i metodi carry-lookahead sono elementi costitutivi e non necessariamente metodi in sé. Un'analogia potrebbe essere in ordine qui.
Se pensi alle classi di algoritmi, probabilmente hai imparato un sacco di algoritmi di ordinamento come ordinamento rapido, unione, ordinamento per inserzione e così via. Nel mondo reale, se l'ordinamento è un collo di bottiglia in termini di prestazioni, qualsiasi ingegnere decente penserebbe a questi come blocchi elementari primitivi dai quali può essere costruito un ordinamento "reale".
L'algoritmo di ordinamento della libreria standard GNU C ++, ad esempio, usa l'ordinamento rapido, usando l'ordinamento di inserzione quando gli intervalli diventano abbastanza piccoli. Tuttavia, se dopo alcuni passaggi sembra che il partizionamento rapido dell'ordinamento abbia colpito il comportamento patologico, ricade nell'ordinamento dell'heap. Sono tre diversi algoritmi di ordinamento per creare un ordinamento di forza industriale.
Lo stesso vale per i circuiti sommatori. È noto, ad esempio, che l'unità intera Pentium 4 utilizzava un sommatore Han-Carlson, che è un mix di Kogge-Stone e Brent-Kung. (Han-Carlson è particolarmente interessante, perché è un "punto debole" nel compromesso tra ritardo di propagazione e area del dado che è anche abbastanza efficiente dal punto di vista energetico.) Spesso paga usare un mix di diversi metodi.
Gli additivi "puri" carry-lookahead sono ancora la norma nei circuiti sintetizzati (ad esempio se si alimenta un operatore Verilog "+" a Cadence o Synopsys), quando si tratta di progettare a mano, moderne CPU di fascia alta con la loro superscalare out- i motori di esecuzione dell'ordine sembrano muoversi verso un design leggermente diverso per le loro unità intere.
Gli additivi speculativi sono circuiti che hanno un ritardo di propagazione estremamente basso, ma funzionano correttamente solo un po 'di tempo (il 95% del tempo è tipico) ed è possibile dire con pochissima logica se il sommatore speculativo restituisce il risultato corretto o meno. Quindi l'idea è di fare un'aggiunta speculativa e metà di un'aggiunta carry-lookhead in parallelo, in un ciclo. Se il sommatore speculativo ha restituito la risposta corretta, l'istruzione viene eseguita. Altrimenti, bloccare la tubazione ed eseguire l'altra metà dell'aggiunta accurata.
Poiché sai che il percorso lento richiederà due cicli, i progettisti potrebbero utilizzare un metodo più efficiente in termini di spazio e risparmio energetico, anche se sarebbe troppo lento per un uso generale.