You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Flip</strong>-<strong>flop</strong><br />
<strong>Macchine</strong> <strong>sequenziali</strong>
Introduzione<br />
I circuiti digitali possono essere così classificati<br />
• Circuiti combinatori<br />
– Il valore delle uscite ad un determinato istante dipende<br />
unicamente dal valore degli ingressi in quello stesso<br />
istante<br />
• Circuti <strong>sequenziali</strong><br />
– Il valore delle uscite in un determinato istante dipende<br />
dal valore degli ingressi in quell’istante E dal valore degli<br />
ingressi in istanti precedenti
X 1 =1<br />
X 2 =0<br />
X 1<br />
X 2<br />
X 1 =0<br />
X 2 =1<br />
X 1<br />
X 2<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
Esempio: bistabile<br />
0<br />
1<br />
1<br />
0<br />
Y 1<br />
Y 2<br />
Y 1<br />
Y 2<br />
A<br />
B<br />
0<br />
1<br />
0 1<br />
1<br />
0<br />
0<br />
0<br />
Tabella verità NOR<br />
Se un ingresso vale 1<br />
allora l’uscita vale 0<br />
Se un ingresso vale 0<br />
allora l’uscita vale l’altro ingresso<br />
negato<br />
A<br />
B
X 1 =0<br />
X 2 =0<br />
X 1<br />
X 2<br />
X 1 =0<br />
X 2 =0<br />
X 1<br />
X 2<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
Y 1<br />
Y 2<br />
Y 1<br />
Y 2<br />
Bistabile<br />
X 1 =1<br />
X 2 =1<br />
X 1<br />
X 2<br />
1<br />
1<br />
0<br />
0<br />
A<br />
B<br />
0<br />
1<br />
0<br />
0<br />
0 1<br />
1<br />
0<br />
Y 1<br />
Y 2<br />
0<br />
0
R<br />
S<br />
Equazioni bistabile<br />
Q stato attuale, Q’ prossimo stato<br />
Q<br />
Q<br />
Q S R Q’<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
SR<br />
Q<br />
00 01 11 10<br />
0 0 0 x 1<br />
1 1 0 x 1<br />
Q’ = SR + RQ<br />
NOTA Con R=S=0 il bistabile mantiene lo stato precedente (Q’=Q)<br />
Questa rete è in grado di memorizzare un bit
Reset<br />
Set<br />
Reset<br />
Set<br />
Q<br />
Q<br />
Bistabile: temporizzazione<br />
Q<br />
Q<br />
tempo<br />
S<br />
0<br />
1<br />
R<br />
1<br />
0<br />
Q<br />
0<br />
1<br />
Q<br />
1<br />
0<br />
0 0 Q-1 Q-1 1<br />
1<br />
Non usata
Bistabile: input ammissibili<br />
• Con R=S=0 il bistabile mantiene (hold) lo stato acquisito<br />
• Con R o S diversi da 0 si cambia lo stato<br />
• La configurazione di ingresso R=S=1 non è ammessa, poiché<br />
se da questa si passa a R=S=0 sono possibili due<br />
configurazioni per l’uscita. La configurazione effettiva non è<br />
cioè prevedibile<br />
R<br />
S<br />
Q<br />
Q<br />
Hold<br />
Reset<br />
Set<br />
S R Q’<br />
0 0 Q<br />
0 1 0<br />
1 0 1<br />
1 1 ?
A<br />
B<br />
Q<br />
A=0<br />
B=1<br />
t 0 t 1 t 2<br />
Sincronizzazione<br />
R=0 Q=0<br />
S=0<br />
FF<br />
Q<br />
Al tempo t 0 sia A=0, =0 e Q=0<br />
Se i valori A e B cambiano<br />
“contemporaneamente” al tempo<br />
t 1 allora, l’uscita Q rimane a 0<br />
Tuttavia nella realtà i cambiamenti<br />
di A e B non sono contemporanei:<br />
ad esempio può succedere che A<br />
cambi prima di B (che cambia a<br />
t 2 )<br />
In questo modo si avrà una<br />
configurazione temporanea A=B=1<br />
e Q commuta a Q=1<br />
Quando B varia, Q continuerà ancora<br />
a valere Q=1
Segnale di sincronizzazione<br />
Un clock ha le seguenti caratteristiche:<br />
1<br />
0<br />
– E’ un segnale binario<br />
– E’ un segnale periodico (durata T)<br />
– frequenza del clock f=1/T<br />
Fronte di salita<br />
Fronte di discesa<br />
Periodo T<br />
In realtà le transizioni 0->1 e 1-> non sono istantanee
Bistabili Sincroni<br />
Utilizzano un segnale di controllo CK, detto Clock<br />
• Livello, chiamati Latch trasparenti<br />
– L’ingresso viene sentito, e l’uscita può variare, durante tutto il<br />
periodo in cui C=1 (oppure C=0)<br />
• Fronte di salita, chiamati (positive edge triggered) <strong>Flip</strong>-Flop<br />
– L’uscita cambia in base al valore dell’ingresso in corrispondenza<br />
della transizione di C da 0 ad 1<br />
• Fronte di discesa (negative edge triggered) <strong>Flip</strong>-Flop<br />
– L’uscita cambia in base al valore dell’ingresso in corrispondenza<br />
della transizione di C da 1 ad 0<br />
• Master-Slave <strong>Flip</strong>-Flop<br />
– Segnale d’ingresso campionato su un fronte, uscita cambia<br />
sull’altro<br />
Nota: Spesso letteratura si usa il termine <strong>Flip</strong>-Flop per indicare<br />
in modo generico un bistabile (quindi anche i latch)
R<br />
CK<br />
S<br />
R Q<br />
CK<br />
S<br />
Q<br />
Esempio, Latch RS<br />
Q<br />
Q<br />
CK S R Q’<br />
Quando CK=1 allora si ha il consenso alla transizione<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
Q<br />
Q<br />
Q<br />
Q<br />
Q<br />
0<br />
1<br />
?
Perché abilitare sui fronti?<br />
Sia d il tempo in cui CK=1 e t il ritardo di propagazione del FF<br />
• assumiamo che d>t<br />
Esiste un problema nel collegamento in cascata di bistabili.<br />
Durante CK=1 l’uscita di FF1 modifica l’uscita di FF2 poiché<br />
d>t. In alcuni casi questo non è il comportamento voluto<br />
(registri a scorrimento)<br />
CK<br />
R=0<br />
S=1<br />
Q 1<br />
FF1 FF2<br />
Q 2<br />
t<br />
d<br />
Durata clock alto<br />
Ritardo di propagazione<br />
CK<br />
Q 1<br />
Q 2
Abilitazione sul fronte di discesa<br />
Usando FF con abilitazione sul fronte di discesa si ottiene il<br />
comportamento desiderato. Ad ogni ciclo di clock cambia lo<br />
stato di un solo flip-<strong>flop</strong><br />
CK<br />
R=0<br />
S=1<br />
Q 1<br />
Q 2<br />
CK<br />
Q 1<br />
Q 2
Latch D<br />
• Un solo ingresso più uno di abilitazione<br />
• Usato come unità elementare di memorizzazione<br />
D<br />
– Presenta in uscita ciò che era presente in ingresso quando<br />
il era presente il segnale per l’abilitazione (CK=1)<br />
R Q<br />
CK<br />
S<br />
Q<br />
D Q<br />
CK<br />
CK<br />
D<br />
Q
R<br />
CK<br />
S<br />
Master-Slave<br />
Nel caso di master-slave si ha in corrispondenza del fronte di<br />
discesa.<br />
R<br />
CK<br />
S<br />
Master Slave<br />
Q<br />
Q<br />
R<br />
CK<br />
S<br />
Q<br />
Q<br />
R<br />
S<br />
CK<br />
Q<br />
Q
Registri<br />
Un registro è un elemento di memoria<br />
– in grado di memorizzare un insieme di n bit<br />
– composto da un insieme di bistabili<br />
– l’informazione memorizzata in un registro prende il nome<br />
di parola<br />
Scrittura<br />
Scrittura Lettura<br />
Lettura
Registri<br />
Modalità di scrittura/lettura dei dati<br />
– Parallelo<br />
– Seriale<br />
Operazioni sui dati:<br />
– Scorrimento a destra<br />
– Scorrimento a sinistra<br />
– Scorrimento circolare
Clock<br />
Registro parallelo-parallelo<br />
D0 D1 D2<br />
D3<br />
D Q D Q D Q D Q<br />
Q0 Q1 Q2<br />
Q3
IN1<br />
C<br />
FFn<br />
Registri<br />
Un registro è composto da più flip-<strong>flop</strong> D che<br />
utilizzano gli stessi segnali di controllo<br />
IN(4:1)<br />
OUT(4:1)<br />
C<br />
IN2<br />
IN3<br />
INn<br />
FF1<br />
FF2<br />
FF3<br />
OUT1<br />
OUT2<br />
OUT3<br />
OUTn<br />
C<br />
R<br />
IN(n:1) E<br />
G<br />
OUT(n:1)<br />
0xC 0xD 0xE 0xF<br />
0xC 0xD 0xE 0xF
Barrel Shifter<br />
a a a<br />
i+1 i i-1<br />
z i<br />
SH<br />
d/s
Write/Read<br />
Clock<br />
Registro circolare (n=4)<br />
D0 D1 D2<br />
D3<br />
D Q D Q D Q D Q<br />
Q
Reti <strong>sequenziali</strong><br />
Il valore in uscita è funzione della sequenza di valori<br />
forniti in input fino a quel momento<br />
• Hanno una memoria<br />
• Varie classi di reti, vedremo la più semplice Level<br />
Level Clocked (LLC)<br />
• La sequenza è definita mediante un segnale di clock<br />
• Gli ingressi e le uscite sono “a livelli”:<br />
• il livello del segnale d’ingresso determina il livello del segnale<br />
d’uscita<br />
• L’ingresso cambia solo dopo che l’uscita è stabile<br />
• Altre reti (es. ad impulsi…)
Addizionatore (macchina sequenziale)<br />
Al clock i-esimo arriva in ingresso una coppia di bit del numero<br />
da sommare; l’uscita è pari al bit i-esimo della somma
<strong>Macchine</strong> <strong>sequenziali</strong>: schema<br />
LC<br />
LC: circuiti combinatori<br />
M: memoria
Ingressi<br />
x 1<br />
x 2<br />
x n<br />
y k<br />
Stato Presente<br />
y 2<br />
y 1<br />
<strong>Macchine</strong> LLC<br />
RETE<br />
COMBINATORIA<br />
w,d<br />
Clock f<br />
FF 1<br />
FF 2<br />
FF k<br />
Registri di stato<br />
y’ 1<br />
y’ 2<br />
Uscite<br />
y’ k<br />
Stato Futuro<br />
z 1<br />
z 2<br />
z m<br />
La rete combinatoria<br />
realizza le funzioni d e<br />
w (tabelle di verità)<br />
Rete sincrona LLC (Level<br />
Level Clocked)<br />
La macchina cambia stato ad<br />
ogni fronte attivo del clock<br />
(ogni “colpo di clock”)<br />
Le uscite dipendono dai livelli<br />
dei valori d’ingresso (non<br />
dalle variazioni)<br />
Prima di cambiare nuovamente<br />
le uscite diventano stabili
Macchina a stati finiti (FSM)<br />
• FSM = <br />
– I alfabeto finito di ingresso (per comodità |I|=2 n )<br />
– S insieme degli stati, |S|= 2 k<br />
– O alfabeto di uscita, |O|= 2 m<br />
– d : S x I Æ S, funzione stato successivo<br />
– w : S Æ O (Moore) oppure w : S x I Æ O (Mealy)<br />
funzione di uscita<br />
• Se serve specificare uno stato iniziale s Œ S,<br />
FSM= <br />
• Una FSM può essere realizzata come rete LLC
Diagramma degli stati<br />
Il diagramma degli stati è un grafo orientato<br />
etichettato G(V,A,L)<br />
• i nodi rappresentano gli stati della macchina<br />
• gli archi le transizioni di stato<br />
• le etichette le condizioni di transizione<br />
Macchina di Mealy: l’uscita dipende dallo<br />
stato e dall’ingresso<br />
Macchina di Moore: l’uscita dipende solo dallo<br />
stato
<strong>Flip</strong>/Flop S-R<br />
• Ingresso: Set – Reset (S-R) – solo uno dei<br />
due ingressi può essere pari ad uno.<br />
• Stati: 0, 1<br />
00,01<br />
0 1<br />
uscita= stato del flip <strong>flop</strong>: macchina di Moore<br />
10<br />
01<br />
00,10
Riconoscitore di sequenza<br />
Macchina che riconosce la sequenza ciao<br />
• Input: {a,b,c,...,z}<br />
Per semplicità assumiamo che il simbolo di<br />
negazione su una lettera individui una<br />
qualunque lettera tranne la lettera stessa<br />
(ad es. a indica b,c,...,z); analogamente per<br />
più lettere<br />
• Uscita: Si, No
Diagramma degli stati (Moore)<br />
c<br />
c<br />
c<br />
1/no 2/no 3/no 4/no 5/si<br />
1: aspetto c<br />
2: aspetto i<br />
c<br />
c,i c<br />
c<br />
i<br />
c,a<br />
a o<br />
c,o<br />
3: aspetto a , 4: aspetto o; 5: parola completa<br />
c
c,a/no<br />
Diagramma degli stati (Mealy)<br />
c,i/no c/no<br />
c<br />
no<br />
1<br />
c/no<br />
c/no<br />
2<br />
c/no<br />
i/no<br />
3<br />
o/si<br />
4<br />
a/no<br />
1: attesa c<br />
2: attesa i<br />
3: attesa a<br />
4: attesa o
Contatore Up e Down<br />
Macchina conta modulo 4<br />
• U incrementa di uno<br />
• D decrementa di uno
INPUT<br />
SP<br />
s 1 /o 1<br />
FSM Esempio evoluzione (Moore)<br />
Clock f<br />
I 1<br />
w<br />
d<br />
SF<br />
Registri di stato<br />
s 2 /o 2<br />
OUTPUT<br />
SP<br />
T d<br />
S 1<br />
O 1<br />
I 1<br />
T pFF<br />
SF S1 S2 I 2<br />
s 3 /o 3<br />
T w<br />
S 2<br />
O 2<br />
I 2<br />
nd : S x I Æ S<br />
nw : S Æ O<br />
S 3<br />
f<br />
INPUT<br />
S 3<br />
O 3<br />
OUTPUT
Dalla macchina sequenziale alla rete<br />
• Per realizzare una macchina sequenziale è<br />
necessario<br />
– Codificare gli insiemi I,S,O con variabili di commutazione<br />
– Realizzare le funzioni d ed w con reti combinatorie<br />
• Comportamento temporale delle variabili di<br />
ingresso/uscita<br />
– Ogni circuito digitale risponde ai nuovi valori di ingresso<br />
producendo la nuova uscita in modo stabile solo un tempo<br />
di ritardo d durante il quale sono esauriti tutti i<br />
transitori<br />
• Considereremo solo la realizzazione di reti di tipo<br />
LLC (Level Level Clocked)
Dalla macchina alla rete<br />
• x 1,x 2,..,x n variabili di ingresso a livelli<br />
– 2 n ≥ |I|<br />
• z 1,x 2,..,z m variabili di uscita a livelli<br />
– 2 m ≥ |O|<br />
• y 1,y 2,..,y k variabili di stato<br />
– 2 k ≥ |S|<br />
• Variabile impulsiva, ck, che ha lo scopo di far<br />
commutare lo stato
Reti LLC<br />
La rete sequenziale lavora con le seguenti ipotesi:<br />
• Variabili d’ingresso di tipo a livello (i valori in ingresso<br />
rimangono fissi per un periodo T sufficientemente lungo per<br />
far assumere all’uscita il nuovo valore di regime, ossia T>d)<br />
• Variabili di uscita a livello<br />
• Segnale di abilitazione “positive or negative edge trigger”, o<br />
a livello (in quest’ultimo caso la variabile di commutazione<br />
deve essere pari ad 1 per un periodo di tempo sufficiente per<br />
far commutare i flip-<strong>flop</strong>, ma inferiore al minimo tempo di<br />
commutazione dei circuiti combinatori che calcolano lo stato<br />
successivo, altrimenti si potrebbero avere più commutazioni)
X<br />
Y<br />
Dal modello strutturale al circuito<br />
d<br />
w<br />
ck<br />
Z<br />
Y’<br />
Mealy Moore<br />
X<br />
Y<br />
d<br />
w<br />
ck<br />
Y’<br />
Z
Rete LLC per macchine di Mealy<br />
(flip-<strong>flop</strong> di tipo D)<br />
x1 x2 z1 z2 xn RETE<br />
COMBINATORIA<br />
zm Ingressi w,d<br />
Uscite<br />
Stato Presente S Stato Successivo S’<br />
Clock<br />
y k<br />
y 2<br />
y 1<br />
FF 1<br />
FF 2<br />
FF k<br />
y’ 1<br />
y’ 2<br />
y’ k<br />
Registro di stato
Esempio: contatore UP-DOWN modulo 4<br />
U<br />
0 1<br />
U D<br />
3<br />
D<br />
U<br />
D<br />
D<br />
2<br />
U<br />
NOTA: uscita = stato<br />
stato<br />
I={U,D}<br />
O={0,1,2,3}<br />
S={0,1,2,3}<br />
ingresso<br />
0<br />
1<br />
2<br />
3<br />
U D uscita<br />
1<br />
2<br />
3<br />
0<br />
3<br />
0<br />
1<br />
2<br />
0<br />
1<br />
2<br />
3
stato<br />
I x<br />
U 0<br />
D 1<br />
ingresso<br />
0<br />
1<br />
2<br />
3<br />
Codifica simboli<br />
S y 2 y 1<br />
0 0 0<br />
1 0 1<br />
2 1 0<br />
3 1 1<br />
U D uscita<br />
1<br />
2<br />
3<br />
0<br />
3<br />
0<br />
1<br />
2<br />
0<br />
1<br />
2<br />
3<br />
O z 2 z 1<br />
0 0 0<br />
1 0 1<br />
2 1 0<br />
3 1 1<br />
y2 y1 x<br />
0 1 z2 z1 00 01 11 00<br />
01 10 00 01<br />
10 11 01 10<br />
11 00 10 11
Sintesi funzioni d e w<br />
• In questo semplice esempio, l’uscita è uguale allo stato<br />
– w(y 2 y 1 )=z 2 z 1<br />
y2 y1 00<br />
01<br />
10<br />
11<br />
x<br />
01<br />
10<br />
11<br />
00<br />
0 1<br />
11<br />
00<br />
01<br />
10<br />
y’ 1 y’ 2<br />
x<br />
x<br />
y2 y1 0 1<br />
y’ 1= y 1<br />
00<br />
01<br />
11<br />
10<br />
1<br />
0<br />
0<br />
1<br />
Mappe di Karnaugh<br />
1<br />
0<br />
0<br />
1<br />
y2 y1 00<br />
01<br />
11<br />
10<br />
0<br />
1<br />
0<br />
1<br />
0 1<br />
y’ 2 =y 2 y 1 x+y 2 y 1 x +y 2 y 1 x + y 2 y 1 x<br />
1<br />
0<br />
1<br />
0
Realizzazione mediante rete<br />
combinatoria<br />
Ingresso Uscita<br />
x<br />
y 2<br />
y 1<br />
Clock<br />
RETE<br />
COMBINATORIA<br />
w<br />
FF 1<br />
FF 2<br />
y’ 1<br />
y’ 2<br />
z 1<br />
z 2
Realizzazione mediante ROM<br />
Ingresso Uscita<br />
x<br />
y 2<br />
y 1<br />
Clock<br />
Memoria<br />
ROM<br />
FF 1<br />
FF 2<br />
y’ 1<br />
y’ 2<br />
z 1<br />
z 2<br />
Indirizzo<br />
Struttura parola nella ROM<br />
y2y1x y’ 2y’ 1z2z1 000 0 1 0 0<br />
001 1 1 0 0<br />
010 1 0 0 1<br />
011 0 0 0 1<br />
100 1 1 1 0<br />
101 0 1 1 0<br />
110 0 0 1 1<br />
111 1 0 1 1