SISTEMA BINARIO – ALGEBRA DI BOOLE – CIRCUITI Sistema binario Il sistema binario, a differenza di quello decimale, utilizza, per la rappresentazione dei numeri, solamente due cifre, lo “0” e l’ ”1”, combinati adeguatamente. n° decimale 150 = 0*100 + 5*101 + 1*102 n° binario 1011 = 1*20 + 1*21 + 0*22 + 1*23 È possibile passare da una cifra decimale ad una binaria e viceversa. Vediamo in che modo: per capire a che numero corrisponde “1011” nel sistema decimale, è sufficiente sommare le potenze di 2; 1011 = 1*20 + 1*21 + 0*22 + 1*23 = 1 + 2 + 0 + 8 = 11. Un po’ più complesso è il passaggio inverso, da un numero decimale ad uno binario. Si prende il numero in questione e lo si divide per 2, il risultato dell’operazione viene scritto sotto il numero di partenza e si scrive a lato del risultato il resto (che può essere 0 o 1). E’ necessario iterare il procedimento fino a quando si otterrà 0 come risultato della divisione e accanto allo 0 sarà scritto il resto. Nella colonna dei resti, sarà scritta, letta dal basso verso l’alto, la cifra binaria corrispondente al numero decimale di partenza: 13 a cosa equivale nel S.B.? 13 2 6 1 3 0 1 1 0 1 La colonna corrispondente al resto, è proprio la nostra cifra binaria 13 = 1101 Ora prendiamo in esame le operazioni matematiche con i numeri binari. Iniziamo a considerare la somma relativa a due numeri ad un solo bit: Somma Risultato in due bits 0+0=0 1+0=1 0+1=1 1 + 1 = 0 con riporto di 1 (00) (01) (01) (10) Le somme scritte in precedenza devono essere utilizzate per sommare numeri a più bits. Vediamone un esempio: 1111+ 0101= 1 1 15+ 5= 10100 20 In rosso sono scritti in ogni colonna gli eventuali riporti dovuti alla somma dei bits della colonna precedente. Sottrazione Se facciamo riferimento a due numeri ad un solo bit dobbiamo tenere in considerazione i risultati sottostanti: 0–0=0 1–0=1 0 – 1 = 1 con riporto di 1 1–1=0 E’ bene sottolineare che parleremo solo di sottrazioni di un numero più piccolo da uno più grande (ossia con risultato positivo), del resto l’aggiunta del segno meno nel risultato può essere visto come un ulteriore simbolo da aggiungere alla rappresentazione di un numero. In quest’ottica la terza riga delle operazioni presentate non ha significato matematico in sé ma è utile, operativamente, per operare differenze tra numeri a più bits. Vediamo come operare in questo ultimo caso: 1101 – 0101 = 13– 5= 1000 8 Vediamo un altro esempio in cui è necessario utilizzare il riporto 1100 – 1001 = 11 12– 9 0011 3 Moltiplicazione Per due soli bit sarà, come lecito attendersi: 1*1=1 0*1=0 1*0=0 0*0=0 Per numeri a più bits si procede esattamente come nel caso dei numeri decimali: 1111 * 0101 = 1111 + 0000_ + 1111_ = 1001011 15* 5= 75 Divisione Anche per la divisione si procede come nel sistema decimale. ^ 1111 101 101 // 11 Dopo aver eseguito la classica divisione, si prende il dividendo (1111) e gli si sottrae il resto moltiplicato per il divisore. Algebra di Boole L’algebra di Boole consiste nella traduzione dei connettivi logici e delle operazioni logiche in algebra classica. Connettivi e simboli Vero Falso “and” “or” Logica Classica vero falso Λ V Algebra di Boole 1 0 * + Per gli operatori (+ e *) dell’algebra di Boole valgono la proprietà commutativa e quella associativa: A*B = B*A A+B = B+A A*(B*C) = (A*B)*C A+(B+C) = (A+B)+C Inoltre valgono le stesse leggi della logica classica, comprese quelle di De Morgan, infatti, ad esempio: A+B = A * B ____ _ _ A*B = A + B Con l’algebra di Boole si semplifica notevolmente il calcolo di operazioni logiche in quanto tutto viene traslato nel campo algebrico. Vediamo un esempio di come si possa ottenere la somma di due bit. In tabella è riportato il risultato di questa operazione nei 4 casi possibili, in ingresso abbiamo due bit, uno per ogni numero da sommare, il risultato è scritto in due bit: A 0 1 0 1 B 0 0 1 1 Risultato in 2 BIT 00 01 01 10 Circuiti La colonna evidenziata in rosso corrisponde, come sappiamo, alla tavola di verità di un’operazione logica corrispondente all’“and”, mentre la colonna in nero, corrisponde all’ ”or esclusivo”; entrambi i connettivi possono essere rappresentati sotto forma di circuito, è infatti possibile rappresentare con un sistema di circuiti, un’operazione logica, facendo corrispondere ai connettivi, specifiche rappresentazioni. a And Not a•b a a b a a Or a+ b Or esclusivo b (a+b)•ab b Il nostro scopo ora, è quello di costruire un circuito logico che ci permetta di sommare le due colonne A e B, e di ottenere i due risultati, che chiameremo bit. Un bit equivale ad una cifra come risultato, 2 bit a due cifre, 3 bit a tre cifre e così via. Es. 0 + 1 = 1 0 + 1 = 01 0 + 1 = 001 1 bit 2 bits 3 bits Il circuito logico che riproduce la somma tra A e B è il seguente: A A•B B ≡ (A+B)•AB Per semplificare, chiameremo questo sistema sommatorio semplicemente S. S Supponiamo di avere a disposizione, per costruire il circuito di somma solo delle porte logiche NOT, AND e OR inclusivo, come possiamo realizzare l’OR esclusivo di cui abbiamo bisogno? L’algebra di Boole ci può aiutare: _ _ OR esc = AB + BA Questa espressione logica può essere realizzata con questo circuito: Lo schema proposto ha 5 porte logiche. Pensiamo ad un computer: può essere necessario che il circuito sia realizzato con un numero inferiore di elementi, per motivi economici, di spazio o di tempo di calcolo: Utilizzando le regole dell’algebra di Boole possiamo notare che: _ _ _ _ _ _ _ _ _ _ _ _ __ AB+BA = AB+BA+ 0 + 0 = AA+AB+BA+BB= A(A+B)+B(A+B) = (A+B)(A+B) = (A+B)AB Questa espressione logica può essere realizzata con solo 4 porte logiche: Lo schema rappresentato con S, rappresenta la somma di due colonne in un bit, con risultato in 2 bit. Ora cerchiamo di costruire un sistema per sommare numeri binari con n bit come ad esempio: 1. A = 1 1 1 2. B = 1 0 1 Il risultato sarà in 3 o 4 bits, a seconda del resto, quindi per sicurezza e comodità, nel nostro sistema, aggiungeremo la possibilità di un quarto bit. A3 (1) B3 (1) A2 (1) S B2 (0) S Rip. 1 B1 (1) S Rip. 0 1 O r Rip. 0 1 A1 (1) Rip. 1 0 S 0 Rip. 1 S 1 0 1 Or S14 S13 S02 S01 Il grafico va interpretato in questo modo: S1, S2, S3, S4 sono le cifre, che vanno lette da sinistra verso destra, e che rappresentano il risultato della nostra somma; le righe che riportano scritto “Rip.”, sono quelle che indicano il riporto della addizione, ad esempio 1 + 1 = 0 con riporto di 1. Questo sistema può essere utilizzato per la somma di numeri con n bit, perché è sufficiente aggiungere n “scatole S” in più, a sinistra. Ora vediamo invece, come può essere rappresentata una “scatola D” che faccia la differenza tra due numeri binari, A 1 1 0 0 B 1 0 1 0 Risultato in 2 BIT 00 10 11 00 La colonna in nero, di nuovo rappresenta la tavola di verità dell’ ”or esclusivo”, mentre invece quella in rosso, la negazione dell’implicazione tra B e A. Col. Nera A•B Col. Rossa B→A ≡ (non B) + A ≡ B•A Lo schema della “scatola D” sarà quindi il seguente. (A+B)•(non AB) A B ≡ B A B•A D Anche qui per semplicità, chiameremo D questo sistema. Come ultimo passo, realizziamo il circuito che ci permetterà di sommare numeri binari a più bits come abbiamo fatto in precedenza per la somma. A3 (1) B3 (1) A2 (1) D 0 B2 (0) A1 (1) D B1 (1) 0 Rip. 0 D 1 Rip. 0 0 D 0 D 0 Or Rip. 0 1 S3 S2 S1 0 1 0 Come si può vedere, il sistema funziona, in quanto 111-101=010 ≡ 7-5=2 ! I due 0 rossi, stanno ad indicare che quella uscita darà sempre come risultato lo zero, in quanto A>B, perciò non può esserci resto.