Circuiti Sincroni e Asincroni
Cerchiamo di ragionare in termini più generali rispetto agli esempi di flip-flop visti
fin'ora. L'idea di base per arrivare a produrre un dispositivo sequenziale é di collegare
alcune uscite di un circuito combinatorio con ingressi dello stesso circuito in modo da
produrre dei cicli chiusi (vedi schema generale in figura):
Naturalmente, l'esistenza di cicli chiusi nella rappresentazione grafica del dispositivo
in termini di funzioni elementari é una condizione necessaria ma non sufficiente per
produrre dei circuiti sequenziali (tantomeno dei circuiti sequenziali "utili").
A tale schema di principio può essere ricondoto qualsiasi circuito sequenziale, sia
asincrono che sincrono.
Ricordiamo la definizione di circuito sequenziale sincrono: un circuito sequenziale tale
per cui solo variazioni di una variabile di controllo (chiamata di solito clock) possono
comportare variazioni dei valori di uscita; il cambiamento di valore di qualsiasi altra
variabile di ingresso non determina immediatamente alcun cambiamento dei valori di
uscita. Ogni circuito sequenziale che non soddisfa la definizione di circuito sincrono
viene chiamato asincrono.
Nel caso particolare di circuiti sincroni, possiamo individuare una struttura di base
ancora più regolare, schematizzata in figura:
nella quale il ciclo viene chiuso mediante dei dispositivi del tipo flip-flop Master/Slave
edge-triggered. Vediamo quali vantaggi porta l'utilizzazione di circuiti sincroni
rispetto a quella dei circuiti asincroni, a fronte della maggior complessità di
realizzazione.
Alee e temporizzazione
Consideriamo l'esempio di circuito sequenziale asincrono illustrato in figura:
Supponiamo di voler determinare il valore dell'uscita u dopo aver applicato sugli
ingressi la seguente sequenza di combinazioni di valori:
config
d=
c=
b=
a=
1
1
1
1
1
2
0
1
1
1
3
0
0
1
1
Dalla tavola di verità delle funzioni combinatorie e dalla descrizione del flip-flop
Set/Reset determiniamo che la prima configurazione memorizza il valore u=1. La
seconda configurazione consente al flip-flop di mantenere il valore precedentemente
memorizzato, così come la terza. Quindi possiamo dedurre che il valore prodotto in
uscita dall'applicazione della sequenza di ingressi considerata sia u=1.
Non soddisfatti di questa risposta, proviamo ora a considerare alcuni dettagli
realizzativi del dispositivo Multiplexer. Supponendo di considerare la realizzazione
minimale del multiplexer vista in precedenza mediante un NOT, due AND ed un OR,
possiamo ipotizzare che ciascuna funzione logica elementare sia caratterizzata da un
ritardo di una unità di tempo per produrre il corretto valore di uscita a fronte di una
variazione dei valori di ingresso. Il passaggio dalla seconda alla terza configurazione
della sequenza può quindi essere decomposto in passi elementari di durata pari ad una
unità di tempo:
1. appena cambiata la configurazione di ingresso nessuna funzione cambia uscita:
l'AND in alto e l'OR mantengono il valore 1, l'AND in basso ed il NOT
mantengono il valore 0;
2. dopo una unità di tempo l'AND in alto passa al valore 0 (come dettato dalla sua
tavola di verità) e il NOT passa al valore 1, mentre l'OR mantiene 1 e l'AND in
basso mantiene 0;
3. dopo due unità di tempo l'OR passa al valore 0, mentre l'AND in basso passa al
valore 1 e NOT ed AND in alto mantengono il valore raggiunto in precedenza;
4. dopo tre unità di tempo, l'OR torna nuovamente a 1, mentre le altre funzioni del
multiplexer mantengono il valore del passo precedente.
Da questa analisi più dettagliata legata alle temporizzazioni dei dispositivi costituenti
il Multiplexer, vediamo quindi che questo nel transitorio di passaggio dalla seconda
configurazione di ingresso alla terza (entrambe con valore di uscita 1 per il
Multiplexer) può generare per un breve tempo una situazione intermedia, detta alea
di commutazione, con uscita 0. Tale alea di commutazione del multiplexer può
determinare la commutazione del flip-flop al valore u=0.
Questo esempio ci mostra come possa essere difficile prevedere il risultato in uscita
di un circuito sequenziale asincrono a seguito di variazioni delle configurazioni in
ingresso. In particolare vediamo come anche alee molto brevi possono determinare la
commutazione permanente di un flip-flop rispetto al valore di uscita previsto
basandosi sulla specifica del circuito combinatorio data sotto forma di tavola di verità
(prescindendo quindi dalle temporizzazioni delle funzioni).
Il problema di "imprevisti" dovuti ad alee di commutazione può essere completamente
eliminato in circuiti di tipo sequenziale sincrono mediante un'opportuna utilizzazione
della variabile di controllo clock.
Variabile Clock in circuiti sincroni
L'uso di dispositivi Master/Slave consente di far variare i valori di ingresso al flipflop senza per questo alterare il valore delle uscite, fin quando non venga dato un
apposito impulso alla variabile di controllo clock. Scegliendo un periodo di variazione
per la variabile clock grande rispetto al tempo di assestamento dei valori in uscita del
circuito combinatorio a seguito di variazioni dei valori di ingresso, si può quindi ovviare
in modo semplice al problema delle eventuali alee di commutazione: queste saranno
esaurite nel momento in cui, tramite variazioni della variabile clock, comandiamo il
passaggio dallo stato corrente allo stato successivo.
La progettazione di un circuito sincrono può quindi essere basata sulla specifica del
comportamento di un circuito combinatorio basato sulla tavola di verità, senza
necessità di una analisi raffinata del comportamento in funzione del tempo. Le uscite
dei dispositivi Master/Slave tengono fisso il valore dello stato corrente, mentre gli
ingressi di tali dispositivi predispongono il calcolo dello stato successivo. Il passaggio
dallo stato corrente allo stato successivo avviene in modo "istantaneo" e simultaneo
per tutti i flip-flop Master/Slave inclusi nel circuito sincrono a seguito di un impulso
della variabile di controllo clock.
Principali Circuiti Sincroni
I circuiti sequenziali sincroni sono, insieme ai circuiti combinatori, i "mattoni"
elementari piu' usati per definire la microarchitettura di un sistema di calcolo
moderno. Data la loro potenziale insensibilità alle alee di commutazione dei circuiti
combinatori, la loro utilizzazione consente di arrivare a progettare sistemi complessi
in modo estremamente semplice e modulare, tenendo conto solo della funzione tra
ingresso ed uscita dei dispositivi (e verificando semplici disuguaglianze per quanto
riguarda i tempi di assestamento dei valori in ingresso ed in uscita). Normalmente i
circuiti sequenziali sincroni vengono classificati in "registri" (contenenti
rappresentazioni binarie di dati su uno o più bit) caratterizzati da diverse modalità di
manipolazione dei dati.