Comme vous le savez déjà, votre machine d'état de contrôleur de feux de circulation est une machine synchrone. Autrement dit, il est piloté par une horloge de telle manière que tous les changements de logique combinatoire se produisent et s'établissent à des valeurs stables suffisamment longtemps avant le prochain front d'horloge pour respecter les temps de configuration requis.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
Si les données changent dans ce délai de configuration, la sortie finale sera non seulement imprévisible, mais en raison de la méta-stabilité, elle peut réellement flotter ou danser autour d'une valeur intermédiaire pendant un certain temps avant de choisir une valeur finale. Il peut même osciller entre la logique un et la logique zéro à une fréquence élevée, provoquant un flux de courant et un chauffage considérables.
En tant que tel, toute entrée asynchrone vers une machine d'état doit être synchronisée à un moment donné pour que le système fonctionne comme prévu. Cependant, cela ne signifie pas nécessairement que vous devez TOUJOURS ajouter un autre verrou au système.
Si l'entrée ne procède qu'à une seule "porte suivante" ET que l'état de l'entrée est indépendant de toutes les autres entrées, alors cela n'a vraiment pas d'importance si le signal arrive en retard à la partie. Fondamentalement, vous devez demander ... "Si nous manquons l'entrée pour un cycle d'horloge, est-ce important?"
Si toutefois, l'entrée alimente plusieurs portes, ce qui est différent. Les portes suivantes peuvent voir différents niveaux logiques et propager un état erroné au verrou suivant. Fondamentalement, une variété de mauvaises choses peuvent se produire.
Cela peut être illustré par votre exemple simple. Notez que si la métastabilité à REG1 ne s'est pas stabilisée avant la prochaine horloge, cela pourrait provoquer l'allumage simultané des feux WALK et Traffic, ou aucun des deux ne pourrait s'allumer.
simuler ce circuit
En outre, si une entrée asynchrone a une relation avec une autre entrée asynchrone qui devrait se produire en même temps, la deuxième entrée peut être reconnue mais pas la première.
Dans les deux cas, vous devez ajouter un verrou de synchronisation à l'entrée pour aligner la synchronisation du signal sur l'horloge des machines d'état. Notez que cela ajoute un retard de cycle d'horloge ou un demi-cycle d'horloge si vous utilisez l'autre front du signal d'horloge.
Cependant, vous demandez peut-être, "mais ce verrou ne souffre-t-il pas du même problème?" et bien sûr, la réponse serait oui. Mais l'astuce ici est de permettre à cette méta-stabilité potentielle de se produire à un point du circuit où cela n'a pas d'importance comme je l'ai souligné ci-dessus.
Trouver ce point peut être problématique avec des entrées dépendantes. Normalement, une logique supplémentaire doit être ajoutée pour qualifier ces entrées.
Cependant, sachez que la métastabilité est une chose probable. Bien que, en raison des différences de tolérances de fabrication, la plupart des verrous se redressent très rapidement, il est possible qu'ils restent instables pendant un certain temps. Plus l'écart entre les impulsions d'horloge est long, plus la probabilité qu'il se stabilise est élevée. En tant que tel, si l'horloge de votre système est à une fréquence élevée, il est prudent de la diviser pour effectuer le pré-verrouillage pour permettre plus de temps de stabilisation. Cependant, même alors, il n'y a aucune garantie.
Une dernière pensée. J'ai mentionné qu'il existe la possibilité de courants élevés et de chauffage induits par la méta-stabilité lors de la synchronisation d'une entrée externe aléatoire. Malheureusement, vous ne pouvez pas faire grand-chose pour y remédier et les longs problèmes de métastabilité autres que la suppression des circuits d'entrée asynchrones.
Un problème avec les conceptions asynchrones est la présence de race ou de dangers. Disons par exemple dans ce circuit, que A = 1, B = 0 et C = 1 initialement et que D soit stable et réglé à 1.
Maintenant, laissez B changé en 1 et C changé en 0 au même moment . Il est évident que D restera à 1. Mais dans les circuits réels, les retards de propagation et les retards de fil comptent. Il est donc fort possible que le changement de C atteigne la porte OU plus rapidement que le changement de B ne se propage à la porte OU, à travers la porte ET. Le résultat est que D est momentanément ramené à 0, avant de revenir à son état stable 1. Cela s'appelle race ou hasard. Ce problème momentané peut déclencher n'importe quel circuit présent après D, et cette transition indésirable se propage à travers le circuit entier. Cela provoque une dissipation d'énergie indésirable et peut-être une erreur de fonctionnalité.
Pour éviter ces problèmes, nous pouvons enregistrer les entrées et les sorties en ajoutant des bascules D avant toutes les entrées A, B, C et après la sortie D.Ainsi, maintenant notre circuit ne verrouille que les entrées stables aux fronts d'horloge, calcule l'expression, verrouille D et la sort uniquement dans le front d'horloge suivant. Cela garantit qu'aucun tel problème dans les entrées ou les sorties ne se propage dans notre circuit, à condition que toutes les entrées des bascules respectent le temps de configuration et de maintien.
C'est la raison principale pour laquelle les conceptions synchrones sont plus préférées, malgré la vitesse que les conceptions asynchrones donnent.
la source