L’adder

Bentornati nel nostro piccolo corso alla scoperta dell’intimo funzionamento dei nostri computer. La volta scorsa abbiamo visto le porte logiche di base, e vi avevo lasciato da svolgere un piccolo esercizio, che ora vediamo di risolvere insieme. Eccovi la soluzione:

+----+----+----+----+----+----+----+
| 1A | 2A | 1B | 2B | 1C | 2C | EX |
+----+----+----+----+----+----+----+
|  0 |  0 |  0 |  0 |  0 |  0 |  0 |
|  0 |  0 |  0 |  1 |  0 |  0 |  0 |
|  0 |  0 |  1 |  1 |  0 |  1 |  1 |
|  0 |  1 |  0 |  0 |  0 |  0 |  0 |
|  0 |  1 |  0 |  1 |  0 |  0 |  0 |
|  0 |  1 |  1 |  1 |  0 |  1 |  1 |
|  1 |  0 |  0 |  0 |  0 |  0 |  0 |
|  1 |  0 |  0 |  1 |  0 |  0 |  0 |
|  1 |  0 |  1 |  1 |  0 |  1 |  1 |
|  1 |  1 |  0 |  0 |  1 |  0 |  1 |
|  1 |  1 |  0 |  1 |  1 |  0 |  1 |
|  1 |  1 |  1 |  0 |  1 |  0 |  1 |
|  1 |  1 |  1 |  1 |  1 |  1 |  0 |
+----+----+----+----+----+----+----+

Vediamo di spiegare, per coloro che non avessero ancora chiaro il funzionamento delle porte logiche; partiamo dalla prima riga: alle entrate del primo AND (1A e 2A) abbiamo due zeri. Se andiamo a leggere nella tabella dell’AND, pubblicata sullo scorso numero, troveremo “che 0 AND 0” da in uscita uno 0. 1C, quindi, vale 0. Stesso discorso vale per 2C, risultato dell’AND con entrate 1B (0) e 2B (0). A questo punto, quindi avremo alle entrate dello XOR, due zeri, che daranno in uscita un 0 (0 XOR 0 = 0). Vediamo quindi la riga dopo: 0 AND 0 = 0; 0 AND 1 = 0; 0 XOR 0 = 0. Terza riga: 0 AND 0 = 0; 1 AND 1 = 1; 0 XOR 1 = 1. E cosi via, fino a completare tutta la tabella.

Come avete visto, il funzionamento delle porte logiche non è complesso, e anzi, è piuttosto intuitivo, una volta entrati nel giusto ordine di idee. State cominciando a capire come “pensa” un computer. Se volete esercitarvi, provate a creare dei piccoli elementi voi, collegando i diversi componenti che abbiamo trovato. Potete arrivare a componenti molto complessi, che troverete estremamente divertendi da risolvere…C’è da fare solo una piccola precisazione, prima di continuare. Abbiamo detto, nella prima parte di questa serie di lezioni, che i componenti sono tutti (tranne il NOT) a due entrate ed una uscita. Ora, questa è una semplificazione logica, in quanto i componenti a piu entrate (3,4,5 o piu) sono divisibili e rappresentabili tramite composizione di piu elementi “base” a due entrate ed una uscita. Per intenderci, 1 AND 0 AND 1 = (1 AND 0) AND 1 = 0 AND 1 = 0.

Abbiamo appena visto le porte lorighe ed il loro funzionamento. Abbiamo capito che sono il cuore del nostro elaboratore, ma ancora non ci è chiaro come sia possibile, con il solo aiuto di questi piccoli componenti, realizzare circuiti che diano un risultato chiaramente utile. Ad esempio, costruiamo un circuito in grado di addizionare due numeri.
Innanzitutto, vediamo come funziona un’addizione in binario:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

Possiamo facilmente vedere che nel caso si sommino due 1, avremo in uscita uno 0, e dovremo riportare un 1. Vediamo quindi ora una sintesi di quello che il nostro circuito dovrà fare, nella seguente tabella:

+---------+-------------+
|  INPUT  |   OUTPUT    |
+----+----+-----+-------+
|  A |  B | SUM | CARRY |
+----+----+-----+-------+
|  0 |  0 |   0 |     0 |
|  0 |  1 |   1 |     0 |
|  1 |  0 |   1 |     0 |
|  1 |  1 |   1 |     1 |
+----+----+-----+-------+

Dove SUM è la somma delle due cifre ricevute in ingresso (A e B) mentre CARRY è il bit di riporto.
Per realizzare il circuito che abbiamo descritto in tabella, cioè un sommatore di 1 bit, basterebbe un circuito come quello che vediamo in figura 1, costituito quindi da una porta AND (per il riporto) e una XOR (per la somma vera e propria).
Il problema di questo circuito, è che non tiene conto dell’eventuale riporto ricevuto da un altro adder, e quindi non permette di addizionare piu di una singola coppia di bit. Vediamo allora di implementare un bit di “carry in”, di modo da poter affiancare piu adder per dar vita ad un adder piu complesso.

+--------------+------------+
|     INPUT    |   OUTPUT   |
+----+----+----+-----+------+
|  A |  B | Cin| SUM | Cout |
+----+----+----+-----+------+
|  0 |  0 |  0 |   0 |    0 |
|  0 |  0 |  1 |   1 |    0 |
|  0 |  1 |  0 |   1 |    0 |
|  0 |  1 |  1 |   0 |    1 |
|  1 |  0 |  0 |   1 |    0 |
|  1 |  0 |  1 |   0 |    1 |
|  1 |  1 |  0 |   0 |    1 |
|  1 |  1 |  1 |   1 |    1 |
+----+----+----+-----+------+

Ecco qua, questa è la tabella che il nostro circuito dovrà implementare. Vediamo ora (figura 2) come potremmo strutturare il circuito per fargli eseguire questa operazione.
Sapendo che la somma altro non è che uno XOR (l’abbiamo visto nel primo circuito), possiamo semplificare la nostra operazione con un `(A XOR B) XOR Cin’
Come per il primo circuito, collegheremo al primo XOR, i bit provenienti dalle entrate A e B, e ne otterremo la somma.
Gli stessi due bit, li collegheremo ad una porta AND. Se infatti sono entrambi ad 1 (e quindi l’AND restituisce un 1), significa che avremo un riporto.
A questo punto, abbiamo un bit di Cout e un bit di somma per A e B. A questo, aggiungeremo il Cout di C. Dovremo quindi implementare un’altra porta XOR e un’altra porta AND (a entrambe collegheremo l’uscita di A XOR B, e il bit Cin, per lo stesso discorso che ci ha permesso di sommare A e B).
Ultimo dettaglio del circuito, ci troviamo ora con due bit di Cout, uno per A XOR B, e uno per lo XOR della somma con C. Ovviamente se uno dei due è a 1, dovremo avere 1 in uscita. Questo lavoro è svolto dalla porta OR, che ci permette di ridurre ad 1 il numero di Cout.

Non è difficile, no? Si tratta solo di farci la mano, imparare a giocare con i componenti. Nel prossimo appuntamento, vedremo come fare ad implementare le condizioni al nostro circuito. Happy hacking a tutti 🙂

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.