Brevet FR2869700A1 — publié le 20051104

GESTION DE REGISTRES INDEXES DANS UN SYSTEME SUR UNE PUCE La présente invention se rapporte de manière générale au domaine des systèmes électroniques numériques en circuit intégré, appelés "systèmes sur une puce" ou SoC (de l'anglais "System On a Chip"). Plus particulièrement, l'invention concerne la gestion de l'accès à des registres indexés en relation avec les mécanismes d'arbitrage prévus pour gérer des requêtes d'accès conflictuelles initiées par des modules fonctionnels distincts dans un tel système. Dans un système sur une puce, des ressources sont classiquement partagées entre des modules fonctionnels qui y ont accès. Un tel module fonctionnel est parfois appelé composant virtuel ou bloc de "propriété intellectuelle", ou encore bloc IP (de l'anglais "Intellectual Property") dans le jargon de l'Homme du métier. Il est conçu pour assurer une fonction déterminée, ou est à usage général (il s'agit éventuellement d'un microprocesseur ou d'un microcontrôleur). II peut être réalisé sous la forme d'éléments matériels et/ou d'éléments logiciels. On distingue les modules de type maître (ci-après modules initiateurs), qui prennent l'initiative d'échanger des données avec un ou plusieurs autres modules et les modules de type esclave (ci-après modules cibles), dont le rôle est de répondre aux requêtes reçues du module initiateur qui a la main. En cas de pluralité de modules initiateurs, une unité d'arbitrage (ou arbitre) est chargée d'arbitrer des requêtes conflictuelles d'accès à une ressource commune provenant de modules initiateurs distincts, pour accorder un droit exclusif d'accès à la ressource, à l'un déterminé desdits modules initiateurs. Classiquement, au moins un module cible comprend des registres de données, qui sont accessibles par des modules initiateurs via une adresse déterminée, et dont certains au moins sont des registres indexés. L'ensemble des registres ainsi adressables forme le plan mémoire du système. Un registre indexé est un espace de stockage de données multiple, mais adressable par une unique adresse, en combinaison avec un mécanisme d'indexation utilisant un registre d'index associé. On notera que le registre d'index est généralement commun à tous les registres indexés d'un même module fonctionnel. Un mécanisme d'indexation de registres est comparable à un mécanisme de pagination d'une mémoire. Pour permettre l'utilisation des registres indexés par les modules initiateurs, le registre d'index associé est accessible en écriture via une requête d'écriture ad hoc. Cette requête d'écriture permet de stocker dans le registre d'index une valeur d'index pour les registres indexés. Elle peut émaner du module initiateur qui a besoin d'accéder à l'un des registres indexés, et précède alors une requête d'accès ou une série de requêtes d'accès à ce registre indexé produites par ce module initiateur. Actuellement, pour tout type de registre de données (i.e., registre classique ou registre indexé), une requête d'accès est indifférenciée, en ce sens que rien ne permet de distinguer une requête se rapportant à un registre classique d'une requête se rapportant à un registre indexé. Ceci peut conduire, dans certaines applications, à une surcharge de 15 logiciel au niveau du code de l'application à exécuter, et donc à des pertes de performances au niveau du système. De plus, si un module initiateur émet une série de requêtes d'accès successives pour un même registre indexé, et si le module cible fait en même temps l'objet d'une requête d'accès conflictuelle provenant d'un autre module initiateur, il y a alors un grand risque que l'unité d'arbitrage commande un changement de priorité au profit dudit autre module initiateur. Ceci est notamment le cas si l'unité d'arbitrage met en oeuvre un mécanisme d'arbitrage avec un algorithme par permutation circulaire ("Round Robin" en anglais), qui attribue le droit d'accès séquentiellement aux modules initiateurs demandeurs (i.e., à chacun leur tour), ou un algorithme par ancienneté, dit LRU ("Least Recently Used"), qui attribue le droit d'accès au module initiateur qui le demande et qui est le plus ancien à l'avoir eu. Ledit autre module initiateur peut alors écrire dans le registre d'index une autre valeur d'index afin d'accéder à un autre registre indexé. Lorsque l'unité d'arbitrage redonne la main au module initiateur initial, celui- ci croit qu'il va continuer à accéder au registre indexé initial, alors qu'il va en réalité finir d'exécuter sa série de requêtes en accédant audit autre registre indexé, c'est-à-dire au registre indexé auquel l'autre module initiateur vient d'accéder. Le code de l'application ne sera donc pas exécuté correctement. II en résulte que l'application sera corrompue. Afin de remédier à ces inconvénients, un premier aspect de l'invention propose un système électronique comprenant: - au moins un premier et un second modules initiateurs; - au moins un module cible ayant des registres de données accessibles par lesdits modules initiateurs et dont certains au moins sont des registres indexés, ainsi qu'un registre d'index associé aux registres indexés et accessible en écriture via une requête d'écriture correspondante, pour stocker une valeur d'index pour lesdits registres indexés; et, - une unité d'arbitrage pour arbitrer des requêtes conflictuelles d'accès aux registres de données, initiées par des modules initiateurs distincts; - un premier et un deuxième registres d'index supplémentaires, respectivement associés au premier et au second modules initiateurs; - une unité de décodage d'adresse, construite pour positionner un signal de sélection de registre indexé, en réponse à toute requête d'accès à un registre indexé; et, - une unité de commande pour: commander le stockage d'une valeur d'index pour les registres indexés, dans le registre d'index supplémentaire associé à un module initiateur déterminé, en réponse à une requête d'écriture de ladite valeur d'index dans le registre d'index associé auxdits registres indexés, initiée par ledit module initiateur; et pour - en réponse à toute requête d'accès à un registre indexé initiée par un module initiateur déterminé qui fait que le signal de sélection de registre indexé est positionné, copier la valeur d'index du registre d'index associé audit module initiateur vers le registre d'index associé audit registre indexé, préalablement à l'exécution de ladite requête d'accès. Ce double mécanisme de décodage d'adresse et de gestion de registres d'index, permet de s'affranchir de tout risque de mauvaise manipulation d'adresse de registre, et permet également de gagner en terme de performances. Avantageusement, le mécanisme de sélection de registres indexés est mis en oeuvre au niveau matériel ("hardware"), ce qui optimise l'accès aux deux types de registres (registres classiques et registres indexés) et permet de sécuriser les requêtes d'accès simultanées aux registres indexés à partir de modules initiateurs différents. Un deuxième aspect de l'invention se rapporte à un décodeur d'adresse destiné à être utilisé dans un système selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend une unité de décodage d'adresse selon le premier aspect ci-dessus. Un troisième aspect de l'invention propose une clé de stockage comprenant au moins une mémoire non volatile et un circuit de commande, caractérisée en ce que le circuit de commande est un circuit sur une puce (SoC) formant un système selon le premier aspect ci-dessus. D'autres caractéristiques et avantages de l'invention apparaîtront encore à la lecture de la description qui va suivre. Celle-ci est purement illustrative et doit être lue en regard des dessins annexés sur lesquels: - la figure 1 est un schéma synoptique d'un exemple de clé de mémoire selon le troisième aspect de l'invention; - la figure 2 est un schéma synoptique d'un exemple de système électronique selon le premier aspect de l'invention, qui peut être compris dans la clé de mémoire de la figure 1; - la figure 3 est un schéma synoptique d'un exemple de module de commande utilisable dans un système selon la figure 2; - la figure 4 est un schéma synoptique d'un autre exemple de système électronique selon le premier aspect de l'invention; - la figure 5 est un schéma illustrant le couplage d'un module 25 fonctionnel à un bus de communication; - la figure 6 est un schéma illustrant un exemple de fonctionnement du module de commande dans un système selon la figure 2; - la figure 7 est un tableau illustrant un décodage d'adresse selon l'art antérieur; et, - la figure 8 est un tableau illustrant un décodage d'adresse selon un exemple de réalisation du deuxième aspect de la présente invention. L'invention est décrite ci-après dans un exemple d'application à un circuit de commande destiné à gérer une clé de stockage ou clé de mémoire. Une clé de mémoire forme un medium de stockage de masse de petites dimensions, monté dans un support amovible prenant la forme d'une clé ou d'un porte-clés. Ce medium permet de stocker et de transporter facilement une certaine quantité de données, dans le but, par exemple, de les transférer d'un ordinateur à un autre. Une telle clé de mémoire s'insère en principe dans les ports USB ("Universal Serial Bus") des ordinateurs. C'est pourquoi on l'appelle aussi clé de stockage USB, clé de mémoire USB ou tout simplement clé USB. A la figure 1, une telle clé de mémoire 1 comprend un circuit de commande 10, couplé à un connecteur 5 de type USB, via un circuit 4 d'interface USB. Par ailleurs, le circuit 10 est couplé à une ou plusieurs mémoires 2, 3 non volatiles et de grande capacité, qui sont par exemple des mémoires de type NAND-Flash ou similaire. Le circuit 10 est télé-alimenté lorsque la clé de mémoire 1 est connectée via le connecteur 5 à un ordinateur (non représenté) ou similaire. Le circuit d'interface 4 peut par exemple assurer la compatibilité avec la norme USB 2.0 (norme pour l'échange de données entre les ordinateurs à usage général et leurs périphériques). Le circuit de commande peut avantageusement être un système sur une puce (SoC), afin de satisfaire un haut degré d'intégration requis par la 20 miniaturisation souhaitée de ce genre de produits électroniques. La figure 2 illustre un exemple d'architecture d'un tel système. Dans cet exemple, le système 10 comprend deux coeurs 21 et 22, qui sont par exemple respectivement un microcontrôleur tel que le ST7 de STMicroelectronics, et un coprocesseur dédié aux opérations de commande des moyens de stockage de masse formés par les mémoires internes 2 et 3. Ces coeurs 21 et 22 sont conçus en tant que modules fonctionnels de type initiateur (respectivement Il et 12). Pour leur communication entre eux et avec d'autres modules fonctionnels, ils respectent par exemple les spécifications du standard VCI ("Virtual Component Interface") de la VSIA ("Virtual Socket Interface Alliance"), Wakefield, Massachusetts, EtatsUnis. A cet effet, certains modules peuvent avoir besoin d'une interface VCI, comme c'est le cas du microcontrôleur ST7 bien que cette interface ne soit pas représentée à la figure, car en tant que tel ils ne supportent pas ce standard. Une mémoire volatile (RAM "Random Access Memory") 25, est utilisée par les modules 21 et 22 pour stocker des informations temporaires, liées à l'application concernée. De plus, une mémoire non volatile (ROM "Read Only Memory") 26 stocke des données permanentes, notamment le code de l'application qui est chargé dans les modules 21 et/ou 22 à la mise sous tension. Le système 10 comprend aussi un contrôleur de périphérique 23, en particulier un contrôleur de fonction USB 2.0, tel que le composant virtuel MUSBHSFC InventraTM de Mentor Graphics, en tant que module fonctionnel de type cible (T1). Ce composant virtuel est compatible avec le standard VCI précité. Dans un exemple, le module 23 comprend quatre registres de données, dont un registre classique 231 (REG), et trois registres indexés 232 (REG_IdxO) , 233 (REG_Idxl), et 234 (REG_Idx2). Le registre classique 231 est adressable par les modules initiateurs 21 et 22 via une valeur d'adresse @Reg_T1. Les registres indexés 232-234 sont adressables par les modules initiateurs 21 et 22 via une valeur d'adresse commune @Reg_ldx_T1, différente de l'adresse @Reg_T1, en combinaison avec une valeur d'index respectivement IdxO, Idxl et Idx2. Pour accéder à l'un des registres indexés 232 à 234 via une requête d'accès comportant l'adresse @Reg_Idx_T1 en paramètre, il faut, en vertu d'un mécanisme d'indexation connu en soi, préalablement écrire la valeur d'index correspondante IdxO, Idxl ou Idx2 dans un registre d'index 235 (IDX_REG) du module cible 23. A la fois le microcontrôleur 21 et le coprocesseur 22 peuvent avoir accès, sur requête, aux registres de données du contrôleur de périphérique 23. Des données peuvent être échangées entre les modules initiateurs 21 et 22 d'une part, et le module cible 23 d'autre part, via un module de commande 20 qui leur est relié de manière ad hoc, par exemple via des bus de communication tels que le VCI OCB ("VCI On Chip Bus"). Dit autrement, le contrôleur 23 est une ressource commune aux deux coeurs 21 et 22. Dans l'exemple représenté, le module de commande 20 est relié aux modules 21, 22 et 23 par des bus de communication respectivement 40a, 40b et 40c. Le schéma de la figure 5 illustre la connexion d'un module fonctionnel 50 à un bus de communication 40 qui comprend des canaux pour la communication d'informations entre ce module et un autre module fonctionnel. Le bus de communication 40 peut ainsi comprendre, dans un exemple, un bus de données 51, un bus d'adresses 52 et un bus de contrôle 53. Dans certains cas, le bus de données 51 comprend un sous-bus de données pour la lecture de données, et un sous-bus de données pour l'écriture de données. Le module fonctionnel 50 comprend un port de communication 54, qui peut être de type maître ou de type esclave selon que le module 50 est de type initiateur ou de type cible, respectivement. Le port 54 permet la liaison du module 50 au bus de communication 40. Le bus de données 51 est utilisé pour transmettre les signaux de données (D), qui contiennent les informations échangées entre les modules du système. Le bus d'adresses 52 est utilisé pour transmettre les valeurs d'adresses (@), qui indiquent le module dans lequel les données transmises sur le bus de données doivent être lues ou écrites, ainsi éventuellement que leur emplacement à l'intérieur du module concerné. Enfin, le bus de contrôle 53 est utilisé pour transmettre les signaux de commande. De tels signaux servent notamment aux modules initiateurs pour faire des requêtes d'accès à des registres dans les modules cibles. Ils servent aussi aux modules cibles pour indiquer la fin d'une transaction, et éventuellement la réussite ou l'échec de la transaction. D'autres signaux de commande servent aussi à définir le sens de la transaction (lecture ou écriture), synchroniser les échanges, etc. On va maintenant décrire un mode de réalisation du module de commande 20, en référence au schéma de la figure 3 (par souci de simplicité, seulement les connexions du module de commande 20 au module cible 23 et au module initiateur 21 sont représentées sur cette figure). Le contrôleur 23 étant une ressource commune aux deux coeurs 21 et 22, le module de commande 20 comprend une unité d'arbitrage 24 (ARB). On note ainsi I1_Req un signal de requête d'accès délivré à l'unité d'arbitrage 24 par le module initiateur 21 via le bus de contrôle 53 du bus 40a. Ce signal est activé (c'est-à-dire positionné à son état actif, par exemple l'état logique 1), lorsque le module initiateur 21 a besoin d'accéder au module cible 23. Il y a conflit lorsque des signaux de ce type reçus de plus d'un module initiateur sont actifs simultanément. L'unité d'arbitrage 24 doit arbitrer ce conflit, pour accorder un droit exclusif d'accès à la ressource à l'un seulement des modules initiateurs concernés. A cet effet, l'unité d'arbitrage 24 met en oeuvre un mécanisme d'arbitrage qui peut être de n'importe quel type connu, par exemple à algorithme par permutation circulaire, à algorithme d'ancienneté ou à priorités fixes. Par ailleurs, l'unité d'arbitrage 24 reçoit un signal de commande Req_End du module cible 23, via le bus de contrôle 53 du bus 40a. Ce signal est actif (par exemple à l'état logique 1) pour indiquer que le traitement par le module cible de la requête en cours est achevé. En effet, l'unité d'arbitrage 24 ne doit pas permettre l'accès au module cible par un autre module initiateur avant que le traitement de la requête en cours soit terminé. Dit autrement, le droit exclusif d'accès accordé à un module initiateur doit être maintenu jusqu'à la fin du traitement de la requête pour laquelle il a été accordé. Le module de commande 20 comprend aussi une unité de décodage d'adresse 28 (@DEC). Celle-ci reçoit une adresse @ via le bus d'adresses 52 du bus 40a, laquelle adresse est placée sur ce bus lors d'une requête d'accès initiée par le module initiateur. Cette adresse identifie le registre de données concerné par la requête d'accès. De façon connue en soi, l'unité 28 génère un signal de sélection de composant TI_Sel, qui est un signal de commande indiquant au module cible 23 que la requête d'accès concerne l'un de ses registres. Le signal TI_Sel est transmis au module 23 via le bus de contrôle 53 du bus 40c. En outre, l'adresse @ est transmise au module 23 via le bus d'adresses 52 du bus 40c. En plus, l'unité 28 génère un signal de sélection de registre indexé T1_Idx Sel, qui est positionné c'est-à-dire mis à l'état actif (par exemple à l'état logique 1) lorsque l'adresse @ est celle d'un registre indexé, c'est-à-dire en cas de requête d'accès à un registre indexé. De la même façon, l'unité 28 génère un signal de commande de stockage W_Ctrl (voir plus loin) qui est positionné lorsque l'adresse @ placée sur le bus d'adresses 52 du bus 40a par le module initiateur 21 correspond à celle du registre d'index 235 du module cible 23 (ou de l'un des modules cibles en cas de pluralité de modules cibles), c'est-à-dire en cas de requête d'écriture dans ledit registre d'index. Le module de commande 20 comprend enfin une unité de commande 27 (CU), et deux registres d'index supplémentaires 291 et 292, respectivement associés aux modules initiateurs 21 et 22. L'unité 27 a pour fonction de commander le stockage d'une valeur d'index pour les registres indexés 232-234, dans le registre d'index supplémentaire 291 ou 292 associé à l'un des modules initiateurs respectivement 21 ou 22, en réponse à une requête d'écriture de cette valeur d'index dans le registre d'index 235 associé auxdits registres indexés, initiée par ledit module initiateur respectivement 21 ou 22. Pour remplir cette fonction, l'unité de commande 27 est couplée au module initiateur 21 via le bus de données 51 du bus 40a, pour recevoir la valeur d'index qui est placée sur ce bus par le module initiateur 21 lors d'une requête d'écriture dans le registre d'index 235. Elle reçoit aussi de l'unité de décodage d'adresse 28, le signal de commande de stockage W_Ctrl précité. En réponse à ce signal W_Ctrl à l'état actif, elle stocke la valeur d'index en question dans le registre 291 ou dans le registre 292, selon le cas. L'unité 27 a aussi pour fonction, en réponse à toute requête d'accès à un registre indexé initiée par un module initiateur déterminé qui fait que le signal de sélection de registre indexé T1_Idx_Sel est positionné (i.e. mis à l'état logique 1), de copier la valeur d'index du registre d'index associé audit module initiateur vers le registre d'index associé audit registre indexé, préalablement à l'exécution de ladite requête d'accès. Pour remplir cette fonction, elle reçoit le signal de commande T1_ldx Sel de l'unité de décodage d'adresse 28. De plus, elle est couplée au module cible 23 via le bus de données 51 du bus 40c. La figure 6 illustre un exemple de fonctionnement de l'unité de commande 27 selon la présente invention. En haut à gauche, la figure 6 montre une séquence d'instructions A1-A9 à exécuter par le module initiateur 21. En haut à droite, la figure 6 montre une séquence d'instructions B1-B9 à exécuter en parallèle par le module initiateur 22. Les instructions Al, A2 et A9 sont des instructions d'écriture (WRITE) d'une donnée quelconque (Data) dans le registre classique 231 du module 23, dont l'adresse est par exemple @REG. Les instructions A4-A6 forment une séquence d'instructions successives d'écriture d'une donnée quelconque dans le registre indexé 232 du module cible 23, dont l'adresse est par exemple @REG_idx et dont la valeur d'index est par exemple IdxO. Par conséquent, ces instructions A4-A6 sont, de façon classique, précédées d'une instruction A3 d'écriture de la valeur IdxO dans le registre d'index 235 du module 23, dont l'adresse est par exemple @IDX_REG. Enfin l'instruction A8 est une d'instruction d'écriture d'une donnée quelconque dans le registre indexé 233 du module cible 23, dont l'adresse est aussi @REG_idx (comme pour le registre 232) mais dont la valeur d'index est par exemple Idxl. Par conséquent, cette instruction A8 est, de façon classique, précédée d'une instruction A7 d'écriture de la valeur Idx1 dans le registre d'index 235 du module 23, à l'adresse @IDX REG. Les instructions B1-B3 et B7-B9 sont des instructions d'attente (NOP, mis pour "No OPeration" en anglais), c'est-à-dire qu'elles ne correspondent à aucune opération effective. Les instructions B5 et B6 forment une séquence d'instructions successives d'écriture d'une donnée quelconque dans le registre indexé 234 du module cible 23, dont l'adresse est aussi @REG_idx mais dont la valeur d'index est par exemple Idx2. Par conséquent, ces instructions B5 et B6 sont, de façon classique, précédées d'une instruction B4 d'écriture de la valeur Idx2 dans le registre d'index 235 du module 23, à l'adresse @IDX_REG. On notera que, en réponse aux instructions A3, A7 et B4 d'écriture dans le registre d'index 235 d'une valeur d'index, respectivement IdxO, Idx1 et Idx2, le module de commande écrit ladite valeur d'index dans le registre supplémentaire 291 (pour les instructions A3 et A7) ou dans le registre supplémentaire 292 (pour l'instruction B4). En bas et au milieu de la figure 6, on a représenté un exemple de séquence d'instructions commandée en pratique par le module de commande 20, en tenant compte de l'arbitrage nécessaire entre des requêtes (instructions) conflictuelles (c'est-à-dire simultanées) des modules initiateurs 21 et 22, et en appliquant en outre les règles de gestion du registre d'index du module cible 23 telles que définies plus haut. Pour commencer, l'unité d'arbitrage 24 du module de commande 20 accorde l'accès au module cible 23 au profit du module initiateur 21, pour l'exécution des instructions A1-A3. En effet, il y a absence de conflit avec le module initiateur 22, étant donné que celui-ci ne produit aucune requête d'accès simultané aux registres du module cible 23. Ensuite, l'unité d'arbitrage 24 du module de commande 20 arbitre le conflit entre les instructions A4 et B4, A5 et B5, et A6 et B6. En supposant qu'elle met en oeuvre un mécanisme d'arbitrage à algorithme par permutation circulaire ou à algorithme d'ancienneté, elle accorde le droit d'accès au module cible 23, alternativement au module initiateur 22 et au module initiateur 21, pour l'exécution des instructions B4, A4, B5, A5, B6 et A6, dans cet ordre. En outre, avant chacune des instructions A4, A5 et A6, l'unité de commande 27 du module de commande 20 génère une instruction d'écriture supplémentaire respectivement S44, S55 et S66, pour copier la valeur d'index qui est stockée dans le registre supplémentaire 291, à savoir la valeur IdxO dans l'exemple, dans le registre d'index 235 du module cible 23. De même, avant chacune des instructions B5 et B6, l'unité de commande 27 du module de commande 20 génère une instruction d'écriture supplémentaire respectivement S45 et S56, pour copier la valeur d'index qui est stockée dans le registre supplémentaire 292, à savoir la valeur ldx2 dans l'exemple, dans le registre d'index 235 du module cible 23. Enfin, à la suite de l'exécution de l'instruction A6, l'unité d'arbitrage 24 du module de commande 20 rend la main au module initiateur 21 pour l'exécution des instructions A7-A9, étant donné qu'il n'y a plus de conflit avec des instructions initiées par le module 22. L'invention a été décrite ci-dessus dans un exemple d'application préféré mais non limitatif. Par exemple, on a décrit un mode de réalisation dans lequel le module de commande 20 incorpore l'unité d'arbitrage, l'unité de décodage d'adresse et/ou l'unité de commande. En variante, l'unité d'arbitrage peut être autonome, en étant couplé à un bus de communication reliant les modules fonctionnels du système. De même, l'unité de décodage peut être comprise dans un décodeur d'adresse utilisable dans un système selon la présente invention. En outre, le mode de réalisation décrit plus haut prévoit que le registre d'index supplémentaire 291 associé au module initiateur 21 et le registre d'index supplémentaire 292 associé au module initiateur 22 sont compris dans le module de commande. Ceci n'est pas obligatoire. L'un seulement de ces registres peut être compris dans le module de commande 20. Dans d'autres modes de réalisation, le registre d'index supplémentaire 291 associé au module initiateur 21 est compris dans ledit module initiateur, et/ou le registre d'index supplémentaire 292 associé au module initiateur 22 est compris dans ledit second module initiateur. Par ailleurs, dans l'exemple ci-dessus, le nombre N de modules fonctionnels du système est égal à 3, le nombre P de modules initiateurs est égal à 2, et le nombre Q de modules cible est égal à l'unité. Néanmoins, il est bien entendu que l'invention s'applique pareillement à des architectures de système plus complexes, dès lors que 2 A titre d'illustration, le schéma de la figure 4 montre l'architecture d'un système à un bus de communication 40. Des modules initiateurs 41, 42 et 43, ainsi que des modules cibles 44 et 45, sont reliés au bus 40. Chacun des modules ci-dessus est relié au bus 40 par l'intermédiaire d'un port de communication de type maître ou de type esclave selon que le module concerné est de type initiateur ou de type cible, respectivement. On rappelle que certains modules peuvent être à la fois de type initiateur et de type cible. Dans ce cas, ils sont reliés au bus 40 via des ports de communication ad hoc respectifs. Le système comprend aussi un décodeur d'adresses 47 qui est relié au bus 40, et une unité d'arbitrage 46, ou arbitre, qui est également reliée au bus 40 pour assurer la sélection de celui des modules initiateurs 41, 42 ou 43 qui a le contrôle du bus 40 à un instant déterminé. L'unité d'arbitrage 46 peut correspondre à l'unité d'arbitrage 24 de la figure 3. Le décodeur d'adresse 47 peut contenir l'unité de décodage d'adresse 28 de la figure 3. On notera que cette unité de décodage délivre un signal de commande de sélection de registre indexé (comme le signal T1_Idx_Sel) par module cible, ou plus généralement par groupe de registres indexés quisont associés à un seul et même registre d'index déterminé (sachant qu'en général tous les registres indexés d'un même composant sont associés à un et un seul registre d'index). De même, elle délivre autant de signaux de sélection de composant (tel que le signal TI_Sel de la figure 3), qu'il y a de modules cibles. Enfin, l'unité de commande 27 de la figure 3 peut être comprise dans l'unité d'arbitrage 46. Chacun des composants 41-47 ci-dessus est relié au bus 40 qui est par exemple un VCI OCB, de la manière décrite plus haut en référence au 15 schéma de la figure 5. Des exemples du décodage d'adresse exécuté par une unité de décodage selon l'art antérieur et selon une mise en oeuvre de la présente invention sont décrits par les tableaux des figures respectivement 7 et 8. On suppose que le module cible 44 (T1) a un registre classique adressable via la valeur d'adresse @REG T1, et trois registres indexés adressables via les valeurs d'adresse respectivement @REG_IdxO_T1, @REG_Idx1_T1 et @REG_Idx2_T1. De plus, on suppose que le module cible 45 (T2) a trois registres classiques adressables via les valeurs d'adresse respectivement @REGO T2, @REG1 T2 et @REG2 T2. Le tableau de la figure 7 donne l'état logique 1 ou 0 des signaux TI_Sel et T2_Sel, selon un décodage d'adresse classique. Le signal de sélection de circuit T1_Sel est positionné (i.e., mis à l'état logique 1) lorsque l'adresse @ reçue en entrée est égale à @REG T1, @REG_IdxO T1, @REG_Idx1 T1 ou @REG_ldx2_T1, c'est-à-dire lorsque l'un quelconque des registres (classique ou indexés) du module 44 est ciblé. II est à l'état logique 0 sinon. De même le signal de sélection circuit T2_Sel est positionné (i.e., mis à l'état logique 1) lorsque l'adresse @ reçue en entrée est égale à @REGO T2, @REG1 T2 ou @REG2 T2, c'est-à-dire lorsque l'un quelconque des registres (classique ou indexés) du module 45 est ciblé. II est à l'état logique 0 sinon. Cependant, en plus de ce décodage classique, il est possible de différencier les requêtes d'accès au composant T2, en déterminant à chaque fois si l'adresse @ reçue en entrée est celle de l'un de ses registres indexés. On crée alors en plus du signal de sélection de circuit TI_Sel, un signal de sélection de registre T1_Idx Sel qui précise au module cible 23 quel type de registre, classique ou indexé, est ciblé. Le tableau de la figure 8 donne ainsi l'état logique 1 ou 0 du signal T1_Idx Sel de sélection de registre indexé, en plus des signaux TI_Sel et T2_Sel. On voit que le signal T1_Idx Sel est positionné (i.e., mis à l'état logique 1) lorsque l'adresse @ reçue en entrée est égale à @REG_IdxO T1, @REG_Idx1 T1 ou @REG_Idx2_T1, c'est-à-dire lorsque l'un des registres indexés du module 44 est ciblé. Dans le mode de mise en oeuvre représenté, le signal TI_Sel est positionné uniquement lorsque l'adresse @ est égale à @REG T1, c'est-à- dire lorsque le registre classique 231 est ciblé, et est à l'état logique 0 sinon. En variante, il peut être positionné lorsque l'un quelconque des registres (classique ou indexés) du module cible 23 est ciblé, et être à l'état logique 0 sinon, comme à la figure 7. Le mécanisme matériel proposé par l'invention représente une réelle optimisation quant à la charge du code de l'application à écrire. REVENDICATIONS 1. Système électronique (10) comprenant: - au moins un premier et un second modules initiateurs (21,22); - au moins un module cible (23) ayant des registres de données (231-234) accessibles par lesdits modules initiateurs et dont certains au moins sont des registres indexés (232-234), ainsi qu'un registre d'index (235) associé aux registres indexés et accessible en écriture via une requête d'écriture correspondante, pour stocker une valeur d'index pour lesdits registres indexés; et, - une unité d'arbitrage (24) pour arbitrer des requêtes conflictuelles d'accès aux registres de données, initiées par des modules initiateurs distincts, caractérisé en ce qu'il comprend en outre: - un premier et un deuxième registres d'index supplémentaires (291,292), respectivement associés au premier et au second modules initiateurs; - une unité de décodage d'adresse (28), construite pour positionner un signal de sélection de registre indexé (T1_Idx Sel), en réponse à toute requête d'accès à un registre indexé; et, - une unité de commande (27) pour: commander le stockage d'une valeur d'index pour les registres indexés, dans le registre d'index supplémentaire associé à un module initiateur déterminé, en réponse à une requête d'écriture de ladite valeur d'index dans le registre d'index associé auxdits registres indexés, initiée par ledit module initiateur; et pour - en réponse à toute requête d'accès à un registre indexé initiée par un module initiateur déterminé qui fait que le signal de sélection de registre indexé est positionné, copier la valeur d'index du registre d'index supplémentaire associé audit module initiateur vers le registre d'index associé audit registre indexé, préalablement à l'exécution de ladite requête d'accès. 2. Système selon la revendication 1, comprenant en outre un module de commande (20) incorporant l'unité d'arbitrage, l'unité de décodage d'adresse et/ou l'unité de commande. 3. Système selon la revendication 2, dans lequel le registre d'index supplémentaire associé au premier module initiateur et/ou le registre d'index supplémentaire associé au second module initiateur sont compris dans le module de commande. 4. Système selon l'un quelconque des revendications précédentes, dans lequel le registre d'index supplémentaire associé au premier module initiateur est compris dans ledit module initiateur, et/ou le registre d'index supplémentaire associé au second module initiateur est compris dans ledit second module initiateur. 5. Décodeur d'adresse (47) destiné à être utilisé dans un système selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend une unité de décodage d'adresse (28) selon la revendication 1. 6. Clé de stockage (1) comprenant au moins une mémoire non volatile (2,3) et un circuit de commande (10), caractérisée en ce que le circuit de commande est un circuit sur une puce formant système selon l'une quelconque des revendications précédentes.