Upload
ferdinand-little
View
57
Download
5
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
1
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
2
3
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
Q2Q1Q0 Q2*Q1*Q0*
0 0 0 0 0 1 0 0 1 0 1 00 1 0 0 1 10 1 1 1 0 01 0 0 1 0 11 0 1 1 1 01 1 0 1 1 11 1 1 0 0 0
Stato corrente Stato successivo
Notazione: Q* denota i bit dello stato successivo
N.B.: questo circuito sequenziale non ha input (oltre clock e reset)
4
Descrizione dei circuiti sequenziali: tavola degli stati
Contatore a 2 bit con enable: il conteggio (stato) cambia solo se il segnale di enable è 1
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 01 0 1 1 11 1 0 1 11 1 1 0 0
Stato corrente Stato successivo
input
5
Circuito sequenziale con input: contatore con enable
6
Circuito sequenziale con output: segnale che ci dice quando il contatore ha raggiunto il conteggio massimo
7
Descrizione dei circuiti sequenziali: diagramma degli stati
Versione grafica della tavola degli stati
S0
S1 S2
S3
S4
S5S6S7
Le frecce indicano la transizione da uno stato (conteggio) al successivo.
Quando si verificano le transizioni?
8
• Fondamentali nei circuiti sequenziali– Le variabili di stato cambiano sui fronti del clock
Segnali di clock
9
Le transizioni si possono verificare solo in corrispondenza dei fronti di salita del segnale di clock
10
11
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)
12
Tutti i segnali di output prodotti da un circuito sequenziali sono sincroni col segnale di clock
13
14
15Può essere mandato in input al contatore
16
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
17
• Il circuito sequenziale più semplice• Due stati
– Una variabile di stato, diciamo Q
LOW HIGH
HIGH LOW
Elemento bistabile
18
– Assumiamo soglie CMOS, 5V rail– Il centro teorico della soglia è 2.5 V
Analisi analogica
19
• La metastabilità è presente in ogni circuito bistabile
• Due punti stabili, un punto metastabile
Stati stabili e metastabili
20
21
22
2.5 V 2.5 V
2.5 V 2.5 V
Analisi analogica
– Assumiamo soglie CMOS, 5V rail– Il centro teorico della soglia è 2.5 V
23
2.5 V
2.5 V 2.5 V
2.0 V
2.0 V 4.8 V
2.5 V2.51 V4.8 V 0.0 V
0.0 V 5.0 V
Analisi analogica
– Assumiamo soglie CMOS, 5V rail– Il centro teorico della soglia è 2.5 V
24
Un altro sguardo alla metastabilità
25
– 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.
Perchè tutta questa attenzione sulla metastabilità?
26
• Come controllarlo?– Input di controllo
• Latch S-R
Latch S-R: bistabile con input di controllo
27
QNQ
SR
Se S=0 e R=0, quali sono gli stati stabili di questo circuito?
(i) Assumiamo QN=0;0
0
0
QN=0 e Q=1 è stabile1
Latch Set-Reset: condizione hold
28
QNQ
SR
se S=0 e R=0, quali sono gli stati stabili di questo circuito?
(i) Assumiamo QN=0;0
0
1
(ii) Assumiamo QN=1;
QN=0 e Q=1 è stabile0
QN=1 e Q=0 è stabile
Latch Set-Reset: condizione hold
Condizione hold: vengono mantenuti i valori presenti precedentemente
29
QNQ
SR
Se lo stato è QN=1 e Q=0, e l’input S cambia a 1, cosa accade?
00
10
1
01 Il nuovo stato stabile è
QN=0 e Q=1
Cosa accade se S cambia a zero ora?
0
Lo stato non cambia!
Latch Set-Reset: condizione set
Condizione S(et): Q viene “forzato” a 1
30
QNQ
SR
Se lo stato è QN=0 e Q=1,E l’input R è cambiato a 1, cosa accade?
00
01
1
10 Il nuovo stato stabile è
QN=1 and Q=0
Cosa accade se R cambia a zero ora?
0
Lo stato non cambia!
Latch Set-Reset: condizione reset
Questa è la condizione R(eset): Q viene “forzato” a 0
31
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?
Latch Set-Reset
32
QNQ
SR
Assumiamo che QN=0, Q=1inizialmente e che R ed Sdivengano 1.
00
01
11
0 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.
Latch Set-Reset: input non permessi
33
Si può avere metastabilitàSe S e R sono deasseritisimultaneamente.
(provate in Quartus)
Latch Set-Reset: diagrammi temporali
34
• Ritardo di propagazione• Minima larghezza dell’impulso
Latch Set-Reset: parametri temporali
35
Latch Set-Reset: tavola della transizione degli stati
Una tavola delle transizioni degli stati è un modo alternativo di illustrare il funzionamento
Una tavola delle transizioni degli stati può essere espressa anche in forma di diagramma di stati.
S(t) R(t) Q(t) Q(t+)0 0 0 00 0 1 10 1 0 00 1 1 01 0 0 11 0 1 11 1 0 -1 1 1 -
+
36
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.
37
Condizione di hold
38
S=1, R=0
Condizione di set (se inizialmente il circuito è nello stato Q=0)
39
S=0, R=1Condizione di reset (se inizialmente il circuito è nello stato Q=1)
40
S=1, R=0Condizione di set (se inizialmente Q=1)
41
S=0, R=1Condizione di reset (se inizialmente Q=0)
42
Diagramma finale
43
S(t) R(t) Q(t) Q(t+)0 0 0 00 0 1 10 1 0 00 1 1 01 0 0 11 0 1 11 1 0 -1 1 1 -
+
Q=0, Q*=0Dalla tavola vediamo S’R’+S’R=S’
Q=1 Q*=1Dalla tavola vediamoS’R’+SR’=R’
Q=0, Q*=1Dalla tavola vediamo cheSR’
Q=1, Q*=0Dalla tavola vediamo cheS’R
Costruzione del diagramma degli stati a partire dalla tavola delle transizioni
44
S’
SR’
R’
S’R
45
Q=0, Q*=0Dalla tavola vediamo S’R’+S’R+SR=S’R’+R=S’+R
Q=1 Q*=1Dalla tavola vediamoS’R’+SR’=R’
Q=0, Q*=1Dalla tavola vediamo cheSR’
Q=1, Q*=0Dalla tavola vediamo cheS’R+SR=R
Se includiamo anche le condizioni illegali
S(t) R(t) Q(t) Q(t+)0 0 0 00 0 1 10 1 0 00 1 1 01 0 0 11 0 1 11 1 0 -1 1 1 -
+
00
46
S’+R
SR’
R’
R
47
Latch Set-Reset: simboli
48
Latch Set-Reset utilizzando gate NAND
49
Latch con gate NOR
50
51
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.
52
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).
53
Latch D trasparente
La funzione complemento assicura che R e S non possono essere mai 0 contemporaneamente
Dalla tavola della verità di un AND: - se uno degli input, diciamo a è 0, l’output è sempre 0.
- L’output segue D se C=1
C D
simbolo
54
Primo stadio
Latch D trasparente: funzionamento del circuito
Assumiamo C=1
55
56
57
58
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
59
Latch D: funzionamento
60
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.
61
Flip-flop D triggerato sul bordo master-slave
62
• Ritardo di propagazione (da CLK)• Setup time (D prima di CLK)• Hold time (D dopo CLK)
Flip-flop D: parametri di timing
63
Segnale che va bene perchè rispetta la condizione del tempo di setup
64
Nelle moderne tecnologie il tempo di hold è molto piccolo
65
res
Nome del componente: dff
Forza Q a 1
asincrono
66
67
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.
68
Due FF D in cascata
69
n FF D in cascata: registro a scorrimento o shift register
70
71
72
73
74
Problemi: quando comincia la trasmissione? A che istanti RX deve memorizzare i bit?
75
76
Sulla linea di sincronizzazione viene generato un segnale di clock con un numero di fronti pari al numero di bit da trasmettere
77
78
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
79
80
81
SER: ingresso del primo FF Q0: uscita del primo FF
82
Q0: ingresso del secondo FF Q1: uscita del secondo FF
83
Q1: ingresso del terzo FF Q2: uscita del terzo FF
84
Q2: ingresso del quarto FF Q3: uscita del quarto FF
85
Q3: ingresso del quinto FF Q4: uscita del quinto FF
86
Q4: ingresso del sesto FF Q5: uscita del sesto FF
87
Q5: ingresso del settimo FF Q6: uscita del settimo FF
88Q6: ingresso dell’ottavo FF Q7: uscita dell’ottavo FF
89
Dopo l’ultimo fronte di discesa i bit Q0, Q1, ... Non cambiano più e restano stabili
q[7]
q[6]
q[5]
q[4]
q[3]
q[2]
q[1]
q[0]
Q7Q6...Q0 contiene la parola a 8 bit q[7..0] trasmessa
90
Progetto 4: interfaccia tastiera
91
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
92
Le due linee KEY_CLK e KEY_DATA sono collegate direttamente a due pin della FPGA
KEY_CLK pin 113
KEY_DATA pin 112
93
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
94
Cosa viene trasmesso?
bit Start: sempre 0
8 bit di dati che identificano il tasto schiacciato
Bit di parità dispari che permette di rilevare errori di trasmissione
bit Sop: sempre 1
95Illustration from http://www.beyondlogic.org/keyboard/keybrd.htm
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, ...)
96
Alcuni scan code in realtà sono molto più lunghi di 8 bit!
Guardate ad esempio il tasto Break!
97
Lo scan code è generato quando premete un tasto
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
Se il tasto è tenuto premuto, lo scan code viene ripetuto continuamente
Esempio: - Space bar premuto, viene mandato 29 - Space bar rilasciato, viene mandato F0, 29
98
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
99
• Pagine web http://www.beyondlogic.org/keyboard/keybrd.htmhttp://govschl.ndsu.nodak.edu/~achapwes/PICmicro/PS2/ps2.htm
• Scan codeshttp://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/keyboard/scancodes2.html
referenze
100
Progetto
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 display come due cifre ciascuna a 4 bit (usando 2 dei 4 array)
Passo 1: Progettazione dell’interfaccia della tastiera
KEY_CLK
KEY_DATA
SCAN_CODE[7..0]
Parity_Error
Componente da disegnare su un foglio dedicato chiamato Keyboard_interface (che verrà poi posizionato nel foglio principale)
Keyboard_interface
101
Determinare le nuove equazioni logiche dei segmenti con le mappe di Karnaugh e ridisegnare seven-seg-decoder
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
102
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?)
103
Circuito per il calcolo della parità
Un circuito per calcolare la parità può essere costruito utilizzando il gate XOR
X Y = XY’ + X’YX Y C0 0 00 1 11 0 11 1 0
Se X=1 OR Y=1, maNon entrambi, allora C=1
A[1]A[0]
P=1 se il numero di bit=1 è dispari
rivelatore di parità per un numero a 2 bit
XY
C
104
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
105
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
FlipFlops
clk
106
107
108
Lo stato di una macchina a stati può cambiare solo poco dopo un fronte di salita del segnale di clock
109
110
Macchine a stati
Il circuito può avere degli input (stimoli)
FlipFlops
clk
Inputs
A ogni fronte di clock, lo stato successivo dipende dallo stato corrente e dagli input
Esempio: contatore a 2 bit con enable (slide successiva)
111
112
Lo stato successivo allo stato 4 dipende dal valore del segnale IN
IN=0 transizione 45 IN=1 transizione 40
113
114
115
116
Macchine a stati
Stato successivo determinato da un circuito combinatorio:
FlipFlops
clk
Next StateCombinatorial
Logic
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
InputsStato corrente
Stato successivo
117
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
Le macchine a stati più semplici: contatori
118
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
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 conteggio
119
Per un contatore da 0 a 7 sono necessari 3 FF D
Stato corrente
Stato successivo
Secondo passo determinare la logica che dato uno stato produce lo stato successivo
Primo passo costruiamo una tavola in cui per ogni stato mostriamo lo stato successivo
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
120
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.
equazione caratteristica Q*=D
lo stato di ouput successivo è uguale al valore dell’input corrente
Tavola caratteristica
Q D Q*
Poichè Q* è indipendente da Q, la tavola caratteristica può essere riscritta come
Q*D
121
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.
Come per la tavola caratteristica vediamo che D non dipende da Q e D=Q* (questo non è vero per altri FF)
Q Q* D
122
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
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
Poichè D=Q*, la tavola degli stati successivi ci dà le equazioni logiche per gli input D che determinano tali stati successivi
Q2 Q1 Q0 Q2* Q1* Q0* D2 D1 D0
0 0 0 0 0 1 0 0 1
0 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1
0 1 1 1 0 0 1 0 0
1 0 0 1 0 1 1 0 1
1 0 1 1 1 0 1 1 0
1 1 0 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0
123
124
125
126
127
128
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.
Sm
S1 S2
S3
S4
S5
Contatori sincroni: diagramma degli stati
129
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:
000001011010110111101100
Codice riflessorispetto a questa lina
Nella transizione da uno stato al successivo solo un bit cambia
130
Q2Q1Q0 Q2*Q1*Q0*0 0 0 0 0 1 0 0 1 0 1 10 1 1 0 1 00 1 0 1 1 01 1 0 1 1 11 1 1 1 0 11 0 1 1 0 01 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
131
FlipFlops
OutputCombinatorial
Logic
Next StateCombinatorial
Logic
Mealy Machine
Inputs Outputs
FlipFlops
OutputCombinatorial
Logic
Next StateCombinatorial
Logic
Moore Machine
Inputs Outputs
Macchine di Mealy e Moore
132
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.
133
Contatore a 2 bit con enable
S0S1
S2S3
EN’ EN EN’
EN’EN’
ENEN
EN
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.
Cout
Notazione tipica per indicare in quali stati un segnale di output è asserito
134
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
135
136
137
138
139
Progetto in classe: cronometro digitale
140
Per fare una frequenza approssimativamente di un Hz a partire da un clock a 50 MHz bisogna usare un contatore a 25 bit
141
142
143
144
145
146
147
148
149
Completare il diagramma temporale
150
Risposte date (focalizziamo l’attenzione su quando il primo contatore torna a zero e il secondo deve incrementare)
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
Lo stato cambierebbe qui con la seconda scelta di EN1
151
Domanda: chi genera il segnale EN1 per il contatore delle decine?
Risposta: il contatore delle unità
=EN1
152
Nella tavola della transizione degli stati aggiungiamo una colonna per l’output Cout
Cout deve essere 1 quando il conteggio è 9
153
Domanda: cosa succede se l’enable per il contatore delle unità viene deasserito quando il conteggio vale nove?
Completare il seguente diagramma temporale:
154
Soluzione:
Il diagramma evidenzia un problema:
Se il contatore delle unità si ferma a nove, tiene abilitato permanentemente il contatore delle decine
155
Domanda: come si risolve questo problema:
Risposta: possiamo mettere in AND Cout=q3q2’q1’q0 col segnale di enable in ingresso:
Counter_mod_9
ENCout=ENq3q2’q1’q0
156
Circuito cronometro free running
Quattro contatori Counter_mod_9: l’enable del primo può vetare i contatori successivi
157
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à
158
Descrizione a parole su cosa deve fare questo circuito:
159
160
Un possibile diagramma proposto dagli studenti
161
Un altro possibile diagramma proposto dagli studenti
162
Un’ulteriore discussione fa convergere su questo diagramma
163
Devono essere soddisfatte queste regole:
Dallo stato S0 escono due frecce (quale transizione si verifichi dipende dalla condizione logica dei segnali di input)
start
start’
164
start’
start
165
166
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
SW2res
dalla legge di De Morgan
167
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-RS-sincrono, può indurre un comportamento metastabile del FF
168
169
Non risolve completamente il problema della metastabilità: anche il FF sincronizzatore può andare in uno stato metastabile
START_SYNC
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.
Problema se questo tempo è maggiore di Tclk
Tuttavia l’eventuale stato metastabile viene campionato dal FF di Latch-RS-sincrono un ciclo di clock dopo
170
Un sincronizzatore più sicuro è formato da due FF in cascata (in pratica uno shift register)
171
Controller di un semaforoSemaforo: dispositivo con 3 luci che compie un ciclo
Stato “R”
Stato “RA”
Stato “G”
Stato “A”
Abbiamo 4 stati:
Possiamo costruire una macchina a stati che cicla attraverso questi stati come nel caso di un contatore
172
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?
173
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
Tuttavia, in un semaforo realistico la durata può essere diversa
174
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
175
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?
176
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
177
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
178
179
La macchina a stati controlla il segnale di enable del contatore (CNT_EN)
180
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
181
Anche asserendo CNT_EN solo nel primo ciclo di clock dello stato V non risolve
182
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
183
Diagramma finale: utilizziamo tre contatori distinti per i tempi di accensione delle tre luci
184
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”
185
Read-Ony Memory (ROM)
Memoria a “sola lettura”
186
187
• 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
Perchè le ROM?
188
Esempio
189
Esempio: moltiplicatore 4x4
190
PDP-11 boot ROM(64 words, 1024 diodes)
Struttura interna
191
?
Decodifica bidimensionale
192
Un esempio più grande: ROM 32Kx8
193
• 256K bytes, 1M byte, o più grandi• Utilizzano transistor MOS
Le ROM al giorno d’oggi
194
• 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
VERILOG HDL (Hardware Description Language)
195
Macchina a stati semaforo in verilog
Il blocco costruttivo fondamentale di verilog è il modulo
module semaforo();
Dichiarazione varibili…Funzionalità
endmodule;
Sintassi:
196
macchina a stati semaforo in verilog
module semaforo();
Dichiarazione varibili…Funzionalità
endmodule;
Sintassi:
Cout_V
Cout_A
Cout_R
clkres
module semaforo(res,clk,Cout_R,Cout_A,Cout_V, CNT_EN_V,CNT_EN_A,CNT_EN_R, LED_V,LED_A,LED_R);
Dichiarazione varibili…Funzionalità
endmodule;
Sintassi:
CNT_EN_V
CNT_EN_A
CNT_EN_R
LED_V
LED_A
LED_R
Il blocco costruttivo fondamentale di verilog è il modulo
197
Dichiarazione dei segnali: segnali di input
Cout_V
Cout_A
Cout_R
clkres
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;
Sintassi:
CNT_EN_V
CNT_EN_A
CNT_EN_R
LED_V
LED_A
LED_R
Il blocco costruttivo fondamentale di verilog è il modulo
198
Dichiarazione dei segnali: segnali di output
Cout_V
Cout_A
Cout_R
clkres
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à
endmodule;
CNT_EN_V
CNT_EN_A
CNT_EN_R
LED_V
LED_A
LED_R
199
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;
200
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 …endendmodule;
201
Statement alwaysalways @(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.
state=V è eseguito ogni volta che il segnale res compie una transizione negativa
always @(negedge res) state=V
state=V è eseguito ogni volta che il segnale res compie una transizione negativa
Altrimenti su ogni bordo positivo di clk ...
always @(posedge clk or negedge res) beginIf(reset == 0) state=Velse …
202
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; endcaseendendmodule;
203
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