10M+ Composants Électroniques En Stock
Certifié ISO
Garantie Incluse
Livraison rapide
Pièces difficiles à trouver ?
Nous les trouvons
Demander un devis

Mémoire FIFO expliquée : son fonctionnement, ses types, ses applications et son guide de conception

Jul 07 2026
Source: Michael Chen
Parcourir: 509

La mémoire FIFO (First In, First Out) est l’une des méthodes de tampon les plus utilisées en électronique numérique car elle préserve l’ordre des données tout en permettant des transferts fiables entre appareils fonctionnant à des vitesses différentes. Comprendre le fonctionnement du FIFO, son architecture, ses spécifications, ses types et ses considérations de conception vous aide à construire des systèmes qui maintiennent un flux continu de données et préviennent la perte de données.

Figure 1. FIFO Memory

Qu’est-ce que la mémoire FIFO ?

La mémoire FIFO (First In, First Out) est un tampon de données temporaire qui stocke et libère les données dans le même ordre d’arrivée. Les premières données écrites dans le tampon sont les premières données lues, qui préservent la séquence de données originale lors du transfert. Il utilise une logique de contrôle intégrée pour gérer automatiquement les opérations de lecture et d’écriture, de sorte que le processeur n’a pas besoin de suivre manuellement les adresses mémoire. Cela rend la mémoire FIFO utile dans les systèmes numériques qui gèrent des flux de données continus ou transfèrent des données entre des appareils fonctionnant à des vitesses différentes.

Fonctionnement de la mémoire FIFO

Figure 2. How FIFO Memory Works

La mémoire FIFO met en mémoire tampon les données entrantes tout en permettant de lire indépendamment les données précédemment stockées. Cela permet aux appareils fonctionnant à différentes vitesses d’échanger des données sans perdre d’informations ni modifier leur séquence. En interne, le FIFO utilise des opérations d’écriture et de lecture séparées, permettant ainsi de stocker de nouvelles données pendant que les anciennes sont récupérées en même temps, assurant un flux continu des données.

Opération d’écriture

Lorsque de nouvelles données arrivent, le contrôleur FIFO vérifie si de l’espace est disponible. Si le tampon n’est pas plein, les données sont écrites à l’emplacement mémoire indiqué par le pointeur d’écriture. Une fois l’écriture terminée, le pointeur d’écriture avance automatiquement vers l’emplacement disponible suivant.

Opération de lecture

Lorsque l’appareil récepteur demande des données, le contrôleur FIFO vérifie si le tampon contient des données stockées. Si le tampon n’est pas vide, il lit les données les plus anciennes depuis l’emplacement indiqué par le pointeur de lecture. Le pointeur de lecture avance ensuite vers l’élément stocké suivant, en conservant l’ordre original des données.

Pointeurs de lecture et d’écriture

La mémoire FIFO utilise deux pointeurs indépendants pour contrôler le mouvement des données. Le pointeur d’écriture identifie où les nouvelles données seront stockées, tandis que le pointeur de lecture identifie les données suivantes à récupérer. Parce que ces pointeurs fonctionnent indépendamment, FIFO prend en charge des opérations simultanées de lecture et d’écriture, permettant un transfert continu de données entre appareils à des vitesses de traitement différentes.

Drapeaux pleins et vides

Les contrôleurs FIFO surveillent la position des pointeurs de lecture et d’écriture pour déterminer l’état du tampon. Lorsque tous les emplacements mémoire sont occupés, le drapeau Full est utilisé pour empêcher d’autres opérations d’écriture. Lorsque toutes les données stockées ont été lues, le drapeau Empty est activé pour empêcher les opérations de lecture invalides. De nombreux dispositifs FIFO incluent également des drapeaux Presque Plein et Presque Vide, qui fournissent des alertes précoces afin que le système puisse ralentir les données entrantes ou augmenter la vitesse de lecture avant qu’il ne survienne un débordement ou un sous-débordement.

Exemple de flux de données

Considérons un capteur de température qui produit un échantillon de données chaque microseconde, tandis qu’un microcontrôleur traite un échantillon toutes les deux microsecondes. Le FIFO stocke temporairement les échantillons supplémentaires au fur et à mesure qu’ils arrivent. Lorsque le microcontrôleur devient disponible, il lit les données stockées dans le même ordre qu’elles ont été écrites, évitant ainsi la perte de données et maintenant une acquisition continue des données.

Composants internes FIFO

Figure 3. FIFO Internal Components

ComposantFonction
Tableau de mémoireStocke les données entrantes jusqu’à ce qu’elles soient lues.
Pointeur d’écritureMarque le prochain emplacement pour de nouvelles données.
Lire PointerMarque le prochain emplacement de données à lire.
Logique de contrôleLes coordonnées lisent, écrivent, réinitialisent et affectent les opérations de statut.
Logique du drapeau de statutGénère des signaux plein, vide, presque plein et presque vide.
Logique de l’horlogePrend en main le fonctionnement FIFO synchrone ou asynchrone.

Spécifications clés du FIFO

SpécificationDescriptionConsidérations typiques
Profondeur du tamponLe nombre maximal de mots de données que le FIFO peut stocker.Choisissez en fonction de la taille de la rafale, du taux d’écriture, du taux de lecture et du délai maximal de traitement.
Largeur des donnéesNombre de bits stockés dans chaque emplacement mémoire.Les largeurs courantes incluent 8, 16, 32, 64, 128 bits ou plus.
Lire HorlogeHorloge qui contrôle les opérations de lecture.C’est pareil pour l’horloge d’écriture dans le FIFO synchrone, ou indépendant dans le FIFO asynchrone.
Horloge d’écritureHorloge qui contrôle les opérations d’écriture.Détermine le débit maximal de données entrantes.
Fréquence maximale de fonctionnementFréquence d’horloge de lecture et d’écriture la plus élevée prise en charge.Cela dépend de la mise en œuvre du FIFO, de la technologie mémoire et des contraintes de timing.
Débit de donnéesLa quantité réelle de données que le FIFO peut transférer par seconde.C’est plus pratique que la fréquence d’horloge seule car elle inclut la largeur de données et le débit de transfert.
Latence de lectureDélai entre une requête de lecture et une donnée de sortie valide.Généralement un ou plusieurs cycles d’horloge ; Une latence réduite est utile dans les systèmes temps réel.
Latence d’écritureDélai avant que les nouvelles données écrites ne soient disponibles pour lecture.Dépendant de l’appareil et influencés par l’architecture FIFO.
Chute du premier motPermet au premier mot stocké d’apparaître à la sortie sans cycle de lecture supplémentaire.Utile lorsque le comportement de lecture à latence réduite est requis.
Protection contre les débordementsEmpêche l’écriture lorsque le FIFO est plein.Utilise les flags de statut Plein ou Presque Plein.
Protection contre le débordementEmpêche la lecture lorsque le FIFO est vide.Utilise des drapeaux d’état Vide ou Presque Vide.
Drapeaux de statutIndiquez l’état actuel du tampon.Drapeaux de seuil Plein, Vide, Presque Plein, Presque Vide et programmables.
Seuils programmables presque pleins / presque videsNiveaux d’avertissement configurables avant que le FIFO ne devienne complètement complet ou vide.Cela aide le système à réagir tôt avant qu’il ne surpasse ou ne surpasse.
Latence des drapeauxLe délai avant que les drapeaux de statut ne reflètent l’état réel FIFO.Le délai de drapeau complet / vide peut affecter la logique de contrôle à haute vitesse.
Comportement de réinitialisationDéfinit comment les pointeurs de lecture, d’écriture, de drapeaux et de données de sortie s’initialisent après réinitialisation.Un comportement de réinitialisation incorrect peut corrompre l’état du pointeur ou créer des lectures invalides.
Prise en charge du croisement de domaines d’horlogeIndique si le FIFO peut transférer en toute sécurité des données entre des domaines d’horloge indépendants.Nécessaire pour les conceptions asynchrones FIFO, les chemins FPGA CDC et les systèmes multi-fréquences.
Consommation d’énergieBesoins en fonctionnement et en veille.Important pour les systèmes à batterie ou à consommation réduite.
Technologie de la mémoireImplémentation du stockage interne.SRAM, RAM en bloc, RAM distribuée ou matériel FICO dédié.

Types de mémoire FIFO

La mémoire FIFO est disponible sous plusieurs formes pour prendre en charge différents designs matériels, configurations d’horloge et exigences applicatives.

FIFO synchrone

Figure 4. Synchronous FIFO

Un FIFO synchrone utilise une seule horloge pour les opérations de lecture et d’écriture. Puisque les deux processus partagent le même domaine d’horloge, le timing est plus simple et la logique de contrôle plus facile à implémenter. Ces FIFO sont couramment utilisés à l’intérieur des processeurs, DSP et circuits logiques numériques.

FIFO asynchrone

Figure 5. Asynchronous FIFO

Le FIFO asynchrone est utilisé lorsque le côté écriture et le côté lecture utilisent des horloges différentes. Il est courant dans les conceptions FPGA, les interfaces à haute vitesse, la capture de données ADC, le réseautage et les circuits de croisement du domaine d’horloge. Un FIFO asynchrone fiable utilise généralement des pointeurs en code gris synchronisés pour réduire le risque de métastabilité lors du transfert d’informations de pointeur entre domaines d’horloge.

FIFO matériel

Figure 6. Hardware FIFO

Les FIFO matériels sont des blocs mémoire dédiés intégrés à des microcontrôleurs, périphériques de communication, FPGA, ASIC ou circuits intégrés FIFO autonomes. Puisque le matériel gère directement le tampon, ils assurent un fonctionnement rapide avec une implication très limitée du processeur.

FIFO logiciel (File d’attente)

Figure 7. Software FIFO (Queue)

Un FIFO logiciel implémente le même principe Premier entrant, Premier sorti en utilisant la RAM système au lieu du matériel dédié. Le logiciel met à jour les pointeurs de lecture et d’écriture, rendant cette approche adaptée aux firmwares embarqués, aux systèmes d’exploitation et aux applications sans support matériel FIFO.

Mémoire FIFO vs autres méthodes de tampon

Figure 8. FIFO Memory vs Other Buffering Methods

FonctionnalitéMémoire FIFOTampon circulaireLIFO (Stack)Tampon de registre
Ordre des donnéesPremier à entrer, premier sortiPremier entrant, premier sorti avec rangement enveloppantDernier à entrer, premier sortiStockage direct
Taille du tamponDéfini par profondeur mémoireDéfini par la mémoire allouéeDéfini par capacité de la pileUn petit nombre de registres
Diffusion continueFort pour un flux de données stableFort pour le cycle répété des donnéesUtilisé pour la gestion de données imbriquéesMeilleur pour la conservation de données à court terme
Croisement du domaine de l’horlogeCourant dans les conceptions asynchrones FIFONécessite une logique de contrôle supplémentaireNécessite une logique de contrôle supplémentaireNécessite une synchronisation séparée
Gestion du processeurGéré par la logique de contrôle FIFOGéré par logiciel ou firmwareGéré par logiciel ou firmwareGéré via un accès direct aux registres
Applications typiquesMémoire tampon, pontage de bus, transfert ADC/processeurAudio, vidéo, journalisation, files d’attente de paquetsAppels de fonction, interruptions et gestion d’expressionsValeurs temporaires, bits de contrôle, données d’état

Utilisez le FIFO lorsque la commande des données doit être conservée et que les vitesses producteur/consommateur sont différentes. Utilisez un tampon circulaire lorsque le logiciel nécessite un stockage répété dans une zone mémoire fixe. Utilisez une pile lorsque les données les plus récentes doivent être traitées en premier. Utilisez uniquement les tampons de registre pour les données de contrôle ou de statut à court terme.

Applications de la mémoire FIFO

Figure 9. Applications of FIFO Memory

ApplicationFIFO résout ce problèmeType FIFO typique
Communication UARTLes données en rafale arrivent avant que le firmware ne les liseMatériel ou logiciel FIFO
Interface SPIDonnées de procédé maître et esclave à des vitesses différentesFIFO matériel
Contrôleur USBLes données de paquets nécessitent un stockage temporaireFIFO matériel
Contrôleur EthernetLes paquets réseau arrivent par rafalesFIFO matériel
Capture de données ADCLes échantillons à grande vitesse doivent être tampons avant le traitementAsynchrone ou matériel FIFO
Croisement du domaine d’horloge FPGACroisements de données entre horloges non liéesFIFO asynchrone
Traitement audioLes échantillons continus doivent éviter les espaces Tampon circulaire ou FIFO
Transfert DMALes données circulent sans implication constante du processeurFIFO matériel

Comment calculer la profondeur FIFO

La profondeur FIFO détermine combien de données temporaires le tampon peut contenir avant de devenir plein. Choisir la bonne profondeur aide à prévenir la perte de données lorsque la vitesse d’écriture dépasse temporairement la vitesse de lecture.

Formule de profondeur FIFO

Lorsque le producteur peut générer des données plus rapidement que le consommateur ne les traite, la profondeur minimale FIFO peut être estimée comme suit :

Profondeur ≥ FIFO (Taux d’écriture − Débit de lecture) × Délai maximal

Où :

• Taux d’écriture = débit de données entrantes

• Taux de lecture = débit de données sortantes

• Délai maximal = la durée la plus longue pendant laquelle l’appareil récepteur peut s’arrêter ou ralentir

Si le dispositif de lecture fait une pause complète, la profondeur FIFO requise devient :

Profondeur ≥ Débit d’écriture × temps de pause maximal FIFO

Exemple de conception

Un ADC génère 20 millions d’échantillons par seconde (20 MSPS), tandis qu’un processeur peut s’arrêter de 50 μs lors du traitement des interruptions.

• Taux d’écriture = 20 000 000 échantillons/s

• Pause maximale = 50 μs

Profondeur FIFO requise :

20 000 000 × 50 × 10⁻⁶ = 1 000 échantillons

Un FIFO capable de stocker au moins 1 000 échantillons est nécessaire. En pratique, vous pouvez généralement choisir la taille standard suivante, comme 1024 ou 2048 mots, afin d’offrir une marge de sécurité supplémentaire en cas de retards imprévus ou de décharges de circulation.

Exemple pratique de conception FIFO : ADC vers tampon de données microcontrôleur

Figure 10. FIFO Buffer Between a High-Speed ADC and a Microcontroller

Un système d’acquisition de données industrielle utilise un ADC 16 bits fonctionnant à 50 MSPS pour capturer des données de capteurs à grande vitesse. L’ADC écrit des échantillons dans un tampon FIFO, tandis qu’un microcontrôleur lit les données en mémoire tampon et envoie les résultats traités via une interface de communication plus lente telle qu’Ethernet, UART ou RS-485.

Le FIFO est nécessaire car l’ADC peut produire des données plus rapidement que le microcontrôleur ou l’interface de communication ne peuvent les gérer. Si le microcontrôleur est occupé par le traitement des interruptions, le transfert de données ou une autre tâche, le FIFO stocke temporairement les échantillons entrants et empêche la perte immédiate de données.

Si le microcontrôleur peut cesser de lire pendant 20 μs pendant que l’ADC continue d’échantillonner à 50 MSPS, la profondeur minimale FIFO peut être estimée comme suit :

Profondeur ≥ Débit d’écriture × temps de pause maximal FIFO

Profondeur FIFO ≥ 50 000 000 × 20 × 10⁻⁶

FIFO Depth ≥ 1 000 échantillons

Dans ce cas, un FIFO de 1024 mots est le choix minimum pratique, tandis qu’un FIFO de 2048 mots offre une marge supplémentaire pour le délai d’interruption, la latence de signalement et le trafic en rafale. Comme chaque échantillon compte 16 bits, un FIFO de 2048 mots stocke 4096 octets de données ADC.

Si l’ADC et le microcontrôleur utilisent des fréquences différentes, un FIFO asynchrone doit être utilisé pour gérer le croisement du domaine d’horloge. Le drapeau Presque Plein peut avertir le contrôleur avant qu’un débordement ne survienne, permettant au système de lancer un transfert DMA, d’augmenter la priorité de lecture ou de ralentir la source de données si possible.

La mémoire FIFO ne peut pas corriger un décalage permanent de bande passante. Si l’ADC produit en continu des données plus rapidement que le processeur ne peut les lire, le FIFO finira par se remplir. Dans ce cas, la conception doit réduire la fréquence d’échantillonnage, augmenter la bande passante de lecture, utiliser la DMA, ajouter de la mémoire externe ou traiter les données dans un FPGA avant de les envoyer au microcontrôleur.

Erreurs courantes de conception FIFO et dépannage

ProblèmeCause possibleSolution
Débordement FIFOLes données entrantes dépassent la vitesse de lectureAugmenter la profondeur du FIFO ou améliorer la vitesse de traitement
Écoulement FIFOLes données sont lues plus vite qu’elles ne sont écritesRetarder la lecture jusqu’à ce que les données soient disponibles
Corruption des donnéesDéfaillance de la synchronisation des pointeursUtiliser une logique de synchronisation appropriée ou des pointeurs Gray-code
Lectures invalidesDrapeau vide ignoréVérifiez le drapeau Vide avant de lire
Données perduesDrapeau complet ignoréArrêtez d’écrire quand le FIFO est complet
Opération instableSéquence de réinitialisation incorrecteRéinitialiser les pointeurs de lecture et d’écriture lors de l’initialisation
Erreurs du domaine d’horlogeCroisement d’horloge non synchroniséUtilisez un FIFO asynchrone avec des circuits de synchronisation appropriés

Tester les performances FIFO dans des conditions de fonctionnement maximales permet d’identifier les problèmes de dépassement, de sous-débordement, de synchronisation et de synchronisation avant le déploiement du système.

Conclusion

La mémoire FIFO offre un moyen simple et fiable de tampon des données tout en préservant leur séquence d’origine. En sélectionnant le type FIFO approprié, la profondeur de tampon et les caractéristiques de fonctionnement appropriés, les concepteurs peuvent réduire les risques de débordement et de sous-bordement, améliorer la communication entre différents domaines d’horloge et maintenir un transfert de données stable et continu à travers une large gamme de systèmes embarqués et numériques.

Foire aux questions [FAQ]

Q1. Comment un FIFO asynchrone peut-il transférer en toute sécurité les données entre différents domaines d’horloge ?

Un FIFO asynchrone utilise des horloges de lecture et d’écriture séparées ainsi que de la logique de synchronisation, souvent des pointeurs en code gris, pour éviter les erreurs de temporisation et la métastabilité. Cela permet aux données de circuler de manière fiable entre des circuits fonctionnant à différentes fréquences tout en préservant l’ordre correct des données.

Q2. Comment déterminez-vous la profondeur FIFO correcte pour un design ?

La profondeur FIFO est déterminée par la différence entre les débits de données entrants et sortants ainsi que par le délai ou la pause de traitement le plus long. Vous pouvez généralement calculer la profondeur minimale requise puis choisir la taille standard supérieure suivante pour offrir une marge supplémentaire pour le trafic en rafale et les retards inattendus.

Q3. Pourquoi les drapeaux Presque Plein et Presque Vide sont-ils utiles au lieu de ne compter que sur les drapeaux Plein et Vide ?

Les drapeaux Presque Plein et Presque Vide fournissent un avertissement précoce avant que le FIFO n’atteigne ses limites. Cela donne au système suffisamment de temps pour ralentir les données entrantes, augmenter la vitesse de lecture ou ajuster le traitement avant que le débordement ou le sous-flux ne survienne.

Q4. Quand faut-il utiliser un FIFO matériel à la place d’un FIFO logiciel ?

Un FIFO matériel est préféré pour les applications à haute vitesse ou en temps réel car il gère le tampon avec une logique de contrôle dédiée et une implication minimale du processeur. Un FIFO logiciel est plus adapté aux systèmes ou applications à faible vitesse où le matériel dédié FIFO n’est pas disponible et où une plus grande flexibilité d’implémentation est nécessaire.

Q5. Quelles sont les causes les plus courantes de corruption des données FIFO, et comment peut-on les prévenir ?

La corruption des données FIFO est souvent causée par une synchronisation incorrecte des pointeurs, l’ignorance des drapeaux d’état Plein ou Vide, une initialisation de réinitialisation incorrecte ou une mauvaise conception du croisement du domaine d’horloge. En utilisant des techniques de synchronisation appropriées, en vérifiant les indicateurs d’état avant chaque opération de lecture ou d’écriture, et en testant minutieusement le FIFO dans des conditions de fonctionnement maximales, cela permet d’assurer un transfert de données fiable.