La soluzione rispetto al circuito precedente è usare una porta NOT per una delle due porte AND.
Se R = 0, allora S = 1 e viceversa. Il clock fa lo stesso lavoro di prima, abilita il circuito. Se D varia mentre il clock è a 1, allora il latch cambia stato.
Questo latch evita la race condition che volevamo evitare (S = R = 1).
Un D-Latch, così come l'abbiamo costruito, è "trasparente", nel senso che quando il clock è alto, il valore di D viene immediatamente mandato verso il latch, anche se con un piccolo ritardo di propagazione.
Il punto è che, quando il clock è alto il valore di D deve essere già stabile prima che il clock diventi alto, altrimenti il clock non lo "farà passare". Inoltre il segnale D deve durare per tutto il tempo in cui il clock è alto. Infine per dare il tempo al circuito di stabilizzarsi il segnale D deve durare anche per un periodo di tempo successivo al clock.
Il valore passato al latch per la memorizzazione non è il livello alto di D, ma quello basso.
D deve essere stabile prima
Il valore di D memorizzato potrebbe essere il livello alto e successivamente quello basso, memorizzando un valore di D inatteso nel latch.
In questo caso:
In rosso nell'immagine è mostrato il ritardo di propagazione con cui Q cambia stato.
Con questo modulo, si possono progettare componenti di memoria la cui memorizzazione può avvenire a diversi istanti rispetto al segnale del clock: