Circuito sequenziali
L’output dipende dall’input corrente e dalla storia passata degli
input
Lo “stato” racchiude tutte le informazioni sul passato necessarie
per predire l’output corrente basato sull’input corrente
Variabili di stato, uno o più bit di informazione
Esempio di circuito sequenziale: il contatore
Le variabili di stato sono i bit del conteggio il conteggio
definisce lo stato
Ad un certo istante lo stato (conteggio) dipende dalla storia
passata
1
2
Descrizione dei circuiti sequenziali: tavola degli
stati
Per ciascuno stato corrente, specifica gli stati successivi in funzione degli input
Per ciascuno stato corrente, specifica gli output in funzione degli input
Esempio: contatore a 3 bit
Stato corrente
Notazione: Q* denota i bit dello
stato successivo
N.B.: questo circuito sequenziale
non ha input (oltre clock e reset)
Stato successivo
Q2Q1Q0
Q2*Q1*Q0*
0
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
3
Descrizione dei circuiti sequenziali: tavola degli
stati
Contatore a 2 bit con enable: il conteggio (stato) cambia solo se il segnale di
enable è 1
input
Stato corrente
Stato successivo
Q1Q0 EN Q1*Q0*
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
4
Circuito sequenziale con input: contatore con enable
5
Circuito sequenziale con output: segnale che ci dice quando il contatore ha
raggiunto il conteggio massimo
6
Descrizione dei circuiti sequenziali: diagramma
degli stati
Versione grafica della tavola degli stati
S1
S2
S3
S0
S4
S7
S6
S5
Le frecce indicano la transizione da uno stato (conteggio) al successivo.
Quando si verificano le transizioni?
7
Segnali di clock
• Fondamentali nei circuiti sequenziali
– Le variabili di stato cambiano sui fronti del clock
8
Le transizioni si possono verificare solo in corrispondenza dei
fronti di salita del segnale di clock
9
10
Segnale sincrono: cambia sempre a un istante fissato un pò dopo
il fronte di salita del segnale di clock
Tutti i segnali di input di un circuito sequenziale devono essere
sincroni col segnale di clock (altrimenti il circuito può funzionale
male)
11
Tutti i segnali di output prodotti da un circuito sequenziali sono
sincroni col segnale di clock
12
13
14
Può essere mandato in input al contatore
15
Macchine a stati e circuiti digitali sincroni
Lo scopo di questa parte del corso è l’analisi dei circuiti
sequenziali più importanti: le macchine a stati
Macchine a stati: controllano tutti gli altri elementi di circuito e
coordinano lo svolgimento nel tempo di tutti processi/operazioni
Poichè gli stati cambiano solo su ogni fronte del clock, in un
circuito digitale sincrono qualunque cambiamento non può
avvenire a un istante qualsiasi
Risoluzione temporale determinata dal periodo del clock
determina la massima velocità del circuito
16
Elemento bistabile
• Il circuito sequenziale più semplice
• Due stati
– Una variabile di stato, diciamo Q
LOW
HIGH
HIGH
LOW
17
Analisi analogica
– Assumiamo soglie CMOS, 5V rail
– Il centro teorico della soglia è 2.5 V
18
Stati stabili e metastabili
• La metastabilità è presente in ogni circuito bistabile
• Due punti stabili, un punto metastabile
19
20
21
Analisi analogica
– Assumiamo soglie CMOS, 5V rail
– Il centro teorico della soglia è 2.5 V
2.5 V
2.5 V
2.5 V
2.5 V
22
Analisi analogica
– Assumiamo soglie CMOS, 5V rail
– Il centro teorico della soglia è 2.5 V
2.5
4.8
2.51VV
2.5 V
2.0
0.0
2.5 V
2.0
0.0
4.8
5.0
2.5 V
23
Un altro sguardo alla metastabilità
24
Perchè tutta questa attenzione sulla metastabilità?
– Vi sono soggetti tutti i sistemi reali
• I problemi sono causati dagli “input asincroni” che non soddisfano
i tempi di setup e hold dei flip-flop
– Problema severo in sistemi ad alta velocità poichè i
periodi di clock sono così brevi che il “tempo di risoluzione
della metastabilità” può essere più lungo di un ciclo di
clock.
– Molti progettisti, prodotti e compagnie sono state rovinati
da questo fenomeno.
25
Latch S-R: bistabile con input di controllo
• Come controllarlo?
– Input di controllo
• Latch S-R
26
Latch Set-Reset: condizione hold
Se S=0 e R=0, quali sono gli
stati stabili di questo circuito?
QN
0
S0
R0
Q
1
(i) Assumiamo QN=0;
QN=0 e Q=1 è stabile
27
Latch Set-Reset: condizione hold
se S=0 e R=0, quali sono gli
stati stabili di questo circuito?
QN
1
S0
R0
Q
0
(i) Assumiamo QN=0;
QN=0 e Q=1 è stabile
(ii) Assumiamo QN=1;
QN=1 e Q=0 è stabile
Condizione hold: vengono mantenuti i valori presenti precedentemente
28
Latch Set-Reset: condizione set
Se lo stato è QN=1 e Q=0, e
l’input S cambia a 1, cosa
accade?
QN
10
S0 1 0
Q
01
R0
Il nuovo stato stabile è
QN=0 e Q=1
Cosa accade se S cambia a
zero ora?
Lo stato non cambia!
Condizione S(et): Q viene “forzato” a 1
29
Latch Set-Reset: condizione reset
Se lo stato è QN=0 e Q=1,
E l’input R è cambiato a 1,
cosa accade?
QN
01
S0
R01 0
Q
10
Il nuovo stato stabile è
QN=1 and Q=0
Cosa accade se R cambia
a zero ora?
Lo stato non cambia!
Questa è la condizione R(eset): Q viene “forzato” a 0
30
Latch Set-Reset
Riassumendo:
- se S cambia a 1 per un breve periodo di
tempo, il latch va nello stato QN=0, Q=1;
- Se R cambia a 1 per un breve periodo di tempo,
il latch va nello stato QN=1, Q=0;
consideriamo Q l’output del latch,
Per cui S è l’input “Set”, mentre R è l’input “Reset”.
Cosa accade se R e S sono 1 contemporaneamente?
31
Latch Set-Reset: input non permessi
Assumiamo che QN=0, Q=1
inizialmente e che R ed S
divengano 1.
QN
Q
0
S01
10
R0 1
Il nuovo stato stabile è
QN=0 e Q=0
Ma questo non è più un latch perchè
QN non è più il complemento di Q!
S=1 e R=1 non è permesso.
32
Latch Set-Reset: diagrammi temporali
Si può avere metastabilità
Se S e R sono deasseriti
simultaneamente.
(provate in Quartus)
33
Latch Set-Reset: parametri temporali
• Ritardo di propagazione
• Minima larghezza dell’impulso
34
Latch Set-Reset: tavola della transizione degli stati
Una tavola delle transizioni degli stati è un modo
alternativo di illustrare il funzionamento
S(t) R(t) Q(t) Q(t+)
0
0
0
0
0
0
1
1
0
1
0
0
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
1
1
1
+
Una tavola delle transizioni degli stati può essere
espressa anche in forma di diagramma di stati.
35
Latch Set-Reset: diagramma degli stati
Un diagramma degli stati in questo caso ha 2 stati: Q=0
e Q=1
Il diagramma degli stati mostra le condizioni di input
richieste per la transizione fra gli stati. In questo caso
vediamo che ci sono 4 possibili transizioni.
Consideriamole una per volta.
36
Condizione di hold
37
Condizione di set (se inizialmente il circuito è nello stato Q=0)
S=1, R=0
38
Condizione di reset (se inizialmente il circuito è nello stato Q=1)
S=0, R=1
39
Condizione di set (se inizialmente Q=1)
S=1, R=0
40
Condizione di reset (se inizialmente Q=0)
S=0, R=1
41
Diagramma finale
42
Costruzione del diagramma degli stati a partire dalla
tavola delle transizioni
S(t) R(t) Q(t) Q(t+)
0
0
0
0
0
0
1
1
0
1
0
0
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
1
1
1
+
Q=0, Q*=0
Dalla tavola vediamo
S’R’+S’R=S’
Q=1 Q*=1
Dalla tavola vediamo
S’R’+SR’=R’
Q=0, Q*=1
Dalla tavola vediamo che
SR’
Q=1, Q*=0
Dalla tavola vediamo che
S’R
43
SR’
R’
S’
S’R
44
Se includiamo anche le condizioni illegali
S(t) R(t) Q(t) Q(t+)
0
0
0
0
0
0
1
1
0
1
0
0
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
01
1
1
0+
Q=0, Q*=0
Dalla tavola vediamo
S’R’+S’R+SR=S’R’+R=S’+R
Q=1 Q*=1
Dalla tavola vediamo
S’R’+SR’=R’
Q=0, Q*=1
Dalla tavola vediamo che
SR’
Q=1, Q*=0
Dalla tavola vediamo che
S’R+SR=R
45
SR’
R’
S’+R
R
46
Latch Set-Reset: simboli
47
Latch Set-Reset utilizzando gate NAND
48
Latch con gate NOR
49
50
Clock e circuiti sincroni
Nel caso del latch RS appena descritto, vediamo che i
cambiamenti dello stato di output si vericano direttamente in
risposta a cambiamenti degli input.
Questo funzionamento è detto asincrono.
Tuttavia, abbiamo visto che virtualmente tutti i circuiti sequenziali
attualmente si basano sulla nozione di funzionamento sincrono.
L’output di un circuito sequenziale è vincolato a cambiare solo
ad un istante specificato da un segnale di abilitazione globale.
Questo segnale è generalmente il clock del sistema.
51
Latch D trasparente
Modifichiamo adesso il latch RS in modo tale che il suo stato di
output possa cambiare solo quando un segnale di enable valido
(che potrebbe essere il clock di sistema) è presente.
Ciò è ottenuto introducendo una coppia di gate AND in cascata
con gli input R e S che sono controllati da un input addizionale
noto come input di enable (EN).
52
Latch D trasparente
simbolo
Dalla tavola della verità di un AND:
- se uno degli input, diciamo a è 0, l’output
è sempre 0.
CD
- L’output segue D se C=1
La funzione complemento assicura
che R e S non possono essere mai
0 contemporaneamente
53
Latch D trasparente: funzionamento del circuito
Primo stadio
Assumiamo C=1
54
55
56
57
Perchè si chiama trasparente?
Quando C=1 ogni variazione di D passa a Q instantaneamente (trascurando i
ritardi di propagazione) in modo trasparente
E’ preferibile avere un circuito in cui Q cambia solo a un ben determinato
istante
Fronte di salita di C
58
Latch D: funzionamento
59
Flip-flop D triggerato sul bordo
Il latch D trasparente è detto triggerato sul livello. Vediamo che
presenta un comportamento trasparente se EN=1
E’ spesso più semplice disegnare circuiti sequenziali se gli output
cambiamo solo o sui bordi di salita o di discesa del segnale di
clock (cioè il segnale di enable)
Possiamo realizzare questo tipo di funzionamento combinando
due latch D trasparenti in una configurazione detta master-slave.
60
Flip-flop D triggerato sul bordo master-slave
61
Flip-flop D: parametri di timing
• Ritardo di propagazione (da CLK)
• Setup time (D prima di CLK)
• Hold time (D dopo CLK)
62
Segnale che va bene perchè rispetta la
condizione del tempo di setup
63
Nelle moderne tecnologie il tempo di hold è
molto piccolo
64
asincrono
Forza Q a 1
res
Nome del componente: dff
65
66
Flip-flop D triggerati sul bordo reali
La configurazione master-slave è stata oggi superata da nuovi
circuiti F-F più semplici da implementare e aventi prestazioni
migliori (Non considereremo la realizzazione di tali F-F nel
corso).
Nella progettazione di circuiti sincroni è meglio usare dispositivi
F-F veramente triggerati sul bordo.
67
Due FF D in cascata
68
n FF D in cascata: registro a scorrimento o shift
register
69
70
71
72
73
Problemi: quando comincia la trasmissione? A che istanti RX deve
memorizzare i bit?
74
75
Sulla linea di sincronizzazione viene generato un segnale di clock con un
numero di fronti pari al numero di bit da trasmettere
76
77
L’estremo ricevente “guarda”, vale a dire campiona, la linea seriale con uno
shift register in cui il clock proviene dalla linea di sincronizzazione
Deve campionare sui fronti di discesa quando i bit sono stabili
Quindi il segnale SER_CLK è invertito prima di andare ai FF
78
79
80
SER: ingresso del primo FF
Q0: uscita del primo FF
81
Q0: ingresso del secondo FF
Q1: uscita del secondo FF
82
Q1: ingresso del terzo FF
Q2: uscita del terzo FF
83
Q2: ingresso del quarto FF
Q3: uscita del quarto FF
84
Q3: ingresso del quinto FF
Q4: uscita del quinto FF
85
Q4: ingresso del sesto FF
Q5: uscita del sesto FF
86
Q5: ingresso del settimo FF
Q6: uscita del settimo FF
87
Q6: ingresso dell’ottavo FF
Q7: uscita dell’ottavo FF
88
Dopo l’ultimo fronte di discesa i bit Q0, Q1, ... Non cambiano più e restano
stabili
q[0]
q[1]
q[2]
q[3]
q[4]
q[5]
q[6]
q[7]
Q7Q6...Q0 contiene la parola a 8 bit q[7..0] trasmessa
89
Progetto 4: interfaccia tastiera
90
La tastiera PS/2
Il connettore per
collegare la tastiera è
posto sull’altro lato
della scheda
Interfaccia fisica formata da due
linee:
KEY_CLK: clock (10-20 kHz)
KEY_DATA: dati
91
Le due linee KEY_CLK e
KEY_DATA sono collegate
direttamente a due pin della
FPGA
KEY_CLK pin 113
KEY_DATA pin 112
92
Protocollo
Cosa succede quando schiacciate un tasto?
La tastiera trasmette 11 impulsi di clock lungo la linea KEY_CLK:
ci sono 11 fronti di salita e 11 fronti di discesa
La tastiera trasmette 11 bit di dati lungo KEY_DATA sincroni con KEY_CLK:
ogni nuovo bit viene messo sul fronte di salita di KEY_CLK
93
Cosa viene trasmesso?
bit Sop:
sempre 1
bit Start:
sempre 0
8 bit di dati che
identificano il tasto
schiacciato
Bit di parità
dispari che
permette di
rilevare errori di
trasmissione
94
Scan code
Il codice di identificazione del tasto a 8 bit è detto scan code
Viene trasmesso prima il bit meno significativo
Non è il codice ASCII (in un PC il software decodifica lo scan code e lo converte
in una mappa di caratteri o gestisce lo Shift, Caps Lock, Control, ...)
Illustration from http://www.beyondlogic.org/keyboard/keybrd.htm
95
Alcuni scan code in realtà sono molto più lunghi di 8 bit!
Guardate ad esempio il tasto Break!
96
Lo scan code è generato quando premete un tasto
Se il tasto è tenuto premuto, lo scan code viene ripetuto continuamente
Quando rilasciate un tasto vengono generati due codici (due sequenze di 11 bit
sono trasmesse):
- Prima sequenza: viene trasmesso il codice F0
- Seconda sequenza: viene trasmesso lo scan code del tasto
Esempio:
- Space bar premuto, viene mandato 29
- Space bar rilasciato, viene mandato F0, 29
97
Funzionamento bidirezionale
Trasmissione:
Da tastiera a host (PC o FPGA) o da host (PC o FPGA) a tastiera tramite la
stesse connessioni
Esempio: led verde acceso quando si preme CAPS LOCK
Per trasmettere, l’host mette a zero la linea di dati (qualche volta mette a zero
prima la linea di clock)
Quindi la tastiera inizia a generare il clock e l’host manda i dati sincronizzati al
clock
In ogni caso, non manderemo dati alla tastiera
98
referenze
• Pagine web
http://www.beyondlogic.org/keyboard/keybrd.htm
http://govschl.ndsu.nodak.edu/~achapwes/PICmicro/PS2/ps2.htm
• Scan codes
http://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/keyboard/scancodes2.html
99
Progetto
Passo 1: Progettazione dell’interfaccia della tastiera
Componente da disegnare su un foglio dedicato chiamato Keyboard_interface
(che verrà poi posizionato nel foglio principale)
SCAN_CODE[7..0]
KEY_CLK
KEY_DATA
Keyboard_interface
Parity_Error
Conversione seriale-parallelo:
I bit trasmessi lungo la linea seriale dalla tastiera devono essere convertiti in
una parola a 11 bit tramite uno shift register
Il componente va posizionato nel foglio principale assieme all’interfaccia del
display. Gli otto bit dello scan code devono essere quindi visualizzati sul
100
display come due cifre ciascuna a 4 bit (usando 2 dei 4 array)
Problema: l’interfaccia del display attualmente visualizza solo i numeri da 0 a 7
(cifre a 3 bit)
Passo 2 L’interfaccia del display deve essere modificata in modo da
visualizzare cifre a 4 bit.
Devono essere visualizzati tutti i numeri fino a 15 in caratteri esadecimali
Determinare le nuove equazioni logiche dei segmenti con le mappe di
101
Karnaugh e ridisegnare seven-seg-decoder
Bit di parità
Il bit di parità è 1 se il numero di bit=1 nello scan code è dispari, altrimenti è
zero
(E’ calcolato da un circuito nella tastiera prima della trasmissione e trasmesso subito
dopo lo scan code)
Sistema per rivelare errori durante la trasmissione. Supponiamo che sia
presente rumore che durante la trasmissione cambia un bit (10 o 10 )
L’host dopo la ricezione ricalcola la parità e la confronta col bit di parità
trasmesso
Se non coincidono c’è stato un errore (domanda: ciò è sempre corretto?)
102
Circuito per il calcolo della parità
Un circuito per calcolare la parità può essere costruito utilizzando il gate XOR
X Y = XY’ + X’Y
X
Y
C
X
0
0
1
1
Y
0
1
0
1
C
0
1
1
0
Se X=1 OR Y=1, ma
Non entrambi, allora C=1
rivelatore di parità per un numero a 2 bit
A[1]
A[0]
P=1 se il numero di bit=1 è dispari
103
Passo 3 costruire un rivelatore di parità utilizzando dei gate XOR per un
numero di input a 8 bit in un foglio dedicato (chiamatelo ParityCheck)
Posizionate il componente nel foglio dell’interfaccia della tastiera
Confrontate il bit di parità col bit di parità trasmesso:
Se coincidono: segnale Parity_Error = 0
Se non coincidono: segnale Parity_Error = 1
Nel foglio principale collegate Parity_Error a uno dei pin della FPGA che
pilotano i 4 led della scheda
In questo modo un eventuale errore di trasmissione verrà segnalato
dall’accensione del led
104
Macchine a stati
Una macchina a stati è un circuito con una memoria interna formata da un
insieme di flip-flop D
Il valore della memoria a un dato istante è detto stato
Il numero di bit (n. di flip-flop) determina il numero massimo di stati possibili
Gli stati che la memoria può assumere può essere un sottoinsieme di tutti i
possibili stati
clk
Flip
Flops
105
106
107
Lo stato di una macchina a stati può cambiare solo poco dopo un fronte di
salita del segnale di clock
108
109
Macchine a stati
Il circuito può avere degli input (stimoli)
A ogni fronte di clock, lo stato successivo dipende dallo stato corrente e dagli
input
Esempio: contatore a 2 bit con enable (slide successiva)
clk
Inputs
Flip
Flops
110
111
Lo stato successivo allo stato 4 dipende dal valore del segnale IN
IN=0 transizione 45
IN=1 transizione 40
112
113
114
115
Macchine a stati
Stato successivo determinato da un circuito combinatorio:
Ha come input i segnali di input esterni e i segnali di output dei flip flop (stato
corrente)
Ha come output i valori degli input D dei flip flop necessari per produrre lo stato
successivo
clk
Inputs
Next State
Combinatorial
Logic
Stato
successivo
Flip
Flops
Stato
corrente
116
Le macchine a stati più semplici: contatori
Contatore free running: non ha input
Output: il registro di stato
Contatore a n bit: ha n FF e 2n stati attraverso cui passa
nell’ordine 0, 1, 2, ..., 2n-1, 0, 1, ...
Utilizzi:
Generazione di ritardi di una particulare durata
Sequenziatori per la logica di controllo di un processore
Contatore dividi per m (un divisore) come quelli usati in un
orologio digitale
117
Diagramma temporale di un contatore a 3 bit
Gli input del clock di tutti i FF sono collegati al segnale di clock
per cui gli output di tutti i FF cambiano allo stesso tempo, cioè in
modo sincrono
conteggio
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
118
0
Per un contatore da 0 a 7 sono necessari 3 FF D
Primo passo costruiamo una tavola in cui per ogni stato mostriamo lo stato
successivo
Stato
successivo
Stato
corrente
Q2
Q1
Q0
Q2* Q1* Q0*
0
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
1
1
0
1
1
1
0
0
1
0
0
1
0
1
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
0
0
0
Secondo passo determinare la logica che dato uno stato produce lo stato
successivo
119
Tavola caratteristica
La tavola caratteristica di un FF dà lo stato successivo dell’output,
cioè Q*, in termini del suo stato corrente Q e degli input correnti.
Q
D
Q*
equazione caratteristica Q*=D
lo stato di ouput successivo è uguale
al valore dell’input corrente
D
Q*
Poichè Q* è indipendente da Q, la
tavola caratteristica può essere
riscritta come
120
Tavola di eccitazione
La tavola caratteristica può essere modificata in modo da ottenere
la tavola di eccitazione. Questa tavola ci dice il valore di input del
FF richiesto per ottenere un particolare stato successivo a partire
da un dato stato corrente.
Q
Q*
D
Come per la tavola caratteristica vediamo
che D non dipende da Q e D=Q* (questo
non è vero per altri FF)
121
Q2
0
Q1
0
Q0
0
0
0
0
1
1
0
0
1
1
0
1
0
1
1
0
1
1
0
1
1
1
Q2* Q1* Q0*
0
0
1
0
1
0
D2
D1
D0
0
0
1
0
1
0
0
1
1
0
1
0
0
1
1
1
0
0
1
1
0
1
1
0
1
0
1
1
1
0
1
0
1
0
1
0
1
1
1
0
0
0
D0 = Q2’Q1’Q0’+Q2’Q1’Q0+Q2Q1Q0’+
Q2Q1Q0
Poichè D=Q*, la tavola degli
stati successivi ci dà le
equazioni logiche per gli
input D che determinano tali
stati successivi
D1=Q2’Q1’Q0+Q2’Q1Q0+Q2’Q1Q0’+
Q2Q1Q0’
D2=Q2’Q1Q0’+Q2Q1Q0’+Q2Q1Q0+
Q2Q1’Q0
122
Semplifichiamo queste espressioni
123
124
125
126
127
Contatori sincroni: diagramma degli stati
Possiamo visualizzare il funzionamento del contatore tramite un
diagramma degli stati. Le frecce indicano la transizione da uno
stato (conteggio) al successivo che si verifica a ogni ciclo di clock.
Il modulo di un contatore è il numero di stati nel ciclo.
Un contatore con m stati è detto un contatore modulo-m o un
Contatore dividi per m.
S2
S1
S3
Sm
S4
S5
128
Una simile procedura può essere usata per disegnare contatori
aventi una sequenza di conteggio arbitraria:
Disegnamo un contatore a tre bit avente come sequenza di
conteggio il codice Gray
Codice Gray a tre bit:
Codice riflesso
rispetto a questa
lina
000
001
011
010
110
111
101
100
Nella transizione
da uno stato al
successivo solo
un bit cambia
129
Q 2 Q 1Q 0
0 0 0
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0
Q2*Q1*Q0*
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0
0 0 0
D0 = Q2’Q1’Q0’+Q2’Q1’Q0+Q2Q1Q0’+
Q2Q1Q0
D1=Q2’Q1’Q0+Q2’Q1Q0+Q2’Q1Q0’+
Q2Q1Q0’
D2=Q2’Q1Q0’+Q2Q1Q0’+Q2Q1Q0+
Q2Q1’Q0
Semplifichiamo queste espressioni
130
Macchine di Mealy e Moore
Moore Machine
Inputs
Next State
Combinatorial
Logic
Flip
Flops
Output
Combinatorial
Logic
Flip
Flops
Output
Combinatorial
Logic
Outputs
Mealy Machine
Inputs
Next State
Combinatorial
Logic
Outputs
131
Macchine di Mealy e Moore a confronto
Gli output delle macchine di Mealy dipendono dalla
temporizzazione degli input
Gli output delle macchine di Moore provengono direttamente da
FF clockati per cui
- Hanno precise caratteristiche di temporizzazione
- Non hanno glitch
Qualunque macchina di Mealy può essere convertita in una
macchina di Moore e vice versa, sebbene le loro proprietà di
temporizzazione saranno diverse.
132
Contatore a 2 bit con enable
Disegnamo un contatore che incrementa solo in presenza di un segnale di
enable.
La macchina genera un output Cout=1 quando raggiunge il conteggio massimo.
EN’
EN’
EN
S1
S0
EN
EN
S2
S3
Cout
EN
EN’
EN’
Notazione tipica per indicare in quali stati un segnale di output è asserito
133
Q1Q0 EN Q1*Q0*
0 0
0 0 0
0 0
1 0 1
0 1
0 0 1
0 1
1 1 0
1 0
0 1 0
1 0
1 1 1
1 1
0 1 1
1 1
1 0 0
D0 = Q1’Q0’EN+Q1’Q0EN’+Q1Q0’EN+
Q1Q0EN’
D1=Q1’Q0EN+Q1Q0’EN’+Q1Q0’EN+
Q1Q0EN
Semplifichiamo queste espressioni
Abbiamo Cout=1 quando la macchina si trova nello stato S3.
Cout=Q1Q0
134
135
136
137
138
Progetto in classe: cronometro digitale
139
Per fare una frequenza approssimativamente di un Hz a partire da un clock a
50 MHz bisogna usare un contatore a 25 bit
140
141
142
143
144
145
146
147
148
Completare il diagramma temporale
149
Risposte date (focalizziamo l’attenzione su quando il primo contatore torna a
zero e il secondo deve incrementare)
Lo stato cambierebbe qui con la seconda
scelta di EN1
I segnali di input provocano dei cambiamenti nello stato di un circuito
sequenziale
Punto importante: i segnali sono sincroni per cui cambiano sempre un pò dopo
il bordo di clk
EN1 provoca un cambiamento sul fronte in cui è campionato alto, in questo
caso poco prima che torni a zero
Quindi nella seconda possibilità En1 arriverebbe troppo tardi
150
Domanda: chi genera il segnale EN1 per il contatore delle decine?
Risposta: il contatore delle unità
=EN1
151
Nella tavola della transizione degli stati aggiungiamo una colonna per l’output
Cout
Cout deve essere 1 quando il conteggio è 9
152
Domanda: cosa succede se l’enable per il contatore delle unità viene
deasserito quando il conteggio vale nove?
Completare il seguente diagramma temporale:
153
Soluzione:
Il diagramma evidenzia un problema:
Se il contatore delle unità si ferma a nove, tiene abilitato permanentemente
il
154
contatore delle decine
Domanda: come si risolve questo problema:
Risposta: possiamo mettere in AND Cout=q3q2’q1’q0 col segnale di enable in
ingresso:
EN
Cout=ENq3q2’q1’q0
Counter_mod_9
155
Circuito cronometro free running
Quattro contatori Counter_mod_9: l’enable del primo può vetare i contatori
successivi
156
Implementazione di un cronometro con start e stop
Start e stop
controllato dai
tasti
Ci serve un circuito con
input SW0 e SW1 che
generi il segnale di
enable per il contatore
delle unità
157
Descrizione a parole su cosa deve fare questo circuito:
158
159
Un possibile diagramma proposto dagli studenti
160
Un altro possibile diagramma
proposto dagli studenti
161
Un’ulteriore discussione fa convergere su questo diagramma
162
Dallo stato S0 escono due frecce (quale transizione si verifichi dipende dalla
condizione logica dei segnali di input)
start
start’
Devono essere soddisfatte queste
regole:
163
start
start’
164
165
Reset del cronometro: tramite il tasto sw2
Reset asincrono: tuttal la logica resettata da un segnale che è
l’OR di SW2 e de segnale di reset di default RES
N.B. I segnali sono attivi bassi:
SW2
res
SW2
res
dalla legge di De Morgan
166
Sincronizzazione dei segnali di input
START (STOP) è un segnale asincrono
Se arriva entro la finestra del tempo di setup del Flip-Flop del circuito Latch-RSsincrono, può indurre un comportamento metastabile del FF
167
168
Non risolve completamente il problema della metastabilità: anche il FF
sincronizzatore può andare in uno stato metastabile
START_SYNC
Tuttavia l’eventuale stato metastabile viene
campionato dal FF di Latch-RS-sincrono un
ciclo di clock dopo
START_SYNC
Poichè lo stato metastabile corrisponde a uno stato di
equilibrio instabile, dopo un certo tempo il FF ritorna
sempre a uno stato valido.
169
Problema se questo tempo è maggiore di Tclk
Un sincronizzatore più sicuro è formato da due FF in cascata (in pratica uno
shift register)
170
Controller di un semaforo
Semaforo: dispositivo con 3 luci che compie un ciclo
Stato “R”
Abbiamo 4 stati:
Possiamo costruire una
macchina a stati che cicla
attraverso questi stati
come nel caso di un
contatore
Stato “RA”
Stato “A”
Stato “G”
171
Sulla scheda sono presenti due led verdi, un led giallo e un led verde
Macchina a stati che controlla tre led simulando il comportamento del semaforo
Diagramma degli stati?
172
Primo diagramma proposto dagli studenti
In questo circuito si passa automaticamente da uno stato all’altro ogni ciclo di
clock.
Supponiamo che Tclk=1 min la durata delle varie luci è la stessa
173
Tuttavia, in un semaforo realistico la durata può essere diversa
Il circuito deve stare in ciascuno stato un tempo diverso.
Secondo diagramma proposto dagli studenti
In questo circuito posso controllare la transizione col segnale EN
174
Con un solo segnale EN però in ogni caso la durata di tutte le luci è sempre la
stessa.
Risolviamo la durata diversa in un secondo momento. Prima domanda:
Chi genera EN?
175
Il segnale EN che fa passare da uno stato all’altro può essere il segnale Cout di
un contatore che viene asserito quando questo raggiunge il conteggio massimo
176
In questo esempio il contatore può essere free running
Tuttavia, in altri casi può essere necessario controllare il contatore.
Esempio: supponiamo che sia richiesto che la luce verde sia accesa 5 minuti.
Cout viene generato quando count=5. Dopodichè il contatore va resettato
perchè continua a incrementare fino al conteggio massimo (ciò può essere fatto
ad esempio nello stato A). Se è free-running, tuttavia dopo il reset riparte da
zero e quando torna nello stato V non è garantito che il conteggio sia a zero.
Ci potrebbe quindi essere una situazione del genere
177
178
La macchina a stati controlla il segnale di enable del contatore (CNT_EN)
179
Se CNT_EN viene asserito un ciclo prima che lo stato sia V, il contatore
incrementa di una unità e poi il conteggio non cambia
Cout non viene asserito e lo stato V non cambia
180
Anche asserendo CNT_EN solo nel primo ciclo di clock dello stato V non
risolve
181
Soluzione: viene asserito CNT_EN per tutto il tempo che la macchina a stati
si trova nello stato V
Il contatore comincia a incrementare
Quando COUNT=15 viene asserito Cout
La macchina a stati campiona Cout e quando vede Cout=1 passa allo stato R,
mentre il segnale CN_EN viene deasserito
182
Diagramma finale: utilizziamo tre contatori distinti per i tempi di accensione
delle tre luci
183
Tavola delle transizioni
Poichè abbiamo tre stati, ci servono due bit. Dobbiamo assegnare un codice a
ciascuno stato. Ad esempio:
X: condizione “don’t care”
184
Read-Ony Memory (ROM)
Memoria a “sola lettura”
185
186
Perchè le ROM?
• Memoria che contiene programmi
–Es. al boot un personal computer carica il
programma da una ROM
• In realtà, una ROM è un circuito combinatorio:
–può implementare una qualunque funzione logica
–inputs di indirizzo = inputs della funzione
–outputs dei dati = outputs della funzione
187
Esempio
188
Esempio: moltiplicatore 4x4
189
Struttura interna
PDP-11 boot ROM
(64 words, 1024 diodes)
190
Decodifica bidimensionale
?
191
Un esempio più grande: ROM 32Kx8
192
Le ROM al giorno d’oggi
• 256K bytes, 1M byte, o più grandi
• Utilizzano transistor MOS
193
VERILOG HDL (Hardware Description Language)
• Disegni organizzati gerarchicamente
• Ciascun elemento del disegno ha:
– Un’interfaccia ben definita
– Una precisa specifica del comportamento usando o:
• Una descrizione algoritmica
• Una descrizione strutturale dell’hardware
• Modella la concorrenza, la temporizzazione, e il clock:
– Gestisce circuiti asincroni e sincroni
– I disegni possono essere simulati
194
Macchina a stati semaforo in verilog
Il blocco costruttivo fondamentale
di verilog è il modulo
Sintassi:
module semaforo();
Dichiarazione varibili
…
Funzionalità
endmodule;
195
macchina a stati semaforo in verilog
CNT_EN_V
res
clk
CNT_EN_A
CNT_EN_R
Cout_R
LED_V
Cout_A
LED_A
Cout_V
LED_R
Sintassi:
Il blocco costruttivo
fondamentale di
verilog è il modulo
Sintassi:
module semaforo(res,clk,Cout_R,Cout_A,Cout_V,
module semaforo();
CNT_EN_V,CNT_EN_A,CNT_EN_R,
LED_V,LED_A,LED_R);
Dichiarazione varibili
…
Dichiarazione varibili Funzionalità
…
Funzionalità
endmodule;
endmodule;
196
Dichiarazione dei segnali: segnali di input
CNT_EN_V
res
clk
CNT_EN_A
CNT_EN_R
Cout_R
LED_V
Cout_A
LED_A
Cout_V
LED_R
Il blocco costruttivo
fondamentale di
verilog è il modulo
Sintassi:
module semaforo( res,clk,Cout_V,Cout_A,Cout_R,
CNT_EN_V,CNT_EN_A,CNT_EN_R,
LED_V,LED_A,LED_R);
Input res, clk, Cout_V, Cout_A, Cout_R;
…
Funzionalità
endmodule;
197
Dichiarazione dei segnali: segnali di output
CNT_EN_V
res
clk
CNT_EN_A
CNT_EN_R
Cout_R
LED_V
Cout_A
LED_A
Cout_V
LED_R
module semaforo( res,clk,Cout_V,Cout_A,Cout_R,
CNT_EN_V,CNT_EN_A,CNT_EN_R,
LED_V,LED_A,LED_R);
input res, clk, Cout_V, Cout_A, Cout_R;
output CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
reg CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
…
Funzionalità
198
endmodule;
Definizione degli stati
module semaforo( res,clk,Cout_V,Cout_A,Cout_R,
CNT_EN_V,CNT_EN_A,CNT_EN_R,
LED_V,LED_A,LED_R);
input res, clk, Cout_V, Cout_A, Cout_R;
output CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
reg CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
reg [1:0] state;
parameter Verde
= 2'b00;
parameter Arancione = 2'b01;
parameter Rosso
= 2’b11;
Funzionalità
endmodule;
199
Le transizioni degli stati
module semaforo( res,clk,Cout_V,Cout_A,Cout_R,
CNT_EN_V,CNT_EN_A,CNT_EN_R,
LED_V,LED_A,LED_R);
input res, clk, Cout_V, Cout_A, Cout_R;
output CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
reg CNT_EN_V,CNT_EN_A,CNT_EN_R,LED_V,LED_A,LED_R;
reg [1:0] state;
parameter Verde
= 2'b00;
parameter Arancione = 2'b01;
parameter Rosso
= 2’b11;
always @ (posedge clk or negedge reset) begin
if (reset == 0)
state = V;
else
…
end
endmodule;
200
Statement always
always @(condizione)
begin
…
end
Ogni volta che è soddisfatta la condizione in parentesi, vengono eseguiti tutti
gli stament contenuti all’interno del blocco begin-end
Blocco begin-end: analogo a un raggruppamento di istruzioni {} del linguaggio
di programmazione C.
always @(negedge res)
state=V
state=V è eseguito ogni volta che il segnale res
compie una transizione negativa
always @(posedge clk or
negedge res) begin
If(reset == 0)
state=V
else
…
state=V è eseguito ogni volta che il segnale res
compie una transizione negativa
Altrimenti su ogni bordo positivo di clk ...
201
always @ (posedge clk or negedge reset) begin
if (reset == 0)
state = V;
else
case (state)
Verde:
if(Cout_V == 1)
state = Arancione;
else
state = Verde;
Arancone:
if(Cout_A == 1)
state = Rosso;
else
state = Arancione;
Rosso:
if(Cout_R == 1)
state = Verde;
else
state = Rosso;
endcase
end
endmodule;
202
La definizione dei segnali di output
always @ (state) begin
case (state)
Verde:
begin
CNT_EN_V= 1; CNT_EN_A = 0; CNT_EN_R = 0;
LED_V= 1; LED_A = 0; LED_R = 0;
end
Arancione:
begin
CNT_EN_V= 0; CNT_EN_A = 1; CNT_EN_R = 0;
LED_V= 0; LED_A = 1; LED_R = 0;
end
Rosso:
begin
CNT_EN_V= 0; CNT_EN_A = 0; CNT_EN_R = 1;
LED_V= 0; LED_A = 0; LED_R = 1;
end
endcase
end
203