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:
Livello | Denominazione | |||||
0 Volt | 0 | basso | Lo | Chiuso | On | Falso |
5 Volt | 1 | alto | Hi | Aperto | Off | Vero |
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).
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 |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
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:
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à:
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:
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:
Ingresso | Uscita |
---|---|
0 | 1 |
1 | 0 |
Il simbolo circuitale per rappresentare un operatore NOT, detto anche porta NOT è il seguente:
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.
A | B | C | U |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 0 |
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.
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 |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
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.
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 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
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:
Siano A e B due numeri di 4 bit:
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)
Realizzare il seguente schema con Logisim.
Ordine di costruzione:
Posizionare un flip flop di tipo D sull'area di progetto.
Collegare un Controlled Buffer sull'uscita Q del flip flop.
Mediante operazioni di copia e incolla, disporre i flip flop (con il controlled buffer) in una matrice 4x4.
Posizionare 4 interruttori che rappresentano il Data Bus di ingresso. Assegnare le label D0in, D1in, D2in, D3in.
Collegare l'interruttore D3in a tutti gli ingressi D dei flip flop della prima colonna. Ripetere il collegamento per gli altri flip flop delle altre colonne.
Collegare le uscite dei Controlled Buffer della prima colonna ad un pin. Ripetere l'operazioni per le uscite dei controlled buffer delle altre colonne.
Disporre una porta AND in corrispondenza dell'ingresso di clock del flip flop ed una seconda porta AND immediatamente sotto. Copiare le due porte AND ed incollarle sulle righe dei flip flop.
Collegare l'uscita della porta AND all'ingresso di clock di tutti i flip flop della prima riga. Ripetere il collegamento per i flip flop delle altre righe.
Collegare l'uscita della seconda porta AND alle linee di controllo dei controlled buffer della prima riga. Ripetere l'operazione per tutti gli altri controlled buffer.
Aggiungere due interruttori per i comandi Write e Read.
Collegare la linea Read e la linea Write alle porte AND.
Inserire un componente Decoder con proprietà Select Bits=2 e Include Enable=No
Aggiungere un interruttore, con funzione di Address Bus, con proprietà Data Bits=2.
Collegare le uscite del decoder agli ingressi delle porte AND.
Modalità di utilizzo in scrittura:
Fissare a livello 0 i pulsanti Read, Write e Address bus.
modificare la configurazione di bit degli interruttori che rappresentano il Data Bus di ingresso.
Fissare l'indirizzo del registro in cui si vuole memorizzare il dato.
Portare a livello 1 il pin Write.
Portare a livello 0 il pin Write.
Modalità di utilizzo in lettura.
Assicurarsi che il pin Write sia a livello 0.
Scegliere l'indirzzo del registro da leggere
Portare a livello 1 il pin Read.
Portare a livello 0 il pin Read. (notare che il data bus di uscita si porta in alta impedenza)
La somma di 2 bit, è descritta dalla seguente tabella di verità
Ingressi | uscite | ||
A | B | Somma | Riporto |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
Dalla quale si vede che la somma è realizzata con una porta XOR mentre il riporto è realizzato con una porta AND.
Schema del circuito
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.
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.
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
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à:
Tasto | R3 | R2 | R1 | R0 | C3 | C2 | C1 | C0 | D | C | B | A |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
2 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
3 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
5 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
6 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 |
7 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
8 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
9 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
A | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
B | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
C | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
D | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |
E | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
F | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |