# Ridondanza logica

La ridondanza logica si verifica in una rete di porte digitali contenente circuiti che non influiscono sulla funzione logica statica. Ci sono diversi motivi per cui può esistere la ridondanza logica. Uno dei motivi è che potrebbe essere stato aggiunto deliberatamente per sopprimere glitch transitori (i quali causano così una race condition) nei segnali di uscita facendo sovrapporre due o più termini di prodotto con un terzo.
Si consideri per esempio la seguente equazione:
    $Y=AB+{\overline {A}}C+BC.$
Il terzo termine di prodotto $BC$ è un termine di consenso ridondante. Se $A$ passa da 1 a 0 mentre $B=1$ e $C=1$, $Y$ rimane 1. Durante la transizione del segnale $A$ nelle porte logiche, sia il primo che il secondo termine possono essere momentaneamente 0. Il terzo termine impedisce un glitch poiché il suo valore di 1 in questo caso non è influenzato dalla transizione del segnale $A$.
Un altro motivo per la ridondanza logica sono le pratiche di progettazione scadenti che si traducono involontariamente in termini logicamente ridondanti. Ciò provoca un aumento non necessario della complessità della rete e può ostacolare la capacità di testare i progetti fabbricati utilizzando i metodi di test tradizionali (modelli di guasto singolo bloccato). Il test potrebbe essere possibile utilizzando i modelli IDDQ.

## Rimozione della ridondanza logica

La ridondanza logica, in generale, non è desiderata. La ridondanza, per definizione, richiede parti extra (in questo caso: termini logici) che aumentano i costi di implementazione (costo effettivo delle parti fisiche o tempo di elaborazione della CPU). La ridondanza logica può essere rimossa da diverse tecniche ben note, come le mappe di Karnaugh, l'algoritmo Quine-McCluskey e il metodo euristico del computer.

## Aggiunta di ridondanza logica

In alcuni casi può essere desiderabile aggiungere ridondanza logica. Uno di questi casi consiste nell'evitare corse critiche, cioè quando un'uscita può fluttuare perché termini diversi stanno "correndo" per spegnersi e riaccendersi. Per spiegare questo in termini più concreti, la mappa di Karnaugh a destra mostra i mintermini per la seguente funzione:
    $f(A,B,C,D)=E(6,8,9,10,11,12,13,14).\$
Le caselle rappresentano i termini AND/OR minimi necessari per implementare questa funzione:
    $f=A{\overline {C}}+A{\overline {B}}+BC{\overline {D}}.$
La k-map mostra visivamente dove si verificano le situazioni di corsa nell'espressione minima avendo degli spazi tra i termini minimi, ad esempio lo spazio tra i rettangoli blu e verde. Se l'input dovesse cambiare da $1110$ a $1010$ si verificherà una corsa tra lo spegnimento di $BC{\overline {D}}$ e l'accensione di $A{\overline {B}}$. Se il termine blu si spegne prima che il verde si accenda, l'uscita fluttuerà e potrebbe registrarsi come 0. Un'altra condizione di gara è tra le blu e le rosse per il passaggio da $1110$ a $1100$.
La condizione di corsa viene rimossa aggiungendo ridondanza logica. Entrambe le corse critiche sui mintermini sono coperte dall'aggiunta del termine giallo $A{\overline {D}}$.
In questo caso, l'aggiunta della ridondanza logica ha stabilizzato l'uscita per evitare che fluttuazioni dell'uscita portino i termini a gareggiare a vicenda per cambiare lo stato.