td4 VHDL
td4 VHDL
td4 VHDL
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.
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.
TD4 VHDL Logique Sequentielle 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 <= Armed; ELSE etat <= Off; END IF; .... END CASE; END IF; END PROCESS; .... L'ide gnrale est donc d'utiliser un case sur les tats avec des if pour grer l'ensemble des transitions. Voici le programme complet du rveil : ENTITY Alarm IS PORT( clock,Key,Trip :IN BIT; Ring :OUT BIT ); 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 <= Armed; ELSE etat <= Off; END IF; WHEN Armed => IF Key = '0' THEN etat <= Off; ELSIF Trip ='1' THEN etat <= Ringing; ELSE etat <= Armed; END IF; WHEN Ringing => IF Key ='0' THEN etat <= Off; ELSE etat <= Ringing; END IF; END CASE; END IF; IF etat=Ringing THEN -- partie combinatoire
TD4 VHDL Logique Sequentielle Ring<='1'; ELSE Ring <='0'; ENDIF END PROCESS; END ar; Intressez-vous la seule partie squentielle pour le moment.
TD4 VHDL Logique Sequentielle 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".
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.
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
key trip 0X 1X 10 0X X1 0X 1X XX
q1+ q0+ 00 01 01 00 10 10 00 00
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
Entres
Sortie
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 futur ci-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
Entres
Sortie
Etat Prsent Conditions Etat futur s s0 00 00 01 01 10 10 11 e0 e1 Init 0X0 1X0 0X0 1X0 0X0 1X0 1X0 s+ s0+
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
TD4 VHDL Logique Sequentielle not not not not not not used used used used used used *| 7| |18|* *| 8| |17|* *| 9| |16|= *|10| |15|= *|11| |14|* *|12| |13|* __________________________________________ not used not used (sreg0SBV_0) s not used Reserved
Un ensemble d'exemples utilisant des graphes d'volutions est prsent en TD5 :VHDL et CAO.
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.
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
TD4 VHDL Logique Sequentielle 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 <= Armed; ELSE etat <= Off; END IF; WHEN Armed => IF Key = '0' THEN etat <= Off; ELSIF Trip ='1' THEN etat <= Ringing; ELSE etat <= Armed; END IF; WHEN Ringing => IF Key ='0' THEN etat <= Off; ELSE etat <= Ringing; END IF; END CASE; END IF; IF etat=Ringing THEN -- partie combinatoire Ring<='1'; ELSE Ring <='0'; ENDIF END PROCESS; END ar; On vous laisse comparer la partie graphe d'volution de la figure avec le programme pour en dduire quelques rgles pour raliser votre code.
Forage asynchrone
Rappel : Un forage asynchrone est un forage pris en compte mme si aucun front d'horloge est envoy. -- gestion de l'asynchrone process(clk,reset) begin if reset='1' then
TD4 VHDL Logique Sequentielle -- avant horloge donc asynchrone q<= "0000"; elsif clk'event and clk='1' then -- ici le synchrone end if; end process; La partie commente avec par "--ici le synchrone" dsigne aussi bien un "case when" que des quations de rcurrences.
10
Forage synchrone
L'obtention des quations de rcurrences par les techniques classiques dcrites dans le cours de logique squentielle donne automatiquement les forages synchrones l'aide de l'entre que l'on a appele Init. Premire faon On rsume ici ce qui a t obtenu dans le cours de logique squentielle. -- initialisation synchrone process(clk) begin if clk'event and clk='1'then -- equations de rcurrence + init -- ou -- equations de rcurrence ./init end if; end process; Mais ce n'est pas la seule et unique faon de procder. Deuxime faon On peut retirer tout ce qui est li l'entre "Init" des quations et transformer le programme ainsi : if clk'event and clk='1'then if init ='1' then q<= "0000"; else -- ici case ou equations de -- rcurrences end if; end if; Cette technique ncessite de connatre le code de l'tat initial (ici "0000") ou au moins son nom symbolique.
11
) et les
).
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 i s'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. 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 correspondant : VHDL
12
pour lequel on a utilis parfois, les lois de De Morgan sur les quations de rcurrences prsentes en commentaires.
Cette figure transforme un GRAFCET gauche en un graphe d'tat droite. La notation {2,4} dans un tat indique que l'tat correspond l'tape 2 et l'tape 4 actives (avec un jeton) dans le GRAFCET.
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 ncessaire au code. Par exemple, nos 5 tats ncessitent trois bits de code. < N (tats) qui vous donne le nombre de bits M
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 :
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 les prsente 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 ?
15
Licence
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/