Analyse temporelle et CDC

Dans une FIFO asynchrone, quelle est la raison correcte pour laquelle on convertit les pointeurs d'écriture et de lecture en code de Gray avant de les synchroniser vers l'autre domaine ?

  1. AParce que le code de Gray divise par deux le nombre de bits et réduit le nombre de synchroniseurs
  2. BParce qu'un seul bit change à chaque incrément, si bien que même une capture en plein changement donne une valeur correcte, celle d'avant ou celle d'après l'incrément
  3. CParce que les signaux en code de Gray ne deviennent pas métastables, ce qui rend la synchronisation inutile
Afficher la réponse et l'explication

Réponse : B. Parce qu'un seul bit change à chaque incrément, si bien que même une capture en plein changement donne une valeur correcte, celle d'avant ou celle d'après l'incrément

Avec un pointeur binaire, plusieurs bits changent en même temps, comme de 0111 à 1000 ; si chaque bit est synchronisé séparément, on peut recevoir une valeur sans aucun rapport. En code de Gray, un seul bit change par incrément : même si ce bit devient métastable et se résout vers l'ancienne ou la nouvelle valeur, le résultat est la valeur d'avant ou d'après l'incrément. On voit simplement une valeur un peu ancienne, et la FIFO n'est pas corrompue. Le nombre de bits ne change pas, et la métastabilité elle-même peut toujours survenir : les synchroniseurs restent nécessaires.

Structure d'une FIFO asynchrone Côté écriture (wclk) Côté lecture (rclk) RAM double port 2 horloges distinctes Données à écrire Pointeur écriture Codage Gray Données lues Pointeur lecture Codage Gray Sync. 2 FF Détection empty Sync. 2 FF Détection full Pointeurs en code Gray En code Gray, un seul bit change à chaque pas
Structure d'une FIFO asynchrone · Voir dans les schémas
S'entraîner sur ce thème Retour au thème

Autres questions sur Analyse temporelle et CDC

  1. Quelle est la conversion en code de Gray de la valeur binaire sur 4 bits 0110 (6 en décimal) ?
  2. Dans une FIFO asynchrone de 16 mots de profondeur, quelle est la raison correcte pour laquelle les pointeurs d'écriture et de lecture ont 5 bits, soit 1 bit de plus que l'adresse ?
  3. Dans une FIFO asynchrone de 16 mots de profondeur utilisant des pointeurs de 5 bits en code de Gray, quelle condition de détection de l'état plein (full) côté écriture est correcte ?
  4. Dans une FIFO asynchrone, le pointeur de l'autre côté est utilisé après synchronisation, si bien que la valeur visible a 2 à 3 cycles de retard. Quel est l'effet correct de ce retard sur la détection de full/empty ?
  5. Dans une FIFO asynchrone dont le côté écriture est à 100 MHz et le côté lecture à 80 MHz, le côté écriture écrit des rafales de 100 mots à raison d'un mot par cycle, et le côté lecture lit un mot par cycle. Il y a suffisamment de temps de repos entre les rafales. Quelle est la profondeur minimale nécessaire pour éviter tout débordement (le retard dû à la synchronisation est ignoré) ?