Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 28
    Points : 10
    Points
    10

    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 :
    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
    Inscrit en
    juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 52
    Points : 95
    Points
    95

    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
    Candidat au titre de Membre du Club
    Inscrit en
    juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Ah ok parfait alors !
    Merci beaucoup pour ces explications !!

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •