FR 2950173 A1 20110318 FR 0956261 A 20090911 La présente invention concerne un contrôleur d'accès direct en mémoire, un procédé de transfert de données depuis au moins une source de données vers au moins un destinataire de ces données mis en oeuvre par ce contrôleur et un programme d'ordinateur correspondant. Un tel contrôleur, qualifié de contrôleur DMA (de l'Anglais « Direct Memory Access »), est généralement utilisé dans un dispositif de traitement de données à unité centrale de traitement tel que par exemple un circuit intégré. Il permet de transférer des données traitées ou fournies par l'unité centrale de traitement, en provenance de ou allant vers un périphérique tel qu'un port de communication, un disque dur ou une mémoire quelconque, entre ce périphérique et une mémoire locale du dispositif par exemple, sans intervention de l'unité centrale de traitement si ce n'est pour initier et conclure le transfert. Un contrôleur DMA est par exemple très utile dans un système où des accès répétés à des périphériques rapides pourraient sinon presque bloquer ou au moins ralentir le traitement effectué par l'unité centrale. Sa présence optimise le temps de traitement des applications logicielles exécutées par l'unité centrale en laissant le contrôleur DMA gérer les transferts de données depuis et vers la mémoire locale. L'invention s'applique plus particulièrement à un contrôleur d'accès direct en mémoire pour le transfert de données depuis au moins une source de données vers au moins un destinataire de ces données, via une mémoire tampon circulaire comprenant un nombre prédéterminé d'emplacements élémentaires de mémoire successifs, chaque emplacement élémentaire étant identifié par une adresse comprise entre une adresse de base et une adresse de sommet de la mémoire tampon circulaire, le contrôleur d'accès comportant un module de gestion d'écritures conçu pour écrire des données reçues de la source dans la mémoire tampon circulaire et des moyens de stockage d'un premier pointeur de lecture et d'un deuxième pointeur d'écriture, ledit pointeur de lecture, respectivement d'écriture, indiquant un emplacement élémentaire de la mémoire tampon circulaire dans lequel une donnée peut être lue, respectivement écrite. Un tel contrôleur DMA est par exemple décrit dans le brevet européen publié sous le numéro EP 0 933 926. Son rôle est d'écrire, dans des mémoires tampon, des données qui sont lues successivement par des décodeurs destinataires ayant accès en lecture à ces mémoires tampon. Un pointeur d'écriture, défini pour chaque mémoire tampon, est incrémenté d'une adresse d'emplacement élémentaire de mémoire à chaque opération d'écriture par le contrôleur DMA d'une donnée dans la mémoire tampon correspondante. De même, un pointeur de lecture, défini pour chaque mémoire tampon, est incrémenté d'une adresse d'emplacement élémentaire de mémoire à chaque opération de lecture par l'un des destinataires d'une donnée dans la mémoire tampon correspondante. Chaque mémoire tampon occupe un espace mémoire compris entre une adresse de base et une adresse de sommet. Les pointeurs d'écriture et de lecture d'une mémoire tampon sont alors incrémentés entre l'adresse de base et l'adresse de sommet de cette mémoire tampon et reviennent à l'adresse de base par incrémentation après avoir atteint l'adresse de sommet : c'est ce qui permet de qualifier ces mémoires tampon de « mémoires tampon circulaires ». L'avantage de cette configuration de mémoire tampon circulaire de type FIFO (de l'Anglais « First ln First Out ») est d'éviter des contraintes de réallocation de mémoire en cas de réception de données supplémentaires, puisque tout se passe comme s'il était possible d'écrire indéfiniment des données dans une telle mémoire FIFO tant que l'adresse vers laquelle pointe le pointeur d'écriture n'atteint pas celle vers laquelle pointe le pointeur de lecture, c'est-à-dire tant que la mémoire n'est pas pleine. Mais la taille de la mémoire tampon circulaire doit alors être suffisamment grande pour qu'en fonctionnement normal elle ne se remplisse jamais, ce qui nécessite de réserver a priori un espace mémoire important pour cette mémoire circulaire. Une solution partielle à ce problème est fournie par le document EP 0 933 926. Lorsque l'une des mémoires tampon circulaires est pleine et que le contrôleur DMA écrit une donnée à un emplacement où est stockée une donnée non encore lue par le destinataire concerné, en d'autres termes lorsque le pointeur d'écriture atteint ou dépasse le pointeur de lecture de cette mémoire tampon circulaire, une erreur est signalée. Mais cette solution n'est pas satisfaisante dans la plupart des cas, car les données initiales correspondant aux emplacements réécrits sont alors perdues. En outre, cette solution ne résout pas non plus le cas où l'un des destinataires cherche à lire une donnée alors que la mémoire tampon circulaire qui lui est associée est vide ou que les données qu'elle stocke sont obsolètes, en d'autres termes lorsque le pointeur de lecture atteint ou dépasse le pointeur d'écriture de cette mémoire tampon circulaire. Il peut ainsi être souhaité de prévoir un contrôleur d'accès direct en mémoire qui permette de s'affranchir des problèmes et contraintes précités. L'invention a donc pour objet un contrôleur d'accès direct en mémoire pour le transfert de données depuis au moins une source de données vers au moins un destinataire de ces données, via une mémoire tampon circulaire comprenant un nombre prédéterminé d'emplacements élémentaires de mémoire successifs, chaque emplacement élémentaire étant identifié par une adresse comprise entre une adresse de base et une adresse de sommet de la mémoire tampon circulaire, le contrôleur d'accès comportant un module de gestion d'écritures conçu pour écrire des données reçues de la source dans la mémoire tampon circulaire et des moyens de stockage d'un premier pointeur de lecture et d'un deuxième pointeur d'écriture, ledit pointeur de lecture, respectivement d'écriture, indiquant un emplacement élémentaire de la mémoire tampon circulaire dans lequel une donnée peut être lue, respectivement écrite, comportant en outre un module de gestion de lectures conçu pour lire des données stockées dans la mémoire tampon circulaire et les transférer vers le destinataire et des moyens de blocage en lecture, respectivement en écriture, dans la mémoire tampon circulaire en fonction des positions relatives des emplacements élémentaires indiqués par lesdits pointeurs de lecture et d'écriture. Ainsi, la mémoire tampon circulaire remplit une fonction de tampon intermédiaire à lecture/écriture bloquante entre la source et le destinataire. Cette fonction est gérée à l'aide des pointeurs de lecture et d'écriture par le contrôleur d'accès direct en mémoire qui possède les accès en écriture et en lecture dans cette mémoire tampon circulaire. De cette manière, il est capable de synchroniser le ou les flux de données entrant(s) (flux engendré par la ou les source(s)) avec le ou les flux de données sortant(s) (flux engendré par le ou les destinataire(s)) sans avoir besoin de se synchroniser avec l'unité centrale de traitement. De façon optionnelle, les moyens de stockage comportent en outre un troisième pointeur de lecture ou d'écriture, différent des premier et deuxième pointeurs, le contrôleur comportant des moyens d'exécution d'un micrologiciel de mise à jour du troisième pointeur, à chaque lecture ou écriture effectuée par ce troisième pointeur, selon une logique de mise à jour prédéterminée. Par micrologiciel, on entend un logiciel embarqué dans un composant matériel tel qu'un circuit intégré, plus précisément dans une mémoire volatile ou non de ce composant. Ce terme est utilisé dans la suite de la description comme une traduction du terme Anglais « firmware ». Ainsi, il est possible d'envisager davantage de souplesse dans la lecture ou l'écriture de données dans la mémoire tampon circulaire sans que le contrôleur d'accès direct en mémoire ne perde sa capacité à synchroniser les flux entrant et sortant. De façon optionnelle également, la logique de mise à jour prédéterminée comporte au moins un saut d'adresse dans la mémoire tampon circulaire. Ainsi, la mémoire tampon circulaire dont le contrôleur d'accès direct en mémoire gère le suivi des lectures et écritures n'est pas utilisée par le contrôleur comme une simple liste de type FIFO. Grâce à une programmation prédéterminée des mises à jour du troisième pointeur d'écriture ou de lecture selon une logique prédéterminée comportant au moins un saut d'adresse, par opposition à une logique purement incrémentale, il est possible de changer la séquence des données, entre leur réception depuis la source et leur émission vers le destinataire via la mémoire tampon circulaire. De façon optionnelle également, les moyens de blocage en lecture sont conçus pour bloquer toute lecture de donnée dans la mémoire tampon circulaire lorsqu'une mise à jour du premier pointeur de lecture fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le deuxième pointeur d'écriture, et les moyens de blocage en écriture sont conçus pour bloquer toute écriture de donnée dans la mémoire tampon circulaire lorsqu'une mise à jour du deuxième pointeur d'écriture fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le premier pointeur de lecture. De façon optionnelle également, le premier pointeur de lecture est un pointeur de lecture à libération d'espace mémoire pour l'écriture de données, le troisième pointeur est un pointeur de lecture à conservation de données lues, et le micrologiciel est conçu pour la mise à jour uniquement des pointeurs de lecture, le pointeur d'écriture étant mis à jour automatiquement par incrémentation sans saut d'adresse à chaque opération d'écriture d'une donnée dans la mémoire tampon circulaire. Dans ce cas, de façon optionnelle, le contrôleur d'accès direct en mémoire peut comporter des moyens de libération d'espace mémoire dans la mémoire tampon circulaire conçus pour libérer, pour une écriture de données, un espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par le premier pointeur de lecture, à chaque mise à jour de ce dernier par l'exécution du micrologiciel. De façon optionnelle également, le deuxième pointeur d'écriture est un pointeur d'écriture à réservation d'espace mémoire pour l'écriture de données, le troisième pointeur est un pointeur d'écriture, et le micrologiciel est conçu pour la mise à jour uniquement des pointeurs d'écriture, le pointeur de lecture étant mis à jour automatiquement par incrémentation sans saut d'adresse à chaque opération de lecture d'une donnée dans la mémoire tampon circulaire. Dans ce cas, de façon optionnelle, le contrôleur d'accès direct en mémoire peut comporter des moyens de réservation d'espace mémoire dans la mémoire tampon circulaire conçus pour réserver, pour une écriture de données, un espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par le deuxième pointeur d'écriture, à chaque mise à jour de ce dernier par l'exécution du micrologiciel. L'invention a également pour objet un procédé de transfert de données depuis au moins une source de données vers au moins un destinataire de ces données par un contrôleur d'accès direct en mémoire tel que défini précédemment, tel que, chaque donnée reçue de la source étant émise par le contrôleur vers une mémoire tampon circulaire et chaque donnée à transmettre au destinataire étant lue dans la mémoire tampon circulaire par le contrôleur, il comporte des étapes de blocage en lecture par le contrôleur dans la mémoire tampon circulaire et de blocage en écriture par le contrôleur dans la mémoire tampon circulaire en fonction des positions relatives des emplacements élémentaires indiqués par les pointeurs de lecture et d'écriture. Enfin, l'invention a également pour objet un programme d'ordinateur téléchargeable depuis un réseau de communication et/ou enregistré sur un support lisible par ordinateur et/ou exécutable par un contrôleur d'accès direct en mémoire, comprenant des instructions de code de programme pour l'exécution des étapes d'un procédé de transfert de données tel que défini précédemment lorsque ledit programme est exécuté par un contrôleur d'accès direct en mémoire. L'invention sera mieux comprise à l'aide de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux dessins annexés dans lesquels : la figure 1 représente schématiquement la structure générale d'un contrôleur d'accès direct en mémoire, selon un mode de réalisation de l'invention, la figure 2 représente schématiquement la structure générale d'un circuit intégré à microprocesseur, comportant le contrôleur d'accès direct en mémoire de la figure 1, les figures 3A et 3B représentent schématiquement la structure d'une mémoire tampon circulaire gérée par le contrôleur d'accès direct en mémoire de la figure 1, et la figure 4 illustre les étapes successives d'un procédé de transfert de données, selon un mode de réalisation de l'invention. Le contrôleur d'accès direct en mémoire ou contrôleur DMA 10 représenté sur la figure 1 a pour fonction de transférer des données depuis au moins une source de données 12 vers au moins un destinataire 14 de ces données via une mémoire tampon circulaire 16 comportant un nombre prédéterminé d'emplacements élémentaires de mémoire successifs. Le contrôleur DMA 10 est apte à accéder en écriture et en lecture aux emplacements élémentaires de la mémoire tampon circulaire 16 par l'intermédiaire d'un module 18 de commande des accès en écriture et en lecture de données s'interfaçant entre le contrôleur DMA 10 et un support de stockage intégrant la mémoire tampon circulaire 16. On notera que dans une variante de réalisation, le contrôleur DMA, portant alors la référence 20, inclut le support de stockage intégrant la mémoire tampon circulaire 16 et le module 18 de commande des accès en écriture et en lecture. En pratique, il peut se présenter sous la forme d'un système sur puce autonome, par exemple un circuit intégré de type CMOS. A titre d'exemple non limitatif d'implémentation, selon une architecture envisageable dite de type NoC (de l'Anglais « Network on Chip ») ou réseau sur puce, le contrôleur DMA 10 ou 20 est considéré comme constitué d'éléments fonctionnels communiquant entre eux par l'intermédiaire de liens d'un réseau à commutation de paquets. Conformément à cette architecture pour réaliser le transfert de données depuis la source 12 vers le destinataire 14, le contrôleur DMA 10 ou 20 comporte les éléments suivants : un lien 22 de réception de données en provenance de la source 12, un module 24 de gestion des écritures de données par le contrôleur 10 ou 20 dans la mémoire tampon circulaire 16, ce module étant activé par des données qu'il reçoit du lien 22, un lien 26 d'émission de données vers la mémoire tampon circulaire 16 pour l'écriture de ces données dans des emplacements élémentaires de la mémoire par l'intermédiaire du module 18 de commande des accès en écriture et en lecture, un lien 28 de réception de données en provenance de la mémoire tampon circulaire 16 pour la lecture de ces données dans des emplacements élémentaires de la mémoire par l'intermédiaire du module 18 de commande des accès en écriture et en lecture, un module 30 de gestion des lectures de données par le contrôleur 10 ou 20 dans la mémoire tampon circulaire 16, apte à recevoir les données fournies par le lien 28, et un lien 32 d'émission des données lues vers le destinataire 14. Grâce à ces éléments, le contrôleur DMA 10 ou 20 émet chaque donnée reçue de la source 12 vers la mémoire tampon circulaire 16, chaque donnée destinée à être transmise au destinataire 14 étant ensuite lue dans la mémoire tampon circulaire 16 par le contrôleur DMA 10 ou 20. La mémoire tampon circulaire 16 remplit ainsi une fonction de tampon intermédiaire entre la source 12 et le destinataire 14. De façon optionnelle, le lien 22 de réception de données comprend une mémoire tampon d'entrée 34 de type FIFO, permettant par exemple de stocker temporairement des données reçues de la source 12 alors que la mémoire tampon circulaire 16 est bloquée en écriture parce qu'elle est pleine. De façon optionnelle également, le lien 32 d'émission des données lues comprend une mémoire tampon de sortie 36 de type FIFO, permettant par exemple de stocker temporairement des données lues dans la mémoire tampon circulaire 16 alors que le destinataire 14 n'est pas encore prêt à les recevoir ou alors que le réseau de sortie est temporairement saturé. Pour synchroniser le flux de données entrant dans le contrôleur DMA et le flux de données sortant du contrôleur DMA, celui-ci comporte en outre des moyens 38 de stockage de descripteurs de la mémoire tampon circulaire 16. Ces descripteurs comportent au moins un pointeur de base PB pointant vers une adresse de base de la mémoire tampon circulaire 16 dans son support de stockage, un pointeur de sommet PS pointant vers une adresse de sommet de la mémoire tampon circulaire 16 dans son support de stockage, un pointeur d'écriture PE pointant vers une adresse d'emplacement élémentaire de la mémoire tampon circulaire 16 où une prochaine donnée reçue par le contrôleur DMA 10 ou 20 peut être écrite et un pointeur de lecture PL pointant vers une adresse d'emplacement élémentaire de la mémoire tampon circulaire 16 où une prochaine donnée peut être lue pour être transmise au destinataire. Puisque la mémoire tampon 16 est une mémoire circulaire dont la taille est définie par le nombre d'emplacements élémentaires compris entre les adresses de base et de sommet désignées par les pointeurs PB et PS, chaque emplacement élémentaire de cette mémoire vers lequel peuvent pointer les pointeurs d'écriture et de lecture PE et PL est identifié par une adresse comprise entre l'adresse de base et l'adresse de sommet. Les pointeurs de base et de sommet PB et PS sont prédéterminés et destinés à rester constants alors que les pointeurs d'écriture PE, respectivement de lecture PL, sont variables et destinés à être mis à jour, par exemple par incrémentation d'un emplacement élémentaire dans le sens de la base vers le sommet, suite à une opération d'écriture, respectivement de lecture, dans la mémoire tampon circulaire. Comme indiqué précédemment, la circularité de cette mémoire tampon 16 est liée au fait que lorsqu'un pointeur d'écriture ou de lecture atteint l'adresse de sommet de la mémoire, une incrémentation de ce pointeur d'un emplacement élémentaire le fait pointer sur l'adresse de base de la mémoire. Par conséquent, les données stockées temporairement dans la mémoire tampon circulaire 16 en attendant d'être lues par le contrôleur DMA 10 ou 20 pour être transmises au destinataire 14 sont situées entre l'adresse du pointeur de lecture PL et l'adresse précédant celle du pointeur d'écriture PE dans le sens de la base vers le sommet. En revanche, l'espace mémoire situé dans la mémoire tampon circulaire entre l'adresse du pointeur d'écriture PE et l'adresse précédant celle du pointeur de lecture PL dans le sens de la base vers le sommet est un espace libre pour l'écriture. Cette structure de la mémoire tampon circulaire 16 associée aux descripteurs PB, PS, PE et PL est illustrée sur les figures 3A et 3B qui seront détaillées ultérieurement. Sur la base de ces considérations, le module 24 de gestion des écritures de données est conçu pour écrire une donnée, ou au contraire bloquer son écriture, dans la mémoire tampon circulaire 16 en fonction notamment des valeurs des pointeurs d'écriture et de lecture PE et PL. Il est également conçu pour mettre à jour le pointeur d'écriture PE, soit de façon automatique à l'aide d'un séquenceur en l'incrémentant d'un emplacement élémentaire, soit de façon prédéterminée par l'exécution d'un micrologiciel 40 par exemple stocké dans le même support de stockage que la mémoire tampon circulaire 16. Plus précisément, dans un mode de réalisation simple de l'invention, une donnée à écrire dans la mémoire tampon circulaire 16 doit être écrite à l'adresse indiquée par le pointeur d'écriture PE ; son écriture doit être bloquée si une mise à jour du pointeur d'écriture PE réalisée précédemment par le module 24 de gestion des écritures fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le pointeur de lecture PL (mémoire pleine). Sur la base de ces mêmes considérations, le module 30 de gestion des lectures de données est conçu pour lire une donnée, ou au contraire bloquer sa lecture, dans la mémoire tampon circulaire 16 en fonction notamment des valeurs des pointeurs d'écriture et de lecture PE et PL. Il est également conçu pour mettre à jour le pointeur de lecture PL, soit de façon automatique à l'aide d'un séquenceur en l'incrémentant d'un emplacement élémentaire, soit de façon prédéterminée par l'exécution d'un micrologiciel 40 par exemple stocké dans le même support de stockage que la mémoire tampon circulaire 16. Plus précisément, dans un mode de réalisation simple de l'invention, une donnée à lire dans la mémoire tampon circulaire 16 doit être lue à l'adresse indiquée par le pointeur de lecture PL ; sa lecture doit être bloquée si une mise à jour du pointeur de lecture PL réalisée précédemment par le module 30 de gestion des lectures fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le pointeur d'écriture PE (mémoire vide). Concrètement, pour que les blocages et déblocages en lecture et écriture dans la mémoire tampon circulaire 16 fonctionnent comme indiqué ci-dessus, le module 24 de gestion des écritures peut être programmé pour, après chaque mise à jour du pointeur d'écriture PE : bloquer toute écriture de données dans la mémoire tampon circulaire 16 si le pointeur d'écriture PE atteint le pointeur de lecture PL (indication que la mémoire est pleine), et débloquer la lecture de données dans la mémoire tampon circulaire 16 si celle-ci était bloquée et que le pointeur d'écriture PE dépasse de nouveau le pointeur de lecture PL. De même, le module 30 de gestion des lectures peut être programmé pour, après chaque mise à jour du pointeur de lecture PL : bloquer toute lecture de données dans la mémoire tampon circulaire 16 si le pointeur de lecture PL atteint le pointeur d'écriture PE (indication que la mémoire est vide), et débloquer l'écriture de données dans la mémoire tampon circulaire 16 si celle-ci était bloquée et que le pointeur de lecture PL dépasse de nouveau le pointeur d'écriture PE. De cette façon, le module 24 de gestion des écritures remplit une fonction de blocage en écriture lorsque la mémoire 16 est pleine et de déblocage en lecture lorsque la mémoire vide se remplit de nouveau. Le module 30 de gestion des lectures remplit une fonction de blocage en lecture lorsque la mémoire 16 est vide et de déblocage en écriture lorsque la mémoire pleine se vide de nouveau. Le fonctionnement détaillé ci-dessus des modules 24 et 30 de gestion des écritures et lectures n'est qu'un exemple de mise en oeuvre des moyens de blocage en écriture et en lecture dans la mémoire tampon circulaire 16 à l'aide des pointeurs de lecture et d'écriture PL et PE, mais il apparaîtra à l'homme du métier que d'autres implémentations ou variantes sont envisageables pour rendre la mémoire tampon circulaire 16 à lectures et écritures bloquantes en fonction de la valeur des pointeurs de lecture et d'écriture PL et PE. Ces caractéristiques rendent le contrôleur DMA 10 ou 20 capable de synchroniser le flux entrant de données en provenance de la source 12 et le flux sortant vers le destinataire 14. Il en résulte un avantage illustré sur la figure 2. Sur cette figure, un circuit intégré 50 comporte un microprocesseur 52, la source de données 12 qui est par exemple une mémoire locale de stockage temporaire des données traitées ou utilisées par le microprocesseur 52, le destinataire 14 qui est par exemple un périphérique ou opérateur fonctionnel quelconque et le contrôleur DMA conforme à sa variante de réalisation 20 incluant la mémoire tampon circulaire 16. Tous ces éléments 52, 12, 14 et 20 sont reliés entre eux par un bus 54 de transmission de données classique. En fonctionnement normal du microprocesseur 52 et du contrôleur DMA 20, le microprocesseur transfère des données vers la source 12 (étape B), par exemple dans une mémoire tampon de celle-ci, indépendamment des transferts réalisés par le contrôleur DMA entre la source 12 et le destinataire 14 (étape C). Ceci est en effet rendu possible par la fonction de synchronisation que peut remplir le contrôleur DMA 20 tel que décrit précédemment, grâce à sa mémoire tampon circulaire 16 à écritures et lectures bloquantes. En revanche, si le contrôleur DMA 20 ne pouvait pas remplir cette fonction, un protocole classique de requêtes (étape A) et d'acquittements (étape D) devrait être mis en oeuvre entre le microprocesseur 52 et le contrôleur DMA 20, associé à une écriture par blocs de données entre le microprocesseur 52 et la source 12. Le transfert de données entre la source 12 et le destinataire 14 serait ainsi réalisé par la succession des étapes suivantes : transmission A par le microprocesseur 52 d'une requête de transfert d'un bloc de données au contrôleur DMA, transmission B du bloc de données du microprocesseur 52 vers la mémoire tampon définie à cet effet dans la source 12, transfert C du bloc de données par le contrôleur DMA de la source 12 vers le destinataire 14, transmission D par le contrôleur DMA d'un acquittement au microprocesseur 52 pour permettre l'envoi d'un nouveau bloc de données. Il apparaît donc clairement que le contrôleur DMA 20 tel que décrit précédemment, prévoyant une synchronisation au niveau de chaque donnée transférée, permet de simplifier les étapes du transfert des données notamment en se passant des étapes A et D. En combinaison avec cette fonction de synchronisation, il est possible, dans un mode de réalisation de l'invention, de prévoir un micrologiciel (par exemple le micrologiciel 40) conçu pour mettre à jour au moins l'un des pointeurs de lecture et d'écriture associés à la mémoire tampon circulaire 16 selon une logique de mise à jour prédéterminée pour ajouter de la souplesse dans les opérations de lecture ou d'écriture. Dans ce cas, pour ne pas perdre la capacité de synchronisation du contrôleur DMA 10 ou 20, il convient de définir un nouveau pointeur de lecture ou d'écriture, dit pointeur de travail et portant la référence PT sur les figures 3A et 3B. Ce pointeur de travail est différent des pointeurs d'écriture et de lecture PE et PL définis précédemment. Comme eux, il est stocké dans les moyens de stockage 38. Il est variable et destiné à être mis à jour par le micrologiciel 40 après chaque opération de lecture ou d'écriture qu'il réalise. En particulier, le micrologiciel 40 peut être défini pour que la logique de mise à jour du pointeur de travail PT comporte au moins un saut d'adresse dans la mémoire tampon circulaire 16. En introduisant ce nouveau pointeur PT et le micrologiciel associé 40 qui permet par exemple son déplacement par sauts d'adresses, en avant ou en arrière comme illustré sur la figure 3A, dans la mémoire tampon circulaire 16, celle-ci dont le contrôleur DMA 10 ou 20 gère le suivi des lectures et écritures n'est pas utilisée comme une simple liste de type FIFO. Elle permet au contrôleur DMA 10 ou 20 de réordonner lui-même la séquence des données à transférer entre la source 12 et le destinataire 14. Dans une variante de réalisation préférée, le pointeur de travail PT est un pointeur de lecture. Dans cette variante, le premier pointeur de lecture PL est un pointeur de lecture à libération d'espace mémoire pour l'écriture de données. En d'autre termes, chaque fois qu'il est mis à jour, l'espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par ce premier pointeur de lecture PL est automatiquement libéré pour l'écriture. Cela vient du fait que, comme indiqué précédemment, l'espace mémoire situé dans la mémoire tampon circulaire 16 entre l'adresse du pointeur d'écriture PE et l'adresse précédant celle du pointeur de lecture PL dans le sens de la base vers le sommet est considéré par principe comme un espace libre pour l'écriture. Le pointeur de travail PT est, quant à lui, un pointeur de lecture à conservation des données lues. Autrement dit, lorsqu'une donnée doit être lue dans la mémoire tampon circulaire 16 pour être transmise au destinataire 14, elle est lue à l'adresse indiquée par le pointeur de travail PT, mais la mise à jour du pointeur de travail PT après cette lecture ne libère pas l'emplacement élémentaire correspondant pour l'écriture. En effet, les déplacements en lecture du pointeur de travail PT ne sont pas nécessairement incrémentaux : ils sont librement prédéterminés par le micrologiciel 40 dans un ordre arbitraire, de préférence entre le premier pointeur de lecture PL et le pointeur d'écriture PE. Selon les applications, une donnée lue une première fois par le pointeur de travail PT peut notamment être relue et les données peuvent être lues dans un ordre différent de celui de leur stockage dans la mémoire tampon circulaire 16 : c'est donc uniquement une mise à jour du premier pointeur de lecture qui peut libérer de l'espace mémoire. Par exemple, dans une application de transmission d'un flux de données vidéo conforme au standard MPEG 2 ou 4 (de l'Anglais « Moving Picture Expert Group »), pour huit lignes de coefficients vidéo stockées dans la mémoire tampon circulaire 16, le micrologiciel 40 peut comporter des instructions pour déplacer le pointeur de travail PT de macrobloc 8x8 en macrobloc 8x8 et selon un ordre prédéterminé dans chaque macrobloc. Lorsque tous les macroblocs de ces huit lignes ont été lus par le pointeur de travail PT, les huit lignes de coefficients vidéo sont alors libérées dans la mémoire tampon par une mise à jour microprogrammée du premier pointeur de lecture PL. On note donc que dans cette variante de réalisation où le pointeur de travail PT est un pointeur de lecture, le micrologiciel 40 comporte des instructions, exécutées par le module 30 de gestion des lectures pour la mise à jour des deux pointeurs de lecture : - des instructions pouvant inclure des sauts d'adresse en avant et/ou en arrière selon l'application visée pour le pointeur de travail PT, des instructions pouvant inclure des sauts d'adresse, mais uniquement en avant et en fonction des déplacements programmés pour le pointeur de travail PT, pour le premier pointeur de lecture PL. En revanche, le micrologiciel 40 ne comporte pas d'instructions pour la mise à jour du pointeur d'écriture PE, celui-ci étant par exemple mis à jour par un séquenceur sans saut d'adresse et de façon incrémentale à chaque opération d'écriture d'une donnée dans la mémoire tampon circulaire 16. On notera également que, comme illustré sur la figure 3A, les déplacements du pointeur de travail PT doivent être programmés pour qu'il pointe dans la zone de la mémoire tampon circulaire 16 qui comporte effectivement des données à lire. S'il pointe, après une mise à jour, à l'extérieur de cette zone, comme illustré sur la figure 3B, alors il peut être prévu selon les applications visées, soit d'engendrer un message d'erreur, soit de le bloquer à cette position jusqu'à ce que le pointeur d'écriture PE le rattrape. Dans une variante de réalisation symétrique de la précédente, le pointeur de travail PT peut être un pointeur d'écriture. Dans cette seconde variante, le pointeur d'écriture PE est un pointeur d'écriture à réservation d'espace mémoire pour l'écriture de données dans la mémoire tampon circulaire 16. En d'autre termes, chaque fois qu'il est mis à jour, l'espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par ce pointeur d'écriture PE est automatiquement réservé pour l'écriture. Le pointeur de travail PT est, quant à lui, un pointeur d'écriture effective à écriture de données dans un ordre quelconque prédéterminé dans l'espace mémoire réservé par le pointeur PE. Autrement dit, lorsqu'une donnée doit être écrite dans la mémoire tampon circulaire 16, elle l'est à l'adresse indiquée par le pointeur de travail PT, dont la mise à jour n'obéit pas nécessairement à une logique incrémentale. Ses déplacements sont librement prédéterminés par le micrologiciel 40 dans un ordre arbitraire dans l'espace mémoire réservé. On note donc que dans cette seconde variante de réalisation où le pointeur de travail PT est un pointeur d'écriture, le micrologiciel 40 comporte des instructions, exécutées par le module 24 de gestion des écritures pour la mise à jour des deux pointeurs d'écriture : des instructions pouvant inclure des sauts d'adresse en avant et/ou en arrière selon l'application visée pour le pointeur de travail PT, des instructions pouvant inclure des sauts d'adresse, mais uniquement en avant et en fonction des déplacements programmés pour le pointeur de travail PT, pour le pointeur d'écriture PE. En revanche, le micrologiciel 40 ne comporte pas d'instructions pour la mise à jour du pointeur de lecture PL, celui-ci étant par exemple mis à jour par un séquenceur sans saut d'adresse et de façon incrémentale à chaque opération de lecture d'une donnée dans la mémoire tampon circulaire 16. Un exemple de procédé de transfert de données pouvant être mis en oeuvre par le contrôleur DMA 10 ou 20 va maintenant être détaillé, dans le contexte de la première variante de réalisation précitée, dans laquelle le pointeur de travail PT est un pointeur de lecture à conservation des données lues. Les étapes successives de ce procédé sont illustrées sur la figure 4. Au cours d'une première étape 100, le contrôleur 10 ou 20 est en attente d'une instruction de lecture ou d'écriture d'une donnée dans la mémoire tampon circulaire 16. Cette étape 100 est suivie d'une étape 102 de déclenchement d'écriture, sur instruction d'écrire une donnée dans la mémoire tampon circulaire 16. Lors de cette étape de déclenchement d'écriture, le module 24 de gestion des écritures est activé. A titre d'exemple de réalisation non limitatif, il extrait des moyens de stockage 28 la valeur d'un premier descripteur indiquant si l'écriture dans la mémoire tampon circulaire 16 est bloquée ou non. Ensuite, au cours d'une étape de test 104, selon la valeur de ce premier descripteur, il est décidé de poursuivre ou non l'écriture de la donnée considérée. Si le premier descripteur indique que l'écriture est bloquée, on passe de nouveau à l'étape 100, sinon on passe à une étape 106. Au cours de l'étape 106, le module 24 de gestion des écritures extrait des moyens de stockage 28 l'adresse vers laquelle pointe le pointeur d'écriture PE. Il exécute alors l'écriture de la donnée considérée dans l'emplacement élémentaire correspondant. Puis, au cours d'une étape 108 de mise à jour, l'adresse pointée par le pointeur d'écriture PE est incrémentée d'un emplacement élémentaire dans la mémoire tampon circulaire 16. Enfin, lors d'une étape 110, le module 24 de gestion des écritures extrait des moyens de stockage 28 l'adresse vers laquelle pointe le premier pointeur de lecture PL puis met éventuellement à jour la valeur du premier descripteur de blocage des écritures et celle d'un second descripteur de blocage des lectures, dans les situations suivantes : si après la mise à jour de l'étape 108, l'adresse pointée par le pointeur d'écriture PE atteint celle pointée par le premier pointeur de lecture PL (indication que la mémoire 16 est pleine), modification du premier descripteur pour que ce dernier indique un blocage des écritures, si après la mise à jour de l'étape 108, l'adresse pointée par le pointeur d'écriture PE diffère de celle pointée par le premier pointeur de lecture PL alors que le second descripteur indique un blocage des lectures, modification du second descripteur pour ce dernier indique une autorisation des lectures. L'étape 110 est suivie d'un retour à l'étape 100. L'étape 100 est aussi suivie d'une étape 112 de déclenchement de lecture, sur instruction de lire une donnée dans la mémoire tampon circulaire 16. Lors de cette étape de déclenchement de lecture, le module 30 de gestion des lectures est activé. A titre d'exemple de réalisation non limitatif, il extrait des moyens de stockage 28 la valeur du second descripteur indiquant si la lecture dans la mémoire tampon circulaire 16 est bloquée ou non. Ensuite, au cours d'une étape de test 114, le module 30 de gestion des lectures détermine si le destinataire 14 est prêt à recevoir la donnée considérée. Ce test peut être fait de plusieurs façons. Si le contrôleur DMA 10 ou 20 comporte le tampon de sortie 36, alors il peut être considéré qu'un transfert de donnée peut être effectué tant que ce tampon de sortie 36 n'est pas plein. A défaut, un protocole de communication classique peut prévoir que le destinataire 14 informe le contrôleur DMA 10 ou 20 de sa capacité à recevoir des données par des messages au format prédéterminé. Si le transfert de la donnée au destinataire 14 n'est pas possible, on passe de nouveau à l'étape 100, sinon on passe à une autre étape de test 116. Au cours de cette étape de test 116, selon la valeur du second descripteur, il est décidé de poursuivre ou non la lecture de la donnée considérée. Si le second descripteur indique que la lecture est bloquée, on passe de nouveau à l'étape 100, sinon on passe à une étape de lecture 118. Au cours de cette étape 118, le module 30 de gestion des lectures extrait des moyens de stockage 28 l'adresse vers laquelle pointe le pointeur de travail PT. Il exécute alors la lecture de la donnée considérée dans l'emplacement élémentaire correspondant. Puis, au cours d'une étape 120 de mise à jour, l'adresse pointée par le pointeur de travail PT est mise à jour, soit vers l'avant, soit vers l'arrière, d'un ou plusieurs emplacements élémentaires, par le module 30 de gestion des lectures en fonction des instructions du micrologiciel 40. Si cela est aussi prévu par les instructions du micrologiciel 40, le premier pointeur de lecture PL peut être mis à jour également à cette étape, vers l'avant et d'un ou plusieurs emplacements élémentaires. Enfin, lors d'une étape 122, le module 30 de gestion des lectures met éventuellement à jour la valeur du premier descripteur de blocage des écritures et celle du second descripteur de blocage des lectures, dans les situations suivantes : si après la mise à jour de l'étape 120, l'adresse pointée par le premier pointeur de lecture PL atteint celle pointée par le pointeur d'écriture PE (indication que la mémoire 16 est vide), modification du second descripteur pour que ce dernier indique un blocage des lectures, si après la mise à jour de l'étape 120, l'adresse pointée par le premier pointeur de lecture PL diffère de celle pointée par le pointeur d'écriture PE alors que le premier descripteur indique un blocage des écritures, modification du premier descripteur pour que ce dernier indique une autorisation des écritures. L'étape 122 est suivie d'un retour à l'étape 100. Il apparaît clairement que le contrôleur d'accès direct en mémoire décrit précédemment et son fonctionnement pour le transfert de données permettent non seulement de se passer d'une synchronisation entre un microprocesseur et le contrôleur qui lui est associé, mais aussi d'ajouter de la souplesse dans le transfert des données, notamment lorsque la séquence de données souhaitée par le destinataire n'est pas la même que celle fournie par la source. C'est par exemple une propriété utile dans des applications de traitement et transfert de données d'images ou de vidéo dans le contexte des standards MPEG. On notera aussi que l'invention ne se limite pas aux modes de réalisation envisagés. Notamment, dans ce qui précède, pour simplifier la description il a été envisagé une application où le transfert se fait à partir d'une seule source vers un seul destinataire, mais le principe de l'invention s'applique de la même manière avec plusieurs sources et/ou plusieurs destinataires. De même, un contrôleur d'accès direct en mémoire selon l'invention peut gérer plusieurs mémoires tampon circulaires et donc plusieurs jeux de descripteurs (pointeurs, descripteurs de blocage, etc.) associés. D'une façon plus générale, il apparaîtra à l'homme de l'art que diverses modifications peuvent être apportées aux modes de réalisation décrits ci-dessus, à la lumière de l'enseignement qui vient de lui être divulgué. Dans les revendications qui suivent, les termes utilisés ne doivent pas être interprétés comme limitant les revendications aux modes de réalisation exposés dans la présente description, mais doivent être interprétés pour y inclure tous les équivalents que les revendications visent à couvrir du fait de leur formulation et dont la prévision est à la portée de l'homme de l'art en appliquant ses connaissances générales à la mise en oeuvre de l'enseignement qui vient de lui être divulgué. REVENDICATIONS1. Contrôleur d'accès direct en mémoire (10, 20) pour le transfert de données depuis au moins une source (12) de données vers au moins un destinataire (14) de ces données, via une mémoire tampon circulaire (16) comprenant un nombre prédéterminé d'emplacements élémentaires de mémoire successifs, chaque emplacement élémentaire étant identifié par une adresse comprise entre une adresse de base et une adresse de sommet de la mémoire tampon circulaire, le contrôleur d'accès comportant un module (24) de gestion d'écritures conçu pour écrire des données reçues de la source (12) dans la mémoire tampon circulaire (16) et des moyens (38) de stockage d'un premier pointeur de lecture (PL) et d'un deuxième pointeur d'écriture (PE), ledit pointeur de lecture, respectivement d'écriture, indiquant un emplacement élémentaire de la mémoire tampon circulaire dans lequel une donnée peut être lue, respectivement écrite, caractérisé en ce qu'il comporte en outre un module (30) de gestion de lectures conçu pour lire des données stockées dans la mémoire tampon circulaire (16) et les transférer vers le destinataire (14) et des moyens (24, 30, 40) de blocage en lecture, respectivement en écriture, dans la mémoire tampon circulaire (16) en fonction des positions relatives des emplacements élémentaires indiqués par lesdits pointeurs de lecture et d'écriture. 2. Contrôleur d'accès direct en mémoire (10, 20) selon la revendication 1, dans lequel les moyens de stockage (38) comportent en outre un troisième pointeur (PT) de lecture ou d'écriture, différent des premier et deuxième pointeurs, le contrôleur comportant des moyens (24, 30) d'exécution d'un micrologiciel (40) de mise à jour du troisième pointeur (PT), à chaque lecture ou écriture effectuée par ce troisième pointeur (PT), selon une logique de mise à jour prédéterminée. 3. Contrôleur d'accès direct en mémoire (10, 20) selon la revendication 2, dans lequel la logique de mise à jour prédéterminée comporte au moins un saut d'adresse dans la mémoire tampon circulaire. 4. Contrôleur d'accès direct en mémoire (10, 20) selon la revendication 2 ou 3, dans lequel les moyens de blocage en lecture (30, 40) sont conçus pour bloquer toute lecture de donnée dans la mémoire tampon circulaire (16) lorsqu'une mise à jour du premier pointeur de lecture (PL) fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le deuxième pointeur d'écriture (PE), et dans lequel les moyens de blocage en écriture (24, 40) sont conçus pour bloquer toute écriture de donnée dans la mémoire tampon circulaire (16) lorsqu'une mise àjour du deuxième pointeur d'écriture (PE) fait que l'adresse vers laquelle il pointe atteint ou dépasse l'adresse vers laquelle pointe le premier pointeur de lecture (PL). 5. Contrôleur d'accès direct en mémoire (10, 20) selon l'une quelconque des revendications 2 à 4, dans lequel le premier pointeur de lecture (PL) est un pointeur de lecture à libération d'espace mémoire pour l'écriture de données, le troisième pointeur (PT) est un pointeur de lecture à conservation de données lues, et dans lequel le micrologiciel (40) est conçu pour la mise à jour uniquement des pointeurs de lecture (PL, PT), le pointeur d'écriture (PE) étant mis à jour automatiquement par incrémentation sans saut d'adresse à chaque opération d'écriture d'une donnée dans la mémoire tampon circulaire (16). 6. Contrôleur d'accès direct en mémoire (10, 20) selon la revendication 5, comportant des moyens (30) de libération d'espace mémoire dans la mémoire tampon circulaire (16) conçus pour libérer, pour une écriture de données, un espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par le premier pointeur de lecture (PL), à chaque mise à jour de ce dernier par l'exécution du micrologiciel (40). 7. Contrôleur d'accès direct en mémoire (10, 20) selon l'une quelconque des revendications 2 à 4, dans lequel le deuxième pointeur d'écriture (PE) est un pointeur d'écriture à réservation d'espace mémoire pour l'écriture de données, le troisième pointeur (PT) est un pointeur d'écriture, et dans lequel le micrologiciel (40) est conçu pour la mise à jour uniquement des pointeurs d'écriture (PE, PT), le pointeur de lecture (PL) étant mis à jour automatiquement par incrémentation sans saut d'adresse à chaque opération de lecture d'une donnée dans la mémoire tampon circulaire (16). 8. Contrôleur d'accès direct en mémoire (10, 20) selon la revendication 7, comportant des moyens (24) de réservation d'espace mémoire dans la mémoire tampon circulaire (16) conçus pour réserver, pour une écriture de données, un espace mémoire compris entre l'emplacement de l'ancienne adresse pointée et l'emplacement précédant celui de la nouvelle adresse pointée par le deuxième pointeur d'écriture (PE), à chaque mise à jour de ce dernier par l'exécution du micrologiciel (40). 9. Procédé de transfert de données depuis au moins une source (12) de données vers au moins un destinataire (14) de ces données par un contrôleur d'accès direct en mémoire (10, 20) selon l'une quelconque des revendications 1 à 8,caractérisé en ce que, chaque donnée reçue de la source (12) étant émise (106) par le contrôleur (10, 20) vers une mémoire tampon circulaire (16) et chaque donnée à transmettre au destinataire (14) étant lue (118) dans la mémoire tampon circulaire (16) par le contrôleur (10, 20), il comporte des étapes (110, 122) de blocage en lecture par le contrôleur dans la mémoire tampon circulaire et de blocage en écriture par le contrôleur dans la mémoire tampon circulaire en fonction des positions relatives des emplacements élémentaires indiqués par les pointeurs de lecture et d'écriture. 10. Programme d'ordinateur téléchargeable depuis un réseau de communication et/ou enregistré sur un support lisible par ordinateur et/ou exécutable par un contrôleur d'accès direct en mémoire (10, 20), caractérisé en ce qu'il comprend des instructions de code de programme pour l'exécution des étapes d'un procédé de transfert de données selon la revendication 9 lorsque ledit programme est exécuté par un contrôleur d'accès direct en mémoire.15