Pourquoi devons-nous synchroniser les entrées asynchrones dans FSM?

8

J'ai récemment appris l'électronique numérique. Je sais qu'il y a des portes qui remplissent des fonctions logiques, j'ai découvert RS-Latch, D-Latch et Master-Slave-D-Flip-Flop. Maintenant que je peux exécuter des fonctions logiques et stocker des états, je peux créer une machine à états finis (par exemple, un feu de signalisation). En classe, nous avons parlé de cet exemple particulier de feux de circulation et il y a eu une discussion sur les problèmes qui se posent, si nous ajoutions un bouton marche / arrêt (signal au feu de circulation qu'un piéton attend le feu vert).

La conclusion était que ce bouton serait une entrée asynchrone, nous devons mettre une bascule avant la machine d'état afin que cette entrée puisse être synchronisée en premier.

Ce que je ne comprends pas, c'est quel est le problème avec les entrées asynchrones? Pourquoi devons-nous le synchroniser? Et pourquoi une bascule devant la machine d'état ou l'arrière aiderait-elle à la synchronisation? J'ai lu plusieurs articles sur la "métastabilité" mais je ne comprends toujours pas

Merci beaucoup

Eren
la source

Réponses:

6

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.

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

entrez la description de l'image ici

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.

entrez la description de l'image ici

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.

schématique

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.

Trevor_G
la source
Je vous remercie! Donc, le cycle d'horloge supplémentaire de la bascule ajoute du temps pour que la métastabilité se stabilise? Aussi, pourquoi mettrait-on une bascule, à la fin d'un FSM?
Eren
@Eren Yes ajoute du temps et lui donne un endroit sûr, logiquement, pour s'installer dans le synchronisme. En général, vous voulez que toutes les sorties changent en même temps. Ainsi, la dernière étape devrait normalement être une bascule ou, plus précisément, une sortie à «verrouillage», de sorte que les sorties sont toutes synchrones.
Trevor_G
1
vous a donné +1 pour plusieurs portes, mais en espérant que vous corrigerez vos derniers paragraphes. La métastabilité dans le verrou de synchronisation est également importante, car elle peut être transmise au circuit. Il n'y a aucun remède pour la métastabilité. Cependant, vous pouvez réduire la probabilité d'une probabilité extrêmement faible en attendant plus longtemps avant la décision finale. Afin d'éviter de réduire la fréquence d'horloge, cela se fait généralement en pipelinant des D-flops supplémentaires avant. Une fois que la probabilité d'erreur est tombée à une fois à l'ère de l'univers, pour 1 milliard de circuits à la fréquence d'horloge maximale, la plupart des gens jugent la métastabilité `` guérie ''
Neil_UK
@Neil_UK yup, j'essayais de dire ça, sans trop confondre l'OP. Encore un travail en cours. Mais je dois sortir pour la journée. Merci.
Trevor_G
1
La métastabilité est un épouvantail dans ce genre de discussions. En réalité, la situation que vous décrivez où vous alimentez plusieurs entrées à travers la limite d'horloge échouera beaucoup plus souvent que vous n'obtenez des événements de métastabilité. Les retards de routage peuvent biaiser de l'ordre des nanosecondes, ce qui signifie qu'un changement dans les données peut atteindre une bascule avant le front montant de l'horloge de réception et peut atteindre une autre bascule après le front montant. Je fais cette distinction parce que la métastabilité n'est un problème que dans les cas où vous avez très peu de mou, alors que le biais de routage est toujours un problème.
jalalipop
3

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.

entrez la description de l'image ici

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.

Mitu Raj
la source
Merci beaucoup! J'ai juste une autre question si ça va. L'ajout des bascules avant les entrées et après les sorties entraînera un décalage de deux cycles d'horloge. Le changement entraînera-t-il des problèmes pour notre machine d'état? Il y avait une analogie avec la personne A comptant jusqu'à 7 et demandant à la personne B s'il comptait correctement. B l'analysera et répondra "Oui". Si nous avions une bascule en avant et après la sortie de la réponse « oui » atteindrait personne A quand il est déjà à 9. Je ne vois pas comment cela causerait aucun problème si en plus la latence
Eren
Après avoir verrouillé les entrées dans un cycle d'horloge, nous obtenons la sortie dans le cycle d'horloge suivant lui-même. La fonctionnalité restera la même. Transition d'état à chaque cycle d'horloge. C'est ainsi que FSM est généralement conçu.
Mitu Raj
Oui, c'est le retard causé par la bascule, mais cela n'affecte pas la fonctionnalité.
Mitu Raj