2011-07-31 2 views
3

J'ai utilisé l'instruction ci-dessous, fréquemment. Cependant, je me demandenécessité de 'événement

if (clock'event and clock = '1') then 
      [do something] 

nous avons vraiment besoin d'écrire clock'event dans l'instruction ci-dessus? Si oui, pourquoi?

Répondre

5

Vous pouvez obtenir la simulation de fonctionner parfaitement sans la condition clock'event, mais la synthèse va sortir faux.

La norme IEEE sur VHDL synthétisable requiert que vous ajoutez clock'event. Il est communément accepté d'écrire if rising_edge(clock) à la place. Cela traduit beaucoup mieux votre intention. Les deux fonctions rising_edge et falling_edge sont autorisées en tant que constructions VHDL synthétisables.

Pour la simulation:

process (clock) is 
-- stuff 
begin 
if clock='1' then -- EVIL! don't do this 
    -- do things 
end if; 
end process; 

En supposant que clock juste passe de « 0 » à « 1 » et retour (pas de méta-valeurs), le comportement serait identique à ce que vous obtiendriez avec une condition clock'event. Encore une fois, cela ne synthétisera pas ce que vous voulez! Vous aurez probablement un loquet, pas une bascule D.

(points de bonus pour quiconque tente de synthétiser cela et récupère les résultats!)

-3

Oui, sinon le code suivant exécute toute la durée de votre signal d'horloge, et pas seulement au front montant de l'horloge.

+3

pas vrai, le processus ne se déclenche que lorsque l'un des signaux dans les listes de sensibilité changent. – Philippe

Questions connexes