DISPOSITIF DE MEMOIRE TRIE AVEC COMPRESSION EN ETENDUE
La présente invention concerne les mémoires associatives, et particulièrement les mémoires de type "TRIE" (du verbe anglais "reTRIEve").
Le principe de la mémoire "TRIE" a été proposé par R. de la Briandais et E. Fred in vers la fin des années 1950 (voir E. Fredkin et al.: "Trie Memory", Communications of the ACM, Vol. 3, No. 9, septembre 1960, pages 490-499). Il consiste à découper les chaînes de bits à reconnaître en tranches successives de longueur fixe (de K bits) et à les intégrer dans un tableau T à deux dimensions. Chaque ligne du tableau constitue un registre de 2K cellules élémentaires. Un registre (R) est attribué à chaque tranche de la chaîne et on associe une cellule dans le registre à la valeur (V), comprise entre 0 et 2K-1 de cette tranche. Le contenu (C = T[R,V]) de la cellule ainsi déterminée représente soit le registre attribué à la tranche suivante (ou pointeur), soit une référence de fin d'analyse (ou "status") si l'analyse de la chaîne doit se terminer sur cette tranche.
Le registre attribué à la première tranche de la chaîne, qui est aussi le point d'entrée de la table, est appelé portier. Les données à analyser sous forme de chaînes de bits, c'est-à-dire à comparer avec le contenu de la mémoire TRIE, seront également nommées routes ci-après. On appellera chemin dans la table la succession des cellules chaînées associées à une route. Chaque registre de la table sera dit d'ordre i>0 s'il est attribué à la (i+1 )-ième tranche d'une ou plusieurs routes mémorisées. Le registre portier est donc d'ordre 0. La mémoire TRIE associe à chacun de ses registres d'ordre i>0 une unique séquence de iK bits correspondant aux iK premiers bits de chaque route dont le chemin dans la table passe par une cellule du registre en question.
L'exemple suivant montre une représentation du stockage des données dans une mémoire TRIE dans le cas particulier où K = 4. La valeur de chaque tranche est représentée par un digit en numérotation hexadécimale (0,1 ,...,E,F), et les registres contiennent chacun 24=16 cellules.
Soit à reconnaître les routes qui débutent par les motifs 45A4, 45AB,
67AB, 788A et 788BD, auxquels on attribue respectivement les status S0, S1 ,
S2, S3 et S0 (un même status peut être partagé par plusieurs routes). En portant le registre R en indice de ligne, la valeur V des tranches en indice de colonne, et en prenant comme portier le registre R0 = 0, la table de la mémoire
TRIE peut se présenter comme représenté sur la figure 1 , où les données soulignées sont des status. Les motifs 45A4, 45AB, 67AB, 788A et 788BD sont respectivement représentés dans la table de la figure 1 par les chemins : T[0,4] ^ T[1 ,5] ^ T[2,A] ^ T[3,4J ; T[0,4J -* T[1 ,5] -* T[2,A] - T[3,B] ; T[0,6] - T[4,7] -» T[5,A] - T[6,B] ; T[0,7] - T[7,8] - T[8,8] -> T[9,A] ; T[0,7J -» T[7,8] - T[8,8] -» T[9,B] -* T[10,D].
On voit sur cet exemple que tous les motifs commençant par une partie commune de iK bits sont représentés par un début de chemin commun dans la mémoire, menant au registre d'ordre i auquel est associée la séquence formée par ces iK bits.
Si l'on considère une route à analyser, découpée en une suite de tranches binaires de valeurs Vj avec 0 < i < N et {R la suite des registres associés aux valeurs Vj, R0 désignant encore le registre portier, l'algorithme d'analyse mis en œuvre peut être celui représenté sur la figure 2.
A l'initialisation 1 de cet algorithme, le rang d'analyse i est mis à 0 et le registre portier R0 est sélectionné comme registre R. Dans chaque itération de rang i, le contenu C de la cellule T[R,V|] désignée par la (i+1 )-ième tranche Vj de la route dans le registre d'ordre i sélectionné est lu à l'étape 2. Si cette cellule contient un pointeur de poursuite d'analyse, ce qu'indique au test 3 la valeur 1 d'un bit FP(C) mémorisé dans la cellule, le registre d'ordre i+1 désigné par ce pointeur Ptr(C) est sélectionné comme registre R pour l'itération suivante à l'étape 4, et le rang i est incrémenté. Quand le test 3 révèle une cellule qui ne contient pas un pointeur (FP(C)=0), le status Ref(C) lu dans la
cellule concernée est retourné à l'étape 5 comme résultat de la consultation de la table.
Cet algorithme permet l'analyse de routes comportant un nombre quelconque de tranches. Une même table peut être utilisée pour plusieurs types d'analyses en gérant les données à partir de portiers différents. De plus, il permet de maîtriser le temps d'analyse des données : l'analyse d'un nombre
N de tranches de K bits durera au plus N fois la durée d'une itération.
L'algorithme de la figure 2 peut être mis en oeuvre de façon très rapide par un composant matériel gérant les accès au tableau de mémoire. Il permet notamment la réalisation de routeurs de haute performance pour des réseaux de télécommunications à commutation de paquets. L'en-tête des paquets est analysé au vol par le composant, et le status associé à une route désigne par exemple un port de sortie du routeur vers lequel doivent être acheminés les paquets portant une adresse de destination conforme à cette route. Un tel routeur peut être multi-protocoles. Pour cela, on analyse des portions différentes de l'en-tête à partir de portiers différents. Par exemple, une première analyse d'un (ou plusieurs) champ de l'en-tête désignant le protocole employé et/ou la version de ce protocole peut être analysée à partir d'un premier portier. Cette première analyse fournit une référence qui, bien que correspondant à une fin logique d'analyse, peut être matérialisée dans la mémoire TRIE par un pointeur de poursuite d'analyse désignant un autre registre portier à utiliser pour analyser la suite de l'en-tête. La référence en question peut également déclencher des temporisations ou des sauts d'un nombre déterminé de bits dans l'en-tête analysé afin de pouvoir choisir quelle portion de l'en-tête doit être ensuite analysée. Dans la pratique, un certain nombre d'analyses sont généralement exécutées successivement, pour déclencher les opérations requises par les protocoles supportés en fonction du contenu des en-têtes. L'une de ces analyses portera sur l'adresse de destination pour accomplir la fonction de routage proprement dite. Le fait de pouvoir enchaîner plusieurs analyses élémentaires avec entre elles des sauts programmables procure une grande souplesse au procédé, particulièrement pour le traitement de protocoles encapsulés suivant
plusieurs couches du modèle ISO. L'analyse au vol des tranches de l'en-tête au fur et à mesure de leur arrivée procure par ailleurs une grande rapidité.
Un autre avantage des tables TRIE est de permettre la prise en compte de contraintes de routage sur la base du plus long chemin enregistré correspondant à un préfixe de la route à reconnaître, contrainte qu'on rencontre notamment dans le contexte du routage IP (voir EP-A-0 989 502).
EP-A-1 030 493 décrit une mémoire TRIE dont le contenu intègre, outre les références proprement dites associées aux en-têtes de paquets, un programme consistant en l'enchaînement des analyses élémentaires à effectuer en fonction des différentes configurations prises en compte par la mémoire. Ces enchaînements sont entièrement programmables. L'utilisateur peut définir arbitrairement, et à chaque étape du processus, quelle portion de l'en-tête doit être examinée et à partir de quel registre de la mémoire TRIE, ce qui procure une grande souplesse de traitement. Une mémoire TRIE peut aussi être décrite sous forme arborescente, avec des nœuds répartis en plusieurs étages successifs correspondant aux ordres d'analyse i précédemment mentionnés. Chaque nœud d'un étage i représente une décision à prendre lors de l'analyse de la (i+1 )-ième tranche d'une route. Le nœud-racine de l'arbre correspond au registre portier, les nœuds-feuilles aux status, et les nœuds intermédiaires aux registres désignés par les pointeurs de poursuite d'analyse. La représentation arborescente permet de visualiser aisément les chemins. L'arbre de la figure 3 montre ainsi les chemins enregistrés dans la table de la figure 1 , la racine et les nœuds intermédiaires étant représentés par des cercles (registres) et les feuilles par des rectangles (status).
La représentation arborescente permet de concevoir des méthodes de compression visant à réduire la taille mémoire requise pour mettre en œuvre une table TRIE. Cette réduction est particulièrement utile pour des implémentations rapides de tables de taille importante au moyen de circuits de mémoire statique (SRAM). Une réalisation matérielle sous forme de table où chaque registre comporte 2K cellules est en effet peu efficace en termes
d'occupation de mémoire puisqu'une telle table comporte de nombreuses cellules vides, comme le montre la figure 1 ; Quand l'arbre est occupé par un grand nombre de données aléatoires, les nœuds proches de la racine ont un nombre de descendants valides proche du nombre de descendants possibles (2K). Par contre, lorsque l'on s'éloigne de le racine, le nombre moyen de descendants valides d'un noeud donné diminue considérablement et tend vers 1 (ou 2 si l'on prend en compte un status par défaut). Dans ce cas, il n'y a dans la mémoire qu'entre 10% et 15% de cellules utiles.
L'article "An Expérimental Study of Compression Methods for Functional Tries" de J-P. livonen, et al., soumis à la conférence WAAPL'99 (1999) passe en revue plusieurs méthodes de compression connues, combinables entre elles: - la compression de chemin ("path compression") consiste à agréger à un nœud Y d'un étage i les nœuds non vides des étages i+1 à i+j-1 (J ..2) qui sont des descendants de ce nœud Y lorsque chacun de ces nœuds des étages i à i+j-1 possède un unique descendant non vide (registre ou status). Voir aussi US-A-6 014 659 ou US-A-6 505 206. La longueur de la tranche à analyser en relation avec le nœud comprimé Y est multipliée par j; - la compression de niveau ("level compression") consiste à agréger à un nœud Z d'un étage i les nœuds non vides des étages i+1 à i+j-1 (j Ξ5) qui sont des descendants de ce nœud Z lorsque chacun de ces nœuds des étages i+1 à i+j-1 possède lui-même au moins un descendant non vide (registre ou status). La longueur de la tranche à analyser en relation avec le nœud comprimé Z est multipliée par j; - la compression en étendue ("width compression" ou "pointer compression") consiste à éliminer les descendants vides d'un nœud donné. Voir aussi US-A-5 781 772, EP-A-0 458 698 ou WO 00/75804. Il est inutile de réserver un registre de 2K cellules pour analyser une tranche n'ayant que L<2K valeurs valides dans des chemins enregistrés dans la mémoire TRIE: on peut se contenter d'une zone comprimée de L cellules, associée à des données cartographiques indiquant les valeurs
valides de la tranche. Ces données cartographiques prennent typiquement la forme d'un vecteur bitmap de 2K bits mis à 1 aux L positions correspondant aux L valeurs valides de la tranche et à 0 aux 2K-L autres positions. Dans les méthodes de compression de chemin et de niveau, la modification en cours d'analyse de la longueur des tranches découpées dans les données à analyser se prête mal à une implémentation rapide dans un composant matériel spécifique. Elle permet essentiellement de réduire la taille mémoire requise par une implémentation logicielle, par nature moins rapide. La méthode de compression en étendue ne souffre pas' de cette limitation. Elle requiert cependant que l'analyse proprement dite d'une tranche soit précédée par l'analyse du bitmap associé pour valider la valeur de la tranche et localiser la cellule correspondante.
Par ailleurs, une table TRIE se prête à un traitement parallèle en mode pipeline, comme évoqué dans l'article "Putting Routing Tables in Silicon", de T-B. Pei et al., IEEE Network Magazine, janvier 1992, pages 42-50. Si le nombre maximum d'étages de l'arbre est égal à M, c'est-à-dire si les chaînes de données à analyser peuvent aller jusqu'à M*K bits, on peut répartir l'espace mémoire disponible en N plans mémoire, avec N <M. Chaque plan mémoire P: de niveau j (0 ≤j < N) est réservé aux nœuds d'un ou plusieurs étages consécutifs de l'arbre. N opérateurs fonctionnent en parallèle avec chacun un tampon respectif contenant une chaîne de données à analyser. Pendant qu'un des N opérateurs effectue une analyse à l'ordre ou aux ordres consécutifs du niveau j, en accédant au plan mémoire Pi, un autre opérateur peut accéder au plan mémoire P:_1 pour effectuer l'analyse d'une chaîne de données suivante à l'ordre ou aux ordres consécutifs du niveau j-1. Ce traitement en pipeline par les N opérateurs augmente la cadence maximum de traitement du dispositif.
Un but de la présente invention est de proposer une méthode efficace de compression d'une mémoire TRIE, qui facilite des traitements à grande vitesse de chaînes de données à analyser.
L'invention propose ainsi un dispositif de mémoire TRIE, comprenant des moyens de mémorisation de motifs binaires associés à des références respectives, et des moyens d'analyse de chaînes de données par tranches binaires successives pour extraire une des références lors d'une concordance entre une chaîne de données analysée et un motif binaire mémorisé associé à cette référence. Les moyens de mémorisation comportent plusieurs étages successifs, chaque étage comportant au moins un registre de cellules de mémoire. Les moyens d'analyse ont accès à une cellule d'un étage i >0 en relation avec l'analyse de la (i+1 )-ième tranche d'une chaîne de données. Chaque cellule de mémoire non vide d'un étage i >0 contient des données comportant soit un pointeur de poursuite d'analyse désignant un registre de l'étage i+1 , soit une référence associée à un motif binaire mémorisé. Au moins un pointeur contenu dans une cellule d'un étage i >0 inclut d'une part une information d'adressage du registre de l'étage i+1 désigné par ledit pointeur, et d'autre part des données cartographiques pour la localisation d'une cellule au sein dudit registre désigné sur la base de la (i+2)-ième tranche d'une chaîne de données.
Cette organisation des données dans la mémoire TRIE repose sur un schéma de type compression en étendue. Elle en présente les avantages en termes de réduction de l'espace mémoire requis. Comme ce schéma n'impose pas de modifications de la longueur des tranches analysées, il est d'autre part compatible avec une organisation en pipeline des moyens d'analyse.
Par rapport aux méthodes connues de compression en étendue, l'invention procure l'avantage de permettre le traitement d'un pointeur avec un seul cycle de lecture dans la mémoire. La raison en est que les données cartographiques (bitmap) décrivant la répartition des cellules dans un registre de la mémoire ne sont pas stockées dans ce registre, mais dans la cellule du registre (nœud-père) qui pointe vers ce registre. En conséquence, le bitmap peut être lu en même temps que l'adresse du registre auquel il se rapporte, de sorte qu'il n'est pas nécessaire de prévoir un cycle de lecture spécifique pour l'obtention de ce bitmap.
Dans une réalisation particulière du dispositif, les données
cartographiques d'un pointeur contenu dans une cellule d'un étage i >0 comprennent un vecteur de 2K bits de rangs 0 à 2K-1 , où K désigne le nombre de bits de ladite (i+2)-ième tranche, chaque bit de rang j (0 ≤j < 2K) ayant une première valeur si au moins un motif mémorisé commence par un préfixe associé audit pointeur et continue par une tranche de K bits formant la représentation binaire du rang j, et sinon une seconde valeur complémentaire de la première valeur.
L'analyse de la (i+2)-ième tranche d'une chaîne de données peut alors comporter, après lecture de la cellule de l'étage i contenant le pointeur, l'extraction d'un bit du vecteur compris dans les données cartographiques dudit pointeur, à un rang dont le contenu de la (i+2)-ième tranche forme la représentation binaire, et, lorsque le bit extrait a la première valeur, la détermination d'un décalage d'adresse au sein du registre désigné de l'étage i+1 sur la base du nombre de bits ayant la première valeur parmi les bits de rang inférieur à j dudit vecteur. Ce décalage d'adresse est combiné avec l'information d'adressage du registre désigné pour former l'adresse d'une cellule à lire dans les moyens de mémorisation. Lorsque le bit extrait a la seconde valeur, l'analyse de la (i+2)-ième tranche donne lieu à la délivrance d'une référence pour la chaîne de données analysée. Il peut s'agir d'une référence par défaut. L'obtention de la référence délivrée peut aussi requérir un accès à la mémoire. L'analyse de la (i+2)-ième tranche comporte dans ce cas, lorsque le bit extrait a la seconde valeur, la détermination sur la base du pointeur de l'adresse d'une cellule à lire dans les moyens de mémorisation, contenant une référence associée à un motif binaire mémorisé qui est le plus long motif mémorisé formant préfixe de la chaîne de données analysée.
Dans un mode de réalisation avantageux, les moyens de mémorisation sont répartis en N zones de mémoire distinctes de niveaux 0 à N-1 , N étant inférieur à un nombre maximum d'étages des moyens de mémorisation, et les moyens d'analyse sont organisés en pipeline en relation avec les N zones de mémoire.
D'autres particularités et avantages de la présente invention apparaîtront dans la description ci-après d'exemples de réalisation non
limitatifs, en référence aux dessins annexés, dans lesquels: - la figure 1 , précédemment commentée, montre un exemple de contenu d'une mémoire TRIE; - la figure 2, précédemment commentée, est un organigramme d'une procédure d'analyse classique exécutée pour consulter la mémoire TRIE; - la figure 3, précédemment commentée, est une représentation arborescente de la mémoire TRIE ayant le contenu illustré par la figure 1 ; - la figure 4 est un schéma synoptique d'un routeur de paquets incorporant un dispositif selon l'invention; - la figure 5 est un schéma d'un circuit formant un dispositif selon l'invention; - la figure 6 montre en deux diagrammes un exemple de contenu d'une cellule de mémoire dans une réalisation de l'invention; et - la figure 7 est un diagramme illustrant des opérations logiques effectuées dans une réalisation du dispositif selon l'invention.
Pour illustrer la description ci-après, on considère le cas où des paquets à acheminer par un routeur sont transportés sur un réseau à mode de transfert asynchrone (ATM), et on suppose que l'en-tête de chaque paquet est toujours contenu dans une cellule ATM. Le routeur 10 représenté par la figure 4 fonctionne avec un ordinateur- hôte 11. L'ordinateur hôte 11 peut émettre et recevoir des paquets, notamment pour la gestion du processus de routage. Il dispose pour cela d'une voie virtuelle (VC) en entrée et en sortie du routeur 10.
Le routeur 10 comprend un module d'acheminement ("forwarding") 12 qui achemine les paquets reçus selon des instructions, ci-après appelées "références d'acheminement" ou "status final", obtenues par un module d'analyse 13 à partir d'une mémoire 14 organisée comme un tableau de mémoire TRIE. Dans le cas d'un équipement de réseau ATM, le module d'acheminement 12 peut réaliser essentiellement une traduction des identifiants de conduits et de voies virtuels VPIA CI ("Virtual Path Identifier / Virtual Channel Identifier"), la fusion des voies virtuelles selon les conduits
virtuels, et la délivrance des paquets sur les ports de sortie du routeur. Pour cela, il a besoin de connaître les couples VPI/VCI des paquets sortants, qui peuvent constituer les références d'acheminement stockées dans la mémoire TRIE 14. Chaque cellule ATM contenant l'en-tête d'un paquet à router transite par une mémoire tampon 15 à laquelle l'unité d'analyse 13 a accès pour analyser des portions de ces en-têtes au moyen de la mémoire TRIE 14. Cette analyse est par exemple effectuée par quartets (K=4).
Configurer le routeur 10 consiste à enregistrer les données pertinentes dans la mémoire TRIE 14. Cette opération est réalisée par une unité (non représentée) de gestion de la mémoire TRIE sous le contrôle de l'ordinateur- hôte 11. Les commandes de configuration peuvent être reçues dans des paquets transmis sur le réseau et destinés au routeur 10. Pour une façon de gérer dynamiquement le contenu de la mémoire TRIE 14, on pourra se reporter à EP-A-0 989 502.
Dans l'exemple de routeur représenté sur la figure 4, l'unité d'analyse 13 coopère avec un automate 16 programmé pour effectuer certains contrôles et certaines actions sur les en-têtes des paquets, d'une manière dépendante des protocoles de communication supportés par le routeur. En dehors de cet automate 16, le fonctionnement du routeur 10 est indépendant des protocoles de transport des paquets.
La figure 5 montre un dispositif de mémoire TRIE selon l'invention.
Dans cet exemple, chaque cellule élémentaire de la mémoire TRIE occupe
32 bits. On retrouve sur la figure 5 l'unité d'analyse 13, la mémoire TRIE 14, ainsi que la mémoire tampon 15 destinée à recevoir une chaîne de données à analyser par tranches de K = 4 bits.
La mémoire TRIE comporte un plan mémoire 14, avantageusement réalisé en technologie SRAM ("Static Random Access Memory"). Ce plan mémoire comporte un bus de données D de largeur 32 bits, ainsi qu'un bus d'adresse AD, dont la largeur dépend de la quantité de données à stocker dans la mémoire TRIE. La plan mémoire 14 est organisé sous forme d'un ensemble
de registres correspondant chacun à un nœud d'un arbre tel que celui illustré par la figure 3. Ces registres sont donc logiquement distribués en étages i = 0, 1 , 2, ...etc.. Chaque registre comporte une ou plusieurs cellules de mémoire de taille 32 bits, adressables par le bus AD. L'unité d'analyse 13 comporte un circuit 20 de détection de type de cellule, relié au bus de données D, une logique 21-25 de traitement de données cartographiques (vecteur bitmap) et un module 26 de calcul d'adresse.
Une logique de codage 27 associée au registre tampon 15 fournit à l'unité 13 les quartets successifs des chaînes de données analysées sous forme de deux mots W.,, W2 de 2K = 16 bits. Ce codage est opéré par la logique 27 indépendamment du contenu de la mémoire TRIE 14, de sorte qu'il peut être effectué sans subir les contraintes temporelles liées au rythme des accès à la mémoire. La figure 7 illustre ce codage dans le cas particulier où le quartet V correspond au nombre C en notation hexadécimale. Le mot de 16 bits Wi a des bits à 0 partout sauf à la position correspondant à la valeur du quartet V. Le mot de 16 bits mots W2 a des bits à 0 aux positions de poids égal ou supérieur à la valeur du quartet et des bits à 1 aux autres positions. La logique 27 comprend un assemblage adéquat de portes logiques pour exécuter ce codage.
La figure 6 montre le contenu d'une cellule de mémoire dans un exemple particulier de réalisation. Dans cet exemple, les quatre premiers bits de la cellule représentent un drapeau P dont la valeur indique notamment le type (status ou pointeur) des données stockées dans la cellule. Dans le cas d'un status, les 28 bits restants de la cellule constituent la référence S utilisée dans l'opération d'acheminement des paquets et/ou des commandes destinées à l'automate 16.
Dans le cas où la cellule est de type pointeur, le drapeau P est suivi par un champ contenant l'adresse A dans la mémoire 14 du registre de l'étage suivant désigné par le pointeur. Cette adresse A est de 12 bits dans l'exemple
considéré. Le reste de la cellule est occupé par un vecteur bitmap B de 2K = 16 bits décrivant l'occupation du registre désigné par l'adresse A.
Le bit de rang j de ce vecteur B (0 ≤j < 2K = 16) a la valeur 0 si au moins un motif mémorisé commence par un préfixe associé au pointeur et continue par un quartet formant la représentation binaire du rang j, c'est-à-dire si la mémoire TRIE contient un ou plusieurs motifs dont l'analyse passe par le registre désigné par le pointeur. Sinon, le bit de rang j a la valeur 1.
Le drapeau P est examiné par le circuit de détection de type de cellule
20 de l'unité d'analyse 13. Si la cellule est de type status, la référence S qui a été lue est délivrée par l'unité 13 en tant que résultat de l'analyse de la chaîne courante. Cette détection de status libère en outre le registre tampon 15 pour qu'il puisse recevoir une prochaine chaîne de données à analyser.
Lorsque le circuit 20 détecte que les données reçues de la mémoire 14 sont de type pointeur, il fournit le vecteur bitmap B extrait de ces données à la logique de traitement 21-25, et l'adresse A du registre désigné au module de calcul d'adresse 26.
Dans la mémoire 14, les cellules d'un même registre sont contiguës, c'est-à-dire stockées à des adresses consécutives. L'adresse A du registre correspond à la position de la première cellule de ce registre, associée à la plus petite valeur valide du quartet V. Les cellules se suivent dans le registre dans l'ordre croissant des valeurs valides de ce quartet V. Le registre comporte donc au maximum 2K = 16 cellules, dans le cas où toutes les valeurs du quartet s'inscrivent dans des motifs différents enregistrés dans la mémoire TRIE. L'opération effectuée par le module de calcul d'adresse 26 consiste à combiner l'adresse A du registre désigné avec un décalage calculé par la logique de traitement 21-25 pour obtenir l'adresse présentée sur le bus AD pour le prochain cycle de lecture dans la mémoire 14. Dans une réalisation possible, cette opération consiste simplement à concaténer l'adresse A avec les bits représentant la valeur du décalage Δ, avec A aux positions de poids fort et Δ aux positions de poids faible. Dans notre exemple, si le décalage Δ est
représenté sur 4 bits, l'adresse résultante présentée sur le bus AD est de 12+4 = 16 bits.
La logique de traitement 21-25 calcule deux mots de 16 bits R-| , R2 servant à calculer le décalage Δ pour le (i+2)-ième cycle d'analyse de la chaîne (i 0) à partir du vecteur bitmap B qui a été lu au (i+1)-ième cycle et des mots
W1 ( W2 résultant du codage du (i+1 )-ième quartet. La production de ces deux mots R1 , R2 est illustrée par la figure 7.
Le premier mot R1 résulte d'une opération logique ET effectuée bit à bit entre le mot W1 et le vecteur bitmap B par 16 portes ET parallèles, schématisées collectivement par la porte 21. Si le mot R1 comporte un bit à 1
(à la position donnée par le quartet V), c'est que le quartet est valide, c'est-à- dire inclus dans un chemin enregistré dans la mémoire TRIE. Sinon, c'est un status par défaut qui sera retourné par l'unité d'analyse 13.
Le mot R2 résulte d'une opération logique ET effectuée bit à bit entre le mot W2 et le vecteur bitmap B par 16 portes ET parallèles, schématisées par la porte 23. On voit que le nombre de bits à 1 du mot R2 mesure le décalage Δ lorsque la valeur du quartet V est valide. Pour évaluer cette condition de validité, la porte 22 (figure 5) calcule le OU logique entre les 16 bits du mot R., .
Le bit résultant commande le multiplexeur 24 pour adresser au module de pesage 25 soit le mot R2 si R1 ≠ 0000000000000000, soit le vecteur bitmap B si R., = 0000000000000000. Le module de pesage 25 compte le nombre de bits à 1 dans le mot de 16 bits qui lui est présenté, ce qui donne la valeur du décalage Δ.
Pour le premier cycle d'analyse, le vecteur bitmap B présenté aux portes 21 , 23 avec le premier quartet de la chaîne est initialisé à une valeur décrivant l'occupation du registre portier. Cette valeur est par exemple lue dans un registre d'initialisation spécifique.
Le mode de compression et de stockage des données de la mémoire TRIE qui vient d'être décrit permet d'effectuer l'analyse des chaînes de
données en mode pipeline afin d'accroître le rythme d'analyse des données, la mémoire 14 étant répartie en N zones de mémoire distinctes de niveaux 0 à N-1 , comme indiqué plus haut.