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.
| A | B | C | S |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
La colonna S è la tabella di una XOR e la colonna C è quella di una AND. Pertanto:
S = A ⊕ B C = AB
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.
| A | B | Cin | Cout | S |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
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:
- Primo semisommatore: P = A ⊕ B e G = AB.
- Secondo semisommatore, con P e Cin: S = P ⊕ Cin e un riporto parziale P·Cin.
- 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.
| Stadio | Ai | Bi | Cin | Si | Cout |
|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 2 | 0 | 1 | 1 | 0 | 1 |
| 3 | 1 | 0 | 1 | 0 | 1 |
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.
- 9 − 5: A = 1001, B = 0101, B = 1010. 1001 + 1010 + 1 = 1 0100. Si scarta il riporto finale: 0100 = 4.
- 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.
Errori comuni
- Usare un semisommatore negli stadi intermedi. Ogni stadio che riceve un riporto ha bisogno di un sommatore completo.
- Lasciare flottante il Cin del primo stadio. Deve andare a 0 per sommare, oppure a M in un sommatore-sottrattore.
- Confondere il riporto finale con l'overflow. Nei numeri con segno, il riporto finale si scarta; l'overflow si rileva con C3 ⊕ C4.
- Dimenticare il "+1" nella sottrazione e collegare soltanto gli invertitori: il risultato è inferiore di un'unità.
- Scrivere S = A + B + Cin con la OR. La somma di un bit è una XOR, non una OR.
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.
- Inserisci due ingressi, una XOR e una AND, e collegali come nello schema del semisommatore. Genera la sua tabella di verità.
- Costruisci un sommatore completo con due semisommatori e una OR, e verifica le sue 8 righe con la tabella di questo articolo.
- Copia il sommatore completo quattro volte e concatena i riporti. Poni il primo Cin a 0.
- Porta gli ingressi a 1011 e 0110 e osserva che l'uscita sia 0001 con riporto finale 1.
- 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
- 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).
- 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).
- 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.
- 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.