td4 vhdl
-
Upload
kais-bahrouni -
Category
Documents
-
view
215 -
download
0
Transcript of td4 vhdl
-
7/29/2019 td4 vhdl
1/15
TD4 VHDL Logique Sequentielle 1
TD4 VHDL Logique Sequentielle
Dans ce chapitre nous prsentons toute la logique squentielle appele non rgulire.
Dfinition
On appelle logique squentielle non rgulire toute logique squentielle pour laquelle le calcul de l'tat futur en fonction de l'tat prsent ne peut pas
se faire avec des oprateurs simples (sur plusieurs bits).
Le lecteur de ce chapitre devra essayer d'apprhender les techniques communes tout ce qui a t prsent au
chapitre prcdent, surtout ce qui concerne le problme des initialisations.
Programmation des graphes d'volutions
Nous allons nous intresser dans cette section la programmation des graphes d'volutions en VHDL. C'est un sujet
que nous avons abord en TD 1 mais qu'il est important d'approfondir maintenant.
Pour illustrer cette partie, nous allons prendre un exemple particulier : le rveil.
Le diagramme d'volution comme moyen de spcifier le calcul de l'tat futur en fonction de l'tat prsent
''
Principe de fonctionnement du rveil : partir de "Off", "key"=1 arme le rveil. Si "trip" passe 1 (c'est dire que
l'heure courante devient gale l'heure de rveil) le rveil passe en "ringing" et sonne. "trip" ne reste pas trs
longtemps un (1 seconde). Son retour 0 ne suffit pas errter la sonnerie. Seul le passage de "key" 0 peut
l'arrter.
Les graphes d'volutions et le style case when
On rappelle encore une fois que le style case when permet de ne pas chercher les quations de rcurrences. Mais
comme nos diagrammes d'volutions se sont compliqus (par l'ajout d'tiquettes sur les transitions), il nous faudra
ajouter des "if then". Cela est tellement intuitif que nous passons directement aux exemples. Prsentons
Programmation sans initialisation
Le principe consiste dclarer d'abord un type numr avec une dfinition symbolique de chacun des tats (ici
Armed, Off, Ringing) :
TYPE typetat IS (Armed, Off, Ringing); -- dans architecture
SIGNAL etat : typetat;
http://fr.wikibooks.org/w/index.php?title=Fichier%3AReveilStateD.pnghttp://fr.wikibooks.org/w/index.php?title=TD1_VHDLhttp://fr.wikipedia.org/wiki/VHDLhttp://fr.wikipedia.org/wiki/Logique_s%C3%A9quentielle -
7/29/2019 td4 vhdl
2/15
TD4 VHDL Logique Sequentielle 2
Ensuite dans un case when on dtaillera toutes les transitions possibles comme montr ci-dessous dans le cas o
l'on ne s'intresse pas une initialisation :
-- sans initialisation
BEGIN
PROCESS (clock) BEGIN
IF clock'EVENT AND clock='1' THEN
CASE etat IS
WHEN Off => IF key ='1' THEN etat IF key ='1' THEN etat
-
7/29/2019 td4 vhdl
3/15
TD4 VHDL Logique Sequentielle 3
Ring
-
7/29/2019 td4 vhdl
4/15
TD4 VHDL Logique Sequentielle 4
Notez en ligne 5 l'utilisation d'un "elsif" en lieu et place d'un "else if" dont l'intrt est d'conomiser un "end if".
Le codage des tats
La programmation des tats ncessite une dclaration symbolique comme on peut voir ci-dessous :
--********* VHDL
TYPE typetat IS (Armed, Off, Ringing); -- dans architecture
SIGNAL etat : typetat;
Quand la synthse sera demande plusieurs solutions peuvent se prsenter suivant le codage des tats. Une telle
dclaration dbouchera sur un codage Armed=00, Off=01 et Ringing=10.
On peut modifier ce codage l'aide de deux attributs diffrents : enum_encoding et state_encoding. Enum_encoding
est normalis par le standard IEEE 1076.6.
--********* VHDL
type state is (s0,s1,s2,s3);
attribute enum_encoding of state:type is "00 01 10 11";
La directive state_encoding spcifie la nature du code interne pour les valeurs d'un type numr.
--********* VHDL
attribute state_encoding of type-name:type is value;
Les valeurs lgales de la directive state_encoding sont sequential, one_hot_zero, one_hot_one, and gray.
sequential : on code en binaire au fur et mesure de l'numration avec autant de bits que ncessaire.
one_hot_zero : on code la premire valeur par zro, puis le reste en utilisant chaque fois un seul un : N tats
ncessiteront donc N-1 bits.
one_hot_one : idem one_hot_zero sauf que l'on n'utilise pas le code zro. N tats ncessiteront donc N bits. Gray : les tats suivent un code de GRAY.
Exemples :
avec codage one hot zeo
--********* VHDL
type state is (s0,s1,s2,s3);
attribute state_encoding of state:type is one_hot_zero;
avec codage de type Gray
--********* VHDL
type s is (s0,s1,s2,s3);
attribute state_encoding of s:type is gray;
http://fr.wikipedia.org/wiki/Code_de_Gray -
7/29/2019 td4 vhdl
5/15
TD4 VHDL Logique Sequentielle 5
Exercice 1
Concevez une machine d'tat capable de dtecter la prsence de la sequence 1111010 .
1) Dessiner le graphe d'volution.
2) Quel code des tats sur combien de bits proposez vous
3) Raliser le programme VHDL correspondant.
Utilisation du tableau des tats pour obtenir les quations de rcurrences
Une fois le choix du codage des tats ralis, il n'est pas difficile de raliser le tableau tat prsent/tat futur pour en
dduire les quations de rcurrences.
Pour l'exemple du rveil, dj prsent, et rappel ci-dessus, on choisit le code :
"OFF" -> 00
"Armed" -> 01
"ringing" -> 10
Il n'est pas trs difficile d'en dduire la table de transition :
Table de transitions du rveil
Entres Sortie
Etat Prsent Conditions Etat futur
q1 q0 key trip q1+ q0+
0 0 0 X 0 0
0 0 1 X 0 1
0 1 1 0 0 1
0 1 0 X 0 0
0 1 X 1 1 0
1 0 0 X 1 0
1 0 1 X 0 0
1 1 X X 0 0
''
Remarque : Cette table est ambigu : cette ambiguit tait dj prsente dans le graphe d'volution qui ne dit pas ce
qui se passe si on est dans l'tat "armed" et que key=0 avec aussi trip=1 ! Il faut choisir une priorit pour la coder !
Table de transitions du rveil avec priorit
http://fr.wikibooks.org/w/index.php?title=Fichier%3AReveilStateD.png -
7/29/2019 td4 vhdl
6/15
TD4 VHDL Logique Sequentielle 6
Entres Sortie
Etat Prsent Conditions Etat futur
q1 q0 key trip q1+ q0+
0 0 0 X 0 0
0 0 1 X 0 1
0 1 1 0 0 1
0 1 0 X 0 0
0 1 1 1 1 0
1 0 0 X 1 0
1 0 1 X 0 0
1 1 X X 0 0
Les deux quations de rcurrences s'en dduisent immdiatement.
Exercice 2
Active-FSM est un outil ancien prsent avec le compilateur warp. Il permet de faire un dessin d'un graphe
d'volution et de gnrer la programme VHDL entier correspondant.
Un tudiant a utilis active-FSM et gnr un
programme VHDL correspondant au dessin
ci-contre. Puis il a ralis un projet pour
compiler et obtenu le fichier de rapport
ci-dessous.
1) Remplir le tableau tat prsent tat futurci-contre en choisissant comme tat futur de
l'tat 00.
2) Trouver les quations de rcurrences
correspondantes.
3) Comparer au fichier rapport. Pourquoi n'y
a-t-il pas d'quation combinatoire de sortie ? O
est la sortie ?
Pour remplir le tableau, vous utiliserez
naturellement les quations de rcurrence du
fichier rapport. Dans ce fichier, la notation
truc.D signifie et truc.Q signifie truc
(tat prsent). On notera sregSBV_0 tout simplement s0.
Table de transitions
http://fr.wikibooks.org/w/index.php?title=Fichier%3AVHDLFig16.pnghttp://fr.wikipedia.org/wiki/VHDL -
7/29/2019 td4 vhdl
7/15
TD4 VHDL Logique Sequentielle 7
Entres Sortie
Etat Prsent Conditions Etat futur
s s0 e0 e1 Init s+ s0+
0 0 0 X 0
0 0 1 X 0
0 1 0 X 0
0 1 1 X 0
1 0 0 X 0
1 0 1 X 0
1 1 1 X 0
Fichier rapport
| | | | | | |
_________________
-| |-
-| |-
-| |-
-| CYPRESS |-
-| |-
-| |- Warp VHDL Synthesis Compiler:
-| |- Copyright (C) 1991, 1992, 1993,
|_______________| Cypress Semiconductor
| | | | | | |
....
State variable 'sreg0' is represented by a Bit_vector(0 to 1).
State encoding (sequential) for 'sreg0' is:
etat0 := b"00";
etat1 := b"10";
etat2 := b"01";
-----------------------------------------------------------------------
PLD Compiler Software: PLA2JED.EXE 21/SEP/1998 [v4.02 ] 5.1 IR 14
DESIGN EQUATIONS (19:08:48)
sreg0SBV_0.D = /e0 * /init * sreg0SBV_0.Q
+ e1 * /init * s.Q
s.D = e0 * /init * /s.Q * /sreg0SBV_0.Q
+ /e1 * /init * s.Q
........
C20V8C
__________________________________________
clock =| 1| |24|* not used
init =| 2| |23|* not used
e1 =| 3| |22|* not used
e0 =| 4| |21|* not used
not used *| 5| |20|* not used
not used *| 6| |19|* not used
-
7/29/2019 td4 vhdl
8/15
TD4 VHDL Logique Sequentielle 8
not used *| 7| |18|* not used
not used *| 8| |17|* not used
not used *| 9| |16|= (sreg0SBV_0)
not used *|10| |15|= s
not used *|11| |14|* not used
not used *|12| |13|* Reserved
__________________________________________
Un ensemble d'exemples utilisant des graphes d'volutions est prsent en TD5 :VHDL et CAO.
Programmation de graphes d'tats
Nous avons dj eu l'occasion d'introduire ce problme en logique, dans le cours Logique squentielle.
Comparaison graphe d'tats ( gauche) et diagramme d'volution ( droite)
Une transition barre est dite rceptive (comme avec les GRAFCETs) et, comme l'indique l'quivalence du dessin
ci-dessus, elle sous entend que si la rceptivit est fausse on reste dans le mme tat.''
Remarque : Il est prsent dans le cours WIKIVERSITE logique squentielle, particulirement dans le chapitre
Description par graphe d'tats une mthode qui permet de passer d'un graphe d'tat des quations de rcurrences.
Utilisation du style "case when"
Il est trs facile de transformer le graphe d'volution du rveil en graphe d'tats. En comparant avec le programme
donn en VHDL pour ce mme rveil il n'est pas difficile de tirer quelques rgles de codage.
Pour ne pas donner deux fois le mme programme, nous donnons le programme du rveil lgrement modifi pour
remplacer les "bit" par des "std_logic".
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY Alarm IS
http://fr.wikibooks.org/w/index.php?title=Fichier%3AReveilGraphe.pnghttp://fr.wikiversity.org/wiki/Logique_s%C3%A9quentielle/Description_par_graphe_d%27%C3%A9tatshttp://fr.wikiversity.org/wiki/Logique_s%C3%A9quentiellehttp://fr.wikipedia.org/wiki/Grafcethttp://fr.wikibooks.org/w/index.php?title=Fichier%3ATd8fig3.pnghttp://fr.wikiversity.org/wiki/Logique_s%C3%A9quentiellehttp://fr.wikibooks.org/w/index.php?title=TD5_VHDL_et_CAO -
7/29/2019 td4 vhdl
9/15
TD4 VHDL Logique Sequentielle 9
PORT(
clock,Key,Trip :IN std_logic;
Ring :OUT std_logic
);
END Alarm;
ARCHITECTURE ar OF Alarm IS
TYPE typetat IS (Armed, Off, Ringing);
SIGNAL etat : typetat;
BEGIN
PROCESS (clock,etat) BEGIN -- partie squentielle
IF Clock ='1' AND Clock'EVENT THEN
CASE etat IS
WHEN Off => IF key ='1' THEN etat
-
7/29/2019 td4 vhdl
10/15
TD4 VHDL Logique Sequentielle 10
-- avant horloge donc asynchrone
q
-
7/29/2019 td4 vhdl
11/15
TD4 VHDL Logique Sequentielle 11
Programmation des GRAFCETs en VHDL
Vous pouvez lire le WIKI GRAFCET ou les livres GRAFCET (niveau 8) et Automatisme : norme 1131-3 et
GRAFCET (niveau 13) de la Wikiversit avant d'aborder ce chapitre.
Les GRAFCET se dcrivent en VHDL relativement facilement en utilisant la mme technique que la section
prcdente sur les graphes d'tats. On rappelle que la diffrence entre les deux est simplement qu'en aucun cas il ne
peut y avoir deux jetons dans un graphe d'volution alors que cela est parfaitement autoris pour un GRAFCET.
C'est pour cela que l'on parle d'tape dans un GRAFCET et d'tat dans le graphe d'volution. Lorsque plusieurs
jetons se trouvent dans un GRAFCET, on parle de paralllisme. En voici un exemple simple :
Dans ce GRAFCET, quitter l'tape 10 active les deux tapes 21 et 30.
Obtenir les quations de rcurrences
La mthode simple consiste crire pour chacune des tapes les conditions d'activations (notes ) et les
conditions de dsactivations (notes ).
Dfinition
La condition d'activation s'obtient en se posant la question : comment activer l'tape i si elle n'est pas active ?
La condition de dsactivation s'obtient quant elle en se posant la question : quelles sont les conditions ncessaires pour que le jeton quitte l'tape is'il est dedans ?
Avec ces conditions on va pouvoir former les quations de rcurrences :
Pour la ou les tapes initiales :
Pour les tapes non initiales :
L'indice i parcourant toutes les tapes, il y a autant d'quations de rcurrences que d'tapes. En terme matriel, cela
signifie que l'on utilisera une bascule D par tape. Bien sr, un codage des tats permet de faire des conomies de ce
ct l mais rappelez-vous qu' ce point on a que des tapes et pas encore des tats.
Nous allons partir d'un GRAFCET assez gnral pour raliser un exemple complet.
Notre grafcet de dpart
Prenez un peu de temps pour relire
l'quation de AC1 et celle de D3 qui
prennent en compte le paralllisme.
C'est le seul type de situation qui
diffre du graphe d'tat.
Voici le programme VHDL
correspondant :
http://fr.wikipedia.org/wiki/VHDLhttp://fr.wikiversity.org/wiki/Logique_s%C3%A9quentielle/Description_par_graphe_d%27%C3%A9tatshttp://fr.wikibooks.org/w/index.php?title=Fichier%3AGRAFexmple1.pnghttp://fr.wikibooks.org/w/index.php?title=Fichier:Graf7_02.pnghttp://fr.wikipedia.org/wiki/VHDLhttp://fr.wikiversity.org/wiki/Automatisme_:_norme_1131-3_et_GRAFCEThttp://fr.wikiversity.org/wiki/Automatisme_:_norme_1131-3_et_GRAFCEThttp://fr.wikiversity.org/wiki/Grafcethttp://fr.wikipedia.org/wiki/Grafcet -
7/29/2019 td4 vhdl
12/15
TD4 VHDL Logique Sequentielle 12
ENTITY Graf IS PORT (
-- horloge et entre init
clk, Init: IN BIT;
-- entres
e1,e2,e3,e4 : IN BIT;
-- tapes
et1,et2,et3,et4,et5: INOUT BIT);
END Graf;
ARCHITECTURE aGraf OF Graf IS
BEGIN
PROCESS (clk) BEGIN
IF (clk'EVENT AND clk='1') THEN
-- x1+ = x3.x5.e4+x1./e1+Init
et1
-
7/29/2019 td4 vhdl
13/15
TD4 VHDL Logique Sequentielle 13
Dfinition
On dit que l'tat {2,4} correspond au marquage de l'tape 2 et de l'tape 4. Tout marquage doit tre accessible pour tre compt comme un tat. Par
exemple le marquage symbolis par {1,2,4} n'est pas accessible, c'est dire qu'il n'existe aucune squence sur les entres qui amne le GRAFCET
de son tat initial vers ce marquage.
Dans cet exemple vous obtenez un graphe d'tats qui comporte 5 tats pour un GRAFCET qui comporte 5 tapes. En
principe, le graphe d'tats comporte plus d'tats que le GRAFCET comporte d'tapes.
Pour coder les tats vous devez utiliser la relation < N (tats) qui vous donne le nombre de bits M
ncessaire au code.
Par exemple, nos 5 tats ncessitent trois bits de code.
Programmation des GRAFCETs avec "case when"
La programmation de GRAFCETs avec le style "case when" de VHDL ncessite de coder les tats. Cela signifie
donc qu'il faut transformer le GRAFCET en graphe d'tats. En effet, avec le style "case when", vous crivez derrire
le when une reprsentation (symbolique ou pas) d'un tat, ainsi, le graphe d'tats est invitable.
Si vous avez votre graphe d'tat, reportez vous la section correspondante dans ce chapitre pour apprendre coder
avec le style correspondant.
Codage des tats et quations de rcurrences
Il est possible de partir d'un GRAFCET, de le transformer en graphe d'tat comme dj prsent. Une fois que l'on
connait le nombre d'tats, on peut choisir un code des tats et transformer ensuite le tout en quations de rcurrences.
Voici un exemple :
Ce qui est nouveau est le tableau compltement droite d'assignation des tats des codes. Ce tableau permet de
remplir ensuite le tableau tat prsent tat futur avec ces codes, pour en dduire finalement les quations de
rcurrences. Il est facile de tirer de cette figure :
http://fr.wikibooks.org/w/index.php?title=Fichier:GRAFexemple3.pnghttp://fr.wikipedia.org/wiki/VHDLhttp://fr.wikipedia.org/wiki/Grafcet -
7/29/2019 td4 vhdl
14/15
TD4 VHDL Logique Sequentielle 14
''
Remarque : la complexit des quations que l'on obtient est assez dpendante du code choisi pour les tats. Il existe
des mthodes pour minimiser le nombre d'tats (Paull Unger) et choisir le code optimal (Huffman) mais on ne lesprsente pas ici. Une mthode heuristique pour coder les tats, dj prsente dans la correction de l'exercice 1,
consiste mettre le plus de zros possible sur les tats qui ont le plus de flches de transitions qui y aboutissent. Ici,
l'tat {3,5} a trois transitions qui y aboutissent : il aurait donc t trs judicieux de le coder "000" au lieu de "100" !!!
Exercice 3
Si l'on intervertit dans l'exemple donn le code de {3,5} avec celui de {1}, quelles sont les quations de rcurrences
qui se simplifient ?
Et pour finir, le problme des actionsLes actions des GRAFCETs ont t dlaisses jusqu' prsent. Si vous savez les grer avec les graphes d'tats, il n'y
a aucune diffrence pour le GRAFCET. Il s'agit d'quations combinatoires qui sont gnralement trs simples et se
compliquent un peu si l'on code les tats de manire compacte.
http://fr.wikipedia.org/wiki/Grafcethttp://fr.wikipedia.org/wiki/Codage_de_Huffman -
7/29/2019 td4 vhdl
15/15
Sources et contributeurs de larticle 15
Sources et contributeurs de larticleTD4 VHDL Logique Sequentielle Source: http://fr.wikibooks.org/w/index.php?oldid=342253 Contributeurs: JackPotte, SergeMoutou, 15 modifications anonymes
Source des images, licences et contributeursFile:ReveilStateD.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:ReveilStateD.png Licence: GNU Free Documentation License Contributeurs: SergeMoutou
Image:VHDLFig16.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:VHDLFig16.png Licence: inconnu Contributeurs: SergeMoutou
Image:Td8fig3.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:Td8fig3.png Licence: GNU Free Documentation License Contributeurs: Original uploader was SergeMoutou at
fr.wikibooks
File:ReveilGraphe.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:ReveilGraphe.png Licence: GNU Free Documentation License Contributeurs: SergeMoutou
Fichier:Graf7 02.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:Graf7_02.png Licence: GNU Free Documentation License Contributeurs: Original uploader was Ssire at
fr.wikipedia
Fichier:GRAFexmple1.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:GRAFexmple1.png Licence: GNU Free Documentation License Contributeurs: SergeMoutou
File:GRAFexemple2.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:GRAFexemple2.png Licence: GNU Free Documentation License Contributeurs: SergeMoutou
File:GRAFexemple3.png Source: http://fr.wikibooks.org/w/index.php?title=Fichier:GRAFexemple3.png Licence: GNU Free Documentation License Contributeurs: SergeMoutou
LicenceCreative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/