02.06.2013 Views

Flip-flop Macchine sequenziali

Flip-flop Macchine sequenziali

Flip-flop Macchine sequenziali

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!