Scarica - "E. Fermi"

Transcript

Scarica - "E. Fermi"
RETI LOGICHE SEQUENZIALI
Flip Flop
Registri
Contatori
A.C. Neve -–Reti logiche sequenziali
1
Flip Flop
I flip flop sono i più semplici sistemi appartenenti alla famiglia dei circuiti sequenziali.
Si definiscono circuiti sequenziali, quei circuiti nei quali le variabili di uscita assumono dei valori
che dipendono sia dalle configurazioni delle variabili applicate in ingresso in quell’istante che dai
valori che queste variabili hanno assunto negli istanti precedenti, cioè le uscite dipendono anche
dalla storia che hanno avuto le variabili di ingresso ed in definitiva dal tempo.
La principale applicazione che hanno i F/F (Flip Flop) nei sistemi digitali è quella di memorizzare
dati, infatti, vengono spesso considerati come delle celle di memoria elementari in grado di
memorizzare il valore di un bit.
Il F/F più semplice è quello detto Set Reset (SR), questo possiede due uscite Q e Q complementari
tra loro e due ingressi S ed R , vedi Fig.1.
Avendo due ingressi, per comprenderne il funzionamento,
occorrerà analizzare il comportamento per ognuna delle quattro
possibili combinazioni di ingresso:
S
Q
F/F
Q
R
Fig. 1
All’atto dell’accensione Q e Q assumeranno dei valori arbitrari.
Applicando S = 1 ed R = 0 , l’uscita Q andrà ad 1 (o vi resta se già c’era) e chiaramente
l’altra uscita varrà 0 essendo complementare.
Applicando S = 0 ed R = 1 , l’uscita Q andrà a 0 (o vi resta se già c’era) e chiaramente l’altra
uscita varrà 1 essendo complementare
Applicando S = 0 ed R = 0 le due uscite resteranno invariate nello stesso stato.
La condizione S = 1 ed R = 1 non è consentita in quanto, nell’istante di rimozione di questa
condizione, porterebbe a dei valori di uscita casuali.
La presente descrizione può essere rappresentata con le due tabelle di verità nelle quali Qn
rappresenta il valore dell’uscita attuale e Qn +1 il valore dell’uscita nell’istante successivo alla
variazione degli ingressi.
S
0
0
1
1
R
0
1
0
1
Qn+1
Qn
0
1
X
A.C. Neve -–Reti logiche sequenziali
S
0
0
0
0
1
1
1
1
R
0
0
1
1
0
0
1
1
Qn
0
1
0
1
0
1
0
1
Qn+1
0
1
0
0
1
1
X
X
2
La prima delle due tabelle può anche essere rappresentata su una mappa di Karnaugh come segue:
SR
00
01
11
10
0
0
0
x
1
1
1
0
x
1
Qn
Dalla quale si ottengono due equivalenti tipi di equazioni
Qn +1 = S + R ⋅ Qn
Qn +1 = R ⋅ ( S + Qn )
Con
S⋅R = 0
Un F/F SR può essere realizzato con porte logiche elementari con il circuito di Fig 2:
Applicando in ingresso le varie configurazioni se ne può
verificare il funzionamento.
Fig. 2
La configurazione di ingresso con S = 1 ed R = 1 non è
consentita in quanto in queste condizioni si avrebbe che
Q = 0 e Q = 0 , in contrasto con la loro complementarietà.
Riportando poi i due ingressi contemporaneamente a 0, se le due porte hanno lo stesso tempo di
ritardo Td il sistema si metterà ad oscillare ad una frequenza pari a 1/2Td, se invece le due porte
hanno diversi tempi di ritardo il valore sul quale si porterà l’uscita non è prevedibile.
Un F/F SR può anche essere realizzato con porte NAND come in Fig. 3:
Fig. 3
Il funzionamento di un F/F SR può anche essere
descritto con un diagramma temporale come quello in
Fig. 4 che è relativo ad un F/F con porte prive di
ritardo di propagazione:
Fig. 4
A.C. Neve -–Reti logiche sequenziali
3
I due circuiti ora analizzati hanno la caratteristica di essere resi attivi quando uno dei due ingressi S
o R è posto a 1.
Consideriamo quindi il circuito di Fig. 5 fatto con porte NAND:
Applicando in ingresso le varie
configurazioni se ne può
verificare il funzionamento
Fig. 5
Questo circuito, a differenza del precedente, ha la caratteristica di venir attivato quando uno dei due
ingressi è al livello logico 0 secondo la seguente tabella di verità:
S
0
0
0
0
1
1
1
1
R
0
0
1
1
0
0
1
1
Qn
0
1
0
1
0
1
0
1
Qn+1
X
X
1
1
0
0
0
1
S
0
0
1
1
R
0
1
0
1
Qn+1
X
1
0
Qn
La prima delle due tabelle può anche essere rappresentata su una mappa di Karnaugh come segue:
SR
dalla quale si ottengono le seguenti equazioni di stato:
00
01
11
10
0
x
1
0
0
Qn +1 = S + R ⋅ Qn
1
x
1
1
0
Qn +1 = R ⋅ ( S + Qn )
Qn
Con S + R = 1
Si noti la ricorrenza del fenomeno della dualità:
La configurazione di ingresso con S = 0 ed R = 0 non è consentita in quanto in questa condizione
si avrebbe che Q = 1 e Q = 1 in contrasto con la condizione di complementarietà.
Un F/F SR simile a quest’ultimo può essere realizzato
anche con porte NOR come nella Fig. 6:
Fig. 6
A.C. Neve -–Reti logiche sequenziali
4
Come nei casi precedenti, anche ora è possibile descrivere il funzionamento di un F/F attraverso
l’uso di un diagramma temporale come quello di Fig. 7 nel quale si sono ipotizzati nulli i tempi di
ritardo:
Fig. 7
Quando si realizza un F/F SR con porte NAND o NOR all’atto dell’accensione lo stato in cui si
porta l’uscita Q dipende dai ritardi di propagazione delle porte stesse.
Si può fare in modo che all’accensione l’uscita Q vada sempre a 0 utilizzando dei circuiti R-C
ausiliari come nelle Fig. 8 e Fig. 9:
Fig. 8
Fig. 9
All’atto dell’accensione i due circuiti R-C generano, per un breve periodo di tempo, un 1 logico
sull’ingresso di reset del primo circuito (Fig. 8) e uno 0 sull’ingresso di reset del secondo (Fig.9)
forzando così a 0 le uscite Q dei due circuiti; dopo un tempo pari ad alcune volte la costante di
tempo R-C il transitorio si sarà esaurito e la rete R-C non avrà più influenza sul circuito
consentendo il regolare funzionamento del F/F.
Un’altra classica applicazione dei F/F riguarda la realizzazione di commutatori antirimbalzo.
E’ ben noto infatti che la generazioni di impulsi logici effettuata manualmente con pulsanti o
interruttori crea, nei sistemi digitali, notevoli problemi, infatti la chiusura meccanica di un
interruttore non genera mai in uscita un perfetto gradino di tensione ma un vero e proprio treno di
impulsi di durata oscillante tra alcuni msec e alcune decine msec, se questi impulsi indesiderati
dovessero pervenire all’ingresso di un contatore verrebbero da questo rilevati.
Lo schema di Fig. 10 consente di realizzare un commutatore meccanico privo di rimbalzi e quindi
in grado di generare un singolo fronte d’onda ad ogni azionamento:
A.C. Neve -–Reti logiche sequenziali
5
Fig. 10
L’utilizzazione più importante dei F/F si ha nella realizzazione delle memorie a semiconduttore ed
in considerazione di tale importanza ne viene anche rimandato lo studio.
I F/F fino ad ora analizzati sono detti asincroni in quanto la commutazione da uno stato all’altro si
verifica quasi istantaneamente e cioè dopo l’applicazione degli impulsi sugli ingressi S o R .
Ci sono però dei problemi quando gli ingressi passano dalla configurazione
SR = 01 a quella SR = 10. Essendo ben noto che la commutazione contemporanea dei due bit non in
pratica mai realizzata, si ha che le sequenze possibili saranno 01→00→10 oppure 01→11→10
determinando così dei comportamenti differenti ed imprevedibili.
Molto più utilizzati sono invece i F/F di tipo sincrono nei quali la variazione di stato non si verifica
nell’istante di applicazione degli impulsi di S o R ma solo in corrispondenza di un altro impulso di
sincronismo detto clock pulse CK, questo segnale definisce così l’intervallo di tempo durante il
quale gli ingressi di S o R possono, con il loro valore, far cambiare stato al F/F.
In assenza di segnale di clock nessun cambiamento di stato è possibile ed il F/F resta nello stato che
per ultimo è stato acquisito indipendentemente da ciò che avviene sugli ingressi S o R .
Un F/F SR sincrono (detto cloked) può essere realizzato come proposto in Fig. 11:
Come si può notare gli ingressi R ed S possono essere
influenzati da quelli R’ S’ solo se CK=1
Il F/F ora descritto può essere realizzato con porte logiche
come esposto in Fig.12:
Fig. 11
Fig. 12
A.C. Neve -–Reti logiche sequenziali
6
I F/F di figura sono tali da cambiare stato in corrispondenza del fronte di salita dell’impulso del
segnale di clock per cui vengono detti leading-edge-triggered o positive-edge.triggerede, sono però
disponibili in commercio anche nella versione che può cambiare stato in corrispondenza del fronte
di discesa dell’impulso di clock e perciò vengono detti trailing-edge-triggered o negative-edgetriggered.
La variazione del fronte attivante si ottiene inserendo una porta NOT prima dell’ingresso CK.
Nella Fig. 13 viene proposto il diagramma temporale dei segnali relativi ad un F/F SR sincrono a
fronte positivo:
Si noti che nell’intervallo di tempo t1 t2, sia R
che S valgono 1 però, non essendo stato attivato
il clock del F/F, le uscite non sono influenzate
dalla condizione proibita R=1 e S=1.
Fig. 13
Si noti anche che, in questi F/F i segnali R ed S risultano abilitati per tutto il tempo durante il quale
CK =1, per cui se durante quest’intervallo R o S dovessero cambiare, si avrebbero in uscita dei
nuovi cambiamenti di stato che nella pratica non possono essere accettati in quanto occorre fare in
modo che si possa verificare un solo cambiamento di stato per ogni impulso di clock.
Quest’ultima considerazione riveste grandissima importanza in tutti i sistemi sequenziali digitali
che contengono più F/F (o componenti simili), che lavorano insieme.
La tabella di verità di un F/F di questo tipo è la seguente:
S
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
R
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
Qn
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
CK
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Qn+1
0
0
1
1
0
0
1
0
0
1
1
1
0
X
1
X
A.C. Neve -–Reti logiche sequenziali
QnCK
00
SR
01
11
10
00
0 0 1 1
01
0 0 0 1
11
0 x x 1
10
0 1 1 1
Da cui si ottiene:
Qn +1 = ( S + R ⋅ Qn ) ⋅ CK
con
S ⋅ R ⋅ CK = 0
7
La mappa non è stata efficientemente sfruttata per ottenere un’espressione finale più affine con
quella precedente.
Nella loro realizzazione pratica la maggior parte dei F/F è fornita di due ingressi ausiliari asincroni
detti Preset e Clear che vengono utilizzati per stabilire lo stato iniziale che il F/F deve assumere
all’accensione oppure per fissare lo stato di un qualsiasi istante (quindi asincronamente rispetto a
CK). Il circuito è quello di Fig. 14:
PR
1
0
1
CL
0
1
1
CK
0
0
0
Qn
0
1
Qn
Con PR + CL ≠ 0
Fig. 14
In questo circuito non si possono però usare gli ingressi asincroni quando CK=1, questa anomalia
può essere rimossa usando lo schema di Fig. 15:
PR
1
0
CL
0
1
Qn
0
1
Con PR + CL ≠ 0
Fig. 15
Un F/F largamente utilizzato nella pratica è quello JK, esso funziona fondamentalmente come
quello SR solo che in questo caso non vi è la limitazione dovuta alle configurazioni di ingresso
proibite, l’applicazione di queste ultime agli ingressi JK provoca la semplice inversione dello stato
di uscita secondo la seguente tabella di verità:
J
0
0
0
0
1
1
1
1
K
0
0
1
1
0
0
1
1
Qn
0
1
0
1
0
1
0
1
Qn+1
0
1
0
0
1
1
1
0
A.C. Neve -–Reti logiche sequenziali
J
0
0
1
1
K
0
1
0
1
Qn+1
Qn
0
1
Qn
8
JK
00
01
11
10
0
0
0
1
1
1
1
0
0
1
Qn
Le cui equazioni di stato risultano le seguenti:
Qn +1 = J ⋅ Q n + K ⋅ Qn
Qn +1 = ( J + Qn ) ⋅ ( K + Q n )
Un F/F JK può essere realizzato utilizzando un F/F SR pilotando i due ingressi attraverso due porte
AND come in Fig. 16:
Fig. 16
Esaminandone il funzionamento si ha che:
Se CK=0 si avrà S=0 ed R=0 per cui il F/F non potrà cambiare stato qualunque sia il valore di J e K.
Se invece CK=1 esisteranno le seguenti possibilità:
J=1 e K=0
J=0 e K=1
J=0 e K=0
J=1 K=1
Se Q=0 si ha che S=1 ed R=0 per cui il F/F commuta nello stato Q=1
Se invece Q=1 si ha che S=0 ed R=0 per cui il F/F resta nello stesso stato con Q=1
Se Q=0 si ha che S=0 ed R=0 per cui il F/F resta nello stesso stato con Q=0
Se invece Q=1 si ha che S=0 ed R=1 per cui il F/F commuterà nello stato con Q=0
S ed R saranno sempre uguali a 0 per cui il F/F non potrà commutare e resterà nello
stesso stato.
Se Q=0 si avrà S=1 ed R=0 per cui il F/F commuterà nello stato con Q=1
Se invece Q=1 si avrà S=0 ed R=0 per cui anche ora il F/F commuterà nell’altro stato
con Q=0, e quindi, in ogni caso, si avrà l’inversione dello stato del F/F.
Nella realizzazione pratica di un F/F JK
non è necessario aggiungere le due porte
AND ma basta solo modificare leggermente
il circuito del F/F SR come in Fig. 17:
PR e CL agiscono come visto in precedenza.
Fig. 17
A.C. Neve -–Reti logiche sequenziali
9
Nell’uso di questo F/F si possono verificare delle situazioni nelle quali lo stato dell’uscita non è più
controllabile e quindi è indeterminato. Si supponga infatti che J=1 e K=1 e che lo stato del F/F sia
Q=0, in queste condizioni, quando si applica l’impulso di clock l’uscita si inverte secondo la tabella
di verità esposta in precedenza e diventa Q=1.
Questa variazione si verifica dopo un tempo ∆t pari al ritardo di propagazione attraverso le due
porte NAND. Dopo la transizione lo stato del F/F sarà J=1 e K=1 con Q=1, ma essendo ancora
presente l’impulso di clock il F/F commuterà nuovamente nello stato Q=0 e così via fino alla
rimozione dell’impulso di clock, si genera così in uscita un onda quadra di periodo pari a 2∆t.
La situazione appena descritta viene detta condizione di corsa critica, e può essere evitata solo se si
utilizzano degli impulsi di clock di durata inferiore al tempo di propagazione attraverso le due porte
NAND, condizione che però è estremamente difficile da realizzare.
Un altro inconveniente si verifica quando più F/F sono posti in cascata e comandati dallo stesso
segnale di clock. In queste condizioni, quando si applica l’impulso di clock, le uscite del primo F/F
influenzano quelle del secondo, queste poi quelle del terzo e così via finché non si rimuove
l’impulso di clock, per cui il numero di F/F che vengono influenzati dipenderà sia dalla durata
dell’impulso di clock ma anche dalla durata dei tempi di propagazione che purtroppo non sono mai
uguali ne costanti.
Si può porre rimedio a tali problemi facendo uso di F/F JK in configurazione master-slave il cui
schema circuitale è riprodotto nella Fig. 18:
Fig. 18
Il F/F proposto è costituito da due F/F disposti in cascata dei quali il primo è detto master ed il
secondo slave.
Il funzionamento è il seguente:
Quando CK=1 il primo F/F è abilitato a commutare mentre il secondo, a causa della presenza della
porta NOT, è inibito e la sua uscita resta nell’ultimo stato acquisito, conseguentemente l’uscita Qm
del F/F master commuta in funzione dei valori assunti da Sm e Rm.
Quando invece il clock torna a 0 (CK=0) il F/F master resta congelato nel suo stato, mentre lo slave
commuta in funzione dei valori assunti da Qm e Q m per cui dopo un tempo pari a quello di
propagazione attraverso il F/F slave l’uscita Qs si porterà nello stato che gli compete e che è
funzione degli ingressi Ss ed Rs oltre che dall’ultimo stato assunto.
Si può così notare che un F/F M-S reagisce in due tempi:
sul fronte di salita del clock accetta il comando e si predispone mentre sul fronte di discesa emette i
risultati dovuti, in questo modo le uscite cambiano stato quando gli ingressi sono già stati isolati
evitando così gli inconvenienti prima descritti e cioè producendo una sola commutazione per ogni
impulso di clock.
Si deve notare però che i valori degli ingressi devono restare costanti per tutta la durata dell’impulso
di clock altrimenti l’uscita può non essere corretta.
A.C. Neve -–Reti logiche sequenziali
10
Nella Fig. 19 è visibile un F/F M-S realizzato con porte NAND:
Fig. 19
Con riferimento alla forma d’onda del
segnale di clock di Fig. 20 utilizzabile da
un F/F, occorre mettere in evidenza alcune
considerazioni :
Fig. 20
1. Il tempo tp di attivazione del clock deve essere sufficientemente lungo da consentire il corretto
cambiamento di stato in funzione dei degnali applicati, vi è quindi un limite inferiore di questo
parametro che indicheremo con tp min.
2. Anche l’intervallo (T - tp), durante il quale il clock è disattivato, deve essere sufficientemente
lungo da consentire agli ingressi di controllo di stabilizzarsi sui loro nuovi valori.
Da queste considerazioni si può dedurre che esisterà un periodo minimo, e quindi frequenza
massima, del segnale di clock applicabile che sarà pari a: Fmax = 1/(tp min + (T - tp)min).
Si evidenzia anche che i tempi di salita e discesa dei segnali di uscita sono sempre diversi tra loro.
Le limitazioni ora presentate sono di carattere generale e valgono per tutti i tipi di F/F clocked
indipendentemente da come sono usati.
F/F tipo D-clocked (Delay)
Questo tipo di F/F, vedi Fig. 21, viene utilizzato quando è necessario introdurre un ritardo, su un
segnale, che sia pari ad un ciclo di clock.
Esso è dotato di un ingresso D al quale viene applicato il segnale, l’applicazione di un impulso di
clock fa assumere all’uscita Q il valore D. Questo F/F è sempre del tipo a fronte (edge triggered) o
Master-Slave.
La tabella degli stati è la seguente:
A.C. Neve -–Reti logiche sequenziali
11
D
0
0
1
1
Qn
0
1
0
1
Qn+1
0
0
1
1
La cui equazione di stato è:
D
Q
F/F
Q
Ck
Fig. 21
Qn+1=D
La Fig. 22 illustra un diagramma temporale nel quale si è supposto il F/F del tipo a fronte positivo:
Fig. 22
Il circuito a NAND con il quale è possibile realizzare un F/F D-clocked e del tipo positive-edge
triggered è proposto in Fig. 23:
Fig. 23
D
J/S
Q
F/F
Ck
K/R
Q
Fig. 24
Questo F/F può cambiare stato solo in corrispondenze del fronte positivo del segnale di clock e cioè
quando quest’ultimo subisce una transizione 0-1.
Un F/F D-clocked può essere facilmente ottenuto utilizzando un F/F SR clocked o un F/F JK
clocked come in Fig. 24:
Si noti che i F/F JK clocked o SR clocked da usarsi devono essere del tipo edge-triggered o masterslave e non quelli ottenuti dal F/F SR asincrono base.
A.C. Neve -–Reti logiche sequenziali
12
F/F D-latch
In questo tipo di F/F l’uscita Q segue fedelmente l’andamento del segnale D finché il clock è ad 1,
quando il clock va a 0 lo stato di Q resta bloccato sul valore che aveva nell’istante della transizione
1-0 del clock.
Il F/F D-latched si ottiene facilmente da quello RS asincrono base collegandolo come in Fig. 25:
Fig. 25
Dalla prima figura è evidente che se CK=1 le due AND sono abilitate e si ha che S = D ed R = D
per cui il F/F SR commuterà ogni volta che D (e quindi S ed R) varia, seguendone l’andamento.
Quando CK=0 si ha che S=0 ed R=0 per cui il F/F SR resterà nell’ultimo stato acquisito.
La condizione S=1 ed R=1 non si potrà mai avere.
F/F T-clocked
Questo tipo di F/F è dotato di un solo ingresso di controllo T oltre al solito ingresso per il segnale di
clock ed il funzionamento è il seguente:
se T=0 il F/F non cambia stato
se T=1 il F/F cambia stato ad ogni impulso di clock
La tabella delle transizioni è la seguente:
T
0
0
1
1
Qn
0
1
0
1
Qn+1
0
1
1
0
Q
T
F/F
Ck
Q
L’equazione di stato è la seguente:
Qn +1 = Q n ⋅ T + Qn ⋅ T = (Qn + T ) ⋅ (Q n + T ) = Qn ⊕ T
T
J
Q
Un F/F T-locked si può ottenere facilmente da uno JK
clocked collegando insieme i terminali J e K come in
Fig.26:
F/F
Ck
K
Q
Fig. 26
A.C. Neve -–Reti logiche sequenziali
13
Infatti: se T=0 si ha J=0 e K=0 per cui il F/F non cambiare stato, se invece T=1 si ha allora che J=1
e K=1 per cui il F/F cambia stato ad ogni impulso di clock.
Questo tipo di F/F può anche essere realizzato utilizzando un F/F del tipo SR collegato secondo la
Fig. 27:
Fig. 27
Si evidenzia che il F/F T-locked non è disponibile in commercio in forma integrata per cui in caso
di necessità la sua realizzazione si attua con F/F JK-clocked.
Si noti infine che, se un F/F T-clocked viene realizzato con un JK che a sua volta sia stato messo a
punto con un SR asincrono di base, si ha che quando T=1 l’uscita Q entra in oscillazione ogni volta
che il clock va ad 1.
F/F T-toggle
Questo tipo di F/F è dotato di un solo ingresso per il segnale di clock, ad ogni impulso di clock
l’uscita Q cambia stato, la sua equazione di stato sarà perciò:
Qn +1 = Q n
Ck
Q
F/F
Q
Un F/F di questo tipo può esser realizzato utilizzando un F/F T-clocked e ponendo l’ingresso T
permanentemente ad 1.
Una tipica applicazione di questo F/F è la divisione di frequenza per potenze di 2.
Si consideri, per esempio, una catena di quattro F/F T-toggle come in Fig 28:
Fig. 28
A.C. Neve -–Reti logiche sequenziali
14
Come si può notare dalla Fig.
29, ogni segnale ha una
frequenza pari alla metà del
precedente ed un duty-cycle
del 50%.
Fig. 29
Nel progetto delle reti sequenziali che utilizzano dei F/F clocked è necessario conoscere i valori dei
segnali da applicare agli ingressi di controllo per ottenere una ben determinata commutazione.
Si usano a tale scopo le cosiddette tabelle di eccitazione inverse le quali forniscono, per ogni tipo di
F/F, i valori degli ingressi necessari per ottenere una ben precisa commutazione.
Per i vari F/F, le citate tabelle sono le seguenti:
Qn → Qn+1
0
0
0
1
1
0
1
1
Qn →
0
0
1
1
Qn+1
0
1
0
1
S
0
1
0
X
R
X
0
1
0
T
0
1
1
0
Qn → Qn+1
0
0
0
1
1
0
1
1
Qn →
0
0
1
1
J
0
1
X
X
Qn+1
0
1
0
1
K
X
X
1
0
D
0
1
0
1
Si fa notare la convenienza dell’impiego di un F/F JK a causa della presenza di un maggior numero
di condizioni non specificate le quali consentiranno una maggiore semplificazione dei circuiti.
A.C. Neve -–Reti logiche sequenziali
15
Registri
Si è visto in precedenza che un F/F costituisce una cella di memoria in grado di memorizzare un bit,
quindi n F/F saranno in grado di memorizzare parole ad n bit.
Questo insieme di F/F costituisce un registro.
Un registro viene, nella pratica, utilizzato come traslatore di parole ad n bit, questa traslazione viene
effettuata sempre in maniera temporizzata attraverso degli impulsi di comando e può essere del tipo
parallelo/parallelo, parallelo/serie, serie/parallelo o serie/serie, come nella Fig. 30 nella quale è
usato un registro ad un byte.
Fig. 30
Il registro che verrà ora analizzato in Fig. 31 ( a 4 bit ) viene detto registro universale in quanto può
essere utilizzato in tutti e quattro i modi prima descritti.
I registri di questo tipo possono essere realizzati con F/F del tipo SR o JK ma sempre Master/Slave
ed almeno il primo deve essere di tipo D.
Fig. 31
A.C. Neve -–Reti logiche sequenziali
16
Il sistema può essere azzerato (cioè Q3=Q2=Q1=Q0=0) portando ad 1 la linea di azzeramento
(Reset), successivamente questa linea verrà portata a 0 mentre la linea di caricamento parallelo
(Strobe) viene tenuta a 0. Il caricamento parallelo si effettua applicando i bit sugli ingressi IN e
portando ad 1 la linea di Strobe.
Funzionamento Parallelo/Parallelo (PIPO)
I dati vengono applicati sugli ingressi parallelo, si applica poi un impulso 1 sull’ingresso di Strobe
caricamento parallelo per cui i dati di ingresso sono in grado di influenzare gli ingressi di Preset dei
vari F/F e quindi condizionare le uscite Q degli stessi.
Da questo istante i dati sono disponibili sulle uscite parallelo anche se vengono modificati i valori
applicati sugli ingressi parallelo. Questo tipo di funzionamento viene anche detto Latch.
Si fa notare che in questo caso non è necessaria la presenza di alcun segnale di clock.
Funzionamento Serie/Parallelo (SIPO)
Come prima operazione viene effettuato l’azzeramento di tutti i F/F. I bit del dato vengono applicati
uno alla volta, a cominciare dall’LSB sull’ingresso seriale. Quando il primo bit è stabile
sull’ingresso S3 si applica un impulso di clock che, con la sua transizione 0-1-0, trasferisce il primo
bit sull’uscita Q3 (tutte le altre uscite restano a zero in quanto il sistema era stato precedentemente
resettato). Successivamente si applica il secondo bit sull’ingresso S3 e dopo che si è stabilizzato
viene applicato l’impulso di clock che, con la sua transizione 0-1-0, trasferisce il valore di Q3
sull’uscita Q2 ed il valore di S3 sull’uscita Q3 e così via fino all’ultimo bit del dato, per cui dopo
quattro impulsi di clock il dato applicato serialmente in ingresso è disponibile in formato parallelo
sulle uscite Q3, Q2, Q1, e Q0.
Funzionamento Parallelo/Serie (PISO)
Si supponga di disporre del dato in forma parallelo e di applicarlo in questa forma agli ingressi IN3,
IN2, IN1, IN0.
L’applicazione di un impulso 1 sull’ingresso Strobe di caricamento parallelo determina il
presettaggio delle uscite di tutti i F/F su valori uguali a quelli dei corrispondenti ingressi parallelo.
Da questo istante è disponibile sull’uscita seriale l’LSB del dato introdotto in forma parallelo.
L’applicazione di un impulso di clock determina il passaggio del valore di Q1 sull’uscita Q0, quello
di Q2 sull’uscita Q1, quello di Q3 sull’uscita Q2 ed uno zero da S3 su Q4, in pratica tutto il dato si è
spostato verso destra di un bit. Dopo l’applicazione di quattro impulsi di clock tutto il dato sarà
uscito dall’uscita seriale del sistema.
Funzionamento Serie/Serie (SISO)
Il caricamento del registro avviene come nel funzionamento Serie/Parallelo usando quattro impulsi
di clock, lo scorrimento del registro avviene come nel funzionamento Parallelo/Serie usando altri
quattro impulsi di clock.
Si fa notare che, in un registro a scorrimento di n bit, dopo un numero di impulsi di clock pari ad n
per il PISO e 2n per il SISO il dato viene completamente perso.
E’ possibile organizzare opportunamente un registro in maniera che i bit del dato possano circolare
secondo un anello chiuso senza essere perduti come avviene nel circuito di Fig. 32:
A.C. Neve -–Reti logiche sequenziali
17
Fig. 32
Se l’ingresso E vale 0, l’uscita della AND1 è sempre nulla mentre l’uscita della AND2 è uguale al
valore del dato applicato sull’ingresso seriale, in questo modo ad ogni impulso di clock verrà fatto
entrare un bit nel registro e che con gli impulsi successivi si sposterà verso destra caricando il
registro.
Se invece E = 1 l’ingresso seriale è bloccato e man mano che gli impulsi di clock si susseguono i
vari bit saranno portati dall’uscita verso l’ingresso senza essere perduti.
Questo è il principio di funzionamento delle memorie sequenziali.
I registri a scorrimento fino ad ora analizzati sono tali che per ogni impulso di clock tutti i bit del
registro slittano insieme verso destra di un posto, è possibile però organizzare i collegamenti in
modo che lo slittamento possa avvenire verso sinistra, come esposto nella Fig. 33:
Fig. 33
A.C. Neve -–Reti logiche sequenziali
18
Si può anche ottenere un registro bidirezionale collegando i vari F/F come nella Fig. 34.
Fig. 34
A secondo che il segnale del verso di circolazione sia 0 o 1 si può avere circolazione da sinistra
verso destra oppure da destra verso sinistra.
Le porte OR sono usate per applicare sugli inglesi D o il segnale proveniente dal F/F precedente
oppure quello proveniente dal successivo.
A.C. Neve -–Reti logiche sequenziali
19
Contatori
Si definisce contatore un sistema sequenziale in grado di indicare, in qualche codice binario, il
numero di impulsi applicati fino a quell’istante sull’ingresso. Ogni configurazione di uscita è detta
stato del contatore. Ogni contatore è costituito da diversi F/F più un certo numero di porte logiche
che servono per accoppiare tra loro i vari F/F in modo da definire l’evoluzione temporale degli stati
del conteggio. Si dice modulo di un contatore il numero di possibili stati di uscita del contatore
stesso, durante un conteggio un contatore assume in sequenza tutti i suoi possibili stati e dopo
l’ultimo riprende dal primo. Un contatore può essere a modulo fisso o variabile e in ogni caso se n è
il numero di F/F con cui è realizzato, il suo modulo non potrà mai essere superiore a 2n.
I contatori possono essere suddivisi in due grandi categorie:
ASINCRONI: sono quei contatori in cui il segnale di clock per il conteggio agisce solo sul primo
F/F, l’uscita del primo agisce sull’ingresso del secondo e così via. Questi contatori sono anche detti
a propagazione di comando o ripple counter.
SINCRONI: Sono quei contatori nei quali il segnale di clock agisce contemporaneamente su tutti i
F/F i quali sono così in grado di commutare contemporaneamente.
I contatori sono anche classificabili in funzione del verso di conteggio, esistono infatti contatori in
avanti (up counter), indietro (down counter) e bidirezioanli (up-down counter).
Vi sono infine contatori dotati di comando di reset e di preset, è cioè possibile preassegnare lo stato
dal quale deve iniziare il conteggio.
Contatore binario asincrono in avanti (up counter)
Un contatore binario asincrono è costituito da una catena di F/F nella quale l’uscita di ogni F/F
costituisce l’ingresso di clock di quello successivo. Ogni F/F del contatore è del tipo JK MasterSlave tale da commutare sul fronte negativo del clock e predisposto per funzionare in modo Toggle
(cioè con J=K=1). A causa del tipo collegamento tra i vari F/F, si ha che ognuno di essi cambierà
stato solo quando quello che lo precede (o il segnale di ingresso) effettua la transizione tra lo stato 1
e quello 0 per cui ogni F/F commuterà con una frequenza pari alla metà di quello che lo precede e
pari al doppio di quello che lo segue. La catena di F/F può quindi anche essere usata come una
struttura per la divisione di frequenza per potenze di 2.
La lunghezza della catena di F/F determina il modulo massimo di conteggio che si può ottenere: con
un F/F il modulo è 2, con due F/F il modulo è 4, con tre F/F è 8, con quattro F/F è 16 ecc….
Il valore del conteggio in un certo istante viene fornito da una parola binaria i cui bit sono prelevati
dalle uscite dei F/F che costituiscono il contatore oppure può essere rilevata con l’aiuto di un
decodificatore avente tante uscite per quanti sono gli stati del contatore.
Nella Fig. 35 è visibile lo schema elettrico di un contatore binario asincrono in avanti in grado di
fornire il conteggio sia in forma binaria che decodificata e dotato anche di un ingresso di reset, il
suo modulo di conteggio è 8:
A.C. Neve -–Reti logiche sequenziali
20
Fino a che la linea T è tenuta a 0 il
contatore è bloccato e non è in grado di
rilevare gli impulsi di clock applicati.
Quando T=1 il contatore è abilitato al
conteggio.
Applicando in un qualsiasi istante uno 0
sulla linea di Reset il contatore viene
azzerato (Q0=Q1=Q2=0) ed il conteggio
ripartirà dal primo stato.
Quando il primo impulso di clock
applicato passa da 1 a 0 l’uscita Q0 passa
da 0 a 1, quando il secondo impulso di
clock passa da 1 uno a 0 l’uscita Q0 passa
da 1 a 0 e quella Q1 da 0 a 1 e così via fino
al settimo impulso di clock con il quale
tutte e tre le uscite Q0, Q1 e Q2
commutano ad 1, l’ottavo impulso di clock
farà commutare tutte le uscite nello stato 0
ed il conteggio ricomincia.
Fig. 35
Pur utilizzando dei F/F sincroni, questo contatore è detto asincrono poiché i vari F/F non sono in
grado di commutare contemporaneamente in quanto ogni F/F per commutare deve attendere un
tempo pari al tempo di ritardo Tp del F/F precedente, ciò implica la che commutazione tra il settimo
e l’ottavo stato sarà stabile dopo un tempo pari a 3⋅Tp o più in generale pari ad n ⋅ T p con n numero
di F/F del contatore.
Il segnale di Strobe serve ad impedire che durante alcune commutazioni si presentino, sulle uscite
del decodificatore, degli stati errati la cui presenza, se pur estremamente breve, potrebbe portare a
malfunzionamenti dei circuiti disposti a valle. La lettura del conteggio all’uscita dei decodificatori
sarà fatta ponendo ad 1 la linea di Strobe dopo che tutte le uscite Q0,Q1 e Q2 si saranno stabilizzate
sul valore di competenza ma dovrà però essere riportata a 0 prima del successivo impulso di clock.
Un altro inconveniente associato al fenomeno del ritardo di propagazione attraverso la catena di F/F
riguarda la frequenza massimo di funzionamento del contatore.
Se il ritardo di propagazione attraverso il singolo F/F è pari a Tp, e ci si trova nello stato con
Q0=Q1=Q2=1, la successiva transizione (1-0) dell’impulso di clock porterà a 0 l’uscita Q0 dopo un
tempo Tp, quella Q1 dopo un tempo 2⋅Tp e quella Q2 dopo un tempo 3⋅Tp per cui il prossimo fronte
non potrà essere applicato prima di un tempo 3⋅Tp e, in generale, prima di un tempo n⋅Tp con n
uguale al numero di F/F.
Se poi si indica con Ts la durata dell’impulso di lettura dello Strobe, ciò implica che l’intervallo tra
due successive transizioni di clock Tck dovrà risultare che:
Tck ≥ n ⋅ T p + Ts
e la massima frequenza di lavoro
A.C. Neve -–Reti logiche sequenziali
f MAX ≤
1
n ⋅ T p + Ts
21
Se invece il contatore viene usato solo come divisione di frequenza, la massima frequenza di lavoro
sarà limitata solo dal tempo di ritardo del primo F/F per cui:
f MAX ≤ 1
Tp
Il sistema analizzato consente la divisione ed il conteggio con modulo n che sia solo potenza di 2.
E’ tuttavia possibile realizzare dei contatori binari asincroni con modulo qualsiasi M usando un
numero di F/F n tali che M ≤ 2n, purché opportunamente collegati.
L’idea di base è abbastanza semplice:
Le linee di uscita del decodificatore forniscono, una per volta, lo stato dell’attuale conteggio per cui
potrebbero essere sfruttate per generare un opportuno segnale di azzeramento della catena di F/F.
Non conviene portare direttamente un’uscita del decodificatore, con una NOT, sulla linea di Reset
in quanto questa soluzione potrebbe azzerare solo alcuni dei F/F della catena e per l’esattezza quelli
dotati di un tempo di ritardo più piccolo, lasciando invece inalterati quelli con un tempo di ritardo
più alto. Infatti, il segnale di Reset verrebbe generato da una delle AND del decodificatore, per cui
appena uno solo dei F/F viene azzerato (il più veloce) contemporaneamente viene soppresso
l’impulso stesso di Reset lasciando così invariati gli altri.
Una soluzione molto più affidabile è quella illustrata nella Fig. 36 dove è visibile un contatore
asincrono con modulo 10:
Fig. 36
Il funzionamento è il seguente:
L’uscita della NAND3 sarà 1 solo quando si avrà Q3 = Q 2 = Q1 = Q0 = 1 il che equivale alla
configurazione delle uscite binarie Q3,Q2,Q1,Q0 = 1010, questa configurazione corrisponde al 10
decimale cioè l’ultimo stato previsto per il conteggio, il successivo stato sarà Q3,Q2,Q1,Q0 = 0000.
S
R
Qn +1
0
0
1
1
0
1
0
1
0
1
0
X
Q n +1
X
0
1
0
Le due porte NAND1 e NAND2 costituiscono un F/F SR in
logica negata del quale si riporta la tabella di transizione degli
stati .
Si noti poi che: Clock = R e che Q = CL
A.C. Neve -–Reti logiche sequenziali
22
In condizioni di normale conteggio si ha che S=1 mentre R varia tra 0 e 1 per cui l’uscita Q dovrà
essere sempre uguale ad 1.
Subito dopo il fronte di discesa del 10°
impulso di clock il contatore raggiunge
l’ultimo stato previsto per il conteggio e si
ha che: S=0 R=1 per cui Q = 0 e viene
attivato il segnale di Reset che permane
stabilmente a 0 fino al successivo fronte
positivo dell’11° impulso consentendo così
l’azzeramento di tutti i F/F con
Q3,Q2,Q1,Q0 = 0000.
Una volta concluso l’azzeramento si ha che
S=1, R=1 e Q = 1 = CL .
Fig. 37
Con il fronte negativo dell’11° impulso riprende il regolare conteggio ed il contatore transita nello
stato Q3,Q2,Q1,Q0 = 0001 e così via.
Con la tecnica esposta si possono realizzare contatori modulo n qualsiasi.
Contatore binario asincrono all’indietro (Down Counter)
Il contatore precedentemente analizzato è detto in avanti in quanto i
suoi stati si evolvono secondo la normale progressione crescente della
numerazione binaria.
E’ però possibile far evolvere il conteggio secondo una progressione
decrescente come quella descritta dalla tabella accanto e relativa ad un
contatore binario asincrono all’indietro con modulo 8.
Un contatore di questo tipo può essere realizzato in maniera abbastanza
simile a quello precedente con la sola differenza che il segnale di clock
per i F/F successivi al primo vengono prelevati dalle uscite Q dei F/F
che li precedono nella catena di conteggio.
Lo schema elettrico è quello di Fig. 38:
Ck
0
1
2
3
4
5
6
7
8
9
10
Q2 Q1 Q0 Stato
0 0 0
0
1 1 1
7
1 1 0
6
1 0 1
5
1 0 0
4
0 1 1
3
0 1 0
2
0 0 1
1
0 0 0
7
1 1 1
6
1 1 0
5
Fig. 38
La decodifica degli stati viene realizzata come per il contatore in avanti.
A.C. Neve -–Reti logiche sequenziali
23
Il funzionamento può essere così descritto:
Si supponga che inizialmente il contatore sia azzerato per cui le uscite Q2, Q1 e Q0 siano al livello
logico 0 e quelle negate al livello logico 1.
Con il fronte negativo del primo impulso di clock l’uscita Q0 si porta nello stato 1 e quella negata in
quello 0, la transizione 1→0 dell’uscita Q0 fa commutare il secondo F/F portandone l’uscita Q1
nello stato 1 e quella negata in quello 0, la transizione 1→0 dell’uscita Q1 farà commutare il terzo
F/F portando la sua uscita Q2 nello stato 1, in sintesi quindi il primo impulso di clock porta le uscite
nella configurazione 111.
Il fronte negativo del secondo impulso di clock farà commutare il primo F/F portando l’uscita Q0
nello stato 0 e quella negata nello stato 1, non si hanno però altre commutazioni in quanto la
transizione 0→1 dell’uscita Q0 non influenza gli altri F/F per cui le tre uscite assumeranno la
configurazione 110.
Il fronte negativo del terzo impulso di clock farà nuovamente commutare il primo F/F della catena
portando l’uscita Q0 ad 1 e quella negata a 0, la transizione 1→0 dell’uscita Q0 farà commutare il
secondo F/F portando Q1 a 0 e la negata ad 1 ma quest’ultima transizione non sarà in grado di
influenzare il terzo F/F per cui le tre uscite assumeranno la configurazione 101 come da Fig. 39.
Fig. 39
I due tipi di contatori illustrati in precedenza possono essere combinati in un unico circuito così da
realizzare un contatore in grado di funzionare sia in modalità Up che in modalità Down a seconda
del valore assunto da una linea di controllo.
Nella Fig. 40 è visibile lo schema elettrico di un contatore binario asincrono Up/Down.
Fig. 40
A.C. Neve -–Reti logiche sequenziali
24
Le porte OR sono usate per applicare sugli ingressi di clock dei vari F/F il segnale proveniente dalle
uscite Qi oppure dalle uscite Qi .
E’ possibile far partire ilo conteggio da una configurazione qualsiasi, ma interna al modulo di
conteggio, facendo uso degli ingressi asincroni di Preset ai quali vengono applicati i bit delle
configurazioni di partenza del conteggio attraverso delle porte NAND secondo le modalità viste per
il caricamento parallelo di un registro.
Contatori binari sincroni
Si è avuto modo di constatare che il principale svantaggio dei contatori asincroni è il ritardo di
propagazione del riporto che, oltre a dipendere dallo stato in cui si trova il contatore durante il
conteggio, dipende anche dalla lunghezza della catena di F/F costituenti il contatore stesso per cui il
ritardo risulta cumulativo.
Si può porre rimedio a questo problema cercando di far commutare quasi simultaneamente (cioè in
sincronismo) i vari F/F fornendo contemporaneamente a tutti loro un unico segnale di clock.
In questo modo il ritardo di propagazione viene drasticamente ridotto e l’unica limitazione esistente
è dovuta al ritardo introdotto da ciascun F/F più il tempo di propagazione attraverso le porte di
controllo necessarie.
Dato che durante un normale conteggio i F/F non commutano sempre tutti e tutti insieme ed
essendo i F/F collegati con il clock in comune, sarà necessario introdurre nel circuito delle reti
combinatorie di controllo che siano in grado di stabilire, ad ogni impulso di clock, quale F/F deve
commutare e quale deve mantenere inalterato il suo stato, questi circuiti aggiuntivi vengono detti
reti di eccitazione.
Nella Fig. 41 è visibile un contatore binario sincrono in avanti con modulo 16:
Fig. 41
I F/F usati sono del tipo T clocked Master-Slave a fronte negativo. Il primo F/F, avendo l’ingresso T
all’1 logico commuterà sul fronte negativo di ogni impulso di clock.
Il secondo F/F commuterà solo quando l’uscita Q0 del primo è al livello logico 1.
Il terzo poi potrà commutare solo quando le uscite Q0 e Q1 sono al livello 1.
Il quarto infine potrà commutare solo quando tutte le uscite Q0, Q1, e Q2 sono al livello logico 1.
In generale quindi un generico F/F potrà commutare, sempre sul fronte negativo dell’impulso di
clock, solo quando le uscite di tutti i F/F precedenti sono ad 1.
Il conteggio si evolverà quindi secondo la seguente tabella:
A.C. Neve -–Reti logiche sequenziali
25
Clock
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Q3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
Q2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
Q1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
Q0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
T3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
T2
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
T1
0
0
0
1
0
0
0
1
0
0
0
1
0
0
0
1
0
0
0
T0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
Stato
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
Le espressioni algebriche dei
vari ingressi T sono:
T0= 1
T1= 1·Q0
T2=1·Q0·Q2
T3=1·Q0·Q2·Q3
E’ evidente da ciò la relativa
semplicità con la quale tale
contatore può essere espanso.
Si noti che la AND1 potrebbe
anche essere omessa.
Anche se la commutazione dei vari F/F è di tipo sincrono, esiste sempre un certo ritardo di
propagazione dovuto sia ai F/F che alla rete di eccitazione. In questo contatore il ritardo di
propagazione è dovuto alla somma del ritardo TpF del più lento dei F/F (ci si riferisce quindi al
massimo tempo di propagazione) più quelli dovuti alle varie porte AND TpA.
Per un contatore costituito da N F/F la frequenza massima di conteggio sarebbe pari a:
1
f MAX =
( N − 1) ⋅ T pA + T pF
In effetti però dato che la porta AND1 compresa tra il primo ed il secondo F/F può essere soppressa
si ha che:
1
f MAX =
( N − 2) ⋅ T pA + T pF
Per il modo che hanno di operare questi contatori sincroni sono detti anche a propagazione del
riporto in serie.
Per contro vi sono poi i cosiddetti contatori sincroni con riporto in parallelo nei quali i segnali T
vengono ottenuti direttamente dalle varie uscite Q del contatore stesso come in Fig. 42.
Fig. 42
A.C. Neve -–Reti logiche sequenziali
26
Le espressioni algebriche dei vati ingressi T per questo circuito risultano le seguenti:
T0= 1
T1= Q0
T2= Q1*Q0
T3= Q2*Q1*Q0
Si noti che queste equazioni pur essendo “logicamente” uguali alle
precedenti sono invece molto diverse dal punto di vista temporale.
La rete di eccitazione è comandata direttamente dalle uscite dei vari F/F per cui il ritardo di
propagazione complessivo dipenderà solo dal tempo di ritardo TpF del più lento dei F/F e dal tempo
di ritardo TpA della più lenta delle AND.
La massima frequenza di conteggio sarà dunque:
1
T pA + T pF
Si noti che all’aumentare della lunghezza della catena di F/F aumenta anche il fan out dei F/F,
questo fattore è quello che in pratica limita il modulo di questi contatori.
f MAX =
In maniera abbastanza simile a quella vista nei casi precedenti può essere realizzato un contatore
binario sincrono all’indietro sfruttando le uscite negate dei F/F.
Nella Fig. 43 è visibile un contatore binario sincrono modulo 16 con riporto parallelo:
Fig. 43
Le espressioni algebriche dei vati ingressi T per questo circuito risultano le seguenti:
T0 =1
T1 = Q0
T 2 = Q1 ⋅ Q0
T 3 = Q 2 ⋅ Q1 ⋅ Q0
La tabella di transizione è la seguente:
A.C. Neve -–Reti logiche sequenziali
27
Clock
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Q3
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
Q2
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
Q1
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
Q0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
Stato
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
Mettendo insieme gli ultimi due circuiti ora visti e
con insieme ad alcune porte OR, è possibile
realizzare dei contatori binari sincroni con modulo 2n
e con controllo del conteggio del tipo Up/Down.
Progetto dei contatori sincroni con modulo qualsiasi
Qn → Qn+1
0
0
0
1
1
0
1
1
J
0
1
X
X
Prima di iniziare l’analisi vengono di seguito riproposte le
tabelle di eccitazione inverse per un F/F JK.
K
X
X
1
0
Nel progetto dei contatori sincroni viene quasi sempre utilizzato
il F/F JK perché nella sua tabella di eccitazione inversa sono
presenti il maggior numero di condizioni non specificate che
dovrebbero consentire una migliore ottimizzazione del progetto.
Vedremo ora come progettare un contatore sincrono di modulo qualsiasi, per es. 12 e per rendere
ancora più generale questa analisi supporremo che l’evoluzione dei 12 stati non sia quella classica
in binario puro ma per esempio la seguente:
0-2-5-3-6-4-8-14-9-11-1-10, questi numeri rappresentano l’equivalente decimale delle
configurazioni dei quattro bit di uscita del contatore. Gli stati 7-12-13 e 15 non essendo stati
utilizzati rappresenteranno le condizioni non specificate.
Viene in seguito fornita la tabella delle transizioni degli stati tra l’impulso di clock n-esimo e quello
(n+1)-esimo. Sono stati indicate con Q3, Q2, Q1, e Q0 i valori delle uscite nello stato n-esimo e con
Q’3,Q’2, Q’1 e Q’0 quelle relativo allo stato successivo (n+1)-esimo.
Clock
0
1
2
3
4
5
6
7
8
9
10
11
Q3
0
0
0
0
0
0
1
1
1
1
0
1
Q2
0
0
1
0
1
1
0
1
0
0
0
0
Q1
0
1
0
1
1
0
0
1
0
1
0
1
Q0
0
0
1
1
0
0
0
0
1
1
1
0
Q’3
0
0
0
0
0
1
1
1
1
0
1
0
A.C. Neve -–Reti logiche sequenziali
Q’2
0
1
0
1
1
0
1
0
0
0
0
0
Q’1
1
0
1
1
0
0
1
0
1
0
1
0
Q’0
0
1
1
0
0
0
0
1
1
1
0
0
Stato
0
2
5
3
6
4
8
14
9
11
1
10
Stati NON utilizzati
7
12
13
15
0
1
1
1
1
1
1
1
1
0
0
1
1
0
1
1
28
Per il progetto dovranno essere utilizzati 4 F/F che saranno del tipo JK Master/Slave.
Il problema principale nel progetto dei contatori sincroni riguarda la realizzazione della rete di
eccitazione e che può essere ottenuta, come esposto in seguito, dalla ricerca delle funzioni Ki e Ji.
Nella tabella seguente vengono prese in considerazione le transizioni della variabile Q3→Q’3
evidenziando i valori che dovranno assumere le due variabili J3 e K3 per rendere possibili le
predette transizioni. La tabella viene costruita ricopiando prima le colonne di Q3, Q2, Q1 e Q0 da
quella principale, aggiungendo poi quella di Q’3. Le colonne di J3 e K3 vengono costruite con
l’aiuto della tabella di eccitazione inversa di un F/F JK comparando le transizioni Q3→Q’3,
ottenendo così i seguenti risultati:
Stato
0
2
5
3
6
4
8
14
9
11
1
10
Q3
0
0
0
0
0
0
1
1
1
1
0
1
Q2
0
0
1
0
1
1
0
1
0
0
0
0
Q1
0
1
0
1
1
0
0
1
0
1
0
1
Q0
0
0
1
1
0
0
0
0
1
1
1
0
Q’3
0
0
0
0
0
1
1
1
1
0
1
0
J3
0
1
0
1
1
0
1
0
0
0
0
0
K3
1
0
1
1
0
0
1
0
1
0
1
0
Utilizzando le mappe di Karnaugh è possibile determinare la forma algebrica delle funzioni J3 e K3.
Q1Q0
Q1Q0
00
01
11
10
01
X
X
X
X
X
X
X
X
X
11
X
X
X
0
X
10
0
0
1
1
Q3Q2
00
01
11
10
00
0
1
0
0
00
01
1
0
X
0
11
X
X
X
10
X
X
X
Q3Q2
J 3 (Q3 , Q2 , Q1 , Q0 ) = Q2 ⋅ Q1 ⋅ Q0 + Q2 ⋅ Q1 ⋅ Q0
A.C. Neve -–Reti logiche sequenziali
K 3 (Q3 , Q2 , Q1 , Q0 ) = Q2 ⋅ Q1
29
Per le funzioni J2 e K2 si ha che:
Stato
0
2
5
3
6
4
8
14
9
11
1
10
Q3
0
0
0
0
0
0
1
1
1
1
0
1
Q2
0
0
1
0
1
1
0
1
0
0
0
0
Q1
0
1
0
1
1
0
0
1
0
1
0
1
Q0
0
0
1
1
0
0
0
0
1
1
1
0
Q’2
0
1
0
1
1
0
1
0
0
0
0
0
J2
0
1
X
1
X
X
1
X
0
0
0
0
K2
X
X
1
X
0
1
X
1
X
X
X
X
Q1Q0
Q1Q0
00
01
11
10
11
X
1
X
X
1
X
X
X
X
X
0
1
10
X
X
X
X
Q3Q2
00
01
11
10
00
0
0
1
1
00
01
X
X
X
X
01
11
X
X
X
X
10
1
0
0
0
Q3Q2
J 2 (Q3 , Q2 , Q1 , Q0 ) = Q3 ⋅ Q1 + Q3 ⋅ Q1 ⋅ Q0
K 2 (Q3 , Q2 , Q1 , Q0 ) = Q1 + Q3
Per le funzioni J1 e K1 si ha che:
Stato
0
2
5
3
6
4
8
14
9
11
1
10
Q3
0
0
0
0
0
0
1
1
1
1
0
1
Q2
0
0
1
0
1
1
0
1
0
0
0
0
Q1
0
1
0
1
1
0
0
1
0
1
0
1
Q0
0
0
1
1
0
0
0
0
1
1
1
0
Q’1
1
0
1
1
0
0
1
0
1
0
1
0
J1
1
X
1
X
X
0
1
X
1
X
1
X
K1
X
1
X
0
1
X
X
1
X
1
X
1
Q1Q0
Q1Q0
00
01
11
10
00
1
1
X
X
01
11
0
X
1
X
X
X
10
1
1
X
Q3Q2
J 1 (Q3 , Q2 , Q1 , Q0 ) = Q2 + Q0
A.C. Neve -–Reti logiche sequenziali
00
01
11
10
00
X
X
0
1
X
X
01
11
X
X
X
X
X
X
1
1
X
10
X
X
1
1
Q3Q2
K 1 (Q3 , Q2 , Q1 , Q0 ) = Q3 + Q0
30
Infine per le funzioni J0 e K0 si ha che:
Stato
0
2
5
3
6
4
8
14
9
11
1
10
Q3
0
0
0
0
0
0
1
1
1
1
0
1
Q2
0
0
1
0
1
1
0
1
0
0
0
0
Q1
0
1
0
1
1
0
0
1
0
1
0
1
Q0
0
0
1
1
0
0
0
0
1
1
1
0
Q’0
0
1
1
0
0
0
0
1
1
1
0
0
J0
0
1
X
X
0
0
0
1
X
X
X
0
K0
X
X
0
1
X
X
X
X
0
0
1
X
Q1Q0
Q1Q0
00
01
11
10
00
X
1
1
X
0
1
01
11
X
X
0
X
X
X
X
X
0
10
X
0
0
X
00
01
11
10
00
0
X
X
1
01
11
0
X
X
X
X
X
10
0
X
X
Q3Q2
J 0 (Q3 , Q2 , Q1 , Q0 ) = Q3 ⋅ Q2 ⋅ Q1 + Q3 ⋅ Q2
Q3Q2
K 0 (Q3 , Q2 , Q1 , Q0 ) = Q3 ⋅ Q2
Il circuito risulterà quello di Fig. 44:
Fig. 44
Il grafo dell’evoluzione degli è proposto in Fig. 45. Si evidenzia la sistemazione degli stati esclusi:
gli stati 15 e 12 vengono fatti confluite nello stato 9, lo stato 13 confluisce nello stato 11 e lo stato 7
non si evolve verso nessun nuovo stato. Questa situazione è molto pericolosa e dovrà essere evitata.
A.C. Neve -–Reti logiche sequenziali
31
0
13
2
5
3
10
6
1
4
11
9
15
14
8
12
7
Fig. 45
Nel progetto di contatori con modulo diverso da 2n vi sono degli stati che non vengono mai
utilizzati, vi è la possibilità che a causa di impulsi spuri o di rumore il contatore transiti in uno di
questi stati inutilizzati scompaginando così quella che è la normale evoluzione di questi ultimi. Se
poi gli stati inutilizzati sono più di uno vi è il grave pericolo che il conteggio si evolva da uno
all’altro di questi stati inutilizzati senza riuscire a ritornare in uno degli stati utili. Questo fenomeno
si dice condizione di blocco (Lookout) del contatore (a tal proposito, si noti lo stato 7).
In fase di progetto è quindi necessario prevedere tali situazioni ed organizzare la tabella delle
transizioni in modo che una eventuale condizione di blocco possa essere rapidamente rimossa
evolvendosi verso uno stati utilizzati nel conteggio, realizzando cioè una tabella completa con 2n
righe e che comprenda anche gli stati non utilizzati avendo cura che il corrispondente stato futuro
sia uno di quelli utilizzati.
Esercizio: Realizzare un contatore binario sincrono in avanti con modulo 5 e privo di protezione
antiblocco.
Un contatore modulo 5 richiede l’utilizzo di tre F/F in quanto 23>5.
Vengono utilizzati dei F/F JK la cui tabella di transizione inversa è la seguente.
Qn →
0
0
1
1
Qn+1
0
1
0
1
J
0
1
x
x
K
x
x
1
0
L’evoluzione degli stati è descritta dalla seguente tabella :
A.C. Neve -–Reti logiche sequenziali
32
Clock
0
1
2
3
4
-
Stato presente
Stato futuro
Q2 Q1 Q0
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Q’2 Q’1 Q’0
0 0 1
0 1 0
0 1 1
1 0 0
0 0 0
x x x
x x x
x x x
J2
0
0
0
1
x
x
x
x
K2
x
x
x
x
1
x
x
x
J1
0
1
x
x
0
x
x
x
K1
x
x
0
1
x
x
x
x
J0
1
x
1
x
0
x
x
x
Q1Q0
Q1Q0
00 01 11 10
Q2
K0
x
1
x
1
x
x
x
x
Q2
00 01 11 10
0
0
0
1
0
0
x
x
x
x
1
x
x
x
x
1
1
x
x
x
K2 =1
J 2 = Q0Q1
Q1Q0
Q1Q0
00 01
11 10
0
0
1
x
x
0
x
x
1
0
1
0
x
x
x
1
x
x
x
x
Q2
00 01 11 10
Q2
J1 = Q0
K1 = Q0
Q1Q0
00 01 11
10
0
1
x
x
1
1
0
x
x
x
Q2
J0 = Q2
Q1Q0
00 01 11
10
0
x
1
1
x
1
x
x
x
x
Q2
K0 =1
Il relativo circuito è quello di Fig. 45:
Fig. 45
A.C. Neve -–Reti logiche sequenziali
33
111
Il grafo che descrive l’evoluzione degli stati è
invece il seguente:
000
100
Come si può notare, la scelta pur casuale delle
condizioni non specificate, è stata tale da non
generare alcun anello di conteggio secondario e
quindi il contatore è antiblocco.
001
011
010
110
101
Si evidenzia che, con una scelta sfortunata dei sottocubi sulle mappe di Karnaugh il risultato finale
sarebbe risultato fallimentare come si può notare in seguito:
Q1Q0
Q1Q0
00 01 11 10
Q2
Q2
00
01 11 10
0
0
0
1
0
0
x
x
x
x
1
x
x
x
x
1
1
x
x
x
J 2 = Q0Q1
K 2 = Q 0Q 1
Q1Q0
00 01 11 10
Q2
Q1Q0
Q2
00
01 11 10
0
0
1
x
x
0
x
x
1
0
1
0
x
x
x
1
x
x
x
x
J1 = Q0
K1 = Q0
Q1Q0
00 01 11 10
Q2
Q1Q0
00 01 11 10
Q2
0
1
x
x
1
0
x
1
1
x
1
0
x
x
x
1
x
x
x
x
J 0 = Q1 + Q 2
A.C. Neve -–Reti logiche sequenziali
K 0 = Q1 + Q 2
34
Con queste scelte si ottiene ancora il contatore richiesto che ha però il seguente grafo degli stati:
000
110
100
001
101
011
111
010
Il contatore così ottenuto presenta però un pericoloso anello di conteggio secondario.
Una tecnica più affidabile per impostare il progetto di un contatore sincrono consiste nell’assegnare,
fin dall’inizio, le transizioni degli stati non utilizzati in modo da confluire rapidamente nell’anello
di conteggio principale come si può notare nella tabella successiva.
In questo caso, gli stati non utilizzati vengono fatti confluire tutti nello stato iniziale 000.
Clock
0
1
2
3
4
-
Stato presente
Stato futuro
Q2 Q1 Q0
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Q’2 Q’1 Q’0
0 0 1
0 1 0
0 1 1
1 0 0
0 0 0
0 0 0
0 0 0
0 0 0
J2
0
0
0
1
x
x
x
x
K2
x
x
x
x
1
1
1
1
J1
0
1
x
x
0
0
x
x
K1
x
x
0
1
x
x
1
1
J0
1
x
1
x
0
x
0
x
K0
x
1
x
1
x
1
x
1
Q1Q0
Q1Q0
00 01 11 10
Q2
Q2
00 01 11 10
0
0
0
1
0
0
x
x
x
x
1
x
x
x
x
1
1
1
1
1
J 2 = Q0Q1
K2 =1
Q1Q0
00 01 11 10
Q2
Q1Q0
00 01 11 10
Q2
0
0
1
x
x
0
x
x
1
0
1
0
0
x
x
1
x
x
1
1
J 1 = Q0Q 2
A.C. Neve -–Reti logiche sequenziali
K1 = Q0 + Q 2
35
Q1Q0
Q1Q0
Q2
00 01 11 10
Q2
00
01
11
10
0
1
x
x
1
0
x
1
1
x
1
0
x
x
0
1
x
1
1
x
K0 =1
J0 = Q2
Ottenendo così il circuito di Fig. 46
Fig. 46
Il relativo diagramma degli stati è il seguente:
101
111
110
000
100
001
011
A.C. Neve -–Reti logiche sequenziali
010
36
Contatori con modulo M qualsiasi possono essere realizzati ponendo in cascata M F/F così da
formare un registro a scorrimento con l’uscita dell’ultimo stadio collegata all’ingresso del primo ed
imponendo che uno solo degli M F/F si trovi a livello logico 1.
Questo sistema di conteggio è detto contatore ad anello (ring-counter).
Nella Fig. 47 è visibile un contatore ad anello modulo 5.
Fig. 47
Clock
0
1
2
3
4
5
6
...
Q4
0
0
0
0
1
0
0
Q3
0
0
0
1
0
0
0
Q2
0
0
1
0
0
0
0
Q1
0
1
0
0
0
0
1
Q0
1
0
0
0
0
1
0
Stato
0 (1 dec)
1 (2 dec)
2 (4 dec)
3 (8 dec)
4 (16 dec)
0 (1 dec)
1 (2 dec)
Come si può notare, questo contatore è estremamente semplice in quanto non necessita di nessuna
rete di eccitazione, per contro il suo modulo è limitato al solo numero di F/F usati contro i 2n
possibili stati, quest’ultimo fattore è fortemente limitante nei confronti delle espansioni.
Si noti il caricamento asincrono dell’1 che deve essere messo in circolazione nel registro.
Non ha bisogno di decodifica.
Un miglioramento dell’efficienza di questo contatore si ottiene con il tipo ad anello intrecciato detto
anche di Johnson e visibile nella Fig. 48:
A.C. Neve -–Reti logiche sequenziali
37
Fig. 48
A differenza del precedente, il modulo di conteggio di questo sistema è 2⋅n per cui con cinque F/F
è possibile realizzare un contatore decadico.
Clock
0
1
2
3
4
5
6
7
8
9
10
...
...
...
Q3
0
0
0
0
1
1
1
1
0
0
0
Q2
0
0
0
1
1
1
1
0
0
0
0
Q1
0
0
1
1
1
1
0
0
0
0
1
Q0 Stato
0
0 (0 dec)
1
1 (1 dec)
1
2 (3 dec)
1
3 (7 dec)
1 4 (15 dec)
0 5 (14 dec)
0 6 (12 dec)
0
7 (8 dec)
0
0 ( 0 dec)
1
1 (1 dec)
1
2 (3 dec)
...
...
...
Questo contatore, a differenza del precedente, necessita di una rete di decodifica per la lettura dello
stato che può essere realizzata con porte AND a due ingressi secondo le seguenti equazioni:
Stato 0 → Q 0 ⋅ Q3
Stato1 → Q 0 ⋅ Q1
Stato 2 → Q1 ⋅ Q 2
Stato3 → Q 2 ⋅ Q3
Stato 4 → Q 0 ⋅ Q3
Stato5 → Q 0 ⋅ Q1
Stato 6 → Q1 ⋅ Q 2
All’inizio del conteggio questi contatori necessitano del caricamento
asincrono solo se sono realizzati con F/F SR.
Stato 7 → Q 2 ⋅ Q3
A.C. Neve -–Reti logiche sequenziali
38
I contatori ora analizzati soffrono di un particolare tipo di inconveniente detto “generazione di anelli
di conteggio secondari” o anche “condizione di blocco”, così descrivibile:
Si consideri un cantatore Johnson con quattro F/F, questo utilizza solo otto dei sedici possibili suoi
stati che, nell’equivalente decimale sono: 0-1-3-7-15-14-12-8 i quali si evolvono secondo il
seguente grafo:
0
1
3
8
Sviluppo corretto del conteggio
7
12
14
15
Se per un motivo qualsiasi uno stato si evolve in uno di quelli scartati, il conteggio prosegue
secondo un altro anello secondario senza potere più uscire, questo anello secondario è costituito
dagli otto stati restanti: 9-4-10-13-6-11-5-2:
9
4
10
2
13
5
11
Sviluppo imprevisto del conteggio
6
Nel caso di un contatore Johnson con tre F/F si hanno i seguenti anelli di conteggio:
0
1
2
4
3
5
6
7
Corretto
A.C. Neve -–Reti logiche sequenziali
Imprevisto
39
Un metodo per eliminare tali anelli secondari si deduce osservando la tabella degli stati: nel primo
F/F l’uscita Q0 potrà commutare da 1 a 0 solo dopo che le uscite degli ultimi due F/F saranno
commutate nello stato 1; in base a quest’ultima considerazione il contatore di Johnson viene
modificatocome da Fig. 49:
Fig. 49
In questo circuito, supponendo che il contatore transiti per un qualsiasi motivo in uno stato proibito,
dopo un certo numero di cicli di clock, dipendente dallo stato stesso, rientra nell’anello di conteggio
principale riprendendo il funzionamento corretto.
Il contatore Johnson ora visto ha un modulo sempre uguale a 2⋅n (con n = numero di F/F) e quindi
sempre pari.
E’ possibile rendere il modulo di conteggio dispari, cioè uguale a (2⋅n-1), sopprimendo dal
conteggio uno degli stati che per comodità risulta quasi sempre quello con tutte le uscite ad 1.
Si deve far quindi commutare il primo F/F da 1 a 0 quando le uscite dei vari F/F sono nello stato
Q0=1, Q1=1, Q2=1 e Q3=0.
Ciò viene realizzato con il circuito di Fig. 50:
Fig. 50
Clock
0
1
2
3
4
5
6
7
8
9
...
A.C. Neve -–Reti logiche sequenziali
Q3
0
0
0
0
1
1
1
1
0
0
Q2
0
0
0
1
1
1
1
0
0
0
Q1
0
0
1
1
1
1
0
0
0
0
Q0 Stato
0
0 (0 dec)
1
1 (1 dec)
1
2 (3 dec)
1
3 (7 dec)
1 4 (15 dec)
0 5 (14 dec)
0 6 (12 dec)
0
0 (0 dec)
0
1 ( 1 dec)
1
2 (3 dec)
...
40