2016-10-23 3 views
2

Je suis normalement un programmeur C#/Java et j'ai toujours du mal à envelopper complètement ma tête autour de la description du matériel.VHDL: Aide à la compréhension des étapes de temps/états et de la simultanéité

J'ai un registre qui charge dans une valeur. Ensuite, un comparateur compare la sortie du registre avec la valeur '16'. Si la valeur est inférieure ou égale, je vais à State_0, s'il est supérieur à, je vais à State_3.

J'ai un processus 'controlsignals' qui s'exécute en même temps que mon processus stellable. Pour mes signaux de commande, je sais que je dois mettre l'activer pour le registre à haut quand je suis State_2, donc:

controlsignals: PROCESS (Tstep_Q) 
BEGIN 
    .... initialisation ... 
    CASE Tstep_Q IS 
    .... other states .... 
    WHEN T2 => --define signals in time step T2 
     enRegister = '1'; 

Pour ma table d'état:

statetable: PROCESS (Tstep_Q, regOutput) 
BEGIN 
    CASE Tstep_Q IS 
     .... other states .... 
     WHEN T2 => 
      IF ((regOutput - 16) > 0) 
       THEN Tstep_D <= T3; 
      ELSE Tstep_D <= T0; 
      END IF; 

Et près de la fin de mon code, j'ai:

fsmflipflops: PROCESS (Clock) 
BEGIN 
    IF Clock'EVENT AND Clock = '1' THEN 
     Tstep_Q <= Tstep_D; 
    END IF; 
END PROCESS; 

reg: regn PORT MAP (somevalue, enReg, Clock, regOutput); 

Depuis ma table d'état et mes signaux de contrôle sont des blocs concurrents, ma confusion est ... vais-je activer d'abord le registre, puis exécutez le comparateur pour déterminer mon prochain état, comme je veux mon circuit à exécuter (puisque le statetable est sensible à regOutput)? Ou serait-il plus sûr de créer un nouvel état après T2 où j'ai mon comparateur? Merci d'avance.

+2

Vous n'avez pas affiché de déclaration, ni de fréquence d'horloge spécifiée, ni la cible de votre code. Tout ceci a une incidence sur ce que vous pouvez faire dans un cycle d'horloge, depuis le front montant de l'horloge jusqu'à Tstep_Q et le délai RegOutput pour soustraire 16 et tester le signe du résultat, en sélectionnant une valeur pour l'installation de Tstep_D à Tstep_D. Sans connaître le taux d'horloge, la plate-forme d'implémentation cible et les largeurs, vous obtiendrez des opinions et * vous * pourrez trouver les réponses par une synthèse d'essai sur une plateforme cible. Quelle partie du chemin de retard a une période d'horloge entière avec un état séparé? – user1155120

Répondre

1

simultanéité du comparateur

Imaginons que juste après le front d'horloge, le signal d'état a été mis à jour. Vous avez une période d'horloge pour faire une comparaison et définir l'état suivant.

Votre «statut» est en cours d'évaluation.

Calendrier des enregister

Faire la comparaison T2 n'a de sens que si vous pouvez lire la sortie du registre dans le même cycle d'horloge que vous configurez le permettent. Cela peut être un problème, mais votre question ne contient pas les informations pour vérifier cela.

liste Sensibilité des statetable

Vous voulez que ce processus simultanément; si tous ses entrées doivent aller dans la liste de sensibilité.

On dirait que vous travaillez à partir d'une référence décente et que vous avez bien structuré votre code. Je soupçonne que la liste de sensibilité est vraiment le problème que vous rencontrez - provoquant un comportement étrange dans la simulation, donc je vais garder cette réponse courte et vous laisser essayer de résoudre ce problème.