FR 2922037 A1 20090410 FR 0707003 A 20071005 PROCEDE DE SECURISATION DE DONNEES EN MEMOIRE VIVE La présente invention concerne un procédé de sécurisation des données de mémoire vive, notamment vis à vis d'aléas logiques dits SEU pour "Single Event Upset" et une architecture mémoire correspondante. Un aléa logique est un phénomène en soi non destructif, qui se traduit par un changement intempestif de l'état logique d'un point mémoire, suite à des collisions avec des ions lourds, des protons, ou des neutrons. Les circuits électroniques programmables embarqués dans les aéronefs, avions, sondes ou autres, ou les circuits électroniques utilisés dans certains environnements terrestres radiatifs, par exemple en environnement médical ou nucléaire, et qui sont des circuits généralement soumis à des contraintes de fiabilité très élevées, sont particulièrement exposés à ces aléas logiques. Ces aléas vont toucher plus particulièrement les points de mémoire vive, aussi bien statique (SRAM) que dynamique (DRAM). Ces altérations des informations contenues en mémoire peuvent avoir des conséquences très graves, selon les données qui en sont atteintes et leurs fonctions dans le(s) processus applicatif(s) d'un circuit électronique programmable. Notamment des altérations sur des données statiques, telles que des constantes, ou des variables ayant une rémanence vis à vis d'un processus applicatif, et sur des données quasi-statiques telles que des variables dont la valeur courante dépend de valeurs précédentes, peuvent causer des dommages importants. D'une manière générale, la fiabilité du circuit électronique est dégradée. Pour ces raisons, des solutions pour détecter et de préférence également corriger, des erreurs causées par ces aléas ont été développées. Parmi ces solutions, les techniques basées sur la mise en oeuvre de code correcteur d'erreur tels que le code Reed Solomon ou le code de Hamming sur les chemins d'accès aux mémoires se sont développées. De manière simplifiée, ces techniques associent un code correcteur à chaque mot, qui permet au récepteur de la donnée de vérifier l'intégrité de la donnée transférée et le cas échéant de corriger des erreurs. La longueur du code dépend de la longueur de la structure de donnée en mémoire. Pour un code de Hamming par exemple, on associe typiquement à une structure de donnée de N bits, un code correcteur de n bits avec 2n > N+n si on veut pouvoir corriger toutes les erreurs simples (1 bit). Ces techniques sont efficaces mais coûteuses en ressources de traitement (détection et correction). Leur emploi se justifie très bien notamment dans le cas où un volume important de mémoire est accessible de façon temporellement multiplexée sur un chemin d'accès unique (un bus). Dans ce cas, le dispositif de détection/correction est unique et est préférentiellement situé dans le chemin d'accès unique entre les mémoires et le dispositif utilisateur de l'information contenue dans cette ou ces mémoires. Mais il y a d'autres applications dans lesquelles un grand nombre de petites mémoires vives, typiquement quelques kilooctets chacune, sont utilisées de façon locale, par un chemin d'accès propre par un nombre équivalent de dispositifs utilisateurs, en général des opérateurs câblés. Cette situation se rencontre typiquement dans les circuits électroniques programmables dont l'architecture comprend plusieurs bancs de mémoire utilisables individuellement ou regroupables, pour former un espace mémoire de grande capacité. Les composants mémoires utilisés font alors partie de la structure particulière du circuit programmable choisi pour implémenter la fonction désirée. Pour ces applications, l'utilisation d'un code correcteur d'erreur tel qu'un code de Hamming, sur chaque chemin d'accès spécifique, pour sécuriser une faible quantité de données, est très mal adaptée eu égard à l'investissement nécessaire (temps de traitement et ressources nécessaires). Dans l'invention, on a ainsi cherché une technique efficace et peu coûteuse, qui soit adaptée à la sécurisation des données de banques de mémoire vive de faible capacité telles que celles présentes dans les architectures de circuits programmables. Plus généralement, on a cherché dans l'invention une technique de sécurisation facile et peu coûteuse à mettre en oeuvre pour des données 30 de mémoire vive d'un circuit électronique. Les dispositifs mémoires présents dans les circuits programmables proposent généralement des organisations qui permettent de coder une parité par mot utilisé : ces dispositifs offrent la possibilité de mémoriser à chaque adresse mémoire, un mot de bits utiles plus au moins 35 un bit de parité correspondant. En pratique des dispositifs 9 bits sont courants, mais on trouve d'autres dispositifs (18 bits, ou plus). L'utilisation de cette possibilité suppose des moyens de gestion de cette parité, et notamment un circuit de contrôle de parité, pour intercepter les données lues en mémoire avant leur transmission au processus demandeur : si la parité est bonne, ce circuit supprimera de la donnée lue le bit de parité associé avant de la transmettre au processus demandeur. En cas d'erreur de parité, ce circuit considérera la donnée comme invalide et générera une erreur de parité. Cette erreur de parité permet d'avertir le processus du risque à utiliser la donnée. 1 o On rappelle que le contrôle de parité consiste à compter le nombre de bits à 1 dans la donnée considérée, et à positionner à 1 ou à 0 un bit de parité correspondant. Ce bit de parité représente la parité de la donnée. En parité paire, le bit de parité sera égal à 1, si le mot contient un nombre pair de 1, et à 0 si le mot contient un nombre impair de 1. Dans le 15 cas de la parité impaire, c'est l'inverse. Le contrôle de parité consiste alors, avant de transmettre la donnée au processus ou dispositif qui en fait la demande, de revérifier la parité, sur l'ensemble donnée+bit de parité. Ainsi, si un bit de la donnée ou le bit de parité a été changé par exemple de l'état 1 à l'état 0, le nombre total de 20 1 change. Si la parité recalculée ne correspond pas à la parité mémorisée, une erreur est détectée. Si deux états à 1 passent à 0, l'erreur ne sera pas détectée, mais la probabilité pour que cela arrive est très faible. Ces dispositifs mémoires qui proposent au moins une colonne de donnée supplémentaire par mot pour sauvegarder un bit de parité calculé par 25 mot mémorisé, peuvent ainsi être utilisées pour détecter des erreurs de type aléa logique. Ces mémoires utilisées dans les circuits programrnables, si elles permettent de détecter des erreurs de mémorisation dues à des aléas logiques, ne permettent généralement pas de corriger l'erreur, contrairement 30 aux codes correcteurs d'erreurs indiqués précédemment. Or selon la fonction d'une ou des données affectées d'une erreur, le processus peut alors être obligé de forcer un redémarrage avec réinitialisation. Ce type d'action est très lourd et pénalisant. Un objet de l'invention est un procédé qui permette d'améliorer la fiabilité des données en mémoire vive. Une idée à la base de la solution technique de l'invention est d'utiliser un bit de parité unique par mot mémoire, et de combiner cette parité à un schéma de redondance qui permette une correction. A noter que le terme mot mémoire est ici utilisé simplement pour désigner l'ensemble des points mémoire à une position mémoire, sans lien avec le nombre de ces points mémoire. L'utilisation d'un bit de parité unique par mot mémoire est aisément réalisable dans une application, en prenant comme convention que les échanges entre l'espace mémoire vive et les processus ou dispositifs applicatifs utilisateurs, sont effectués sur des mots qui présentent un bit de moins que le mot de la structure mémoire. A titre d'exemple, si l'espace mémoire vive est formé avec des composants mémoires 9 bits, les processus ou dispositifs applicatifs manipuleront des mots de 8 bits. Un objet de l'invention est ainsi un procédé de sécurisation des données en mémoire vive, qui utilise un bit de parité par mot mémoire, combiné à une organisation redondante de l'espace mémoire, de manière à augmenter la fiabilité de la mémoire. Dans un perfectionnement, il intègre avantageusement un processus de correction en mémoire. L'invention concerne donc un procédé de sécurisation des données d'une mémoire vive formée par au moins un composant mémoire, caractérisé en ce que chaque composant mémoire est du type configurable en accès double port sur un premier port et un deuxième port, et tel que chaque adresse mémoire permet de mémoriser n bits utiles de données et au moins un bit supplémentaire, caractérisé en ce qu'il comprend la division de l'espace mémoire de chaque composant mémoire en un espace principal et un espace de secours, l'attribution d'un port d'accès en lecture et écriture différent à chaque espace, en ce qu'à chaque accès en écriture d'une donnée à une adresse mémoire, il instancie deux accès mémoire simultanés à deux adresses distinctes, un accès sur chaque port, pour écrire ladite donnée avec un bit de parité correspondant, et en ce qu'à chaque accès en lecture à une adresse mémoire, il instancie deux accès mémoire simultanés à deux adresses distinctes correspondantes, un accès sur chaque port, pour lire une donnée correspondante sur chaque port, et fournit en sortie de lecture l'une ou l'autre donnée lue en fonction du résultat d'un contrôle de la parité sur chacune desdites données lues. L'invention concerne aussi une architecture mémoire permettant la mise en oeuvre d'un tel procédé, et un circuit programmable comprenant un 5 espace mémoire vive sécurisé selon l'invention. D'autres avantages et caractéristiques de l'invention sont détaillés dans la description suivante en référence aux dessins illustrés d'un mode de réalisation de l'invention, donné à titre d'exemple non limitatif. Dans ces dessins : 10 -la figure 1 illustre un procédé de sécurisation de données de mémoire vive selon l'invention ; -la figure 2 est un schéma illustrant un traitement selon l'invention de données larges de plusieurs octets ; et -la figure 3 est un exemple d'une architecture mémoire selon l'invention. 15 La figure 1 est une illustration d'un procédé de sécurisation 100.0 de données contenues dans un composant de mémoire vive DPM d'un circuit électronique qui peut par ailleurs comprendre un ou des processeurs et d'autres composants électroniques, qui peuvent accéder à ce composant 20 par un bus externe (BUS sur la figure). L'espace mémoire vive du circuit électronique programmable peut comprendre en pratique un ou plusieurs composants mémoire, de même type, pour atteindre une certaine capacité. Le procédé de l'invention qui va être décrit s'applique de la même façon sur chacun des composants mémoire de cet espace mémoire, en propre. 25 Le processus de sécurisation 100.0 selon l'invention permet de gérer de manière plus fiable, et de manière simple, les données en mémoire d'un composant mémoire DPM de mémoire vive par un schéma de redondance combiné à une détection d'erreur de parité. Pour lui appliquer ce procédé de sécurisation, le composant 30 mémoire DPM doit présenter les deux caractéristiques suivantes : a). permettre deux accès mémoire simultanés indépendants en lecture/écriture. On parle d'accès double port. II comprend en pratique deux ports (interface) Port A et Port B avec les signaux d'adresse, de données et de contrôle associés pour accéder en lecture ou en écriture à l'espace 35 mémoire. b). comprendre un bit supplémentaire au moins par mot de données. Ces caractéristiques du composant mémoire sont des caractéristiques usuelles dans l'état de l'art. En particulier de tels composants de mémoire vive sont déjà présents de manière connue dans les architectures de composants programmables. Le composant mémoire DPM a ainsi une capacité mémoire organisée en groupe de n+1 bits, permettant de mémoriser des données de n bits utiles + 1 bit de parité. Les n bits utiles correspondent à la longueur maximale des données échangées avec les processus/dispositifs applicatifs. Selon l'invention, l'espace mémoire du composant DPM est divisé en un espace principal, et un espace de secours, distincts. L'espace principal est accédé par l'un des ports, par exemple Port A, et l'espace de secours est accédé par l'autre port, dans l'exemple Port B. Cela revient à faire correspondre à chaque adresse mémoire Ad, une paire unique d'adresses distinctes : Adl, correspondant à l'espace principal accessible dans l'exemple par Port A, et Ad2, correspondant à l'espace de secours accessible dans l'exemple par Port B. Le procédé de sécurisation 100.0 comprend un processus de gestion de l'écriture 100.1 et un processus de gestion de la lecture 100.2 adaptés à ce schéma de redondance et de parité de l'espace mémoire. Ce processus de sécurisation est en pratique typiquement implémenté par le contrôleur mémoire qui assure de manière classique et bien connue le séquencement mémoire et gère les requêtes d'accès en mémoire des processus ou dispositifs applicatifs dans le circuit programmable. Le processus de gestion de l'écriture 100.1 est activé sur réception d'une demande d'accès en d'écriture W d'une donnée D à une adresse mémoire Ad. Il comprend le chargement de la donnée à écrire : Din=D, et un calcul de parité 100.10 sur cette donnée Din à écrire, pour former une donnée d'écriture comprenant les bits utiles de la donnée Diri plus le bit de parité P ; une mise en correspondance 100.11 de l'adresse d'écriture Ad, aux deux adresses correspondantes Adl de l'espace principale et Ad2 de l'espace de secours ; puis deux écritures simultanées de cette donnée Din+P : une écriture 100.12 dans l'espace principal via Port A, avec activation d'un signal d'écriture correspondant LoadA, et présentation de la donnée à écrire Din+P et de l'adresse Ad1 ; et une écriture 100.12' dans l'espace de secours via Port B, avec activation d'un signal d'écriture correspondant LoadB, et présentation de la donnée à écrire Din+P et de l'adresse Ad2. Le processus de gestion de la lecture 100.2 est activé sur réception d'une demande d'accès en lecture R à une adresse mémoire Ad. Il comprend une mise en correspondance 100.20 de l'adresse d'écriture Ad, aux deux adresses correspondantes Ad1 de l'espace principal et Ad2 de l'espace de secours ; puis deux accès en lecture simultanés : une lecture 100.21 dans l'espace principal via Port A, avec activation d'un signal de lecture correspondant LoadNA, et présentation de l'adresse Ad1 ; et une lecture 100.21' dans l'espace de secours via Port B, avec activation d'un signal de lecture correspondant LoadNB, et présentation de l'adresse Ad2. On obtient en sortie sur Port A, une donnée lue correspondante, parité y compris, notée (D+P)A, et en sortie sur Port B, une donnée lue correspondante parité y compris, notée (D+P)B. Un processus de contrôle de parité 100.22 et 100.22' est activé sur chacune de ces deux données (D+P) A et (D+P)B. Ce processus de contrôle de parité contrôle le processus de transmission 100.23 de la donnée de sortie Dout sur le bus externe, en réponse à la demande de lecture. La donnée Dout fournie en sortie ne comprend que la partie utile de la donnée, c'est à dire (D)A ou (D)B : la parité P est enlevée avant transmission sur le bus. Si le processus de contrôle de parité 100.22 sur la donnée (D+P)A fournie par Port A est positif, c'est à dire que la parité est bonne, la donnée (D)A est considérée comme correcte. Le signal d'erreur ErrA en sortie de ce processus n'est pas activé. Si ce contrôle de parité est négatif, la donnée (D)A est supposée altérée, et le signal d'erreur ErrA est activé. Si le processus de contrôle de parité 100.22' sur la donnée (D+P)B fournie par Port B est positif, la donnée (D)B est considérée comme correcte. Le signal d'erreur ErrB en sortie de ce processus n'est pas activé. Si ce contrôle de parité est négatif, la donnée (D)B est supposée altérée, et le signal d'erreur ErrB est activé. Le processus de transmission 100.23 comprend ainsi un circuit de gestion 100.23a, de type logique combinatoire, pour gérer la sélection de voie d'un multiplexeur de sortie Mxout, qui reçoit en entrées, la donnée utile (D)A fournie par PortA, et la donnée utile (D)B fournie par Port B. La voie de sortie Mxout fournit la donnée Dout vers le bus. Ce circuit génère également un signal d'exception d'invalidité XC, comme décrit ci dessous. En choisissant par pure convention, que les signaux d'erreur sont actifs à l'état 1 (signifiant un contrôle de parité négatif = parité incorrecte), le circuit logique combinatoire 100.23a peut par exemple être configuré pour 10 que : - Si le contrôle de parité 100.22 associé à Port A est positif (ErrA=O), il active le signal Sel de commande du multiplexeur Mxout pour commuter comme donnée de sortie Dout, la donnée (D)A fournie par Port A, en réponse à la demande de lecture R(Ad). 15 -Si ce contrôle est négatif, (ErrA=1), il active le signal Sel de commande du multiplexeur Mxout pour commuter comme donnée de sortie Dout, la donnée D(B) fournie par Port B, en réponse à la demande de lecture R(Ad). - Si le contrôle de parité 100.22' associé à Port B est également 20 négatif (ErrB=1), la donnée Dout=(D)B fournie en sortie est alors supposée incorrecte : le processus de transmission 100.23 est configuré pour activer un signal d'exception XC, pour signaler une erreur au processus ou dispositif externe demandeur. Cette erreur traduit l'impossibilité de choisir et donc de fournir une donnée réputée correcte, parce que les deux contrôles de parité 25 sont défectueux (ErrA=ErrB=1). Le processus ou dispositif externe qui a demandé la lecture est ainsi averti du doute existant sur la donnée fournie. Il pourra alors gérer de manière appropriée cette exception d'invalidité. Cette gestion dépend typiquement de la fonctionnalité en cause. Par exemple, si le processus ou dispositif externe doit fournir périodiquement à un autre 30 processus le résultat d'un calcul à partir de la donnée demandée en lecture, il peut en autres exemples : -effectuer le calcul en utilisant la donnée fournie par défaut, mais signaler le doute portant sur le résultat de ce calcul effectué avec cette donnée; -signaler le doute et attendre un rafraîchissement de la donnée supposée altérée pour reprendre le calcul, et/ou éventuellement fournir le dernier résultat du calcul réputé bon; -redémarrer la fonction après ré-initialisation. Le procédé de sécurisation de données de mémoire vive qui vient d'être décrit permet ainsi, de manière simple, et en utilisant des fonctionnalités des composants mémoires, de créer une redondance qui permet en combinaison avec un bit unique de parité, d'améliorer de manière très efficace leur fiabilité. Il est en effet très peu probable que les deux adresses principale et de secours d'une donnée en mémoire soient "en même temps" affectées par un aléa logique. C'est ce qui permet de généralement fournir une donnée correcte, celle de l'espace principal ou de l'espace de secours. Si les deux adresses sont néanmoins toutes deux affectées par un aléa, le processus externe utilisateur de la mémoire est averti. Avantageusement, le procédé de sécurisation selon l'invention comprend en outre un processus de correction 100.3. Ce processus de correction 100.3 est activé à chaque fois que le résultat du contrôle de l'un des deux processus de contrôle de parité 100.22 ou 100.22' est négatif, alors que l'autre est positif, pour déclencher une ré-écriture de la donnée supposée altérée avec la donnée réputée correcte. De cette manière, et comme il est peu probable qu'un aléa affecte les deux données simultanément, la fiabilité des données est en quelque sorte entretenue : dès qu'une donnée de l'espace principal est trouvée incorrecte, elle peut être corrigée par la donnée de l'espace de secours et inversement. Plus précisément, en référence à la figure 1, si c'est la donnée (D)A fournie par Port A qui est détectée incorrecte et la donnée (D)B fournie par Port B qui est détectée correcte, alors on provoque une écriture via Port A à l'adresse Ad1, avec la donnée (D)B qui est aussi dans l'exemple la donnée Dout, ce qui peut s'écrire CorrA(Dout, Ad1). Si c'est la donnée (D)B fournie par Port B qui est détectée incorrecte et la donnée (D)A fournie par Port A qui est détectée correcte, alors on provoque une écriture via Port B à l'adresse Ad2, avec la donnée (D)A qui est aussi dans l'exemple la donnée Dout, ce qui peut s'écrire CorrB(Dout, Ad2). En pratique, le procédé de correction peut forcer une écriture sur le port concerné Port A, respectivement Port B, par un signal spécifique 5 CorrA, respectivement CorrB, en présentant la donnée Dout comme donnée d'entrée Din=Dout. Ceci peut en pratique être réalisé de différentes façons, typiquement par le contrôleur mémoire qui arbitre et sert les différentes requêtes, par toutes techniques connues de l'homme de l'art. Notamment : ~o -en utilisant des cycles mémoires dédiés et systématiquement réservés dans le séquencement des accès mémoire. Lorsqu'une correction doit être faite, le premier cycle mémoire dédié suivant est alors alloué à cette correction. -en utilisant le premier cycle mémoire disponible, c'est à dire qui 15 n'est pas utilisé, pour des raisons fonctionnelles, ce qui suppose que le processus ou dispositif utilisateur n'utilise qu'une partie de la bande passante à la mémoire considérée. -en forçant la disponibilité du cycle mémoire suivant par une technique connue dite de vol de cycle. Dans ce cas l'activité du processus ou 20 dispositif utilisateur de la donnée sera retardée de la durée du cycle volé. Ceci peut aussi se faire par un cycle masqué, en utilisant la caractéristique d'accès double port de la mémoire, pour effectuer la correction directement en forçant une écriture sur le port correspondant à la donnée "erronée", à partir de la donnée correcte fournie en sortie par l'autre 25 port. C'est cette mise en oeuvre qui est plus particulièrement illustrée sur la figure 1 : -Un signal d'activation Corr généré à partir des signaux de correction CorrA et CorrB permet de sélectionner la donnée Dout comme donnée Din à écrire : Din=Dout ; et 30 -L'écriture 100.12 est forcée par activation des signaux d'écriture LoadA ou LoadB sur le port correspondant Port A ou PortB, par l'activation du signal de correction CorrA ou CorrB. Un exemple plus détaillé de mise en oeuvre sera expliqué en relation avec la figure 3. Ce mode de correction par utilisation de la caractéristique double port permet d'autoriser des accès en lecture pendant ce cycle de correction, sur le port qui a fourni la donnée correcte : ce port devient alors le port de lecture par défaut, mais sans possibilité de redondance pendant que le cycle de correction est en cours. Ceci permet néanmoins de répondre à des demandes de lecture, et donc de ne pas trop freiner les processus. Dans ce cas, un registre tampon sera prévu pour chaque port, pour permettre la mémorisation de l'adresse de lecture pour laquelle une erreur aura été détectée, de manière à permettre l'exécution au cycle suivant de la correction en écriture à cette adresse mémorisée, sur le port associé, tandis qu'une nouvelle adresse pourra être chargée dans le registre tampon associé à l'autre port, pour une lecture. Un circuit logique sera alors prévu pour contrôler de manière adéquate la validation des registres. En pratique, on notera que la correction peut ne pas être décidée : Dans l'exemple plus particulièrement illustré à la figure 1, le signal Corr ne sera pas activé. Ou la correction peut être interrompue, pour répondre à une requête en écriture prioritaire. Ceci correspond à des aspects de gestion mémoire classiques. Le processus de sécurisation 100.0 selon l'invention qui vient d'être décrit est en pratique géré par le contrôleur mémoire du circuit programmable. Il permet une gestion des accès de lecture et écriture à un composant mémoire, par laquelle : - à chaque donnée D présentée en écriture à une adresse mémoire Ad, un bit de parité est calculé, et les bits utiles et le bit de parité sont simultanément mémorisés à deux adresses mémoire distinctes du composant, par un accès en écriture sur un port avec une première adresse Ad1, et un accès en écriture sur l'autre port à une deuxième adresse Ad2. - à chaque demande de lecture à une adresse mémoire Ad, les données contenues aux deux adresses correspondantes principale et de secours sont lues, leur parité est contrôlée, et la donnée fournie en sortie est fonction du résultat de ce contrôle de parité. Lorsqu'une donnée utilisée dans un processus ou un dispositif externe est plus large que la structure des mots en mémoire vive, la donnée sera traitée par tranches de mots. Typiquement chaque tranche sera mémorisée dans un composant mémoire différent, à la même adresse logique Ad sur chaque composant. Le processus va ainsi s'appliquer sur chaque mot de la donnée comme illustré sur le schéma de principe de la figure 2, qui illustre deux composants mémoires DPM1 et DPM2 formant un espace mémoire vive utilisé par deux dispositifs CP1 et CP2 d'un circuit programmable. Une donnée DATA utilisée par un dispositif externe CP1 est découpée en deux tranches Din1, Din2 de n bits utiles. Chaque tranche est de manière classique mémorisée dans un composant mémoire respectif DPM1, DPM2 (toutes les tranches pourraient être mémorisées sur un même composant, mais à des adresses logiques différentes, ce qui est moins simple à gérer). Selon l'invention, chaque tranche est mémorisée avec un bit de parité P dans le composant mémoire concerné à une adresse de mémoire principale A et une adresse de mémoire de secours B. Lors de l'accès en lecture, le contrôle de parité est effectué sur chaque couple de mots correspondant : (Dini+P)A, (Din1+P)B pour le composant DPM1, (Din2+P)A, (Din2+P)B pour le composant DPM2, et une donnée de sortie correspondante Douti, Doute est fournie, fonction du contrôle de parité sur chaque composant. Ainsi, un procédé de sécurisation de données selon l'invention facilite la gestion de modifications partielles de données plus larges que la structure mémoire du circuit programmable : la sécurisation, parité et redondance, est réalisée sur chaque tranche par le procédé de l'invention. Sur la figure 3 est illustré un exemple d'architecture mémoire pour un composant de mémoire vive DPM, permettant la sécurisation des données qu'il contient selon le procédé de l'invention, avec une correction possible d'une donnée détectée défectueuse, par la donnée redondante réputée correcte, réalisée en utilisant les capacités d'accès double port de la mémoire, en commandant une écriture de correction sur le port concerné par des moyens internes, tout en autorisant des accès externes en lecture sur l'autre port. Dans cet exemple, le composant mémoire à une structure des données correspondant à un octet de bits utile (D=8 bits) et un bit de parité (soit D+P = 9 bits). Le séquencement du composant est contrôlé par un signal d'horloge Ck. Les notations des processus et signaux de comrnande associés utilisées sur la figure 1 ont été repris à l'identique le cas échéant pour 5 désigner les moyens réalisant le processus correspondant. Le composant mémoire comprend deux ports Port A et Port B qui selon l'invention adressent deux espaces distincts de la mémoire, un espace principal et un espace de secours. Pour chaque port, on a les signaux d'adresse, de données et de contrôle correspondants. On note ainsi pour 10 Port A : AdA les signaux d'adresse, INA et OUTA respectivement les entrées et sorties de données, et RNVA le signal d'écriture/lecture. De manière similaire, on a pour Port B : AdB les signaux d'adresse, INB, OUTB et R/VVB. Un registre d'adresse propre est associé à chaque port, RA pour 15 Port A et RB pour Port B. S'il doit y avoir écriture de correction sur l'un des deux espaces suite à un accès en lecture, ce registre permettra de conserver l'adresse de cette lecture sur le port concerné par la correction, alors que l'autre registre sera disponible pour recevoir des adresses pour des accès en lecture sur l'autre port demandé par un processus externe utilisateur de la 20 mémoire. Par convention, on note : -Load : activation d'une écriture mémoire, correspondant à un accès en écriture par un processus externe utilisateur de la mémoire. LoadN signifie qu'il n'y a pas d'accès en écriture par un processus externe. Ce 25 signal peut être utilisé comme information prioritaire pour invalider les conditions de correction éventuelle lorsqu'une écriture est requise par le processus ou dispositif utilisateur. -CorrA (respectivement CorrB): activation d'une écriture mémoire sur Port A (respectivement Port B) uniquement, pour effectuer une 30 correction; CorrNA (respectivement CorrNB) signifiant qu'il n'y a pas de correction sur Port A (respectivement Port B). L'architecture comprend différents registres et circuits logiques autour du composant mémoire DPM, pour mettre en oeuvre le procédé de sécurisation. Un registre tampon d'entrée Rin permet de mémoriser une donnée D présentée en écriture en entrée par un processus externe. Un registre tampon de sortie Rout permet de mémoriser la donnée Dout fournie en sortie en réponse à un accès en lecture. Des moyens pour fournir les deux adresses distinctes appairées Ad1 et Ad2, correspondant à une adresse mémoire Ad accédée en lecture ou en écriture sont prévus. Dans l'exemple, il consiste pour Ad1 en une simple adjonction d'un "0", et pour Ad2, en une simple adjonction d'un "1" à l'adresse Ad. D'autres conventions simples permettent de définir les deux adresses appairées correspondant à une adresse mémoire, par exemple par inversion d'un ou plusieurs bits d'adresse. Le multiplexeur Mxin reçoit la sortie de ces deux registres et fournit en sortie la donnée Din à écrire. II est suivi d'un circuit 100.10 de calcul de parité P. La donnée Din+P est ainsi présentée en entrée de donnée de chaque port, INA et INB. Le multiplexeur Mxout reçoit les données (D)A et (D)B délivrées par chacun des ports Port A, Port B, et fournit en sortie la donnée Dout à présenter sur le bus (non représenté) en réponse à une demande d'accès en lecture, en fonction des contrôles de parité sur ces données. Ce multiplexeur est suivi du registre tampon de sortie. Une logique combinatoire des deux signaux de contrôle de parité ErrA et ErrB, est ainsi prévue pour sélectionner (Sel) de manière appropriée selon une convention choisie, la donnée à transmettre en sortie, (D)A ou (D)B, en fonction du contrôle de parité, et activer le cas échéant le signal d'exception d'invalidité XC. Cette logique est représentée par le circuit 100.23a sur la figure 3. Une logique combinatoire est aussi prévue pour activer une correction le cas échéant sur un des ports, avec la donnée de sortie fournie par l'autre port : CorrA est activé si ErrA est négatif et ErrB positif, et CorrB est activé dans la situation inverse. Cette logique est représentée par le circuit 100.3a sur la figure 3. Comme illustré, les signaux CorrA et CorrB peuvent être également appliqués dans la logique 100.23a de génération du signal XC, comme expliqué dans la suite, pour autoriser une lecture sur un port pendant que l'autre port est en correction. Chaque port a un registre d'adresse propre, RA pour Port A et RB pour Port B, ce qui permet le cas échéant de conserver l'adresse de lecture précédente sur le port concerné par la correction, alors que l'autre registre est disponible pour des accès en lecture. Typiquement, le registre ne peut charger une nouvelle adresse Ad présentée par un processus externe utilisateur de la mémoire, que si un accès en écriture est effectué, représenté par Load, ou qu'il n'y a pas de correction sur le port correspondant, représenté par CorrNA pour RA et par CorrNB pour RB. Le fonctionnement désiré est de manière simplifiée le suivant. La donnée Dout fournie en sortie par le multiplexeur Mxout en réponse à un cycle de lecture a été mémorisée dans le registre tampon de sortie Rout. Si à la suite de cette lecture, une correction est effectuée, en raison du contrôle de parité, le composant mémoire sera normalement indisponible à tout cycle d'écriture "normal" : Load ne sera pas à l'état actif, et LoadN autorise alors la correction CorrA ou CorrB : la donnée Dout mémorisée est chargée par Mxin en entrée du composant mémoire. Si la correction doit être effectuée sur Port A (CorrA activé), CorrNA n'est pas activé: le contenu du registre d'adresse de Port A RA reste inchangé, permettant la correction à l'adresse de lecture précédente, sur activation en écriture du signal de contrôle de lecture/écriture R1WA sur Port A par le signal CorrA, avec la donnée Din+P = Dout+P chargée en entrées de données INA, INB, via Mxin ( sauf en cas de chargement prioritaire demandé par le processus ou dispositif utilisateur, LoadN passant alors à l'état actif pour chargée la donnée Din). Si la correction est effectuée sur Port B, CorrNA est activé, ce qui permet d'échantillonner une nouvelle adresse Ad pour une opération de lecture uniquement sur Port A, sur un front actif du signal d'horloge. Dans ce cas, les signaux Load et CorrA sont tous deux inactifs, ce qui équivaut à une activation en lecture du signal de contrôle de lecture/écriture RNVA : la donnée lue à l'adresse présentée en entrée adresse AdA est fournie en sortie Dout du multiplexeur, cette sortie Dout du multiplexeur Mxout étant alors forcée par le signal sel à présenter le contenu de la voie A et le signal d'erreur XC étant alors mis égal à ErrA, par une logique combinatoire appropriée (100.23a). Un cycle d'écriture de correction sur Port B ou un cycle de lecture 35 sur Port B pendant une correction sur Port A, sont obtenus de manière similaire, à l'aide des signaux LoadN, CorrB, CorrNB, ErrB. II suffit de permuter les lettres A et B dans le paragraphe précédent. L'ensemble des signaux logiques d'activation est en pratique généré par des circuits logiques combinatoires simples, à partir des signaux habituels de lecture écriture en mémoire et des signaux de correction générés à partir des contrôles de parité selon l'invention. Ce sont des aspects courants de gestion de signaux de contrôle, qui ne présentent pas de difficultés particulières pour l'homme de l'art. L'invention qui vient d'être décrite permet d'améliorer la fiabilité des données de mémoire vive par une sécurisation des données vis à vis des aléas logiques notamment, sécurisation obtenue en implémentant un schéma de redondance en écriture et en lecture combiné à un contrôle de parité. Avantageusement la correction d'une donnée détectée incorrecte par la donnée redondante détectée correcte permet de renforcer cette sécurisation. Elle est mise en oeuvre en pratique par des moyens simples comprenant registres tampons et circuits logiques associés à chaque composant mémoire formant l'espace mémoire vive d'un circuit électronique. La mise en oeuvre pratique dont un exemple a été donné, utilise des mécanismes bien connus et les possibilités habituelles de commande des mémoires à accès double port et bit(s) de parité. REVENDICATIONS 1. Procédé de sécurisation des données d'une mémoire vive formée par au moins un composant mémoire, caractérisé en ce que chaque composant mémoire est du type configurable en accès double port sur un premier port (Port A) et un deuxième port (Port B), et tel que chaque adresse mémoire permet de mémoriser n bits utiles de données et au moins un bit supplémentaire, caractérisé en ce qu'il comprend la division de l'espace mémoire de chaque composant mémoire en un espace principal (A) et un espace de secours (B), l'attribution d'un port d'accès en lecture et écriture différent à chaque espace, en ce qu'à chaque accès en écriture d'une donnée (D) à une adresse mémoire (Ad), il instancie deux accès mémoire simultanés à deux adresses distinctes (Ad1, Ad2), un accès sur chaque port, pour écrire ladite donnée (D) avec un bit de parité (P) correspondant, et en ce qu'à chaque accès en lecture à une adresse mémoire (Ad), il instancie deux accès mémoire simultanés à deux adresses distinctes correspondantes (Ad1, Ad2), un accès sur chaque port, pour lire une donnée correspondante sur chaque port, et fournit en sortie de lecture (Dout) l'une ou l'autre donnée lue en fonction du résultat (ErrA, ErrB) d'un contrôle de la parité sur chacune desdites données lues. 2. Procédé de sécurisation selon la revendication 1,caractérisé en ce qu'il consiste pour chaque opération d'écriture d'une donnée (D) de n bits à une adresse mémoire donnée (Ad), i) à calculer le bit de parité de ladite donnée, pour former une donnée d'écriture (Din+P) comprenant les bits utiles et le bit de parité calculé et ii) à instancier deux écritures simultanées de ladite donnée d'écriture (Din+P) une sur chaque port, à deux adresses distinctes (Ad1, Ad2) associées à ladite adresse mémoire (Ad). 30 3. Procédé de sécurisation selon la revendication 1 ou 2, caractérisé en ce qu'il consiste pour chaque opération de lecture de la donnée mémorisée à une adresse mémoire donnée (Ad), i) à instancier deux lectures simultanées sur chaque port, à deux adresses distinctes (Ad1, Ad2) associées à ladite adresse mémoire (Ad), ii) à effectuer un contrôle du bit de parité (100.22, 100.22') sur la première donnée ((D)A) lue à la première adresse (Ad1) et sur la deuxième donnée ((D)B) lue à la deuxième adresse (Ad2), pour fournir en donnée de sortie (Dout) ladite première ou deuxième donnée en fonction des contrôles de parité correspondants. 4. Procédé de sécurisation selon la revendication 3, caractérisé en ce 15 que si les contrôles de parité de ladite première donnée et de ladite deuxième donnée sont incorrects, un signal d'exception (XC) est activé en sortie. 5. Procédé de sécurisation selon la revendication 3 ou 4, caractérisé 20 en ce que si les contrôles de parité de ladite première donnée et de ladite deuxième donnée sont l'un correct et l'autre incorrect, la donnée détectée correcte est utilisée pour corriger la donnée détectée incorrecte dans un cycle d'écriture de correction. 25 6. Procédé selon la revendication 5, caractérisé en ce que ledit cycle d'écriture de correction est instancié par vol de cycle. 7. Procédé selon la revendication 5, caractérisé en ce que ledit cycle d'écriture de correction est instancié sur le premier cycle d'écriture 30 disponible. 8. Procédé selon la revendication 5, caractérisé en ce que ledit cycle d'écriture de correction est un cycle masqué, activé sur le port ayant fourni la donnée lue détectée incorrecte, des opérations de lecture 35 étant autorisées sur l'autre port pendant ledit cycle de correction. 10 9. Procédé selon la revendication 8, caractérisé en ce qu'il utilise des moyens de mémorisation (RA, RB) de l'adresse mémoire (Ad) des accès en lecture ou en écriture associés à chacun des ports de la mémoire. 10. Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que le ou les composants mémoire sont de type 9 bits, permettant la mémorisation à chaque adresse d'un octet de bits utiles et un bit supplémentaire. 10 11. Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce qu'une donnée (Di,,) à mémoriser dans ledit espace de mémoire vive dont le nombre de bits utiles est plus grand que le nombre de bits pouvant être mémorisés à chaque adresse, est 15 mémorisée par tranches de bits utiles (Dini, Din2), avec un bit de parité par tranche. 12.Architecture utilisant une mémoire vive sécurisée formée par un ou plusieurs composants mémoires, caractérisée en ce qu'il comprend 20 des moyens associés (CM)pour mettre en oeuvre un procédé selon l'une quelconque des revendications précédentes pour chaque composant mémoire. 13. Circuit programmable comprenant de la mémoire vive utilisée 25 selon une architecture selon la revendication 12.5