# Comparatore (elettronica)

Il comparatore è un circuito utilizzato sia nell'elettronica digitale che in quella analogica, le due funzioni, nettamente diverse, sono realizzate con componenti integrati.
Un comparatore digitale (o svastica elettrica) o comparatore di magnitudine è un dispositivo elettronico hardware che riceve in input due segnali e in output determina se sono uguali, o quale dei due è il maggiore. I comparatori vengono utilizzati nelle unità di elaborazione centrale (CPU) e nei microcontrollori (MCU). Esempi di comparatore digitale includono il CMOS 4063 e 4585 e il TTL 7485 e 74682.
L'equivalente analogico del comparatore digitale è il comparatore di tensione, trattato nel paragrafo specifico. Su alcuni dei loro ingressi, molti microcontrollori hanno comparatori analogici che possono essere letti o attivati da un interrupt.

## Realizzazione con circuiti digitali

In logica combinatoria, ha la funzione di confrontare tra di loro due numeri, o più in generale due parole digitali, segnalando se sono uguali.
Se le due parole sono costituite da un solo bit, il circuito in grado di realizzare questa funzione è una semplice porta EX-OR a due ingressi, la quale presenta in uscita uno stato logico 0 quando i bit di ingresso sono uguali, e 1 in caso contrario. Si è quindi in presenza un comparatore di uguaglianza ad uscita attiva bassa, utilizzando una porta EX-NOR si ottiene un comparatore di uguaglianza con uscita attiva alta. Una porta XNOR è un comparatore di base, poiché il suo output è "1" solo se i suoi due bit di ingresso sono uguali.
Si considerino due numeri binari a 4 bit A e B:
    $A=A_{3}A_{2}A_{1}A_{0}$
    $B=B_{3}B_{2}B_{1}B_{0}$,
dove ogni pedice rappresenta una delle quattro cifre dei due numeri A e B.

### Uguaglianza

I numeri binari A e B saranno uguali se e solo se tutte le coppie di cifre significative di entrambi i numeri sono uguali, cioè:
    $A_{3}=B_{3}$, $A_{2}=B_{2}$, $A_{1}=B_{1}$ and $A_{0}=B_{0}$
Poiché i numeri sono binari, le cifre sono 0 o 1 e la funzione booleana per l'uguaglianza di due cifre qualsiasi A_ {i} e B_ {i}
    $x_{i}=A_{i}B_{i}+{\overline {A}}_{i}{\overline {B}}_{i}$.
L'espressione descrive la tavola di verità di una porta XNOR, utilizzata nell'elettronica digitale, in cui $x_{i}=1$ solo se $A_{i}=B_{i}$, con $i=n,n-1,n-2,...,1$.
La condizione di uguaglianza dei numeri A e B può anche essere scritta in altro modo equivalente, mediante l'operatore AND e una variabile ausiliaria di tipo binaria $(A=B)$, che è il primo membro dell'equazione:
    $(A=B)=x_{3}x_{2}x_{1}x_{0}$, dove
si ottiene $(A=B)=1$ solo se tutte le coppie di cifre dei due numeri sono uguali.
Per realizzare un comparatore per parole a più bit occorre confrontare i bit di uguale peso delle due parole, l'uscita segnalerà l'uguaglianza solo nel caso in cui tutti i bit corrispondenti risultano uguali. Per esempio un comparatore che confronta due parole A e B di due bit ($A_{1}A_{0}$ e $B_{1}B_{0}$) risulterà in questo modo:
$E=(A_{1}xnorB_{1})and(A_{0}xnorB_{0})$
Sull'uscita E ci sarà un segnale alto solo se entrambi gli ingressi della porta AND sono a 1 cioè soltanto quando tutti i bit dello stesso peso sono uguali.
Lo stesso processo logico può essere esteso a parole con un numero qualsiasi di bit.
A volte nei comparatori integrati, oltre all'uscita che segnala quando A=B, esistono anche altri terminali che danno un'indicazione di maggioranza e di minoranza, ossia se A>B oppure A<B, inoltre spesso sono presenti degli ingressi supplementari per il collegamento in cascata di più comparatori, in modo da poter analizzare parole formate da un maggior numero di bit.

### Disuguaglianza

Per determinare manualmente il maggiore dei due numeri binari, è necessario prendere in esame le grandezze relative alle coppie di cifre (bit per un numero binario), partendo da quello con ordine di grandezza più alto (più significativo, procedendo gradualmente verso i bit meno significativi, fermandosi all'ultimo ovvero se viene trovata una disuguaglianza.
In questo secondo caso, se il bit corrispondente di A è 1 e quello di B è 0, allora concludiamo che A > B.
Questo confronto sequenziale può essere espresso logicamente come:
    $(A>B)=A_{3}{\overline {B}}_{3}+x_{3}A_{2}{\overline {B}}_{2}+x_{3}x_{2}A_{1}{\overline {B}}_{1}+x_{3}x_{2}x_{1}A_{0}{\overline {B}}_{0}$
    $(A<B)={\overline {A}}_{3}B_{3}+x_{3}{\overline {A}}_{2}B_{2}+x_{3}x_{2}{\overline {A}}_{1}B_{1}+x_{3}x_{2}x_{1}{\overline {A}}_{0}B_{0}$
La variabile (A > B) e la variabile (A < B) si dicono variabili binarie di output: sono uguali a 1, rispettivamente se A > B oppure se A < B.
Come si potrà notare, ogni termine della somma è moltiplicato per un fattore $x_{n}\cdot x_{n-1}\cdot x_{n-2}...\cdot x_{i+1}$, in modo tale che la prima coppia di cifre diverse (per cui $x_{i}=0$) annulla anche tutti i termini successivi fino all'ultimo, ed è pertanto la condizione di arresto per l'algoritmo di comparazione di uguaglianza.

## Realizzazione con circuiti analogici

In campo analogico l'uso più frequente è la comparazione di un livello di tensione variabile, rispetto ad un livello di riferimento fisso. Per questa funzione possono essere usati amplificatori operazionali generici o dispositivi ottimizzati per questa funzione definiti "voltage comparator", tra questi, due dispositivi di largo impiego in uso da decenni sono siglati LM311 e LM339, da notare che le prime due lettere cambiano in base al produttore del dispositivo, in questo caso, National Semiconductor, cambia anche la prima delle tre cifre (da 1 a 3) in base alle prestazioni del dispositivo.