[VHDL] Question concernant les case avec des if

Question concernant les case avec des if [VHDL] - Divers - Programmation

Marsh Posté le 21-03-2011 à 23:07:37    

Bonjour, je débute en VHDL et j'ai une question, j'ai crée un process dans lequel j'ai mis un case
 
case valeur
   when '1'
       if une_certaine_condition
             valeur <= valeur +1;
      end if;
 
  when '2'
       ....
 
Je voulais savoir ce qu'il se passait si le condition n'était pas vérifiée.
Est-ce que ça passe dans le cas 2 ? le cas others ? ça bloque ? le process continuera à tourner et aller dans ce cas tant que la condition n'est pas vérifié ?
 
Merci de votre réponse !

Reply

Marsh Posté le 21-03-2011 à 23:07:37   

Reply

Marsh Posté le 21-03-2011 à 23:31:40    

Syntaxiquement ton code est un peu bizarre mais bon je le comprends comme une présentation de concept.
 
Si la condition n'est pas vérifiée, tu sors du case.  
 
Par exemple avec ce code

Code :
  1. case valeur is
  2.    when 1 =>
  3.    
  4.    when 2 =>
  5.          valeur <= valeur +1;
  6.  
  7. end case;


 
Si valeur vaut 1 tu ne rentre que dans le cas 1 et donc tu ne fais rien.


---------------
sheep++
Reply

Marsh Posté le 22-03-2011 à 07:15:41    

À part ça, c'est une mauvaise idée de procéder de cette manière (ne pas taiter tous les cas) car ça infère des latches, ce qui en général n'est pas voulu


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-03-2011 à 08:34:39    

esox_ch a écrit :

À part ça, c'est une mauvaise idée de procéder de cette manière (ne pas taiter tous les cas) car ça infère des latches, ce qui en général n'est pas voulu


Pas vraiment, tout dépend d'où tu décris tes cas.
Par contre ce qui est sur c'est que ta simulation risque de planter si tu n'a pas de "others" alors que le synthétiseur va inférer cette clause. Cela crée une différence entre simulation et matériel ce qui n'est jamais souhaitable.
 
Mais bon c'est un chouilla HS...


---------------
sheep++
Reply

Marsh Posté le 22-03-2011 à 15:29:53    

Pas vraiment :o. Suffi de ne pas penser en mode "Programmation" (ce qui est généralement une très mauvaise idée en VHDL) mais de penser en mode "hardware".
 
Quand tu écris ton when avec le signal "valeur" qui a une valeur uniquement dans une des branches, ton synthétiseur il ne saura pas quoi en faire quand il passe dans l'autre => Il va donc mettre un latch. C'est pas forcément un problème, mais les débutants n'en sont pas toujours conscients ... Pour cette raison on préconise parfois de faire "apparaître" le latch en travaillant sur des variables à l’intérieur du process et en les traduisant en signal juste avant la fin du process.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-03-2011 à 21:28:02    

esox_ch a écrit :

Pas vraiment :o. Suffi de ne pas penser en mode "Programmation" (ce qui est généralement une très mauvaise idée en VHDL) mais de penser en mode "hardware".
 
Quand tu écris ton when avec le signal "valeur" qui a une valeur uniquement dans une des branches, ton synthétiseur il ne saura pas quoi en faire quand il passe dans l'autre => Il va donc mettre un latch. C'est pas forcément un problème, mais les débutants n'en sont pas toujours conscients ... Pour cette raison on préconise parfois de faire "apparaître" le latch en travaillant sur des variables à l’intérieur du process et en les traduisant en signal juste avant la fin du process.


 
Tout dépend d'où est ton case... si il est dans un process cadencé par une horloge par exemple, pas de latch.
 
Après c'est sûr que ça reste relativement dangereux et à proscrire pour un débutant.


---------------
sheep++
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed