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.