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:center Da questo ne possiamo costruirne un altro detto full-adder, che somma numeri : center 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. center 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.

center

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 : center

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. center

Moltiplicatore parallelo

Consideriamo la cella moltiplicatrice: center Disposte in questo modo possiamo creare un moltiplicatore: center 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 center 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: center Separiamo quindi la matrice computazionale in due matrici e per segno: center 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 moltiplicatoreCodifica

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 modificatoreCodifica

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.