IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Changement d'états avec case - State machine VHDL


Sujet :

VHDL

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Changement d'états avec case - State machine VHDL
    Bonjour,

    J'ai une question assez simple.
    Pour faire une machine d'état, j'ai souvent vu des exemples en 2 morceaux avec une state machine qui prépare le changement à l'aide d'un signal "next_state".

    Je me rend compte que je n'ai pas codé de cette manière... J'ai tout fait en 1 morceau. Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    	state_transistion : process (Clk, Reset) 
    	begin  
    		if Reset= '1' then state<=St0;
     
    		elsif (Clk'event and Clk='1') then 
    			case state is
    				when St0 => if signal_a='1' then
    					state <= St1;
    					end if;
    				when St1 => if signal_a='0' then
    					state <= St2;
    					end if;
    				when St2 => if signal_b='0' then
    					state <= St0;
    					end if;			end case;		   
    		end if;
       	end process ;
    Ma question :

    Si je n'avais pas de condition pour le changement d'états (en gros je change à chaque coup de clock, sans le if) : est-ce que à chaque coup de clock le case ne serait vérifié qu'une seule fois ??
    C'est à dire :

    1/ state = St0
    2/ Coup de clock : case passe dans "when St0" donc state devient St1. Estce que en sortant de mon "when St0" je ne vais pas passer tout de suite dans "when St1" (avant le prochain coup de clock) ?

    -> A l'intérieur du process j'ai un begin donc les changements de valeurs des signaux seront concurrents ? state ne changera qu'une fois par coup de clock ?


    Merci d'avance pour votre aide !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 121
    Points
    121
    Par défaut
    Bonjour,

    Personnellement je vous déconseille la méthode "next_state" et "state" car elle est généralement peu lisible et souvent issue d'outil genre "Visual HDL" qui transforme des diagrammes en VHDL. D'où un code VHDL médiocre.
    Cette méthode n'utilisant qu'un unique signal "state" est mieux. Donc enjoy
    Il n'y pas de risque car :
    1. un signal n'est affecté qu'à la fin d'un process ayant une liste de sensibilité ( c'est d'ailleurs pour cela que l'on dit souvent "seule la dernière affectation d'un signal compte"). La nouvelle valeur affectée à "state" ne pourra donc être observée qu'au prochain front montant de l'horloge
    2. même si vous remplacez le signal par une variable (auquel cas l'affectation a lieu immédiatement), en fait le test est effectué au niveau du "case xxx is". Donc ça fonctionnerait aussi


    Cdlt

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Ah ok parfait alors !
    Merci beaucoup pour ces explications !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/12/2010, 10h12
  2. machine à états avec un parser SAX Xerces
    Par grutt dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 20/05/2009, 13h32
  3. Machine à état avec condition
    Par ABN84 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 03/03/2009, 18h39
  4. Réponses: 3
    Dernier message: 19/06/2008, 00h00
  5. Réponses: 2
    Dernier message: 31/03/2006, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo