FR 2703483 A1 19941007 FR 9303590 A 19930329 I "Dispositif de mise à jour de la valeur de code dans la méthode du codage arithmétique" DESCRIPTION Domaine technique La présente invention concerne un dispositif de mise à jour de la valeur de code dans la méthode du codage arithmétique. Etat de la technique antérieure Explication générale du codage arithmétique Comme décrit dans les articles de Glen G Langdon, Jr intitulé "An Introduction to Arithmetic Coding" (IBM Journal of Research and Development, 28 ( 2): 135-149, mars 1984), le codage arithmétique est une méthode bien connue de compression de données sans perte d'information. Le codage arithmétique établit une correspondance entre une suite de symboles dans un intervalle de nombres réels On commence avec l'intervalle l 0,1 l Lorsque chaque symbole est codé, l'intervalle courant est remplacé par un sous-intervalle de celui-ci Après le codage d'une suite de symboles, la suite originale peut être reconstruite exactement, n'importe quel point dans l'intervalle courant étant donné. Dans ce type de codage il est usuel de mémoriser le point le plus à gauche de l'intervalle comme résultat, la valeur obtenue étant appelée valeur du code. Cet algorithme de codage est récursif Pour chaque symbole à coder, l'algorithme partage l'intervalle courant en fonction des probabilités d'occurence et de l'ordre donné par la liste des symboles qui peuvent être codés. Puis l'algorithme remplace l'intervalle courant par le sous-intervalle correspondant au symbole à coder Cette procédure est répétée autant de fois que nécessaire pour coder une séquence donnée. Explication mathématique du codage arithmétique Jusqu'ici on a donné une explication géométrique du codage arithmétique On parle des intervalles et leur sous-division Pour la mise en oeuvre dans un ordinateur, il faut expliquer la méthode en utilisant les quantités numériques Cette explication est donnée maintenant. Dans la description qui va suivre, on adopte les désignations suivantes: S = {So, S 1, si p(si) P(si) Ai R Xi Xmax Ri Ci i Bl Tk s N-1} ensemble de N symboles pouvant être codés symbole à coder à étape i probabilité modélisée du symbole probabilité cumulée modélisée du symbole taille de l'intervalle courant plage de valeurs admissibles de Ai décalage pour porter p(si) Ai dans R la valeur maximum possible de Xi cumulande de P(si) Ai valeur du point de code courant (emplacement de l'extrémité gauche de l'intervalle) somme Ci + Ri non décalée 1 + Xi bits de sortie bloc de longueur fixe. Comme expliqué plus haut, à chaque étape, l'état du codeur est donné par un sous-intervalle de l'ensemble l 0,1 l Le processus pour coder un symbole consiste à remplacer l'intervalle courant par un sous-intervalle de lui-même. Pour représenter l'intervalle courant dans un ordinateur, on maintient à jour deux quantités arithmétiques: Ci, le point plus à gauche de l'intervalle et Ai la taille de l'intervalle Donc à chaque étape l'intervalle actuel et lCi, Ci + Ail. Ainsi, le processus donné plus haut pour coder un symbole est exprimé par ces équations: Ai+ 1 = p(si) Ai Ci+l = Ci + P(si) Ai ( 1) ( 2) o p(si) est la probabilité modélisée du symbole si, et P(si) est la somme des probabilités de tous les symboles qui précèdent si dans la liste de l'alphabet de source P(sk) = p(s J). j la valeur du code. O 10 Explication d'algorithme de précision finie pour le codage arithmétique Ces équations supposent une arithmétique d'une précision infinie Pour la mise en oeuvre d'un codage arithmétique sur des opérations arithmétiques de précision finie, on utilise l'approche de Frank Rubin dans un article intitulé "Arithmetic Stream Coding Using Fixed Precision Registers" (IEEE Transactions on Information Theory, IT- 25 ( 6): 672-675, novembre 1979) On fixe le nombre de bits qui sont utilisés pour représenter chacun des si, Ri, Ai, Ci, p(si) et P(si); on désigne ces quantités par #s, #R, #A, #C, #p et #P Il y a lieu de noter que #P = #p On choisit aussi la plage R = la, 2 cl, o a > 0, des taille d'intervalles admissibles On s'assure alors que l'on a toujours Ai e R; pour cela, à chaque étape du codage on effectue les opérations suivantes: 1 Obtenir P(si) et P(si) Calculer exactement P(si) Ai 2 Déterminer le décalage Xi tel que P(Si)Ai 2 Xi e R 3 Trouver l'approximation inférieure sur #A-bit la plus proche de P(si) Ai 2 Xi;ceci donne Ai+ 1 4 Calculer exactement Ri = P(si) Ai Calculer exactement Ci = Ci+P(si) Ai 6 Emettre le bit de retenue et les Xi bits les plus significatifs de (i; ceci forme le bloc de taille variable Bl Notez que les définitions des quantités dans l'algorithme déterminent certaines relations de longueur: par définition de probabilité cumulée #P = #p. par étapes 1 et 2, Xma= #p, par étape 4, #R = #P + #A = #p +#A, par étape 6, #B = 1 + Xmax = 1 + #p (la taille des Bis sont variables, mais il faut assez de bits pour représenter la plus longue valeur de Bl possible), par étape 7, #C = #R = #p + #A. Donc les paramètres #p et #A déterminent la longueur de toutes les autres quantités dans ces équations. On a ainsi expliqué comment la suite de blocs de taille variable Bi est engendré par l'algorithme Chaque bloc contient 1 +Xi bits, consistant en la retenue de sortie et des Xi bits les plus significatifs de la somme Ci = #C-bits. Ces blocs de longueur variable peuvent alors être assemblés en une séquence de blocs de longueur fixe Tk La séquence des blocs Tk constitue le flux de codage de sortie Le processus d'assemblage est fait par une méthode standard qui ne nous concerne pas dans la suite du document actuel. On peut résumer les étapes 1 à 7 de l'algorithme de précision finie cidessus par les équations: Ai+l, Xi = f (p(si)Ai) ( 3) (Ci+l, Bi) = g(Ci, Ri, Xi) ( 4) La fonction f effectue les étapes 1 à 4 mentionnées ci-dessus. La fonction g effectue les étapes 5 à 7. Ex Dlication de l'état de la technique antérieure de la mise à iour de la valeur du code L'actualisation de la valeur de code Ci est décrite par l'équation ( 4) en haut La figure 5 représente la structure d'une unité qui peut réaliser cette équation Ci est la valeur de code actuel Ri est le produit P(si) Ai, et Xi est le montant de décalage; tous les deux sont obtenus de l'unité de mise à jour de taille d'intervalle (pas représenté dans cette figure) L'additionneur 19 calcule la somme i = Ri + Ci Le décaleur 20 enlève le bit de retenue de cette somme, et les Xi bits les plus significatifs, qui deviennent la quantité Bl et décale par Xi les bits restants, qui deviennent la nouvelle valeur de Ci. Compte tenu de la boucle existant dans l'unité de la figure 5, qui va du registre 14 à travers l'additionneur, le décaleur, puis à nouveau vers le registre 14, la période d'horloge T d'un circuit suivant cet agencement doit satisfaire à l'inégalité T 2 Tcarry (#C) + Tshift (Xmax) ( 5) si l'égalité ( 5) n'est pas respectée, on risque d'enregistrer une valeur incorrecte pour quelques bits de Ci Ici, carry(n) est le temps nécessaire à la propagation du report à travers un additionneur à N bits, et Tshift(m) est le temps nécessaire pour le passage de la somme en résultant à travers une structure qui peut effectuer un décalage pouvant atteindre m bits (comme noté plus haut, #C est égal à #A + #p, et Xmax est égal à #p). Il y a deux méthodes bien connues pour accélérer la logique digitale synchrone, comme celle de la figure 5, le recadençage, et la consultation aux tables On va démontrer qu'on ne peut pas les appliquer ici. Du fait de l'existence de cette boucle, on ne peut pas appliquer la technique de "recadençage" ou "retiming" telle que décrite dans un article de Charles E Leiserson et James B Saxe intitulé "Retiming Synchronous Circuitry" (Algorithmica, 6 ( 1): 5-35, 1991) à ce circuit. D'ailleurs, la mise en oeuvre de cette unité par une consultation de table nécessite ( 1 +Xmax+#C) 2#R+#C+#X bits de mémoire Pour des valeurs utilisables de ces paramètres, par exemple #C=#R= 16, Xmax= 12 et #X= 4, on aurait besoin de 232 G Bytes qui est une valeur bien trop grande pour des applications pratiques. Mais on voudrait prendre la valeur #p aussi grande que possible, pour la raison suivante Pour que notre système de compression puisse bien compresser son flux d'entrée, il faut deux conditions D'abord la distribution de probabilité des symboles doit être non-uniforme De plus cette non-uniformité doit se refléter dans les valeurs de probabilité qui servent au calcul Les probabilités p(si) et P(si) sont des nombres réels, tirés de l'intervalle l 0,1 l, qui peuvent exiger une précision infinie pour représenter tout exactement. Les quantités dont on fait le calcul sont les représentations finies binaires de ces valeurs, chacune écrite avec #p bits. Bien entendu, on n'a aucun contrôle sur le contenu du flux d'entrée Mais, étant donné une distribution favorable, afin de l'exploiter, on doit être en mesure de représenter les nombres qui sont juste inférieurs à 1, ainsi que ceux qui sont juste supérieurs à O Ainsi, il est souhaitable d'avoir #p aussi grand que possible de manière à pouvoir représenter la plage des probabilités la plus large possible Mais vu l'équation ( 5), plus #p est grand, plus le circuit est lent On est donc obligé de trouver un compromis entre un circuit rapide de compression médiocre et un compresseur efficace à vitesse réduite. L'invention présente un solution à ce problème C'est un dispositif pour la construction des unités de mise à jour de la valeur de code qui peut opérer à grande vitesse, indépendante de la taille des opérandes Le paramètre #p peut être pris aussi grand que désiré, sans conséquence négative sur la vitesse de compression. Exposé de l'invention La présente invention concerne un dispositif de mise à jour de la valeur de code d'un système de codage arithmétique, caractérisé en ce que, pour maintenir un nombre déterminé de bits de précision, en maintenant un nombre fixe de niveaux logiques entre deux registres, ce dispositif comprend une grille de N x N cellules prises parmi quatre cellules de base: n(n-1)/2 cellules ad, au-dessus de la diagonale principale de la grille, comprenant un multiplexeur; n-1 cellules d, sur cette diagonale principale comprenant un additionneur et un multiplexeur et au moins un registre; une cellule fd, d'extrémité basse de la diagonale comprenant un additionneur et un multiplexeur et au moins un registre; n(n-I)/2 cellules or, de recadençage de sortie comprenant un registre; la limite inférieure de la période d'horloge étant telle que T> max {Tmux+Tadd, Xmax Tprop} Tmux, Tadd étant les temps d'établissement des multiplexeurs et des additionneurs; 'prop le délai nécessaire pour un signal pour se propager à travers la largeur d'une cellule; Xmax le plus grand décalage possible. Dans une réalisation avantageuse, les additionneurs sont des additionneurs généralisés comprenant chacun j+k+l bits d'entrée et qui génèrent I+k bits de sortie o j, k et I sont des entiers non-négatifs, et dont les équations donnant les sorties en fonction des entrées sont totalement arbitraires. Dans une variante de réalisation, le dispositif de mise à jour de la valeur de code d'un système de codage arithmétique selon l'invention comprend une grille de ( 2 n-1)n cellules prises parmi six cellules de base: n(n-1)/2 cellules ir, de recadençcage d'entrée comprenant deux registres; n-1 cellules d, diagonales, comprenant un additionneur et un multiplexeur; une cellule fd, d'extrémité basse de la diagonale, comprenant un additionneur et un multiplexeur; n-1 cellules fad, situées au-dessus de la diagonale dans la colonne de gauche de la grille, comprenant un multiplexeur; (n-2)(n-1)/2 cellules ad, situées au-dessus de la diagonale, comprenant un multiplexeur; n(n- 1) cellules or, de recadençcage en sortie, comprenant un registre; la limite inférieure de la période étant telle que r > max {Tmux+Tadd, T'prop} o Trmux, Tadd sont les temps d'établissement des multiplexeurs et des additionneurs, o:'prop est le temps de propagation d'un signal le long de n'importe quel fil. Dans une réalisation avantageuse les additionneurs sont des additionneurs généralisés comprenant chacun j+k+l bits d'entrée et qui génèrent I+k bits de sortie o j, k et I sont des entiers non-négatifs. L'invention permet d'améliorer le rendement du codage d'agencements non-adaptatifs pour codage arithmétique à grande vitesse en proposant une conception avantageuse du circuit de mise à jour de la valeur du code. La présente invention permet une compression à vitesse plus rapide de données que par la technique de codage arithmétique bien connue décrite dans l'article de Glen G Langdon cité plus haut et l'article de lan H. Witten, Radford M Neal et John G Cleary intitulé "Arithmetic Coding for Data Compression" (Communications of the ACM, 30 ( 6); 520- 540, juin 1987) Elle peut constituer la base d'un produit destiné à la compression de données Ce produit pourrait être utilisé pour la compression de données devant être transmises sur un canal de communication, ou être enregistré dans un système de fichiers. Brève description des dessins La figure 1 représente l'architecture d'un codeur arithmétique de l'art connu; les figures 2 à 5 illustrent différents circuits de l'art connu; les figures 6 à 17 illustrent différentes variantes d'une unité de mise à jour de la valeur du code selon l'invention. Principe fondamental de l'invention La figure 1 représente l'architecture d'un codeur arithmétique de l'art connu, qui a pour but de coder le symbole si. Il comprend une unité de mise à jour de la taille d'intervalle 10, une unité de mise à jour de la valeur du code 11 et éventuellement un circuit tampon 12. L'unité de mise à jour de la taille d'intervalle 10 délivre deux signaux Xi et Ri à l'unité de mise à jour de la valeur du code 11 Une sortie de cette unité 10 reliée à un registre 13 permet de délivrer à une entrée dudit module le signal Ai Une sortie de l'unité 11 reliée à un registre 14 permet d'envoyer un signal Ci à une autre entrée de ce module 11 Le circuit tampon 12 reçoit sur ses deux entrées les signaux de l'unité de mise à jour de la valeur du code 11, à savoir Xii et Bl pour délivrer un signal Tk. L'unité de mise à jour de l'intervalle 10 permet le maintien à jour de Ai dans le registre 13 A chaque étape de l'algorithme il prend un nouveau symbole si et la valeur courante du registre 13 Elle génère le cumulande Ri, le décalage Xi, et la nouvelle valeur Ai pour le registre Elle maintient donc à jour la taille de l'intervalle courant A 1 De même l'unité de mise à jour de la valeur du code 11 permet le maintien à jour de Ci dans le registre 14 A chaque étape il prend en compte le décalage Xi, le cumulande Ri et la valeur courante du registre 14 en produisant une nouvelle valeur pour Ri et un bloc de longueur variable Bl de taille 1 +Xi La valeur Xi, elle, n'est pas modifiée. Le circuit tampon de variable bloc 12 assemble la séquence de blocs de longueur variable dans des blocs de longueur fixe Tk qui constituent la sortie du codeur. L'unité de mise à jour de la taille d'intervalle 10 de l'art connu, représentée à la figure 1, comprend un module de calcul de probabilité 15 dont les deux sorties, délivrant les signaux p(si) et P(si), sont reliées respectivement à un premier multiplieur 16 suivi d'un module de normalisation 18 pour délivrer le signal Xi et à un second multiplieur 17 délivrant le signal Ri Une sortie du module de normalisation 18 est reliée à une entrée de chaque multiplieur 16 et 17 au travers du registre 13. L'unité de mise à jour du point de code 11 comprend un additionneur 19 qui reçoit sur une première entrée le signal Ri, connecté à un circuit de décalage 20 qui reçoit sur une autre entrée le signal Xi, et dont une première sortie est rebouclée sur une seconde entrée de l'additionneur 19 au travers d'un registre 14, une seconde sortie du circuit de décalage 20 délivrant un signal Bi. Le circuit tampon 12 comprend un additionneur qui reçoit sur ses deux entrées les signaux de sortie de l'unité de mise à jour de la taille d'intervalle 10 et de l'unité de mise à jour du point de code 11, à savoir Xi et Bi, pour délivrer le signal Tk. L'algorithme pour le codage arithmétique doit maintenir une quantité désignée par la valeur de code Ci Chaque fois qu'un symbole est codé, la valeur de code courant doit être incrémentée et éventuellement décalée Les bits décalés sont émis dans le flux de sortie, ceux retenus deviennent la valeur nouvelle du point de code La figure 1 représente les éléments d'un circuit 11 qui maintient la valeur de code Ce circuit met en oeuvre l'algorithme suivant: 1 Calcul exact de: Ci=Ci+P(si) Aj 2 Emission du bit de retenue et des Xi bits les plus significatifs de Ci 3 Décalage de Xi positions les bits restants de Ci; le résultat est Ci+ 1 Ici, Ci est la valeur de code courant, Ai est la taille d'intervalle courant, si est le symbole suivant devant être codé, P(si) est sa probabilité cumulée et Xi est le décalage Nous écrivons Ri pour le produit P(s 1) Ai Les quantités Xi et Ri sont obtenues à partir de la mise à jour de la taille d'intervalle. On décrit maintenant l'invention et ses principes de fonctionnement L'invention concerne l'unité de mise à jour du point de code 11 de la figure 1 La figure 5 représente cette partie de la figure 1 prise séparément. L'essence de l'invention est un dispositif permettant l'application de transformation par recadençage à l'unité de figure 5 Comme expliqué plus haut, dans l'état de l'art connu, on ne peut pas appliquer cette transformation à l'unité Mais il est possible, de manière avantageuse, d'appliquer cette transformation deux fois, d'abord pour éliminer des longues chaînes de logique combinatoire et éliminer des longs fils On appelle la première étape "recadençage de la logique" et la deuxième "recadençage des fils". Dans la suite on donne la structure des circuits numériques. Les éléments de ces circuits sont représentés dans la figure 2 et sont: un additionneur plein 21 dont les sorties répondent aux relations S = a E b 33 Cin et Cout = ab + b Cin + a Cin avec a, b valeurs d'entrée; Cin retenue d'entrée; Cout retenue de sortie; un multiplexeur ou "mux" 22 dont la sortie m répond à la relation: m = it + -ie, avec i, t, e valeurs d'entrée. il Ici le symbole ED représente l'opération logique "ou-exclusif", le symbole + représente l'opération logique "ou-inclusif", le symbole représente l'opération logique de négation, et la juxtaposition des variables représente l'opération logique "et" En plus, un symbole carré indique un registre qui retarde son entrée par un coup d'horloge. Dans la suite des figures une entrée non représentée sera considérée comme transmettant un signal nul. La première étape de l'invention est de la transformer pour obtenir la version de la figure 3 On a déplacé le registre 14 dans la boucle, mais cela n'a aucune conséquence sur la limite basse de la période d'horloge a, donnée précédemment dans l'équation ( 5) Dans le cycle o Ri et Xi sont introduits sur les entrées, le registre contient la quantité Ci = Ci + Ri. Si l'on considère plus particulièrement cette figure 3, on sélectionne une largeur particulière pour le circuit (dans ce cas 4 bits) et on l'introduit dans la structure de l'additionneur Pour l'additionneur on utilise la réalisation bien connue à report de retenue Le décalage est fourni avec une représentation unitaire, c'est-à-dire un ensemble de Xmax fils ( x 2 x 1 xo) qui sont tous à zéro sauf xu o u est la quantité de décalage Dans l'exemple considéré on prend Xmax = 4 Le résultat apparaît sur la figure 4 L'invention concerne donc un nouveau circuit qui intègre les fonctions désirées d'addition, de décalage et d'enregistrement et qui peut être synchronisé à une fréquence indépendante de #C et Xmax. Maintenant on peut expliquer l'invention Cela dépend d'un dispositif détaillé de l'unité mélangé de l'additionneur et du décaleur que l'on donne ici L'invention consiste à placer les éléments logiques le long de la diagonale d'un carré, et de construire le dispositif de l'invention pour le déphasage sur celui-ci Ceci est représenté à la figure 6 On considère une représentation unitaire de Xi de telle façon que le décaleur ait une structure simple Cela ne limite pas la généralité de notre invention, comme c'est évident de passer d'une notation binaire à une notation unitaire Une telle réalisation est possible parce que la direction de propagation de retenue et la direction de tout décalage sont les mêmes. On peut alors faire deux observations: d'abord, chaque boucle dans cette figure a seulement deux étapes de logique C'est vrai qu'il y a des chemins combinatoires plus longs dans la figure tels que la chaîne de propagation de retenue Mais la deuxième observation est que ces longues chaînes peuvent être subdivisées par recadençage C'est ce qu'on a appelé plus haut le recadençage logique. La figure 7 explique comment réaliser un tel recadençage Les lignes pointillées horizontales, qui représentent les limites de recadençage indiquent les endroits o doivent être introduits les registres Ce recadençage est possible à cause du sens uniforme du flux d'information à travers de ces lignes. La figure 8 représente le circuit recadencé (après avoir déplacé quelques uns de ces registres pour faciliter leur dessin) Ici, les éléments numérotés 30 ou 33 sont des multiplexeurs, ceux numérotés 31 sont les additionneurs pleins, et ceux numérotés 32, 34, 35, 36, 37, 38 et 39 sont des registres. la caractéristique essentielle qui en résulte est qu'il n'y a pas plus de deux étapes de logique entre deux registres quelconques La limite inférieure de la période horloge est T Ä max{tmux r 'add, Xmax tprop} ( 6) Dans cette expression Tmux et Tadd sont les temps de réglage ("settling time") du multiplexeur et de l'additionneur plein de la figure 2, et Tprop est le temps pour la propagation d'un signal au travers d'une cellule, quantité qui est très faible. Cette structure de la figure 8 peut être étendue au cas général d'un circuit qui est large de N bits, comme représenté à la figure 9 Cela donne l'exemple du cas n= 5 Il y a plusieurs fils non connectés qui peuvent être ignorés, émanant des cellules situées sur le bord gauche de la grille. Un tel circuit de taille arbitraire peut être assemblé en formant une grille N x N avec quatre cellules de base Ainsi une grille contient un total de n 2 cellules, distribuées comme suit: Nombre de cellules Type de cellule n(n-1)/2 au-dessus de la diagonale, ou (ad) n-1 intérieures à la diagonale, ou (d) 1 extrémité basse de la diagonale, ou (fd) n(n-1)/2 recadençage de sortie, ou (or) Jusqu'à présent on a considéré Xmax = N qui est la largeur du circuit C'est la supposition la plus générale possible parce qu'un décalage de plus de N bits veut dire qu'aucun bit du registre Ci sera remis en circulation (Dans ce cas, le calcul procédera comme si tous les bits étaient O Cet effet peut être obtenu dans les circuits en mettant chaque bit de la représentation unitaire de Xi à o). Mais le cas Xmax Xmax, ainsi que les registres et les multiplexeurs qu'ils alimentent La figure 10 illustre le circuit de mise à jour de valeur de code pour le cas N = 4 et Xmax = 2 Ce circuit peut être recadencé comme celui de la figure 8 pour obtenir une version rapide. Elimination des chemins de transmission longs La longueur des chaînes de logique dans toutes les tailles du circuit représenté à la figure 9 est limitée à deux Mais les grandes tailles de ce circuit, avec une grande valeur de Xmax, contiennent des chemins de transmission longs En particulier le fil qui sort de l'additionneur le moins significatif doit étendre Xmax colonnes vers l'extrémité gauche du circuit C'est cela qui donne le terme Xmax rprop dans l'expression ( 6) pour la limite inférieure de r. Tandis que la plupart du retard dans les réalisations physiques de circuits digitaux logiques est le résultat du temps qu'il faut pour les éléments de logique à changer leur état, des signaux ne peuvent pas se propager instantanément Donc s'il y a des chemins de transmission longs dans un circuit, le temps pour propager un signal peut être supérieur au temps pour le changement d'état de logique. Pourtant, en ajoutant des registres supplémentaires et en modifiant la géométrie du circuit, on peut supprimer cet inconvénient C'est ce qu'on a appelé plus haut le recadençage des fils. Les figures 11, 12 et 13 montrent le procédé de modification et la figure 14 représente un exemple de la version finale du circuit. La figure 11 représente un circuit de mise à jour de la valeur du code pour recadençage Ce circuit est topologiquement identique à celui de la figure 8 On a seulement repositionné les entrées et les sorties Les lignes pointillées verticales 40 indiquent o on doit recadencer le circuit Une telle modification permet de subdiviser les longs chemins horizontaux en segments de longueur limitée. La figure 12 représente un circuit de mise à jour de la valeur du code après recadençage Cette figure est identique à la figure précédente avec un registre 41 inséré aux endroits o un fil croise une limite de recadençage Les longs chemins horizontaux ont été subdivisés, mais les fils le plus en haut à gauche et le plus en bas à droite sont de longueur linéaire n. Alors en ajoutant des registres pour couper certains chemins, on a allongé certains autres chemins, auparavant courts On va maintenant présenter une solution à ce problème. La figure 13 représente un circuit de mise à jour de la valeur du code avec recadençage Cette variante de la figure précédente, avec les registres de recadençage d'entrée et de sortie disposés dans leurs colonnes respectives Les fils fournissant le bit de poids le plus faible en entrée et le bit de poids le plus fort en sortie sont de longueur linéaire en n. La figure 14 représente un circuit de mise à jour de la valeur du code avec des longueurs de fils constantes cette version est obtenue en décalant chaque colonne du circuit de la figure 13 d'une quantité déterminée par rapport à la colonne voisine Tous les fils sont à présent de longueur limitée De plus cette limite est indépendante de la largeur de bits N du circuit. Comme précédemment on peut construire des versions de ce circuit de taille arbitraire, en formant une grille de taille N x ( 2 n-1) avec les cellules de base illustrées à la figure 15 Cette figure contient un exemple de réalisation pour le cas N = 5 La pente de la diagonale dans cette réalisation est plus marquée, car elle est due au décalage de chaque colonne de cellules par rapport ses voisines Une telle grille contient donc 2 N 2-n cellules distribuées comme suit: Nombre de cellules Types decellules n(n-1)/2 n-1 n-1 (n-2)(n-1)/2 n(n-1) recadençage d'entrée ou (ir) diagonale ou (d extrémité basse de la diagonale ou (fd) extrémités au-dessus de la diagonale ou (fad) au- dessus de la diagonale ou (ad) recadrage de sortie ou (or) La limite inférieure de la période horloge du circuit de ce dispositif est T > max {Tmux + Tadd, T'prop} ( 7) O T'propest le temps pour la propagation d'un signal à travers le plus long fil parmi les cellules ir, d, fd, fad, ad ou or de la figure 15 Il n'y a plus aucune dépendance dans cette limite sur la largeur du circuit en bits. Généralisation du principe Les additionneurs pleins de la figure 2 peuvent être généralisés aux unités logiques de la figure 15 Chaque unité sur la gauche, que l'on appelle additionneur généralisé, reçoit j + k + I bits d'entrée et produit k + I bits de sortie. Ici, j, k et I peuvent être n'importe quel entier non négatif En notation mathématique, si f représente la fonction logique réalisée par cette unité, on peut écrire: (d 0,,dl-1, eo,,ek_ 1) = f(ao aj 1 bo, -,bk-lc 0, cl-1) Les sorties do,,dl 1 sont appelées les retenues généralisées de cette unité La figure 16 représente la structure générale d'un circuit qui utilise ces unités. Dans les paragraphes précédents, on a considéré un circuit de la structure de la figure 16 o f a été la fonction d'un additionneur plein, avec j = k = I = 1 Mais il n'y a rien dans notre technique qui oblige que f soit n'importe quelle fonction en particulier (ni la même fonction pour chaque colonne du circuit). Etant donné un circuit de la structure de la figure 16, o la direction de propagation des retenues généralisées est la même que la direction de décalage du décaleur, on peut utiliser les dispositifs précédents pour obtenir des circuits opérationnels à haute vitesse Soit Tagen le temps de réglage d'un additionneur généralisé, tmgen le temps de réglage d'un multiplexeur généralisé, Smax le plus grand décalage possible On obtient la limite inférieure de la période horloge r >:max {fmgen + ragen, Smax tprop} par le dispositif de la figure 9, et r >:max {Tmgen + Tagen, T'prop} par le dispositif de la figure 15. REVENDICATIONS 1 Dispositif de mise à jour de la valeur de code d'un système de codage arithmétique, caractérisé en ce que, pour maintenir un nombre déterminé de bits de précision, en maintenant un nombre fixe de niveaux logiques entre deux registres, ce dispositif comprend une grille de N x N cellules prises parmi quatre cellules de base: n(n-1)/2 cellules ad, au-dessus de la diagonale principale de la grille, comprenant un multiplexeur ( 33); n-1 cellules d, sur cette diagonale principale comprenant un additionneur ( 31) et un multiplexeur ( 30), et au moins un registre ( 32); une cellule fd, d'extrémité basse de la diagonale comprenant un additionneur ( 31), un multiplexeur ( 30) et au moins un registre ( 32); n(n-1)/2 cellules or, de recadençage de sortie comprenant un registre ( 35); la limite inférieure de la période d'horloge étant telle que T > max {Tmux+Tadd, Xmax Tprop} Tmux, Tadd étant les temps d'établissement des multiplexeurs et des additionneurs; Tprop le délai nécessaire pour un signal pour se propager à travers la largeur d'une cellule; Xmax le plus grand décalage possible. 2 Dispositif selon la revendication 1, caractérisé en ce que les additionneurs sont des additionneurs généralisés comprenant chacun j+k+l bits d'entrée et qui génèrent l+k bits de sortie o j, k et I sont des entiers non-négatifs, et dont les équations donnant les sorties en fonction des entrées sont totalement arbitraires. 3 Dispositif de mise à jour de la valeur de code d'un système de codage arithmétique, caractérisé en ce qu'il comprend une grille de ( 2 n-1)n cellules prises parmi six cellules de base: n(n-1)/2 cellules ir, de recadençage d'entrée comprenant deux registres; n-1 cellules d, diagonales comprenant un additionneur et un multiplexeur et au moins un registre; une cellule fd, d'extrémité basse de la diagonale comprenant un additionneur et un multiplexeur, et au moins un registre; n-1 cellules fad, situées au-dessus de la diagonale dans la colonne de gauche de la grille comprenant un multiplexeur; -(n-2)(n-1)/2 cellules ad, situées au-dessus de la diagonale comprenant un multiplexeur; n(n-1) cellules or, de recadencçage en sortie comprenant un O 10 registre; la limite inférieure de la période étant telle que Tr > max {Tmux+:add, T'prop} O Tmux, Tadd sont les temps d'établissement des multiplexeurs et des additionneurs, o 'prop est le temps de propagation d'un signal à travers le plus long fils parmi les cellules ir, d, fed, fad, ad ou or 4 Dispositif selon la revendication 3, caractérisé en ce que les additionneurs sont des additionneurs généralisés comprenant chacun j + k + i bits d'entrée et qui génèrent i + k bits de sortie o j, k et i sont des entiers non-négatifs