td4 vhdl

download td4 vhdl

of 15

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/