Note
È possibile rappresentare un numero in codifica binaria.
Formalmente per convertire da decimale a binario si usa il metodo delle divisioni successive, ed il metodo delle potenze per la conversione da binario a decimale.
Si ha che per bit si possono rappresentare fino simboli.
Esistono altri metodi per rappresentare i numeri binari oltre alla conversione binaria.
Base complemento a
La notazione base 2 complemento a due permette la rappresentazione di numeri negativi, dove se il numero è positivo rimane uguale alla sua codifica binaria diretta, per ottenere però il negativo si effettua il complemento ad (invertire i bit) e il complemento a (sommare ).
Notiamo che il primo bit indicherà il segno, inoltre si usa il complemento a due poiché le operazioni in complemento a sono più facili da fare.
Con l’intervallo di rappresentazione è .
Dati gli operandi e , il risultato ed il resto , è possibile costruire una tabella di verità e quindi un circuito. Si ha che:
Possiamo costruire quindi un circuito chiamato half-adder:
Da questo ne possiamo costruirne un altro detto full-adder, che somma numeri :
Considerando un ritardo fisso di per porta logica il ritardo per l’half-adder è:
Mentre per il full-adder è:
Ponendo full-adder (dove il primo è un half-adder) in parallelo è possibile creare un sommatore a bit.
Tuttavia questo approccio è abbastanza lento, si usa quindi un sommatore CLA.
Sommatore CLA
Nel sommatore Carry Look Ahead (CLA), si aggiunge un componente CLA che precalcola i valori dei riporti.
Si ha che:
indica la necessità di un riporto, mentre indica quando va propagato. Se espandiamo questa formula notiamo che il riporto non dipende dai riporti precedenti, in quanto . È quindi possibile costruire il CLA con una rete a 2 livelli.
Siccome calcolare le nostre richiede delle porte logiche di dimensioni enormi, fisicamente non prodotte, si introduce l’architettura del CLA a blocchi da block size, consideriamo :
Questo ha tempo logaritmico.
Moltiplicatori
Note
L’operazione di moltiplicazione è molto più complessa della somma.
Esistono diversi moltiplicatori, diversi dalla moltiplicazione in colonna, questo perché essa non è efficiente. Per esempio, esiste il caso specifico , che dev’essere calcolato come:
Inoltre è necessario estendere il segno dei prodotti parziali.
Moltiplicatore parallelo
Consideriamo la cella moltiplicatrice:
Disposte in questo modo possiamo creare un moltiplicatore:
Dove ogni riga può essere vista come un sommatore. Questo approccio a ha ritardo lineare.
Moltiplicatore di Wallace
Secondo questo approccio, in primis si moltiplicano tutte le coppie di bit degli operandi, e poi le disponiamo nella matrice. L’idea è di sommare usando un half adder (verde nell’immagine) per le somme di , e full adder (giallo nell’immagine) per le somme di
Questo processo ci da una matrice computazionale con un livello in meno. Ripetendo questo processo ridurremo le somme al risultato.
Operandi negativi in complemento a due
Consideriamo due numeri e in complemento a due. Se consideriamo
Notiamo che:
Separiamo quindi la matrice computazionale in due matrici e per segno:
e si sommano separatamente con i metodi visti precedentemente, e infine si calcola con un sommatore , che sarà il nostro risultato corretto.
Esistono degli algoritmi per ottimizzare la moltiplicazione.
Algoritmo di Booth Radix2
Per l’algoritmo di Booth si aggiunge uno nella posizione meno significativa al moltiplicatore, e poi lo scomponiamo in coppie da due sovrapposte partendo da destra. Per esempio il numero diventerà
Sostituiamo poi queste coppie con la codifica:
Coppia moltiplicatore Codifica Eseguiamo poi la moltiplicazione con la nuova codifica, stando attenti che la moltiplicazione per si esegue il complemento a del numero.
Algoritmo di Booth Radix4
Funziona esattamente con la stessa logica, però si prendono gruppi sovrapposti da . Per esempio diventa .
Si usa poi la codifica:
Tripletta modificatore Codifica A questo punto si procede esattamente come prima. Si nota che la moltiplicazione per comporta uno shift a sinistra. Inoltre, bisogna lasciare due spazi nella matrice computazionale al posto di uno.



Disposte in questo modo possiamo creare un moltiplicatore:
Dove ogni riga può essere vista come un sommatore. Questo approccio a ha ritardo lineare.
Questo processo ci da una matrice computazionale con un livello in meno. Ripetendo questo processo ridurremo le somme al risultato.
Separiamo quindi la matrice computazionale in due matrici