# Latch

In elettronica digitale, il latch (lett. "serratura" o "chiavistello") è uno dei più importanti circuiti logici sequenziali asincroni. Costituisce una delle possibili implementazioni della cella di memoria elementare, ed è un elemento essenziale alla realizzazione di tutte le reti logiche sequenziali. E' importante non confondere il latch con il flip-flop: un circuito sincrono con la stessa funzione.
Per definizione il latch rientra nella categoria dei multivibratori bistabili: è cioè un dispositivo caratterizzato da esattamente due stati stabili tra i quali può transire a comando. Questo lo rende adatto come cella di memoria, in quanto l'insieme delle configurazioni di output codifica esattamente 1 bit di informazione.
Diversamente dal flip-flop, il latch è un dispositivo sensibile al "livello" degli ingressi. In generale questo vuol dire che una transizione di stato viene innescata ogni qual volta la configurazione degli ingressi supera un certo stato soglia, che dipende dalla tecnologia usata per costruire il latch. Nella pratica questa caratteristica risulta spesso problematica ed è il principale fattore che rende i flip-flop un'alternativa preferibile.
Oltre che come memoria il latch trova applicazione come dispositivo anti-rimbalzo nei circuiti che comprendono componenti elettromeccanici come pulsanti, interruttori e commutatori.

## Latch SR

Il latch SR è il latch elementare, sul quale sono basati tutti gli altri. Si tratta di un semplice circuito a due ingressi e due uscite, composto da due porte logiche in retroazione mutua. Il nome deriva dalla denominazione dei due terminali di ingresso: S (per Set, lett. "imposta") ed R (per Reset, lett. "Reimposta").
A livello di logica booleana esistono due implementazioni del latch SR: la versione in logica congiuntiva negata (NAND) e quella in logica disgiuntiva negata (NOR). Le due versioni differiscono sostanzialmente solo nella semantica delle configurazioni di ingresso: nel primo caso si avrà un'interfaccia "attiva bassa" (logica negativa) mentre nell'altro sarà "attiva alta" (logica positiva).
A livello di implementazione elettronica digitale invece il discorso è più complesso e la versione NAND risulta in un circuito decisamente più efficiente.
Il comportamento del latch SR è relativamente semplice e può essere riassunto dal seguente sistema di espressioni:
Descrizione analitica del latch SR in logica congiuntiva. L'espressione in logica disgiuntiva può essere ricavata banalmente applicando i teoremi di De Morgan.

### Principio di funzionamento

Nella versione attiva bassa, normalmente in modalità di immagazzinamento, gli input ${\bar {S}}$ e ${\bar {R}}$ vengono tenuti a livello logico alto così che il feedback mantenga gli output $Q$ e ${\bar {Q}}$ in uno stato costante.
Quando viene abbassato il livello logico sull'input ${\bar {S}}$ (set) l'output $Q$ passa ad alto e resta alto anche quando ${\bar {S}}$ torna alto. Al contrario, quando ${\bar {R}}$ (reset) viene abbassato, l'output $Q$ diventa basso e resta basso anche quando ${\bar {R}}$ torna alto.
Se entrambi ${\bar {S}}$ e ${\bar {R}}$ assumono il valore 0, le uscite $Q$ e ${\bar {Q}}$ assumono entrambe il valore 1, per definizione di NAND con una variabile di valore 0 (0 AND X risulta 0 e negato diventa 1). Il fatto che le uscite assumano lo stesso valore contraddice i nomi assegnati alle uscite (per i quali una dovrebbe essere la negata dell'altra), per questo viene chiamato stato non ammesso o non permesso, ma il circuito è stabile e mantiene entrambe le uscite alte. Il fenomeno di instabilità si verifica quando gli ingressi ${\bar {S}}$ e ${\bar {R}}$ passano simultaneamente dai valori 00 (non permesso) ai valori 11 (memoria). Nel caso di circuito ideale, quindi con tempi di propagazione dei segnali identici per le due porte logiche, si verifica il fenomeno di corsa critica e le uscite oscillano. Nei circuiti reali, per tempi di propagazione delle due porte molto simili, si può verificare uno stato metastabile con transizione finale casuale verso lo stato 10 o 01. Nei circuiti reali, con tempi di propagazione nelle due porte ragionevolmente diversi, si verifica uno stato intermedio di Set o Reset a seconda dei tempi e di conseguenza lo stato di memoria.
In maniera duale, nella versione attiva alta, lo stato di memoria si ottiene quando entrambi gli ingressi sono bassi. La funzione di reset avviene quando è alto l'ingresso R e la funzione set quando è alto l'ingresso S. La condizione da evitare perché lo stato dell'uscita resti indeterminato è quella dei due ingressi entrambi alti.
Nella tabella della verità del Latch SR le uscite $Q$ e ${\bar {Q}}$ vengono a volte indicate come $Q'$ e ${\bar {Q}}'$ per distinguerle dagli ingressi. Per esempio, per il latch attivo basso si ha:
| S̅ | R̅ | Q' | Q̅' | Funzione |
| 0 | 0 | x | x | Non è ammesso |
| 0 | 1 | 1 | 0 | Set |
| 1 | 0 | 0 | 1 | Reset |
| 1 | 1 | Q | Q̅ | Latch (Memorizzazione) |
mentre per il latch attivo alto:
| S | R | Q' | Q̅' | Funzione |
| 0 | 0 | Q | Q̅ | Latch (Memorizzazione) |
| 0 | 1 | 0 | 1 | Reset |
| 1 | 0 | 1 | 0 | Set |
| 1 | 1 | x | x | Non è ammesso |

## Latch SR con abilitazione

Il Latch SR con enable è una versione del latch SR che include un ulteriore ingresso, chiamato "enable" (E). Questo ingresso consente di controllare quando il latch può essere abilitato per l'aggiornamento del suo stato. Quando l'ingresso di enable è attivo (ad esempio, portato a 1), il latch risponde ai segnali sugli ingressi S e R come descritto per il latch SR standard. Tuttavia, quando l'ingresso di enable è disattivato (ad esempio, portato a 0), il latch mantiene il suo stato attuale, indipendentemente dai segnali sugli ingressi S e R.

## Latch D

Il latch D (Data o Delay, lett. "Dato" o "Ritardo") è un circuito a due ingressi e due uscite, realizzato anteponendo ad un latch SR un circuito di pilotaggio, che rende irrealizzabile la configurazione instabile tipica del latch SR ed aggiunge la funzione di abilitazione.
È caratterizzato da un ingresso D (Data) sul quale va presentato il segnale da memorizzare, ed un ingresso E (Enable) che abilita o disabilita l'acquisizione del segnale D, e quindi la variazione dello stato di uscita.
Il comportamento del latch D può essere riassunto dalla seguente espressione:

## Latch JK

Il latch JK è un tipo di circuito digitale bistabile usato per memorizzare un bit di informazione. È una variante del latch SR (Set-Reset), ma risolve alcuni problemi di instabilità che possono verificarsi nel latch SR tradizionale, specialmente quando entrambi gli ingressi sono attivati contemporaneamente.
Componenti di un Latch JK
Un latch JK ha due ingressi principali:
J (Set): Imposta l'uscita Q a 1.
K (Reset): Imposta l'uscita Q a 0.
Caratteristiche del Latch JK
Il latch JK ha un comportamento particolare in base ai segnali di ingresso J e K:
1. J = 0, K = 0: L'uscita rimane invariata.
2. J = 0, K = 1: L'uscita Q diventa 0 (reset).
3. J = 1, K = 0: L'uscita Q diventa 1 (set).
4. J = 1, K = 1: L'uscita Q viene invertita rispetto allo stato precedente (toggle).
Implementazione del Latch JK
Il latch JK può essere realizzato con porte logiche (AND, OR, NOT) o con flip-flop per ottenere una maggiore stabilità. Viene utilizzato in circuiti sequenziali e come elemento di base per la costruzione di registri, contatori e memorie.

## Latch con preset e clear

Un latch con preset e clear è una versione avanzata di un latch standard (come il latch JK) che include due ingressi aggiuntivi per controllare direttamente lo stato dell'uscita. Questi ingressi permettono di impostare o resettare il latch indipendentemente dagli altri segnali di ingresso.
Ingressi del Latch con Preset e Clear
J e K: Sono gli ingressi standard del latch JK e determinano lo stato dell'uscita secondo la logica definita.
Clock: Sincronizza le modifiche dell'uscita rispetto agli ingressi J e K.
Preset (PR): Forza l'uscita Q a 1 indipendentemente dagli altri segnali di ingresso.
Clear (CLR): Forza l'uscita Q a 0 indipendentemente dagli altri segnali di ingresso.
Funzionamento
PR = 0, CLR = 1: L'uscita Q viene impostata a 1 (preset).
PR = 1, CLR = 0: L'uscita Q viene impostata a 0 (clear).
PR = 0, CLR = 0: Comportamento non permesso o instabile. In genere, nei circuiti si evita questa combinazione.
PR = 1, CLR = 1: L'uscita Q si comporta normalmente secondo il circuito latch (controllato dagli ingressi J e K).
Implementazione e Applicazioni
L'implementazione del latch con preset e clear viene spesso realizzata usando porte logiche aggiuntive per controllare questi ingressi. Nelle applicazioni pratiche, il latch con preset e clear è utile quando è necessario avere un controllo immediato e prioritario dell'uscita, come nei circuiti di reset o per inizializzare determinati stati di un sistema digitale.