Vous ne pouvez pas être complètement sûr que vous avez évité la métastabilité. Comme vous l'avez mentionné, la sortie d'une bascule métastable est imprévisible, donc vous pouvez potentiellement propager une mauvaise valeur quand vous avez de la métastabilité même avec l'approche 'two-register'. Cette méthode n'a toutefois jamais eu pour but de résoudre la métastabilité, mais tente de réduire la probabilité qu'une valeur métastable entre dans votre circuit. Ce qu'on appelle here MTBF (Mean Time Between Failure). Pour réduire le MTBF, vous pouvez même enchaîner plus de 2 registres.
Même si cela ne résout pas le unpredictive-ness d'une valeur, il est intéressant d'utiliser ces doubles registres parce que quand une valeur est métastable, il oscillera jusqu'à se stabiliser à 0 ou 1.
Cette oscillation fera tourner votre circuit et utilisera beaucoup d'énergie pour rien car chaque transition consomme de l'énergie. C'est pour cette raison qu'il est important d'utiliser des registres doubles pour le passage dans le domaine de l'horloge.
Pour vous assurer que vos données sont cependant valides, vous pouvez utiliser un mécanisme d'accusé de réception de demande entre les deux domaines d'horloge.
exemple rapide:
- Définir les données sur le bus (entrée d'un double registre)
- Wait 1 (ou plusieurs) cycle d'horloge pour être sûr que les données sont bien établi de l'autre côté
- Envoi d'un signal de demande (entrée d'un double registre)
- Dans le pire des cas: Le signal de requête est métastable et reste à 0 une fois stabilisé. Le cycle d'horloge suivant sera à 1 car il serait déjà réglé sur 1 pour au moins 1 cycle d'horloge. Meilleur cas: le cycle suivant la destination acceptera les données
- Les données sont stables, la demande est stable et à 1 -> les données peuvent être consommées. Envoyer un accusé de réception à la source.
- L'acquittement arrive (sur un double registre en cas de métastabilité). Si métastable il peut prendre un cycle d'horloge plus pour arriver.
- Demande de chutes.
- autre données peuvent être envoyées par l'intermédiaire du bus
Ce protocole est appelé protocole 4 phases. Vous pouvez trouver beaucoup de documentation à ce sujet sur le web car c'est un protocole classique pour les dessins asynchrones.
Il est assez simple à comprendre et à mettre en œuvre. Gardez à l'esprit cependant que cela va générer une surcharge dans la zone qui peut être très importante.
Espérons que ça aide.
Cette question pourrait être mieux adaptée à http://electronics.stackexchange.com/ –
Ok, merci. Puis-je poster la question à nouveau? –