Brevet FR2718262A1 — publié le 19951006

MEMOIRE TAMPON A ADRESSAGE MODULO La présente invention concerne les circuits d'adressage utilisés pour commander l'accès aux emplacements mémoires à l'intérieur d'un dispositif mémoire, plus particulièrement les circuits d'adressage utilisés pour générer les adresses d'accès à des mémoires tampons circulaires. Dans de nombreux circuits électroniques, il y a besoin d'accéder à, ou d'adresser, certains emplacements mémoires consécutifs périodiquement de façon cyclique. Ceci permet d'effectuer séquentiellement un nombre illimité d'opérations de lecture ou d'écriture, en utilisant seulement une faible partie de la mémoire disponible. Un emplacement mémoire est adressé, puis le suivant et ainsi de suite jusqu'à ce que l'extrémité d'une zone mémoire prédéfinie - la mémoire tampon - soit atteinte. L'adressage revient ensuite à l'emplacement situé à l'autre extrémité de la mémoire tampon. Typiquement, l'adressage commence à l'adresse disponible la plus basse et croît jusqu'à ce qu'une limite supérieure soit atteinte, puis l'accès mémoire revient à l'adresse disponible la plus basse par transition cyclique. Bien entendu, on pourrait également faire commencer l'adressage à l'adresse disponible la plus haute et le faire décroître jusqu'à ce qu'une limite inférieure soit atteinte, puis faire revenir l'accès mémoire à l'adresse disponible la plus haute par transition cyclique. Ceci est connu sous le nom d'adressage circulaire ou adressage modulo, et la mémoire tampon est connue sous le nom de mémoire tampon à adressage circulaire ou à adressage modulo. Le calcul des adresses à utiliser pour accéder à des emplacements mémoires situés dans une telle mémoire tampon circulaire peut s'effectuer par un logiciel résidant dans un microprocesseur associé. Ces techniques logicielles demandent cependant plusieurs cycles machine pour effectuer le calcul et sont trop lentes pour certaines applications, telles que le filtrage numérique, le calcul matriciel, et de nombreuses autres routines de traitement numérique du signal. On préfère donc souvent les méthodes d'adressage réalisées de façon matérielle à cause de leur vitesse de fonctionnement. Un tel adressage modulo peut être réalisé de façon matérielle par un circuit tel que celui décrit dans la demande de brevet international PCT/US91/08102, numéro de publication WO 92/08186 de Analog Devices Inc. La Figure 1 de la présente demande représente l'organisation typique d'une mémoire tampon circulaire simple de la technique antérieure. Un ensemble d'emplacements mémoires sont dédiés à la mémoire tampon. Ces emplacements ont l'emplacement 3 comme emplacement le plus bas et l'emplacement 4 comme emplacement le plus haut. D'autres emplacements mémoire, par exemple 6, 8 sont situés à des emplacements d'adresses intermédiaires. L'adresse de l'emplacement mémoire 14 juste au-delà de la limite supérieure de la mémoire tampon est utilisée dans la procédure cyclique. Un circuit de commande permet l'accès aux emplacements mémoire de la mémoire tampon en générant et en fournissant l'adresse courante absolue de chaque emplacement mémoire à un registre pointeur. L'action de ce circuit de commande est représenté par le pointeur en déplacement 16. Supposons que l'emplacement mémoire 6 est en train d'être lu, le pointeur 16 pointant sur cet emplacement. Une fois ceci effectué, le pointeur d'adresse 16 est incrémenté de un et l'emplacement mémoire 8 est pointé en lecture ou en écriture au cours du prochain cycle. Ceci se poursuit de façon identique jusqu'à ce que l'emplacement mémoire final 4 de la mémoire tampon soit lu. L'adresse fournie au pointeur 16 est incrémentée de un et devient l'adresse de l'emplacement mémoire 14, dépassant la limite supérieure de la mémoire tampon. Le circuit de commande détecte la présence de l'adresse de l'emplacement 14 dans le registre contenant l'adresse d'entrée du pointeur, le circuit de commande remet à zéro les contenus de ce registre et on pointe sur l'emplacement mémoire 3 ayant l'adresse la plus basse qui est le prochain emplacement auquel on accède. Dans cette mémoire tampon, on accède à chaque emplacement l'un après l'autre séquentiellement. Le circuit de commande détecte que l'on a atteint l'extrémité de la mémoire tampon quand l'adresse de l'emplacement mémoire 14 situé juste au delà de la limite supérieure de la mémoire tampon est fournie au pointeur. Le circuit de commande d'une telle mémoire tampon peut être réalisé de telle sorte qu'un registre soit chargé avec (M-1), o M est le nombre d'emplacements dans la mémoire tampon, et que les contenus de ce registre soient décrémentés à chaque cycle de lecture ou d'écriture, et que lorsque les contenus du registre atteignent O, le registre soit réinitialisé à la valeur (M-l). Les contenus du registre sont ajoutés à l'adresse de l'emplacement le plus bas dans la mémoire tampon. Il n'y a aucune limitation sur la taille de la mémoire tampon, ni sur l'adresse de départ de la mémoire tampon. Elles peuvent être de taille quelconque. Cette mémoire tampon ne fonctionne pas si l'adresse est incrémentée par pas de deux emplacements mémoire ou plus, car on peut sauter l'emplacement mémoire 14. La Figure 2 représente une autre mémoire tampon circulaire de la technique antérieure. Un ensemble d'emplacements mémoire est inclus dans la mémoire tampon. La mémoire tampon contient l'emplacement 23 comme emplacement d'adresse la plus basse et l'emplacement 24 comme emplacement d'adresse la plus haute. Les emplacements mémoire 25, 27, 31, 32 sont situés entre ces deux limites. Un circuit de commande permet l'accès aux emplacements mémoire de la mémoire tampon en générant et en fournissant l'adresse absolue de chaque emplacement mémoire. Ceci est représenté par un pointeur en déplacement 33. Cette mémoire tampon autorise des accès mémoire avec des pas supérieurs à une unité. Dans ce cas, la mémoire tampon doit contenir un nombre d'emplacements mémoire qui soit une puissance entière de 2. Si la mémoire tampon contient 2n emplacements, l'adresse la plus basse 23 de la mémoire tampon doit en outre avoir tous ses n bits de poids le plus faible égaux à O. L'addresse la plus haute de la mémoire tampon aura alors tous ses n bits de poids le plus faible égaux à 1. Prenons comme exemple le cas o n=8, la mémoire tampon aura 28=256 emplacements mémoire. Le pointeur pointe actuellement sur l'emplacement 27, qui peut avoir comme adresse de 12 bits 110010101000. Supposons que le circuit de commande de la mémoire tampon incrémente les adresses par pas de quatre. Le prochain emplacement sur lequel il pointera sera l'emplacement 31, d'adresse 110010101100. Ceci se poursuit jusqu'à ce que l'extrémité de la mémoire tampon soit presque atteinte. Après l'adressage de l'emplacement 32, avec - par exemple- l'adresse 110011111110, l'adresse est incrémentée de quatre à la valeur 110100000010. Ceci réside à l'extérieur de la mémoire tampon et est détecté par le circuit de commande par le changement du bit 8. Le bit 8 est alors remis à zéro et la nouvelle adresse est 110000000010, emplacement 25, près de l'extrémité d'adresse la plus basse de la mémoire tampon. Le circuit de commande pour cette mémoire tampon est beaucoup plus complexe que celui qui est nécessaire pour la mémoire tampon représenté dans la Figure 1. Le circuit le plus simple est celui obtenu quand la mémoire tampon est utilisée avec toutes les restrictions mentionnées précédemment; à savoir que la mémoire tampon doit avoir pour longueur 2n, et doit démarrer à un emplacement dont l'adresse est un entier multiple de 2n, de façon à avoir ses n bits de poids le plus faible égaux à O. En utilisant un circuit supplémentaire, il est possible d'obtenir une mémoire tampon circulaire dont la longueur ne soit pas une puissance de deux. Par exemple, une mémoire tampon circulaire de 120 emplacements peut être obtenue en détectant un changement dans le 8ème bit de la sortie d'un additionneur connecté pour ajouter 8 à l'adresse du pointeur. Il est également demandé de pouvoir décrémenter l'adresse d'accès d'un nombre quelconque d'emplacements, et d'avoir une mémoire tampon de longueur quelconque, qui ne soit pas nécessairement un multiple de 2n. Le fonctionnement demandé à une mémoire tampon circulaire est de détecter le franchissement de la limite d'adresse supérieure, et de faire revenir le pointeur au nombre d'emplacements correct au dessus de la limite inférieure, ce nombre étant égal à la longueur du dépassement au delà de l'adresse de la limite supérieure, dans le cas d'incréments positifs. En utilisant les symboles Addr pour l'adresse courante, Nadr pour l'adresse suivante, Inc pour l'incrément, Ladd pour la limite d'adresse la plus basse et Hadd pour la limite d'adresse la plus haute, la prochaine adresse Nadr sera: Addr + Inc, à moins que ceci soit supérieur à Hadd, auquel cas la prochaine adresse doit être: Nadr = Addr + Inc - Hadd + Ladd - 1. Par exemple, pour une mémoire tampon ayant une limite d'adresse supérieure de 120, une limite d'adresse inférieure de 10, une adresse courante de 117 et un incrément de 4, Nadr = 117 + 4 - 120 + 10 - 1 = 10. Réciproquement, lorsqu'on utilise une incrémentation négative, le fonctionnement demandé à une mémoire tampon circulaire est de détecter le franchissement de la limite d'adresse inférieure, et de faire revenir le pointeur au nombre d'emplacements correct au dessous de la limite supérieure, ce nombre étant égal à la longueur du dépassement au dessous de l'adresse de la limite inférieure, dans le cas d'incréments négatifs. En utilisant les mêmes symboles et le même exemple, mais avec un incrément de 4, la nouvelle adresse sera: Addr + Inc, o Inc est un entier avec signe, à moins que cette valeur soit inférieure à la limite d'adresse inférieure auquel cas la prochaine adresse sera: Nadr = Addr + Inc - Hadd + Ladd - 1. En supposant que l'adresse courante soit 12, la prochaine adressse sera: Nadr = 12 - 4 + 120 - 10 + 1 = 119. La demande de brevet référencée ci-dessus tente de résoudre un problème résultant des limitations imposées par les mémoire tampons décrites précédemment en fournissant quatre registres de N bits contenant: la première adresse limite dans la mémoire tampon; la prochaine adresse à laquelle accéder; la valeur de l'incrément et la longueur de la mémoire tampon. On peut remplacer soit le premier registre d'adresse limite soit le registre de longueur par un registre contenant une deuxième adresse limite du registre. L'incrémentation et le cycle d'adressage sont effectués de telle sorte que la mémoire tampon peut avoir une longueur quelconque et être située à n'importe quelle position dans la mémoire. Les contenus du registre d'incrément sont ajoutés aux contenus du registre d'adresse courante, et si cette somme dépasse la limite de la mémoire tampon, une adresse alternative est sélectionnée, l'adresse alternative étant décrite ci- dessus. Ce circuit présente cependant certains problèmes. En premier lieu, le circuit est assez compliqué, mettant en jeu l'utilisation d'au moins quatre blocs de circuits différents, à savoir un multiplexeur, un additionneur, un additionneur/soustracteur et un comparateur. Ceci rend l'optimisation du circuit difficile pour obtenir une performance optimum dans tout procédé de fabrication, car chaque bloc doit être optimisé individuellement après quoi les effets d'un bloc sur ceux qui lui sont reliés doivent être examinés. Il est donc probable que le circuit fonctionne à une vitesse non optimum, et que toute modification dans le procédé de fabrication demanderait un effort d'optimisation considérable. En second lieu, le circuit ne décide de l'adresse à utiliser parmi les deux adresses suivantes possibles que tout à fait à la fin du traitement. Deux adresses sont calculées, puis la première prochaine adresse temporaire est comparée à une adresse limite fixe ou à la longueur de la mémoire tampon pour déterminer quelle est la prochaine adresse provisoire à utiliser. L'utilisation d'un comparateur bit à bit introduit des retards à cause de la complexité d'un tel circuit, et le fait de l'inclure dans le chemin critique du calcul de la prochaine adresse signifie qu'un retard supplémentaire est introduit après que les deux adresses prochaines aient été calculées. L'objet de la présente invention est de fournir un circuit d'adressage de registre circulaire simple, rapide, réalisé en matériel, qui permette un adressage de type modulo d'une mémoire tampon de n'importe quelle taille, situé à n'importe quelle adresse dans la mémoire, et à l'intérieur duquel on peut incrémenter ou décrémenter le pointeur à chaque opération d'adressage de toute quantité jusqu'à concurrence de la taille de la mémoire tampon. En outre, l'invention vise à fournir un tel circuit avec un chemin critique réduit pour assurer le fonctionnement le plus rapide possible, avec un circuit simple pour faciliter l'optimisation d'un fonctionnement et pour faciliter l'adaptation aux procédés de fabrication. L'invention vise également à fournir un circuit dont on peut adapter facilement l'échelle à toute taille de mémoire tampon, et o on peut utiliser toute longueur d'adressage. Plus particulièrement, selon l'invention, un circuit est décrit pour incrémenter l'adresse d'accès courante d'une mémoire tampon circulaire dans une mémoire électronique d'un incrément pour produire la prochaine adresse. Ce circuit comprend un circuit additionneur pour ajouter l'adresse courante à l'incrément et pour produire une première valeur temporaire de prochaine adresse et un circuit qui fait revenir la prochaine adresse à une adresse de base plus un dépassement, si l'adresse incrémentée dépasse une adresse limite d'un nombre égal au dépassement. Pour calculer la prochaine adresse, on fournit un circuit additionneur comprenant seulement trois additionneurs recevant l'adresse courante, l'incrément et l'adresse limite et produisant une première et une seconde valeurs temporaires de la prochaine adresse et la différence entre la première valeur temporaire de la prochaine adresse et l'adresse limite; et un circuit de sélection pour sélectionner comme prochaine adresse une des deux valeurs temporaires de la prochaine adresse, la sélection étant faite sur la polarité de la différence entre la première valeur temporaire de la prochaine adresse et l'adresse limite. L'incrément peut être de sens positif ou négatif, sens qui doit être sélectionné pendant le fonctionnement du circuit. De même, la grandeur de l'incrément et les adresses limites de la mémoire tampon peuvent se choisir pendant que le circuit est en fonctionnement. Un tel circuit peut avoir un premier additionneur qui ajoute l'adresse courante et l'incrément pour produire une première valeur temporaire de prochaine adresse et un second additionneur qui ajoute ou soustrait selon le sens de l'incrément la première valeur temporaire de prochaine adresse à l'adresse limite pour produire la valeur de la différence et un signal indiquant le dépassement de l'adresse limite par la première valeur temporaire d'adresse; et un troisième additionneur qui ajoute ou soustrait, selon la polarité de l'incrément, la valeur de la différence et de l'adresse de base pour produire une seconde valeur temporaire de la prochaine adresse. Les second et troisième additionneurs peuvent recevoir un signal d'entrée de type retenue indiquant la polarité de l'incrément. Dans les réalisations possibles préférées, soit: une des entrées de chacun des additionneurs deux et trois est reliée à la sortie du premier et du second inverseur repectivement; soit une des entrées du second additionneur est reliée à la sortie du troisième inverseur. En particulier, le circuit peut comprendre: un premier additionneur à deux entrées dont la sortie est connectée à une entrée d'un premier multiplexeur à deux entrées, et conneté ensuite à la première entrée d'un second additionneur à deux entrées; la sortie du second additionneur à deux entrées étant connectée à la première entrée d'un troisième additionneur; la sortie du troisième additionneur à deux entrées étant connectée à une seconde entrée du premier multiplexeur. la sortie du premier multiplexeur étant reliée à une première entrée du premier additionneur à deux entrées; comprenant en outre une liaison entre une retenue de sortie du second additionneur à deux entrées et une connection de commande du premier multiplexeur. Le circuit peut en outre comprendre un second et un troisième multiplexeurs dont les sorties sont connectées aux secondes entrées de second et du troisième multiplexeurs respectivement et dont la première entrée, seconde entrée et entrée de commande sont respectivement connectées ensemble. Dans les réalisations possibles préférées, soit on insère un premier inverseur entre la sortie du premier additionneur et la première entrée du second additionneur et un second inverseur est inséré entre la sortie du second additionneur et la première entrée du troisième additionneur; soit un troisième inverseur est connecté entre la sortie du second multiplexeur et la seconde entrée du second additionneur. Le circuit comprendra en outre de préférence une connection entre l'entrée de commande du second multiplexeur et la retenue d'entrée du troisième additionneur dans la première réalisation; et une connection entre l'entrée de commande du second multiplexeur et les retenues d'entrée du second et du troisième additionneur dans la seconde réalisation. Les objets de la présente invention peuvent se réaliser comme décrit cidessous en référence aux réalisations spécifiques, en faisant référence aux Figures 3 et 4 des schémas ci-joints dans lesquels: La Figure 1, déjà décrite, représente schématiquement une mémoire tampon circulaire de l'art précédent; La Figure 2, déjà décrite, représente schématiquement une autre mémoire tampon circulaire de l'art précédent; La Figure 3 est un schéma bloc d'une réalisation d'un circuit de commande d'une mémoire tampon circulaire selon la présente invention; La Figure 4 est un schéma bloc d'une autre réalisation d'un circuit de commande d'une mémoire tampon selon la présente invention; La Figure 3 représente un circuit d'incrémentation 36 selon une première réalisation de l'invention, qui peut commander l'incrémentation de l'adresse courante d'une mémoire tampon circulaire d'une mémoire électronique par incrément pour produire l'adresse suivante. Le circuit comprend: un circuit additionneur pour ajouter l'adresse courante Addr à l'incrément Inc et produire une première valeur temporaire de la prochaine adresse Nadrl; un circuit qui fait revenir la prochaine adresse à l'adresse de base Ladd/Hadd plus un dépassement quand l'adresse incrémentée dépasse une adresse limite Hadd/Ladd d'un nombre égal au dépassement. Dans le circuit 36, pour le calcul de la nouvelle adresse, on fournit un circuit additionneur comprenant trois additioneurs 40, 56, 63 recevant l'adresse courante Addr, l'incrément Inc et l'adresse limite Hadd/Ladd et produisant une première et une seconde valeurs temporaires de la prochaine adresse Nadrl,Nadr2 et la différence entre la première valeur temporaire de la prochaine adresse et l'adresse limite, le circuit d'incrémentation comprenant un circuit de sélection pour sélectionner comme prochaine adresse une des deux valeurs temporaires de prochaine adresse, la sélection se faisant selon le sens de la différence entre la première valeur temporaire de prochaine adresse et l'adresse limite. La plupart des circuits fonctionne sur des bus de données multilignes. Dans l'exemple courant, on suppose une longueur d'adressse de 16 bits. La longueur d'adresse pourrait cependant avoir un nombre quelconque de bits. Un premier additionneur 40 a deux entrées 41, 42 et une sortie 43. La sortie 43 de cet additionneur est connectée à une entrée du premier inverseur 45 et à une entrée (b) 47 d'un premier multiplexeur 49 à deux entrées. Un second multiplexeur 51 à deux entrées reçoit l'adresse la plus haute Hadd et l'adresse la plus basse Ladd de la mémoire tampon sur ses entrées (b) et (a) respectivement. Un troisième multiplexeur à deux entrées 53 reçoit l'adresse la plus basse Ladd et l'adresse la plus haute Hadd de la mémoire tampon sur ses entrées (b) et (a) respectivement. Les entrées de sélection 54, 55 des second et troisième multiplexeurs sont connectées ensemble et reçoivent un signal inc_sign. La sortie du premier inverseur 45 est connectée à la première entrée d'un additionneur à deux entrées 56. La sortie du second multiplexeur 51 est connectée à la seconde entrée de l'additionneur 56 dont la retenue d'entrée 57 est connectée à l'inverse du signal inc_sign, et dont la retenue de sortie 59 est connectée à une entrée sélection 60 du premier multiplexeur 49. La sortie de l'additionneur 56 est connectée à une entrée d'un second inverseur 61, dont la sortie est connectée à une première entrée 62 d'un second additionneur à deux entrées 63. Cet additionneur 63 a une seconde entrée 64 qui est connectée à la sortie 65 du troisième multiplexeur 53, une retenue d'entrée 66 qui reçoit le signal inc_sign, et une sortie 67 qui est connectée à l'entrée (a) 68 du premier multiplexeur 49. La sortie 71 du premier multiplexeur 49 est la sortie du circuit, elle est également connectée à la première entrée 41 du premier additionneur 40. Chacun des additionneurs, multiplexeurs et inverseurs est composé d'un certain nombre, 16 dans ce cas, de circuits 1-bit identiques, convenablement interconnectés. Les multiplexeurs 49, 51, 53 transfèrent les données sur leur entrée (b) vers leur sortie quand les entrées sélection respectives sont maintenues à l'état LOW, et transfèrent les données présentes sur leur entrée (a) vers leur sortie quand les entrées sélection respectives sont maintenues à l'état HIGH. Le signal inc_sign indique s'il est nécessaire d'incrémenter ou de décrémenter l'adresse courante. Il est à l'état LOW pour un incrément positif et à l'état HIGH pour un incrément négatif (décrément). En prenant comme exemple le cas de l'incrément positif, le signal incsign sera à l'état LOW. Ce signal, appliqué sur les entrées sélection du second et du troisième multiplexeurs 51, 53, fait transférer les données sur les entrées (b) de chaque multiplexeur vers leurs sorties respectives. L'adresse maximum de mémoire tampon Hadd est ainsi fournie à la seconde entrée de l'additionneur 56, et l'adresse minimum de la mémoire tampon Ladd est fournie à la seconde entrée 64 de l'additionneur 63. L'entier avec signe Inc qui représente le pas nécessaire entre l'adresse courante Addr et la prochaine adresse Nadr est fourni à la seconde entrée 42 du premier additionneur 40. L'adresse courante Addr est fournie à la première entrée 41. La sortie 43 fournit ensuite une première valeur temporaire de prochaine adresse Nadrl, qui est l'adresse courante Addr plus l'incrément Inc à l'entrée (b) 47 du premier multiplexeur 49. Ainsi, Nadrl = Addr + Inc. Le second additionneur 56 reçoit sur sa première entrée l'inverse de la première valeur temporaire de prochaine adresse not(Nadrl) venant du premier inverseur 45, et l'adresse maximum Hadd de la mémoire tampon sur sa seconde entrée. La retenue d'entrée 57 du second additionneur 56 est maintenue HIGH par le signal not(inc_sign), et donc un bit de retenue est ajouté à la sortie. L'ajout de celui-ci équivaut à soustraire la première valeur temporaire de prochaine adresse Nadrl de l'adresse maximum Hadd de la mémoire tampon: not (Nadrl) + Hadd + 1 = (- Nadrl -1) + 1 + Hadd. = Hadd - Nadrl - 1 + 1 = Hadd - Nadrl (En binaire arithmétique avec un nombre de bits fixe, not(x) + 1 = -x). La sortie [1] de ce second additionneur 56 est fournie au second inverseur 61 puis la sortie inversée du second additionneur est fournie à la première entrée 62 du troisième additionneur 63, dont la seconde entrée 64 reçoit l'adresse la plus basse Ladd de la mémoire tampon. Celles-ci sont ajoutées, sans bit de retenue, car son entrée 66 reçoit le signal inc_sign à l'état LOW et le résultat est la seconde valeur temporaire d'adresse prochaine Nadr2 qui est fournie à l'entrée (a) du multiplexeur 49. Le résultat de cette addition est le suivant: Nadr2 = not(Hadd - Nadrl) + Ladd; Nadr2 = -(Hadd - Nadr&) - 1 + Ladd; Nadr2 = - Hadd + Nadrl - 1 + Ladd; Nadr2 = Nadr2 - Hadd + Ladd - 1; Nadr2 = Addr + Inc - Hadd + Ladd - 1. Les deux prochaines adresses possibles sont maintenant fournies. La première valeur temporaire de prochaine adresse Nadrl doit être utilisée quand l'incrément peut se faire sans dépasser la plus haute limite d'adresse de la mémoire tampon, la deuxième valeur temporaire de prochaine adresse étant utilisée quand l'incrément fait que la première valeur temporaire de prochaine adresse dépasse la limite d'adresse supérieure de la mémoire tampon. Le choix de la valeur temporaire de prochaine adresse à utiliser est fait par l'entrée sélection 60 du premier multiplexeur 49. Il reçoit un signal de la retenue de sortie 59 du second additionneur 56. Si la première valeur temporaire de prochaine adresse Nadrl est plus basse que l'adresse maximum de la mémoire tampon Hadd, cette retenue de sortie sera à l'état bas. Ceci fera que le premier multiplexeur 49 transfèrera les données sur son entrée (b), à savoir la première valeur temporaire de prochaine adresse Nadrl, vers sa sortie 71, à la fois vers le pointeur et vers le premier additionneur 40. Cependant, si la première valeur temporaire' de prochaine adresse Nadrl est supérieure à l'adresse maximum Hadd de la mémoire tampon, la retenue de sortie 59 sera à l'état HIGH, car un nombre négatif aura résulté de l'addition. Ceci fera que le premier multiplexeur 49 fournit les données présentes sur son entrée (a), à savoir la seconde valeur temporaire de prochaine adresse Nadr2, sur sa sortie vers le pointeur et vers le premier additionneur 40. Ainsi, la spécification demandée est satisfaite, l'adresse retournant à la valeur limite inférieure plus le dépassement dès que la prochaine adresse transférée au pointeur dépasse la limite supérieure Hadd. De même, dans le cas o des incréments négatifs sont utilisés, le signal inc_sign sera à l'état HIGH. Ce signal, appliqué sur les entrées sélection du second et du troisième multiplexeurs 51, 53, fait transférer les données sur les entrées (a) de chaque multiplexeur vers leurs sorties respectives. L'adresse minimum de mémoire tampon Ladd est ainsi fournie à la seconde entrée de l'additionneur 56, et l'adresse maximum de la mémoire tampon Hadd est fournie à la seconde entrée 64 de l'additionneur 63. L'entier avec signe Inc qui représente la transition nécessaire entre l'adresse courante Addr et la prochaine adresse Nadr est fourni à la seconde entrée 42 du premier additionneur 40. L'adresse courante Addr est fournie à la première entrée 41. La sortie 43 fournit ensuite une première valeur temporaire de prochaine adresse Nadrl, qui est l'adresse courante Addr plus l'incrément Inc à l'entrée (b) 47 du premier multiplexeur 49. Ainsi, Nadrl = Addr + Inc. Le second additionneur 56 reçoit sur sa première entrée l'inverse de la première valeur temporaire de prochaine adresse not(Nadrl) venant du premier inverseur 45, et l'adresse minimumLadd de la mémoire tampon sur sa seconde entrée. La retenue d'entrée 57 du second additionneur 56 est maintenue LOW par le signal not(inc_sign), et donc aucun bit de retenue n'est ajouté à la sortie. L'ajout de celui-ci équivaut à soustraire la première valeur temporaire de prochaine adresse Nadrl de l'adresse minimum Ladd de la mémoire tampon, moins 1: not(Nadrl) + Ladd = (- Nadrl -1) + Ladd. = Ladd - Nadrl - 1. La sortie de ce second additionneur 56 est fournie au second inverseur 61 puis la sortie inversée du second additionneur est fournie à la première entrée 62 du troisième additionneur 63, dont la seconde entrée 64 reçoit l'adresse la plus haute Hadd de la mémoire tampon. Celles-ci sont ajoutées, avec un bit de retenue car son entrée 66 reçoit le signal inc_sign à l'état HIGH et le résultat est la seconde valeur temporaire d'adresse prochaine Nadr2 qui est fournie à l'entrée (a) du multiplexeur 49. Le résultat de cette addition est le suivant: Nadr2 = not(Ladd - Nadrl -1) + Hadd + 1; Nadr2 = -Ladd + Nadrl + 1 - 1 + Hadd + 1; Nadr2 = - Nadrl - Ladd + Hadd + 1; Nadr2 = Addr + Inc + Hadd - Ladd + 1. Les deux prochaines adresses possibles sont maintenant fournies. La première valeur temporaire de prochaine adresse Nadrl doit être utilisée quand le décrément peut se faire sans dépasser la plus basse limite d'adresse de la mémoire tampon, la deuxième valeur temporaire de prochaine adresse étant utilisée quand le décrément fait que la première valeur temporaire de prochaine adresse dépasse la limite d'adresse inférieure de la mémoire tampon. Le choix de la valeur temporaire de prochaine adresse à utiliser est fait par l'entrée sélection 60 du premier multiplexeur 49. Il reçoit un signal de la retenue de sortie 59 du second additionneur 56. Si la première valeur temporaire de prochaine adresse Nadrl est plus haute que l'adresse limite inférieure Ladd de la mémoire tampon, cette retenue de sortie sera à l'état bas. Ceci fera que le premier multiplexeur 49 transférera la première valeur temporaire de prochaine adresse Nadrl, présente sur son entrée (b), vers sa sortie à la fois vers le pointeur et vers le premier additionneur 40. Cependant, si la première valeur temporaire de prochaine adresse Nadrl est inférieure à l'adresse minimum Ladd de la mémoire tampon, la retenue de sortie 59 sera à l'état HIGH, car un nombre négatif aura résulté de l'addition. Ceci fera que le premier multiplexeur 49 fournira la seconde valeur temporaire de prochaine adresse Nadr2, présente sur son entrée (a), vers le pointeur et vers le premier additionneur 40. Ainsi, la spécification demandée est satisfaite, l'adresse retournant à la valeur limite supérieure moins le dépassement dès que la prochaine adresse transférée au pointeur est plus basse que la limite inférieure Ladd. Dans cette réalisation, la vitesse de fonctionnement peut être limitée par le délai de chemin critique. Le chemin critique est le chemin des données qui est le dernier à produire le résultat demandé pour fournir la prochaine adresse au pointeur. Dans le cas du circuit de la Figure 3, le chemin critique traverse le premier additionneur 40, le premier inverseur 45, le second additionneur 56, le second inverseur 61, le troisième additionneur 63 et le premier multiplexeur 49. En révisant la dérivation de la sortie du troisième additionneur 63, on peut obtenir un circuit simplifié avec un chemin critique réduit. la sortie du troisième additionneur 63, dans le cas d'incrémentation positive, doit être: Nadr2 = Nadrl - Hadd + Ladd - 1 ce qui donne: Nadr2 = Nadrl + not (Hadd) + Ladd. Dans le cas de l'incrémentation négative, cette sortie doit être: Nadr2 = Nadrl - Ladd + Hadd + 1 ce qui donne: Nadr2 = Nadrl + Hadd + not(Ladd) + 2. La Figure 4 montre un circuit représentant ces équations, avec un autre circuit pour dériver la seconde valeur temporaire de prochaine adresse Nadr2. Ce circuit est sensiblement identique à celui de la Figure 3, et les fonctions identiques ont des étiquettes d'identification identiques. Le premier et le second inverseur 45, 61 sont enlevés, un troisième inverseur 81 est inséré entre la sortie du second multiplexeur 51 et la seconde entrée du second additionneur 56. Les retenues d'entrée 57, 66 du second et du troisième additionneur 56, 63 respectivement sont connectées au signal inc_sign. Les entrées (a) et (b) vers le premier multiplexeur 49 sont inversées. Dans le cas d'incrémentation positive, et si le signal inc_sign est LOW, le second additionneur 56 ajoute la première valeur temporaire de prochaine adresse Nadrl issu de la sortie 43 du premier additionneur 40 à l'inverse de l'adresse la plus haute de la mémoire tampon not(Hadd), le signal inc_sign à l'état LOW connecté sur La retenue d'entrée empêchant l'ajout d'un bit de retenue. La sortie de ce second additionneur est donc: Nadrl + not(Hadd); Nadrl - Hadd - 1. Le troisième additionneur 63 ajoute le résultat de cette addition à l'adresse la plus basse Ladd de la mémoire tampon. Le signal incsign à l'état LOW sur la retenue d'entrée fait qu'aucun bit de retenue n'est ajouté, et la sortie du troisième additionneur 63 est alors: Nadr2 = (Nadrl - Hadd - 1) + Ladd; Nadr2 = Nadrl - Hadd + Ladd - 1, identique au résultat correspondant au circuit de la Figure 3. Dans le cas d'incrémentation négative, et si le signal inc_sign est HIGH, le second additionneur 56 ajoute la première valeur temporaire de prochaine adresse Nadrl issue de la sortie 43 du premier additionneur 40 à l'inverse de l'adresse la plus basse de la mémoire tampon not(Ladd), le signal inc_sign à l'état HIGH connecté sur la retenue d'entrée ajoutant un en sortie. La sortie de ce second additionneur est donc: Nadrl + not(Ladd); Nadrl - Ladd. Le troisième additionneur 63 ajoute le résultat de cette addition à l'adresse la plus haute Hadd de la mémoire tampon. Le signal inc_sign à l'état HIGH sur la retenue d'entrée fait ajouter un bit de retenue, et la sortie du troisième additionneur 63 est alors: Nadr2 = (Nadrl - Ladd) + Hadd + 1;; Nadr2 = Nadrl - Ladd + Hadd + 1, identique au résultat correspondant au circuit de la Figure 3. Cependant, dans ce cas, le fonctionnement du premier multiplexeur est changé; si la première valeur temporaire d'adresse ne dépasse pas la limite d'adresse supérieure Hadd, le résultat de l'addition effectuée par le second inverseur est négatif, ce qui amène un signal de retenue de sortie 59 à l'état haut vers l'entrée de commande du multiplexeur 49. Si la première valeur temporaire d'adresse dépasse la limite supérieure d'adresse, le résultat de l'addition est positif, et la retenue de sortie 59 est à l'état bas. Ceci est à l'opposé de la situation décrite en se référant à la Figure 3. C'est pourquoi les entrées du troisième inverseur 49 sont inversées: la première valeur temporaire de prochaine adresse Nadrl est appliquée sur l'entrée (a), et la seconde valeur temporaire de prochaine adresse Nadr2 est appliquée à l'entrée (b). Dans ce circuit, un inverseur en moins est nécessaire, et la longueur du chemin critique est réduite. L'entrée et la sortie de l'inverseur 81 sont réellement constantes, changeant uniquement lorsque le sens d'incrémentation change, qui est indiqué par un changement de signe du signal incsign, ou dans le cas o une des adresses limites Ladd, Hadd est modifiée pendant le fonctionnement du circuit. Le chemin critique est réduit de deux délais d'inverseurs. Ceci représente un gain de temps important, car l'utilisation de générateurs d'adresses de mémoire tampon développés en matériel est d'abord destinée à augmenter la vitesse de fonctionnement par rapport aux implémentations logicielles. L'invention remplit donc ses objectifs de fournir un circuit d'adressage développé en matériel simple et rapide pour une mémoire tampon circulaire sans imposer de limitation sur les adresses de départ et d'arrivée, ni sur la taille de la mémoire tampon ou la taille ou le sens des incréments entre les adresses successives. Tous les paramètres utilisés - les adresses limites inférieure et supérieure, la taille et le sens de l'incrément- peuvent être changes à volonté pendant le fonctionnement du circuit. La vitesse de fonctionnement est optimisée par l'utilisation de blocs fonctionnels simples, par la suppression des inverseurs du chemin critique, par le fait de décider laquelle des deux valeurs temporaires de prochaine adresse sera utilisée avant que la valeur temporaire de prochaine adresse ait été calculée, et parce que la configuration en incrémentation positive ou négative s'effectue au moyen des deuxième et troisième multiplexeurs, ici encore à l'extérieur du chemin critique. Le circuit utilise seulement deux blocs fonctionnels différents - un additionneur à deux entrées et un multiplexeur à deux entrées, plus un ensemble d'inverseurs. Ceci facilite l'optimisation du circuit car il est nécessaire de n'optimiser que deux blocs fonctionnels simples, ce qui permet d'atteindre la vitesse de fonctionnement la plus rapide et facilite l'adaptation du circuit à des modifications au cours de son processus de fabrication. L'expansion ou la réduction du circuit pour s'adapter à une longueur d'adressage quelconque est simple, par ajout ou suppression d'additionneurs élémentaires 1- bit, de multiplexeurs et d'inverseurs en parallèle. Comme l'on a décrit l'invention courante en se référant à deux réalisations spécifiques, de nombreuses autres réalisations viendront à l'esprit de ceux qui sont compétents dans l'art considéré; par exemple, l'utilisation d'adresses de longueur différente de 16, l'omission du second et du troisième multiplexeur si un seul sens d'incrémentation positif ou négatif est nécessaire; et l'intégration d'autres multiplexeurs pour permettre au circuit de commander deux mémoires tampons circulaires ou plus. REVENDICATIONS 1. Circuit d'incrémentation de l'adresse courante (Addr) d'un buffer circulaire dans une mémoire électronique d'un incrément (Inc) permettant de produire la prochaine adresse comprenant: un circuit additionneur (40) pour ajouter l'adresse courante à l'incrément et pour produire une première valeur temporaire de prochaine adresse (Nadrl); un circuit (45, 56, 61, 49) qui donne comme valeur de prochaine adresse une adresse de base (Ladd) plus un dépassement quand la première valeur temporaire de prochaine adresse (Nadrl) dépasse une adresse limite (Hadd) d'un nombre égal audit dépassement, caractérisé en ce que le circuit est équipé: d'un circuit additionneur comprenant trois additionneurs (40, 56, 63) recevant l'adresse courante (Addr), l'incrément (Inc) et les adresses limite et de base (Hadd, Ladd) et produisant la première et la seconde valeur temporaire de prochaine adresse (Nadrl, Nadr2) et la différence entre la première valeur temporaire de prochaine adresse et l'adresse limite, d'un circuit de sélection (49, 59) permettant de sélectionner comme prochaine adresse une des deux valeurs temporaires de prochaine adresse, la sélection s'effectuant selon le sens de la différence entre la première valeur temporaire de prochaine adresse et l'adresse limite. 2. Circuit selon la Revendication 1 dans lequel des moyens (72) sont fournis pour sélectionner le sens et l'amplitude de l'incrément, et les adresses limites pendant le fonctionnement du circuit. 2718262 3. Circuit selon l'une des Revendications 1 ou 2 caractérisé en outre en ce que les trois additionneurs comprennent: un premier additionneur (40) qui ajoute l'adresse courante (Addr) à l'incrément (Inc) pour produire la première valeur temporaire de prochaine adresse (Nadrl); un second additionneur (56) qui ajoute ou soustrait, selon le sens (inc_sign) de l'incrément (Inc), la première valeur temporaire de prochaine adresse à l'adresse limite et produit la valeur de la différence et un signal de sortie (59) indiquant le dépassement de l'adresse limite par la première valeur temporaire d'adresse; un troisième additionneur (63) qui ajoute ou soustrait, selon le sens de l'incrément, la valeur de la différence et l'adresse de base et produit une seconde valeur temporaire de prochaine adresse. 4. Circuit selon l'une quelconque des revendisations 1 à 3 caractérisé en ce que le second et le troisième additionneur reçoivent un signal sur une retenue d'entrée en indiquant le sens de l'incrémentation. 5. Circuit selon l'une quelconque des revendications 1 à 4 caractérisé en ce que une des entrées du second additionneur est connectée à la sortie d'un inverseur. 6. Circuit selon l'une quelconque des revendications 1 à 4 caractérisé en ce que une des entrées du deuxième multiplexeur et du troisième multiplexeur est connectée à la sortie du premier et du second inverseur respectivement. 7. Circuit comprenant: un premier additionneur à deux entrées (40) dont 26 2718262 la sortie (43) est connectée à une entrée d'un premier multiplexeur à deux entrées (49) et connectée en outre à une entrée d'un second additionneur à deux entrées (56); la sortie du second additionneur à deux entrées est connectée à une entrée d'un troisième additionneur à deux entrées (63); la sortie (67) du troisième additionneur à deux entrées est connectée à la seconde entrée du premier multiplexeur (49); la sortie du premier multiplexeur est connectée à la première entrée' (41) du premier additionneur à deux entrées (40); comprenant en outre une connexion entre la retenue de sortie (59) du second additionneur à deux entrées (56) et une broche de commande du premier multiplexeur (49). 8. Circuit selon la Revendication 7 dans lequel un inverseur (45) est inséré entre la sortie (43) du premier additionneur (40) et la première entrée du second additionneur (56) et dans lequel un second inverseur (61) est inséré entre la sortie du second additionneur et la première entrée du troisième additionneur (63). 9. Circuit selon la revendication 7 ou la revendication 8 comprenant en outre un second (51) et un troisième (53) multiplexeur dont les sorties sont connectées aux secondes entrées du second (56) et du troisième (63) additionneur et dont les entrées première, seconde, et entrée de commande sont respectivement connectées ensemble. 10. Circuit selon la revendication 9 lorsqu'elle dépend de la revendication 7 comprenant en outre un troisième inverseur (81) connecté entre la sortie du 27 2718262 second multiplexeur et la seconde entrée du second additionneur. 11. Circuit selon la Revendication 10 comprenant en outre une connexion entre l'entrée de commande (54) du second multiplexeur et la retenue d'entrée (66) du troisième additionneur (63). 12. Circuit selon la Revendication 9 lorsqu'elle dépend de la revendication 8 comprenant en outre une connexion entre l'entrée de commande (54) du second multiplexeur (51) et les retenues d'entrée (57,66) du second et du troisième additionneur.