Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > VHDL
VHDL Forum d'entraide sur VHDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/05/2012, 16h16   #1
Azerty32
Candidat au titre de Membre du Club
 
Inscription : 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 !
Azerty32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2012, 13h26   #2
titiri
Membre régulier
 
Inscription : juin 2009
Messages : 37
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 37
Points : 77
Points : 77
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
titiri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2012, 14h22   #3
Azerty32
Candidat au titre de Membre du Club
 
Inscription : juillet 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 28
Points : 10
Points : 10
Ah ok parfait alors !
Merci beaucoup pour ces explications !!
Azerty32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h57.


 
 
 
 
Partenaires

Hébergement Web