# Porta logica

Una porta logica, in elettronica digitale e informatica, è un circuito digitale in grado di implementare (cioè di realizzare, simulandone la "logica matematica" mediante opportuni controlli su segnali elettrici) una particolare operazione logica di una o più variabili booleane.

## Descrizione

In base al numero di ingressi, che rappresentano il numero di variabili che una porta logica può ricevere in input, le porte logiche si possono classificare in:
* porte a due variabili: AND, OR, EXOR, NOR, NAND e EXNOR;
* porte a singola variabile: NOT e BUFFER.
In particolare le porte OR, AND e NOT costituiscono un insieme funzionalmente completo: attraverso gli operatori logici che implementano è possibile generare qualsiasi funzione logica.
Si nota che le operazioni NAND e NOR costituiscono un insieme funzionalmente completo di operatori logici, ovvero consentono di rappresentare qualunque funzione logica possibile. Comunque all'atto pratico, la scelta dei tipi di porta da utilizzare è determinata dalla necessità di minimizzare il numero di package necessari al circuito; ad esempio, se nella stesura finale dello schema elettrico di un progetto mancasse solo una porta NOT e fosse ancora disponibile una delle quattro porte NAND contenute in un package, si realizza la porta NOT mancante, unendo gli ingressi della NAND disponibile, sfruttandola come NOT, risparmiando così un package.
Anche se nella pratica poco usate, esistono porte logiche pneumatiche e porte logiche molecolari che utilizzando DNA come input/output.

### Porte Open collector

Alcune porte logiche hanno la loro uscita configurata elettricamente in modo particolare, sono definite open collector, ovvero a collettore aperto. In questi dispositivi, il collettore del transistor costituente l'uscita della porta non è collegato al positivo dell'alimentazione, ma è volante rispetto al circuito interno. Questa configurazione permette di utilizzare la porta per pilotare direttamente dispositivi vari, quali relè, LED, ecc, sempreché il valore di corrente assorbita dal dispositivo pilotato sia compatibile con quello fornito dal transistor di uscita. Un vantaggio ulteriore è costituito dal valore di tensione accettato dal transistor, normalmente superiore a quella di alimentazione del circuito integrato, pertanto, in un circuito composto da dispositivi TTL alimentato a 5 volt, utilizzando una porta open collector, è possibile per esempio, ottenere un'onda quadra di ampiezza 12 o più volt, prelevandola dal collettore opportunamente collegato tramite una resistenza pull-up ad una tensione positiva del valore desiderato, oppure pilotare un relè, collegando uno dei capi della sua bobina sull'uscita della porta, e l'altro capo all'alimentazione positiva, di valore adeguato al suo funzionamento. Una delle porte più comuni, ampiamente utilizzata, definita HEX INVERTER BUFFER DRIVER (6 NOT in un package) è il 7406. Una regola generale, piuttosto importante ai fini di preservare il circuito realizzato da eventuali momentanei disturbi casuali, è di collegare a massa gli ingressi delle porte rimaste inutilizzate nei vari package (in particolare le porte CMOS).

## Tabelle della verità

Le tabelle della verità sono un metodo semplice per analizzare tutte le possibili combinazioni ingresso-uscita.

### AND

AND è una porta logica che riceve in ingresso almeno due valori e restituisce 1 solo se tutti i valori di ingresso hanno valore 1. Viene chiamata in italiano "porta di necessità" perché appunto NECESSITA che i valori in entrata siano uguali affinché il valore d'uscita sia verificato. Il valore uscente si può trovare tramite la formula Y=A*B in cui Y è l'output, con tre input Y=A*B*C e così via.
Segue la tavola di verità:
| INPUT | INPUT | OUTPUT |
| $A$ | $B$ | $A\cdot B$ |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |

### NAND

Al contrario la porta NAND restituisce la negazione di una porta AND, quindi restituisce 1 quando negli ingressi è presente lo 0, e 0 solo quando tutti i valori in ingresso sono 1. Il valore uscente si può trovare tramite la formula Y=1-(A*B) in cui Y è l'output, con tre input Y=1- (A*B*C) e così via.
Segue la tavola di verità:
| INPUT | INPUT | OUTPUT |
| $A$ | $B$ | ${\overline {A\cdot B}}$ |
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

### OR

OR è una porta logica che riceve in ingresso almeno due valori e restituisce 1 se almeno un valore di ingresso ha valore 1. Viene chiamata in italiano "porta di sufficienza" perché appunto è SUFFICIENTE che almeno uno dei [due o più] valori in entrata sia verificato affinché il valore in uscita sia vero.
Segue la tabella di verità:
| INPUT | INPUT | OUTPUT |
| $A$ | $B$ | $A+B$ |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |

### NOR

Al contrario la porta NOR restituisce la negazione di una porta OR e quindi restituisce 1 solo quando tutti i valori in ingresso sono 0.
Segue la tavola di verità:
| INPUT | INPUT | OUTPUT |
| $A$ | $B$ | ${\overline {A+B}}$ |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |

### EXOR

EXOR (o XOR)-(EXclusive OR) è una porta logica che riceve in ingresso "n" valori e restituisce "1" in uscita se, e solo se, vi è almeno un ingresso che differisce dagli altri.
Segue la tavola di verità di una porta XOR a "n=2" ingressi:
| INPUT | INPUT | OUTPUT |
| A | B | ${A{\bar {B}}+{\bar {A}}B}$ |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

### EXNOR

EXNOR (EXclusive NOR) è una porta logica che riceve in ingresso "n" valori e restituisce "1" in uscita se, e solo se, tutti gli ingressi hanno il medesimo valore logico. In breve, è equivalente alla negazione della porta EXOR (eXclusive OR).
Segue la tavola di verità di una porta EXNOR a "n=2" ingressi:
| INPUT | INPUT | OUTPUT |
| A | B | ${AB+{\bar {A}}{\bar {B}}}$ |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |

### NOT

Porta logica che inverte il segnale in ingresso. Questa porta logica ha un solo ingresso ed una uscita che sarà 1 se l'ingresso è 0 o 0 se l'ingresso è 1.
Segue la tavola di verità:
| INPUT | OUTPUT |
| A | NOT A |
| 0 | 1 |
| 1 | 0 |
Tuttavia questa tavola di verità è a volte rappresentata con due elementi superflui rappresentanti gli ingressi identici:
| INPUT | OUTPUT |
| A | NOT A |
| 0 | 1 |
| 1 | 0 |
| 0 | 1 |
| 1 | 0 |

### BUFFER

Porta logica che non varia il segnale di entrata. Questa porta logica ha un solo ingresso e una sola uscita che sarà 1 se l'ingresso è 1 e 0 se l'ingresso è 0.
| INPUT | OUTPUT |
| A | A |
| 1 | 1 |
| 0 | 0 |

## Porte universali

Con le porte logiche AND, OR e NOT è possibile realizzare qualsiasi funzione booleana: si dice anche che {AND,OR,NOT} è un insieme funzionalmente completo.
Si può verificare facilmente che la porta NAND da sola e la porta NOR da sola, costituiscono due insiemi funzionalmente completi: la NAND è definita come NOT-AND, per questo negando una NAND si può ottenere una AND; utilizzando il teorema di De Morgan abbiamo che:
x NAND y = NOT (x AND y) = (NOT x) OR (NOT y)
e perciò, possiamo ottenere una OR negando gli ingressi della NAND. Ricapitolando, tramite NAND e NOT possiamo ottenere una AND e una OR; ma d'altra parte con una NAND possiamo ottenere una NOT come segue
x NAND 1 = NOT (x AND 1) = NOT x
perciò abbiamo dimostrato che con una NAND si possono ottenere AND, OR e NOT e ne segue che {NAND} è un insieme funzionalmente completo! Similmente si può fare per la NOR.
Lavorare con la sola NAND o la sola NOR può essere utile ai fini pratici perché con un solo tipo di porta è possibile realizzare qualsiasi circuito, ovviamente a discapito di una spesa di porte maggiore di quella che si avrebbe con AND, OR e NOT, o almeno questo avviene nella maggior parte dei casi. Siccome lavorare con le porte universali è molto importante, è bene conoscere le proprietà algebriche degli operatori NAND e NOR: algebricamente indichiamo l'operatore NAND con ↑ e l'operatore NOR con ↓.