bitGateLab Digital · Impara
Italiano
Apri il simulatore

Impara › Argomento 7

Sommatori binari: semisommatore, sommatore completo e in cascata

8 min di lettura · Team bitGateLab

La somma è l'operazione più importante di un computer: con essa si sottrae, si moltiplica, si calcolano indirizzi di memoria e si contano eventi. Qui costruirai un sommatore da zero: prima il semisommatore a un bit, poi il sommatore completo che accetta un riporto, quindi il sommatore a più bit in cascata e, infine, vedrai come lo stesso circuito sottrae usando il complemento a 2.

Sommare in binario a mano

Le regole per sommare due bit sono quattro: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 e 1 + 1 = 102, cioè 0 con riporto di 1 verso la colonna successiva. Se in più arriva un riporto, 1 + 1 + 1 = 112: risultato 1 e riporto 1. Come in decimale, si somma colonna per colonna da destra a sinistra, passando il riporto a sinistra.

Semisommatore

Il semisommatore somma due bit, A e B, e fornisce due uscite: la somma S e il riporto C.

ABCS
0000
0101
1001
1110

La colonna S è la tabella di una XOR e la colonna C è quella di una AND. Pertanto:

S = A ⊕ B    C = AB

AB SC
Semisommatore: la XOR fornisce la somma S e la AND fornisce il riporto C. I punti indicano dove ogni ingresso si dirama verso le due porte.

Si chiama "semi" sommatore perché non ha un ingresso per il riporto proveniente da una colonna precedente, quindi serve soltanto per il bit meno significativo.

Sommatore completo

Il sommatore completo somma tre bit: A, B e il riporto in ingresso Cin. Fornisce la somma S e il riporto in uscita Cout. Nota che la coppia (Cout, S) è, in binario, il numero di uni presenti sugli ingressi.

ABCinCoutS
00000
00101
01001
01110
10001
10110
11010
11111

S vale 1 quando c'è un numero dispari di uni: S = Σm(1, 2, 4, 7) = A ⊕ B ⊕ Cin. Cout vale 1 quando ci sono due o più uni: Cout = Σm(3, 5, 6, 7), che semplificata è la funzione di maggioranza:

Cout = AB + ACin + BCin

Se nella mappa di Karnaugh di S provi a raggruppare, vedrai che nessun 1 ha un vicino a 1: è la disposizione a scacchiera tipica della XOR, che non si semplifica come somma di prodotti.

Sommatore completo con due semisommatori

Un modo pratico di costruirlo è concatenare due semisommatori e una OR:

  1. Primo semisommatore: P = A ⊕ B e G = AB.
  2. Secondo semisommatore, con P e Cin: S = P ⊕ Cin e un riporto parziale P·Cin.
  3. Cout = G + P·Cin = AB + (A ⊕ B)Cin.

Questa espressione è equivalente a quella di maggioranza: se A e B valgono 1, AB dà già il riporto; se esattamente uno dei due vale 1, il riporto dipende da Cin. G si chiama segnale di generazione e P segnale di propagazione.

Sommatore a propagazione del riporto

Per sommare numeri di n bit si collegano n sommatori completi in fila: il Cout di ogni stadio entra come Cin del successivo. Il Cin del primo stadio si pone a 0, e il Cout dell'ultimo è il riporto finale. Questa struttura si chiama sommatore a propagazione del riporto o ripple carry, perché il riporto "si propaga" di stadio in stadio come un'onda. Nella famiglia 74HC esiste un chip che contiene quattro sommatori completi già collegati in questo modo (il 74HC283).

Esempio 1: 1011 + 0110 con un sommatore a 4 bit. In decimale è 11 + 6.

StadioAiBiCinSiCout
010010
111001
201101
310101

Somma: S3S2S1S0 = 0001 con riporto finale 1, cioè 100012 = 17. Corretto: 11 + 6 = 17, che non sta in 4 bit e per questo compare il riporto finale.

Il prezzo da pagare è il tempo. Lo stadio 3 non può dare il suo risultato definitivo finché non gli arriva il riporto dello stadio 2, che a sua volta aspetta quello dello stadio 1. Se ogni stadio impiega due livelli di porta per produrre il suo riporto, un sommatore a n bit impiega nel caso peggiore un tempo dell'ordine di 2n ritardi di porta. Per 64 bit è troppo lento, per questo i processori usano sommatori con riporto anticipato, che calcolano i riporti in parallelo a partire dai segnali G e P. Nel cronogramma del simulatore puoi vedere come le uscite cambiano a passi fino a stabilizzarsi.

Sottrarre con lo stesso sommatore

Come si spiega in sistemi di numerazione, in complemento a 2 l'opposto di B è B + 1. Quindi:

A − B = A + B + 1

Per ottenerlo basta mettere una XOR su ogni bit di B, con l'altro ingresso collegato a una linea di controllo M, e collegare M anche al Cin del primo stadio. Con M = 0 le XOR lasciano passare B e Cin = 0: il circuito somma. Con M = 1 le XOR invertono B e Cin = 1 fornisce il "+1": il circuito sottrae.

Esempio 2: sottrazioni a 4 bit.

  1. 9 − 5: A = 1001, B = 0101, B = 1010. 1001 + 1010 + 1 = 1 0100. Si scarta il riporto finale: 0100 = 4.
  2. 5 − 9: A = 0101, B = 1001, B = 0110. 0101 + 0110 + 1 = 0 1100. Nessun riporto finale. 1100 in complemento a 2 vale −8 + 4 = −4.

Quando sottrai numeri senza segno, il riporto finale indica se c'è stato un prestito: 1 significa che A ≥ B e 0 significa che A < B.

Per i numeri con segno, l'overflow si rileva con una sola XOR: V = C3 ⊕ C4, dove C3 è il riporto che entra nell'ultimo stadio e C4 quello che ne esce. Se sono diversi, il risultato non sta in 4 bit con segno.

Errori comuni

Provalo nel simulatore

Costruire un sommatore nell'editor è il miglior ponte tra le porte e l'aritmetica. Comincia con un bit e arriva fino a quattro.

  1. Inserisci due ingressi, una XOR e una AND, e collegali come nello schema del semisommatore. Genera la sua tabella di verità.
  2. Costruisci un sommatore completo con due semisommatori e una OR, e verifica le sue 8 righe con la tabella di questo articolo.
  3. Copia il sommatore completo quattro volte e concatena i riporti. Poni il primo Cin a 0.
  4. Porta gli ingressi a 1011 e 0110 e osserva che l'uscita sia 0001 con riporto finale 1.
  5. Apri il cronogramma, cambia un ingresso che obblighi il riporto ad attraversare i quattro stadi (per esempio 1111 + 0001) e osserva come si stabilizzano le uscite.

Esercizi

  1. Calcola S e Cout di un sommatore completo con A = 1, B = 0, Cin = 1.
    Risposta

    Ci sono due uni: S = 0 e Cout = 1 (1 + 0 + 1 = 102).

  2. Somma 0111 + 0101 con un sommatore a 4 bit e indica i riporti di ogni stadio.
    Risposta

    Stadio 0: 1 + 1 = 0, riporto 1. Stadio 1: 1 + 0 + 1 = 0, riporto 1. Stadio 2: 1 + 1 + 1 = 1, riporto 1. Stadio 3: 0 + 0 + 1 = 1, riporto 0. Risultato 1100 = 12 (7 + 5).

  3. Con un sommatore-sottrattore a 4 bit calcola 6 − 3 e scrivi quale valore ha M.
    Risposta

    M = 1. 0110 + 1100 + 1 = 1 0011. Si scarta il riporto: 0011 = 3.

  4. Interpretandoli come numeri con segno a 4 bit, c'è overflow in 0111 + 0101?
    Risposta

    Sì. 7 + 5 = 12 non sta nell'intervallo da −8 a +7. Il risultato 1100 verrebbe letto come −4. I riporti sono C3 = 1 e C4 = 0, e V = 1 ⊕ 0 = 1.