Reti combinatorie

Un livello logico può essere ottenuto tramite un interruttore, collegato a 0V, che può venire chiuso su una resistenza collegata a 5V.

La resistenza è anche detta di pull-up, perchè, quando l'interruttore è aperto sul punto A si misurano 5 V (il punto A è tirato su), mentre quando l'interruttore è chiuso il punto A si porta a 0Volt.

Il livello logico sul punto A viene individuato con uno dei termini seguenti, in corrispondenza dei livelli di tensione misurati:

LivelloDenominazione
0 Volt0bassoLoChiusoOnFalso
5 Volt1altoHiApertoOffVero

L'interruttore può essere interpretato come rilevatore dello stato di un elemento da controllare. Ad esempio, l'interruttore potrebbe indicare se uno sportello è chiuso o aperto, se un motore è in funzione o è fermo, ecc.

In questo senso il punto A rappresenta una variabile logica (o booleana).

Più in generale, una variabile logica può rappresentare anche una proposizione o una relazione. Una proposizione può essere vera o falsa. Ad esempio la proposizione "il libro si trova nel cassetto" può essere vera o falsa.

Una relazione è un'operazione che associa a due o più valori di un certo tipo (intero, reale, ...) un valore di tipo logico. Ad esempio, se la variabile a contiene un valore intero allora la relazione:

B = a < 0

fornisce un risultato, nella variabile B di tipo logico (o booleano).


Operatori logici: AND

L'operatore AND si applica a due relazioni e fornisce risultato vero se e solo se entrambe le relazioni sono vere.

Indicando con A e B le due relazioni e con U il risultato, l'operatore AND viene riepilogato nella tabella di verità:

 A  B  U 
000
010
100
111

In un'equazione booleana, per abbreviare, l'operatore AND si indica con il punto:

U = A·B

Anzichè con la più estesa notazione U = A (AND) B

Una possibile interpretazione della funzione AND (in logica invertita) è la seguente:

Solo se entrambi gli interruttori sono chiusi l'uscita è bassa.

in logica invertita si scambia la denominazione dei livelli di tensione, ad esempio a 0Volt corrisponde Vero e a 5 Volt corrisponde Falso.

Il simbolo circuitale per rappresentare un operatore AND, detto anche porta AND o gate AND, è il seguente:


Operatori logici: OR

L'operatore OR si applica a due relazioni e fornisce risultato vero se e solo se almeno una relazione è vera.

Indicando con A e B le due relazioni e con U il risultato, l'operatore OR viene riepilogato nella tabella di verità:

 A  B  U  000 011 101 111

In un'equazione booleana, per abbreviare, l'operatore OR si indica con il segno di addizione:

U = A + B

Anzichè con la più estesa notazione U = A (OR) B

Una possibile interpretazione della funzione OR (in logica invertita) è la seguente:

Solo se almeno un interruttore è chiuso l'uscita è bassa.

in logica invertita si scambia la denominazione dei livelli di tensione, ad esempio a 0Volt corrisponde Vero e a 5 Volt corrisponde Falso.

Il simbolo circuitale per rappresentare un operatore OR, detto anche porta OR o gate OR è il seguente:


Operatori logici: NOT

L'operatore NOT ha un solo ingresso. Lo stato dell'uscita è opposto allo stato dell'ingresso. In un'espressione logica l'operatore Not viene indicato con una barra sopra la variabile, ma poichè tipograficamente un tale carattere non è disponibile, spesso si trova la simbologia seguente: U = ¬A

Se l'ingresso è vero, l'uscita è falsa, mentre se l'ingresso è falso l'uscita è vera

La tabella di verità possiede solo 2 colonne:

IngressoUscita
01
10

Il simbolo circuitale per rappresentare un operatore NOT, detto anche porta NOT è il seguente:


Teoremi di De Morgan

Il negato di una AND è uguale all'OR tra i negati
è equivalente a


Il negato di una OR è uguale all'AND tra i negati
è equivalente a

I due teoremi sono duali. Cioè se in uno si scambiano i nomi degli operatori si ottiene l'altro teorema.

Per verificare i due teoremi di De Morgan si costruisca la tabella di verità sia dell'espressione a primo membro che di quella a secondo membro e si osservi che si ottengono due tabelle uguali.


Sintesi di una funzione booleana

 A  B  C  U 
0000
0010
0100
0111
1000
1011
1100
1110

Si supponga che A, B e C siano livelli generati da interruttori che con il loro stato, aperto o chiuso, indicano la posizione di un elemento che appartiene ad un processo da controllare.

Ad esempio A indica la posizione (accesi o spenti) dei fari, B indica la posizione (inserita o estratta) della chiave e C indica la posizione (aperta o chiusa) della portiera dell'auto.

L'uscita U sia il comando per azionare il segnale acustico che avverte di una distrazione: si esce dall'auto dimenticando di estrarre la chiave o di spegnere i fari.

U deve essere 1 quando i fari sono spenti, la chiave è inserita e la portiera è aperta. Oppure U deve essere 1 quando i fari sono accesi, la chiave è disinserita e la portiera è aperta.

La tabella di verità viene costruita scrivendo tutti i possibili valori degli ingressi A, B e C, e, per ciascuna combinazione dei valori degli ingressi, si scrive il livello che si desidera in uscita, in accordo al comportamento specificato.

Nell'esempio proposto U=1 nei due casi

(I) A=0 e B=1 e C=1

(II) A=1 e B=0 e C=1

Quindi U=1 se è vera la condizione I oppure se è vera la condizione II, che corrisponde alla funzione:

U = (I) OR (II)

Entrambi gli ingressi della funzione OR sono due termini costituiti dai prodotti (AND) di tutte le variabili. Ciascuna variabile compare nella sua forma normale se nella tabella di verità c'è 1, e compare nella forma negata se compare uno 0, quindi i due termini si scrivono:

(I) = ¬A · B · C

(II) = A · ¬B · C

La funzione U, quindi, si scrive: U = (¬A)·B·C + A·(¬B)·C, che corrisponde al seguente circuito.


Exclusive NOR

Si progetti un circuito che dia uscita uguale a 1 se e solo se entrambi gli ingressi sono uguali.

La tabella di verità deve avere l'uscita U=1 solo nelle due righe in cui gli ingressi sono uguali, cioè A=B:

 A  B  U 
001
010
100
111

L'uscita deve essere U=1 nei due casi

A=0 e B=0

oppure

A=1 e B=1

Cioè:

U= (¬A)·(¬B) + A · B

Il circuito che realizza il comportamento descritto dalla funzione booleana precedente è il seguente:

L'Exclusive NOR egrave; un comparatore, cioè un circuito che indica se due bit sono uguali.

Exclusive OR

Si progetti un circuito che fornisca U=1 se e solo se un solo ingresso è 1, ma non entrambi: La tabella di verità deve avere l'uscita U=1 solo nelle due righe in cui gli ingressi sono diversi, cioè A≠B:

 A  B  U 
000
011
101
110

L'uscita deve essere U=1 nei due casi

A=1 e B=0

oppure

A=0 e B=1

Cioè:

U = (¬A)·B + A ·(¬B)

Questo circuito viene denominato Exclusive Or, infatti l'uscita a valore veros indica che solo un ingresso, ma non entrambi, è vero.

Il circuito che realizza il comportamento descritto dalla funzione booleana precedente è il seguente:


Progetto di un comparatore a 4 bit

Siano A e B due numeri di 4 bit:

A3 A2 A1 A0
e
B3 B2 B1 B0

La relazione A > B è vera se è vera almeno una delle seguenti condizioni:

(A3 > B3)

Oppure:

(A3 = B3) AND (A2 > B2)

Oppure:

(A3 = B3) AND (A2 = B2) AND (A1 > B1)

Oppure:

(A3 = B3) AND (A2 = B2) AND (A1 = B1) AND (A0 > B0)

Queste relazioni si possono interpretare così:

A è maggiore di B se il bit A3 è maggiore del bit B3 oppure, nel caso che A3=B3, se A2 è maggiore di B2, oppure nel caso che A3=B3 e anche A2=B2, risulta A1 maggiore di B1, oppure, infine, se i primi tre bit delle due variabili sono uguali, risulta A0 maggiore di B0.

Quindi la relazione A > B è vera se è vero il secondo membro della seguente espressione:

A > B =  
A3·(not)B3 + 
(not(A3⊕B3))·A2·(not)B2 +
(not(A3⊕B3))·(not(A2⊕B2))·A1·(not)B1 +
(not(A3⊕B3))·(not(A2⊕B2))·(not(A1⊕B1))·A0·(not)B0

nota: l'espressione (not(Ak⊕Bk)) si deve leggere Exlusive Nor tra Ak e Bk.

Per verificare se la relazione A < B è vera basta scambiare le variabili A e B nell'espressione precedente, si ottiene:

A < B =  
B3·(not)A3 + 
(not(B3⊕A3))·B2·(not)A2 +
(not(B3⊕A3))·(not(B2⊕A2))·B1·(not)A1 +
(not(B3⊕A3))·(not(B2⊕A2))·(not(B1⊕A1))·B0·(not)A0

Per verificare se la relazione A = B è vera si deve calcolare il secondo membro della seguente espressione:

A = B =  
(A3⊕B3)·(A2⊕B2)·(A1⊕B1)·(A0⊕B0)
Circuito del comparatore a 4 bit

Registro di memoria

Realizzare il seguente schema con Logisim.

Memoria con 4 registri.

Ordine di costruzione:

Modalità di utilizzo in scrittura:

  1. Fissare a livello 0 i pulsanti Read, Write e Address bus.

  2. modificare la configurazione di bit degli interruttori che rappresentano il Data Bus di ingresso.

  3. Fissare l'indirizzo del registro in cui si vuole memorizzare il dato.

  4. Portare a livello 1 il pin Write.

  5. Portare a livello 0 il pin Write.

Modalità di utilizzo in lettura.

  1. Assicurarsi che il pin Write sia a livello 0.

  2. Scegliere l'indirzzo del registro da leggere

  3. Portare a livello 1 il pin Read.

  4. Portare a livello 0 il pin Read. (notare che il data bus di uscita si porta in alta impedenza)


Half Adder

La somma di 2 bit, è descritta dalla seguente tabella di verità

Ingressiuscite
ABSommaRiporto
0000
0110
1010
1101

Dalla quale si vede che la somma è realizzata con una porta XOR mentre il riporto è realizzato con una porta AND.

Full Adder

Schema del circuito



Decodificatore BCD-7 segmenti

Aprire il circuito del sommatore a 3 bit.

Nel menu Windows scegliere Combinational Analisys.

Nella casella di testo della scheda Inputs inserire le variabili di ingresso: A (e premere Add), B (e premere Add), C (e premere Add) e D (e premere Add)

Nella casella di testo della scheda Outputs inserire le variabili di uscita: a (e premere Add), b (e premere Add), ..., g (e premere Add).

Nella scheda Table assegnare i valori alle variabili di uscita come indicato nella figura.

Premere il pulsante Build Circuit. Assegnare il nome al circuito: decBCD-7Seg.


Nel pannello dei componenti di logisim fare doppio clic su main. Clic sul componente decBCD-7Seg e poi clic sull'area di disegno.

Collegare le uscite S0, S1, S2 e R del sommatore agli ingreassi A, B, C, D del decodificatore da BCD a 7 segmenti.

Aggiungere il display a 7 segmenti e collegare le uscite del decodificatore ai pin del display.

Schema del sommatore a 3 bit con display


Tastiera Esadecimale

Una tastiera esadecimale consiste di una matrice di tasti disposti su una griglia di 4 righe e 4 colonne. I tasti sono collocati all'intersezione di ciascuna riga con una colonna.

Un livello 1 viene applicato in successione ad ogni linea di colonna. La pressione di un tasto deve fermare la rotazione del livello 1 in corrispondenza della colonna in cui c'è il tasto premuto e deve attivare un livello 1 anche sulla stessa riga.

Leggendo il numero di riga e il numero di colonna contenenti il livello 1 si risale al tasto premuto.

La rotazione del livello 1 sulle linee di colonna viene ottenuta tramite un circuito Shift Register. Questo possiede:

Il clock è messo in AND con il segnale che indica che c'è un tasto premuto.


schema

Pulsante a rilascio

Modificare il tipo di funzionamento del switch facendo clic con il tasto destro sul switch e scegliendo set Switch type. Nel riquadro di dialogo scegliere Push to make


Decodifica della tastiera

Nel circuito precedente cancellare i LED e completare il circuito applicando le porte OR che forniscono la codifica in BCD del tasto premuto.

Si deve notare che il circuito mostrato fornisce decodifica 0 anche quando nessun tasto è premuto, pertanto la decodifica si dovrebbe confermare con l'attivazione di un ulteriore segnale che indichi, ad esempio, la condizione di tasto premuto.

Le 4 porte OR costituiscono la sezione di codifica in esadecimale del tasto premuto. Le espressioni booleane dei bit A, B, C e D del codice sono:

A = C1 + C3

B = C2 + C3

C = R0 + R2

D = R0 + R1

che sono ottenute dalla seguente tabella di verità:

TastoR3R2R1R0 C3C2C1C0 DCBA
0 1 0 0 0 0 0 01 0 0 0 0
1 1 0 0 0 0 0 10 0 0 0 1
2 1 0 0 0 0 1 00 0 0 1 0
3 1 0 0 0 1 0 00 0 0 1 1
40 1 0 0 0 0 01 0 1 0 0
5 0 1 0 0 0 0 10 0 1 0 1
6 0 1 0 0 0 1 00 0 1 1 0
7 0 1 0 0 1 0 00 0 1 1 1
8 0 0 1 0 0 0 01 1 0 0 0
9 0 0 1 0 0 0 10 1 0 0 1
A 0 0 1 0 0 1 00 1 0 1 0
B 0 0 1 0 1 0 00 1 0 1 1
C 0 0 0 1 0 0 01 1 1 0 0
D 0 0 0 1 0 0 10 1 1 0 1
E 0 0 0 1 0 1 00 1 1 1 0
F0 0 0 1 1 0 00 1 1 1 1