Circuito sequenziali

Post on 04-Jan-2016

50 views 5 download

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

Transcript of Circuito sequenziali

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