Qu'est-ce que FIFO asynchrone ?

FIFO écrite et lue sur des horloges distinctes, utilisée pour transmettre des données multibits entre domaines d'horloge. Ses pointeurs sont convertis en code de Gray avant d'être synchronisés dans l'autre domaine pour déterminer les états plein (full) et vide (empty). Les pointeurs ont un bit de plus que l'adresse pour distinguer le rebouclage.

Nom japonais: 非同期FIFO

« FIFO asynchrone » apparaît dans 10 questions d'entraînement réparties sur 1 thèmes, dont Analyse temporelle et CDC.

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

Domaine: Analyse temporelle et CDC

S'entraîner : questions sur FIFO asynchrone

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.

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 ?

  1. AParce qu'il faut 5 bits pour représenter les adresses de 16 mots
  2. BPour pouvoir distinguer, lorsque les pointeurs sont égaux, l'état vide (même tour) de l'état plein (un tour d'écart)
  3. CPour utiliser le bit supplémentaire comme parité et détecter les erreurs de pointeur
Afficher la réponse et l'explication

Réponse : B. Pour pouvoir distinguer, lorsque les pointeurs sont égaux, l'état vide (même tour) de l'état plein (un tour d'écart)

Les adresses de 16 mots s'expriment sur 4 bits, mais avec des pointeurs de 4 bits seulement, lorsque les adresses de lecture et d'écriture coïncident, on ne peut pas distinguer l'état vide, où tout a été lu, de l'état plein, où l'écriture a fait un tour complet et rattrapé la lecture. En ajoutant un 5e bit qui indique le tour, on peut, en comparaison binaire, conclure à l'état vide si les 5 bits coïncident, et à l'état plein si seul le bit de poids fort diffère. Avec des pointeurs en code de Gray, la comparaison pour détecter l'état plein change légèrement. Le bit n'est pas utilisé comme parité.

« FIFO asynchrone » dans les explications

Questions mentionnant « FIFO asynchrone » (10)

  1. 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 ?
  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é) ?
  6. Pourquoi peut-il être problématique de laisser sans contrainte (faux chemin) le chemin qui transmet les pointeurs en code de Gray d'une FIFO asynchrone vers l'autre domaine, au motif qu'il est asynchrone ?
  7. Chaque bit d'une donnée de 4 bits a été transmis vers un autre domaine d'horloge via son propre synchroniseur à 2 étages. Lorsque la donnée passe de 0111 à 1000, quel problème peut survenir ?
  8. Quelle méthode permet correctement de transmettre en toute sécurité une donnée multibit vers un autre domaine d'horloge ?
  9. Quelle contrainte s'applique correctement lorsqu'on transmet des impulsions d'un domaine d'horloge rapide vers un domaine d'horloge lent par synchronisation par toggle ?
  10. Quel est l'inconvénient correct du transfert de données entre domaines d'horloge par handshake ?

Termes associés

Code de Gray Domaine d'horloge Protocole de poignée de main (handshake) Métastabilité Débordement (spill) Débit (throughput) Faux chemin (false path) Placement-routage Via Synchroniseur

Retour au glossaire