Académique Documents
Professionnel Documents
Culture Documents
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)
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.
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.
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.
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.
Les sorties sont indiquées sur les transitions avec les conditions d'entrée.
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.
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.
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.
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 :
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) 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