Vous êtes sur la page 1sur 40

Détecteur de Séquences &

serrure de porte codée


Projets FSM
(Moore et Melay)

1
Clock divider

2
 La simulation de la figure 1.11 montre que les sorties q(i) d'un compteur sont des ondes
carrées où la sortie q(0) a une fréquence moitié de la fréquence d'horloge, la sortie q(1) a une
fréquence moitié de q(0) , etc.

 Ainsi, un compteur peut être utilisé pour diviser la fréquence f d'une horloge, où la fréquence
de la sortie q(i) est fi = f/ 2i+1.

 Les fréquences et périodes des sorties d'un compteur 24 bits piloté par un 50 MHz sont
indiquées dans le tableau 1.2.

 Notez dans le tableau 1.2 que la sortie q(0) a une fréquence de 25 MHz, la sortie q(17) a une
fréquence de 190,73 Hz et la sortie q(23) a une fréquence de 2,98 Hz.

 Le programme VHDL présenté dans le Listing 1.7 est un compteur 24 bits qui a trois sorties,
une horloge de 25 MHz (clk25), une horloge de 190 Hz (clk190) et une horloge de 3 Hz
(clk3).

 Vous pouvez modifier ce composant clkdiv pour produire n'importe quelle fréquence de sortie
indiquée dans le tableau 1.2.

 Nous utiliserons un tel composant diviseur d'horloge dans plusieurs de nos conceptions de
3
haut niveau.
q(i) Frequency(Hz) Period(ms)

i 100 000 000.00 0.00001

0 50 000 000.00 0.00002

1 25 000 000.00 0.00004

2 12 500 000.00 0.00008


3 6 250 000 0, 00016
4 3 125 000 0, 00032
5 1 562 500 0, 00064

6 781 250 0, 00128

7 390 625 0, 00256

8 195312.50 0.00512

9 97656.25 0.01024

10 48828.13 0.02048

11 24414.06 0.04096

12 12207.03 0.08192

13 6103.52 0.16384

14 3051.76 0.32768
15 1525.88 0.65536
16 762.94 1.31072
17 381.47 2.62144

18 190.73 5.24288

19 95.37 10.48576

20 47.68 20.97152
21 23.84 41.94304

22 11.92 83.88608
23 5.96 167.77216
24 2.98 335.54432
25 1.49 671.140939
26 0,745 1342.281879
27 0,3725 2,684563758
4
Nexys 4 ddr

5
6
Clock Pulse

7
 Un circuit très utile qui produit une seule impulsion d'horloge propre est illustré à la figure
1.9.

 La seule différence avec le circuit debounce de la figure 1.7 est que le complément du dealy3
est la dernière entrée de la porte ET.

 La liste 1.5 est un programme VHDL pour ce circuit d'impulsion d'horloge et sa simulation est
illustrée à la figure 1.10.

8
9
10
A Moore Machine Sequence Detector

11
 Dans cet exemple, nous montrerons comment concevoir une machine de Moore pour détecter
la séquence 1101.

 Dans l'exemple suivant, nous utiliserons une machine de Mealy pour détecter la même
séquence.

 Le diagramme d'état pour la détection de la séquence 1101 à l'aide d'une machine de Moore
est illustré à la figure 1.38.

12
 La sortie, z, de cette machine de Moore sera de 1 lorsque la séquence 1101 est détectée.

 L'état s0 est l'état initial dans lequel aucun 1 n'a été reçu.

 Comme il s'agit d'une machine de Moore dans laquelle la sortie ne dépend que de l'état actuel,
nous afficherons la sortie dans le cercle du diagramme d'état sous le nom de l'état, comme le
montre la figure 1.38.

 Si nous sommes dans l'état s0 et que la sortie est 0, nous resterons dans l'état s0 comme
l'indique l'arc de la figure 1.38 où nous avons écrit l'entrée à côté de l'arc.

 Si l'entrée est 1, nous passons à l'état s1, comme le montre la figure 1.38, qui indique qu'un
seul 1 a été reçu.

 Si nous sommes dans l'état s1 et que l'entrée est 0, nous devons revenir à l'état s0.

 En revanche, si nous sommes dans l'état s1 et que l'entrée est 1, nous passons à l'état s2, ce qui
indique que deux 1 consécutifs ont été reçus.

 Si nous sommes dans l'état s2 et que l'entrée est 1, nous resterons dans l'état s2.

 En revanche, si nous sommes dans l'état s2 et que l'entrée est 0, nous passons à l'état s3, qui
indique que la séquence 110 a été reçue. 13
 À ce stade, si nous recevons une entrée 0, nous devons revenir à l'état s0.

 Enfin, si nous sommes dans l'état s3 et que l'entrée est 1, nous passons à l'état s4, comme le
montre la figure 1.38, qui indique que la séquence 1101 a été reçue.

 Nous fixons donc la sortie à 1 dans l'état s4.

 Notez que si nous sommes dans l'état s4 et que l'entrée est 0, nous devons revenir à l'état s0.

 En revanche, si nous sommes dans l'état s4 et que l'entrée est 1, nous revenons à l'état s2, ce
qui indique que deux 1 consécutifs ont été reçus.

 Il s'agit de la transition qui permet d'utiliser des bits qui se chevauchent.

 Ce dernier 1 de la séquence détectée, 1101, peut être utilisé comme premier 1 de la séquence
suivante recherchée.

 Si nous ne voulions pas permettre la réutilisation du dernier bit pour l'éventuel premier bit de
la séquence suivante, la machine à états serait simplement modifiée pour passer de s4 à s1 si
un 1 était reçu comme entrée suivante.

 En d'autres termes, la machine à états aura reçu un seul 1 pour la séquence suivante au lieu de
14
deux.
 Le programme VHDL présenté dans le listing 1.23 implémente ce diagramme d'état en
suivant le modèle de base de la machine de Moore présenté dans la figure 1.37.

 Notez l'utilisation d'un type énuméré appelé state_type dans le listing 1.23 pour définir cinq
états par leurs noms s0, s1, s2, s3 et s4.

 Le premier processus met en œuvre le registre d'état.

 Le deuxième processus implémente le bloc combinatoire (bloc d'état suivant) et le troisième


processus implémente le bloc combinatoire (bloc de sortie).

 La structure VHDL de base composée de trois processus peut être utilisée pour implémenter
n'importe quelle machine de Moore.

 Le bloc séquentiel unique définit le registre d'état et peut normalement être identique au
premier processus.

15
16
17
Test du détecteur de séquences mclk

btn(3) clk

clr
clkdiv
clk190

clk190
btn(0)

btn01
cclk btn(1)
clock OR

clr

inp
pulse gate
outp
clkp
clk

clr

din
seqdeta
dout

ld(0)
18
19
A Mealy Machine Sequence Detector

20
 Le diagramme d'états de la machine de Moore de la figure 1.38 comporte cinq états.

 La sortie z de cette machine de Moore est égale à 1 lorsque l'état est s4.

 Une autre façon d'implémenter ce détecteur de séquence est d'utiliser une machine de Mealy
dont la sortie, z, est égale à 1 lorsque l'état est s3 et din est égal à 1.

 Le diagramme d'état de cette machine de Mealy utilisée pour implémenter le détecteur de


séquence est illustré à la figure 1.40.

 Les sorties sont indiquées sur les transitions avec les conditions d'entrée.

 Les transitions à partir de l'état actuel sont étiquetées avec "entrée_présente/sortie_présente".

21
 Il est important de comprendre que la valeur de sortie affichée est la sortie combinatoire qui
dépend de l'entrée présente et de l'état présent, comme le montre la figure 1.36.

 Par exemple, lorsque l'état est s3 (ce qui signifie qu'un 110 a été reçu) et que l'entrée devient
1, la sortie z devient 1.

 Au prochain front montant de l'horloge, l'état passera à s1 et la sortie z passera à 0.

 Cela signifie que la sortie z ne sera jamais verrouillée à 1!

22
 Si nous voulons que z soit une sortie enregistrée (afin qu'elle conserve sa valeur lorsque nous
passons à l'état s1), nous pouvons ajouter une bascule à la sortie z(t) dans la figure 1.36.

 Autrement dit, la sortie du composant combinatoire C2 de la figure 1.36 sera connectée à


l'entrée D d'une bascule D.

 Ainsi, si sur la figure 1.40 l'état est s3 et que l'entrée devient 1, la sortie z sera 1, et au
prochain front montant de l'horloge, cette valeur de sortie de 1 sera verrouillée dans la bascule
de sortie, et l'état deviendra s1.

 Une manière équivalente d’implémenter cela en VHDL est de faire de la composante


combinatoire de sortie C2 de la figure 1.36 une composante séquentielle Seq2 comme indiqué
dans le listing 1.24.

 Notez que la façon de procéder consiste à utiliser les phrases clk'event et clk='1' dans une
instruction if au sein du processus de telle manière que la sortie dout reçoive une valeur
uniquement sur le front montant de l'horloge. 23
 Dans le listing 1.24, la sortie, dout, n'est plus combinatoire mais est une sortie enregistrée car
elle apparaît sur le côté gauche d'une équation dans une instruction clk'event et clk='1'.

 Ainsi, sur le front montant de l'horloge, la sortie dout sera verrouillée à 1 si l'état actuel est s3
et din est égal à 1.

 Notez également dans le Listing 1.24 que seuls quatre états sont nécessaires pour implémenter
la machine Mealy comme le montre la figure 1.40.

 Une simulation du programme VHDL du Listing 1.24 est présentée dans la figure 1.41.

24
25
26
Door Lock Code

27
 Dans cet exemple, nous allons développer le détecteur de séquence de l'exemple précédant
pour simuler une serrure de porte comportant trois boutons sur lesquels vous appuyez sur un
code à 4 chiffres.

 Nous utiliserons btn(2:0) sur la carte Nexys 2 pour les boutons de verrouillage de la porte.

 Par exemple, vous pouvez appuyer sur les boutons 2-0-1-2 pour ouvrir la porte.

 Nous rendrons le code programmable à l'aide des interrupteurs selon le schéma suivant :

 Le premier bouton correct sélectionné dans btn(2:0) sera le réglage du commutateur


sw(7:6) où les réglages valides sont "00", "01", "10" correspondant à btn(0), btn(1), et
btn(2) respectivement.

 Le deuxième bouton correct sélectionné à partir de btn(2:0) sera le réglage du


commutateur sw(5:4).

 Le troisième bouton correct sélectionné à partir de btn(2:0) sera le réglage du


commutateur sw(3:2).

 Le quatrième bouton correct sélectionné à partir de btn(2:0) sera le réglage du


commutateur sw(1:0). 28
 Vous devez appuyer sur quatre mclk
boutons avant de savoir si vous
avez réussi. btn(3) clk

clr
clkdiv
 Si vous avez introduit le bon code, la LED clk190
ld(1) s'allume.
clk190
 Si vous introduisez un code incorrect, la btn(0)
LED ld(0) s'allume. cclk btn(1)
clock OR

clr
btn(2)

inp
pulse gate
 La conception de haut niveau est illustrée
fans la figure suivante. outp
clkp
clk

clr
sw(7:0) doorlock bn(1:0)
pass fail

ld(1) ld(0)
29
 Notez que vous générerez une impulsion d'horloge si vous appuyez sur l'un des trois boutons
de commande btn(0), btn(1) ou btn(2).

 L'entrée 2 bits bn(1:0) du composant de verrouillage de porte sera 00 si vous appuyez sur
btn(0), 01 si vous appuyez sur btn(1), et 10 si vous appuyez sur btn(2).

 Ces valeurs peuvent être comparées au réglage de l'interrupteur pour produire le diagramme
d'état du verrouillage de la porte illustré à la figure suivante.

er er er er
1 2 3 fail

bn = sw(7:6) bn = sw(5:4) bn = sw(3:2) bn = sw(1:0) S4


S0 S1 S2 S3
pass
bn = sw(7:6)

bn = sw(7:6) 30
 Notez qu'à chaque fois que vous appuyez sur un bouton incorrect, vous devez continuer à
appuyer sur un total de quatre boutons avant d'entrer dans l'état d'échec er4.

 Le programme VHDL pour ce composant de verrouillage de porte est donné dans le Listing
1.25 et sa simulation est montrée dans la figure 1.44.

31
32
33
34
 Le programme VHDL pour la conception de haut niveau de la figure 1.42 est donné
dans le Listing 1.26.

35
36
37
example 20 :
Door Lock Code - Package

38
 Nous pouvons reprendre les trois déclarations de composants du listing 1.26 et les placer dans
un package VHDL appelé doorlock_components, comme le montre le listing 1.27.

 Ce fichier VHDL appelé doorlock_components.vhd doit être stocké dans votre répertoire de
travail et ajouté à votre projet.

39
 Votre nouvelle conception de haut niveau doit alors inclure la clause use use
work.doorlock_components.all ; au début de votre programme, comme indiqué dans le listing
1.28.
 Cela indique à votre programme de trouver le package doorlock_components dans votre
répertoire de travail et d'utiliser toutes les déclarations de composants de ce package.

40

Vous aimerez peut-être aussi