WO2002056177A1 - Procede d'injection d'erreurs par interruptions - Google Patents

Procede d'injection d'erreurs par interruptions Download PDF

Info

Publication number
WO2002056177A1
WO2002056177A1 PCT/FR2002/000167 FR0200167W WO02056177A1 WO 2002056177 A1 WO2002056177 A1 WO 2002056177A1 FR 0200167 W FR0200167 W FR 0200167W WO 02056177 A1 WO02056177 A1 WO 02056177A1
Authority
WO
WIPO (PCT)
Prior art keywords
register
program
stack
content
error
Prior art date
Application number
PCT/FR2002/000167
Other languages
English (en)
Inventor
Raoul Velazco
Sana Rezgui
Original Assignee
Centre National De La Recherche Scientifique
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Centre National De La Recherche Scientifique filed Critical Centre National De La Recherche Scientifique
Priority to US10/466,597 priority Critical patent/US20040153794A1/en
Priority to JP2002556368A priority patent/JP2004526230A/ja
Priority to EP02700331A priority patent/EP1352325A1/fr
Publication of WO2002056177A1 publication Critical patent/WO2002056177A1/fr

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2215Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test error correction or detection circuits

Definitions

  • the present invention relates generally to the testing of the ability of electronic and logic systems based on integrated circuits, for example systems intended for space applications, to function correctly under irradiation. However, given the miniaturization of integrated circuits, these become more and more sensitive to the effects of radiation and the invention also finds applications in the testing of integrated circuits used on earth.
  • the present invention relates more particularly to the verification of systems capable of executing a set of instructions or commands (microprocessor, microcontroller, signal processing processor, etc.).
  • the present invention relates to a method for injecting bit (s) error at any locations of an integrated circuit while a main program is executed on this circuit.
  • the present invention relates to a method in which the fictitious error injection is carried out by means of an interrupt program.
  • the present invention relates to a digital architecture organized around a processor capable of executing a sequence of instructions or commands stored in a memory (external or internal) and of taking into account the effect of signals. asynchronous input such as interrupts.
  • the processor can be programmed to directly or indirectly perform read and write operations in each of the locations of the external memory, as well as registers and areas of internal memory.
  • Single bit toggles or toggles, or events commonly referred to by the acronym SEU from the Anglo-Saxon expression Single Event Upset may be caused in processors as a result of the execution of adequate code which will depend essentially on certain characteristics of the target. This code will be called here CEU (Code Emulâting an Upset). Likewise the memory location disturbed as a result of the execution of the CEU code will be called the target of the CEU. The switches that result from the execution of the CEU code will also be called CEU (Code Emulâted Upset).
  • a processor In response to the activation of an interrupt, a processor will typically carry out the following steps: - stopping the execution of the current program after having completed the execution of the current instruction,
  • the present invention aims to access all the memory areas of a processor which are accessible via the instruction set of any program associated with this processor.
  • these accessible memory areas include in particular the input / output ports, the accumulators, the special registers, the program counter register and the internal RAM memory.
  • Only a very small number of the memory areas of a processor remains inaccessible to the introduction of CEU.
  • These areas include the unit's input registers arithmetic and logic, memory switches (latch), address registers, and cache memory.
  • a calculation carried out in the case of the 8051 microprocessor and which can extend to many types of microprocessors shows that these inaccessible areas represent less than 7% of all the memory areas of the processor.
  • the efficiency of the error injection it becomes possible to evaluate a real error rate for a given processor associated with a given program.
  • This actual error rate or system sensitivity can be estimated by calculation.
  • a CEU bit error
  • the present invention makes it possible to show that on N SEU, only n are capable of disturbing a given program running on a given processor. Then, the sensitivity of the system can be estimated as equal to n / NP.
  • the method can be applied to a system made up of the same material element on which other software runs. It will be possible to be certain that the method according to the present invention provides a correct result and it will not be necessary to redo validation under real or simulated disturbance conditions since P is constant for a given material and a given type of particles. It will also be noted that the method for analyzing the sensitivity of a system to CEU type disturbances can be carried out completely randomly or systematically. A systematic analysis could in particular be carried out for a given program on the successive stages of the progress of this program.
  • Sensitivity windows can thus be defined for each program. This can be useful in systems providing for redundancies to perform redundant operations only on particularly sensitive parts of a given program.
  • the present invention provides a method of injecting bit errors into hardware operating under the control of a given main program, consisting in interrupting and introducing the bit error during the course of the interrupt program, in which, at the time of the interrupt, the return value of the program counter register and possibly the content of other registers such as status indicator registers are stored in a stack under control of a stack pointer.
  • the interrupt program comprises the following steps: put the contents of a register into the stack, transfer the contents of the memory word to the register target, modify the copied content of the target memory word in the register to inject the chosen error, transfer the modified target memory word to its original location, unstack the register, and end the interrupt program and return to The main program address indicated by the program counter.
  • the interrupt program comprises the following steps: put in the stack the contents of a first register, put in the stack the contents of an accumulator, transfer the value of the stack pointer register (corresponding to the address in the stack of the return address of the program counter) in the first register, transfer the contents of the program counter register as indicated by the first register in the accumulator, modify the value of the program counter in the accumulator to inject the chosen error there, reload the value of the modified program counter in the stack at the address contained in the first register, unstack the accumulator , and unstack the first register.
  • the interrupt program comprises the following steps: write an unconditional jump code to a determined memory box at a determined address, point using the stack pointer to the return value of the program counter, transfer the contents of the stack pointer to a first register, transfer the return address of the program counter stored in the stack to a second register, transfer the contents of the second register following said code unconditional jump, modify the first register to inject the chosen error in the stack pointer register an unconditional jump to said determined address of the unconditional jump mentioned first to obtain the return value of the main program.
  • FIG. 1 is a symbolic representation of elements of a hardware / software system to which the present invention applies; and FIGS. 2 to 5 show examples of interrupt program sequences respectively applicable to a register accessible directly, to a register with indirect access, to the program counter, and to the stack pointer.
  • FIG. 1 represents in symbolic form elements of a hardware / software system.
  • a main program 10 has been represented which can be considered either from a logical point of view as a succession of instructions or else from a material point of view as a memory containing the instructions.
  • the system also includes one or more interrupt programs 20 and a stack 30 as well as a stack pointer 40.
  • the program context is saved, that is to say essentially the value of the counter of the PC program corresponding to the return address (10 (i + D) of the main program, and possibly the content of various registers indicating d state (flag) and other key parameters of the system; this saving of the context is conventionally carried out in a stack 30 of the first-in / last-out type under the control of a stack pointer register (SP) 40;
  • SP stack pointer register
  • step 10 (i) This has been symbolically represented in FIG. 1 by indicating that an IT interruption is likely to occur in step 10 (i), which then passes to the START phase of the interruption program 20, which this START phase controls.
  • the stack pointer 40 which points to stack 30 (conventionally, we consider that the stack pointer SP points to the last free cell of the stack).
  • the interruption program runs until it reaches its final phase END. At this time, it provides an order to the stack pointer to perform the stacking of the contents of the stack, that is to say that all the information relating to the context which was memorized at the time of the interruption is updated. in their original locations.
  • the last step of this stacking we arrive at the content of the program counter which corresponds to the address i + 1 of the main program and we resume the program at step 10 (i + 1) as symbolized by the link 31.
  • the object of the invention is to introduce single or multiple bit errors (SEU) from generic CEU codes at any chosen location of the system during a chosen step of the main program progress.
  • SEU single or multiple bit errors
  • the address contained in the program counter is transferred to the stack 30, or more precisely the return address [10 (i + 1)] of the program counter.
  • step 202 transfer (push) into the stack 30, if this is not already provided for by the normal program for interrupting the system concerned, status indicators (flag or F) and possibly d 'other key registers.
  • step 203 the change (chg) of one or more bit positions (pos.bit) is carried out in a directly accessible memory word.
  • Step 204 is an optional step which is carried out if step 202 has been carried out, namely that the elements of the context of the computer which have been stacked in step 202 at the time of stacking are unstacked (pop). 'interruption.
  • An interrupt program conventionally ends with a final step 205 which refers to the continuation of the execution of the interrupted program.
  • FIG. 3 An example of an interrupt program intended to allow an error injection into a register or memory word not directly accessible is illustrated in FIG. 3.
  • the initial steps 301 and 302 are identical to steps 201 and 202 described in relation to FIG. 2.
  • step 303 the program puts the contents of an ACC register or accumulator into the stack (push).
  • step 304 the content of the target internal memory area (ZMI) is transferred (Ld) to the register ACC.
  • step 305 the desired modification is made to the target memory word. This modification is now carried out in the ACC register which is accessible, in a similar manner to the modification described in relation to step 203 of FIG. 2.
  • step 306 the modified content of the ACC register is sent back to the memory area in which the target word was found.
  • FIG. 4 An interrupt program allowing error injection into the program counter is illustrated in FIG. 4.
  • An error injection program in the content of the program counter begins with steps 401 and 402 similar to steps 201 and 202 described in relation to FIG. 2.
  • step 403 the content of a first register R0 is put in the stack.
  • step 404 the content of a second register ACC, commonly called accumulator, is also incorporated into the stack.
  • a second register ACC commonly called accumulator
  • step 405 the content of the stack pointer SP which corresponds to the address in the stack of the return address of the program counter is transferred to the register R0.
  • step 406 the content (CP) of the program counter register is indicated in the accumulator ACC as indicated by the first register R0.
  • step 407 the chosen error injection is carried out on the content of the register ACC, that is to say the value of the program counter.
  • step 408 the content of the register ACC is transferred back to the stack at the address indicated by the register R0.
  • step 409 to unstack the accumulator
  • step 410 to unstack the register R0
  • steps 411 and 412 to the final steps similar to steps 204 and 205.
  • An error injection program in the content of the stack pointer begins with steps 501 and 502 similar to steps 201 and 202 described in relation to FIG. 2.
  • step 503-504 a code (JMP) of unconditional jump to a determined memory cell is written to an determined address (adbranch). This is usually done through an R register.
  • JMP code of unconditional jump to a determined memory cell
  • step 505 we point (DEC) using the stack pointer to the return value of the program counter.
  • step 506 we transfer the contents of the stack pointer (the address in the stack of the 'return address of the program counter) in a first RI register,
  • step 507 the return address of the program counter stored in the stack is transferred to a second register R2.
  • step 508 the content of the second register is transferred to the address (adbranch + 1) which follows the address (adbranch) to which said unconditional jump code has been written, so as to fix the address (that which contains the return value of the program counter) to which the unconditional jump will return.
  • step 509 the first register RI is modified to inject the chosen error into the stack pointer register.
  • step 510 a first unconditional jump to the address (adbranch) is executed at which said unconditional jump code has been written and this unconditional jump is executed to arrive at the return value of the main program.
  • the present invention can be easily adapted by those skilled in the art of the programming field to specific hardware or software provisions.
  • the transfer may be broken down into several transfers elementary, for example by separating the most significant bits of the least significant bits.

Abstract

L'invention concerne un procédé d'injection d'erreurs de bits dans un matériel opérant sous la commande d'un programme principal donné, consistant à procéder à une interruption et à introduire l'erreur de bit pendant le déroulement du programme d'interruption, dans lequel, quand l'erreur doit être injectée dans un mot mémoire cible stocké à un emplacement non accessible directement, le programme d'interruption comprend les étapes consistant à mettre dans la pile (303) le contenu d'un registre (ACC), transférer (304) dans le registre (ACC) le contenu du mot mémoire cible, modifier (305) dans le registre (ACC) le contenu recopié du mot mémoire cible pour y injecter l'erreur choisie, transférer (306) le mot mémoire cible modifié à son emplamenet d'origine, désempiler (307) le registre (ACC), et terminer (308, 309) le programme d'interruption et revenir à l'adresse du programme principal indiquée par le compteur de programme (PC).

Description

PROCEDE D'INJECTION D'ERREURS PAR INTERRUPTIONS
La présente invention concerne de façon générale le test de 1 ' aptitude de systèmes électroniques et logiques à base de circuits intégrés, par exemple de systèmes destinés à des applications spatiales, à fonctionner correctement sous irradia- tion. Toutefois, étant donné la miniaturisation des circuits intégrés, ceux-ci deviennent de plus en plus sensibles aux effets des radiations et l'invention trouve également des applications dans le test de circuits intégrés utilisés sur terre . La présente invention vise plus particulièrement la vérification de systèmes capables d'exécuter un jeu d'instructions ou de commandes (microprocesseur, microcontrôleur, processeur de traitement de signal, etc . ) .
Une façon classique de tester de tels systèmes est de les placer dans un environnement irradié, provoqué par exemple par un accélérateur de particules, et de vérifier leur fonctionnement en tenant compte du nombre d'impacts qu'ils reçoivent. On conçoit que de telles vérifications sont très lourdes, surtout si on tient compte du fait qu'elles doivent être réalisées "en ligne", c'est-à-dire que le circuit testé doit accomplir les fonctions pour lesquelles il a été conçu pour 1 ' application considérée pendant l'exposition aux particules. En outre, quand elles sont réalisées sur des processeurs à 1 ' aide de stratégies dites statiques, ces méthodes donnent des résultats parfois très éloignés de la réalité. En effet, un impact sur un circuit intégré, même s ' il provoque un changement d' état du contenu d'une case mémoire peut n'avoir en pratique aucune influence sur le fonctionnement d'un programme tournant sur ce circuit.
Ainsi, la présente invention vise un procédé d'injection d'erreur de bit (s) en des emplacements quelconques d'un circuit intégré tandis qu'un programme principal est exécuté sur ce circuit.
Plus particulièrement encore, la présente invention vise un procédé dans lequel l'injection d'erreur fictive est réalisée par l'intermédiaire d'un programme d'interruption.
Un tel procédé a par exemple été proposé dans l'article de R. Velazco et S. Rezgui "Transient Bitflip
Injection in Microprocessor Embedded Applications" paru dans
Proceedings of 6th IEEE International on-line testing workshop,
3-5 juillet 2000, Palma de Majorque, PP 80-84.
En d'autres termes, la présente invention concerne une architecture numérique organisée autour d'un processeur capable d'exécuter une séquence d'instructions ou de commandes stockée dans une mémoire (externe ou interne) et de prendre en compte l'effet de signaux d'entrée asynchrones tels que des interruptions. Le processeur peut être programmé pour réaliser de façon directe ou indirecte des opérations de lecture et d'écriture dans chacun des emplacements de la mémoire externe, ainsi que des registres et zones de mémoire interne.
Des basculements de bits uniques ou basculements, ou événements, couramment désignés par le sigle SEU d'après l'expression anglo-saxonne Single Event Upset peuvent être provoqués dans des processeurs comme conséquence de 1 ' exécution d'un code adéquat qui dépendra essentiellement de certaines caractéristiques de la cible. Ce code sera appelé ici CEU (Code Emulâting an Upset). De même l'emplacement mémoire perturbé par suite de 1 ' exécution du code CEU sera appelé la cible du CEU. Les basculements qui résultent de 1 ' exécution du code CEU seront appelés également CEU (Code Emulâted Upset) .
En réponse à l'activation d'une interruption, un processeur déroulera typiquement les étapes suivantes : - arrêt de l'exécution du programme en cours après avoir complété l'exécution de l'instruction courante,
- sauvegarde du contexte (au moins la valeur de retour du compteur de programme PC dans une pile) ,
- branchement vers le programme de traitement de 1 ' interruption provoquant l'inversion du ou des bits cibles choisis, restauration du contexte depuis la pile pour continuer 1 'exécution du programme interrompu.
Il suffit donc d'activer l'interruption à différents moments de l'exécution d'un programme pour provoquer l'injection de basculement de bits par des moyens logiciels.
En pratique, cette injection d'erreurs au moyen d'un programme d' interruption se fait relativement facilement dans le cas où la cible est un registre ou mot mémoire accessible directement par le programme d'interruption. Toutefois, il se pose des difficultés pratiques à mettre en oeuvre le procédé quand la cible est ou bien un registre ou un mot mémoire non accessible directement, ou bien le registre stockant le compteur de programme, ou bien encore le registre stockant le pointeur de la pile dans laquelle est stocké le contexte du programme principal au moment de l'interruption.
Ainsi, la présente invention vise à accéder à toutes les zones mémoire d'un processeur qui sont accessibles par l'intermédiaire du jeu d'instruction de tout programme associé à ce processeur. Par exemple, dans le cas du processeur 8051 d' Intel, ces zones mémoire accessibles comprennent notamment les accès d'entrée/sortie, les accumulateurs, les registres spéciaux, le registre compteur de programme et la mémoire RAM interne. Seule un très petit nombre des zones mémoire d'un processeur reste inaccessible à 1 ' introduction de CEU. Ces zones comprennent notamment les registres d'entrée de l'unité arithmétique et logique, des bascules à mémoire (latch) , des registres d'adresse, et la mémoire cache. Un calcul effectué dans le cas du microprocesseur 8051 et qui peut s'étendre à de nombreux types de microprocesseurs montre que ces zones non accessibles représentent moins de 7 % de 1 ' ensemble des zones mémoire du processeur.
Grâce à l'efficacité de l'injection d'erreur selon la présente invention, il devient possible d'évaluer un taux d'erreurs réel pour un processeur donné associé à un programme donné. Ce taux d'erreurs réel ou sensibilité du système peut être évalué par le calcul. Tout d'abord, pour un processeur donné soumis à un bombardement de particules, on peut déterminer un nombre P tel qu'une seule particule parmi P est susceptible de provoquer une erreur de bits (un CEU) . La présente invention permet de montrer que sur N SEU, n seulement sont susceptibles de perturber un programme donné tournant sur processeur donné. Alors, la sensibilité du système peut être estimée comme égale à n/NP. Une fois que l'on a validé l'exactitude du mode de détermination du taux d'erreurs réel obtenu en soumettant un dispositif auquel on a appliqué le procédé de détermination d'erreur selon la présente invention à des conditions réelles, par exemple de travail dans l'espace, on peut appliquer la méthode à un système constitué du même élément matériel sur lequel tourne un autre logiciel. On pourra être certain que le procédé selon la présente invention fournit un résultat correct et il ne sera pas nécessaire de refaire une validation dans des conditions de perturbations réelles ou simulées puisque P est constant pour un matériel donné et un type de particules donné. On notera également que le procédé d'analyse de sensi- bilité d'un système à des perturbations de type CEU peut être réalisé de manière totalement aléatoire ou de façon systématique. Une analyse systématique pourra notamment être effectuée pour un programme donné sur les étapes successives de déroulement de ce programme. On s'aperçoit alors généralement que certaines phases du programme sont peu sensibles aux CEU alors que d'autres le sont nettement plus. On peut ainsi définir pour chaque programme des fenêtres de sensibilité. Ceci peut être utile dans des systèmes prévoyant des redondances pour ne réaliser des opérations redondantes que sur des parties particulièrement sensibles d'un programme donné.
Pour atteindre cet objet, la présente invention prévoit un procédé d'injection d'erreurs de bits dans un matériel opérant sous la commande d'un programme principal donné, consistant à procéder à une interruption et à introduire 1 ' erreur de bit pendant le déroulement du programme d'interruption, dans lequel, au moment de l'interruption, la valeur de retour du registre de compteur de programme et éventuellement le contenu d'autres registres tels que des registres d'indicateurs d'état sont mémorisés dans une pile sous le contrôle d'un pointeur de pile.
Quand 1 'erreur doit être injectée dans un mot mémoire cible stocké à un emplacement non accessible directement, le programme d' interruption comprend les étapes suivantes : mettre dans la pile le contenu d'un registre, transférer dans le registre le contenu du mot mémoire cible, modifier dans le registre le contenu recopié du mot mémoire cible pour y injecter l'erreur choisie, transférer le mot mémoire cible modifié à son emplace- ment d'origine, désempiler le registre, et terminer le programme d'interruption et revenir à 1 'adresse du programme principal indiquée par le compteur de programme . Quand l'erreur doit être injectée dans le registre de compteur de programme, le programme d'interruption comprend les étapes suivantes : mettre dans la pile le contenu d'un premier registre, mettre dans la pile le contenu d'un accumulateur, transférer la valeur du registre de pointeur de pile (correspondant à l'adresse dans la pile de l'adresse de retour du compteur de programme) dans le premier registre, transférer le contenu du registre de compteur de programme tel qu' indiqué par le premier registre dans 1 ' accumulateur, modifier la valeur du compteur de programme dans l'accumulateur pour y injecter l'erreur choisie, recharger la valeur du compteur de programme modifiée dans la pile à l'adresse contenue dans le premier registre, désempiler l'accumulateur, et désempiler le premier registre.
Quand l'erreur doit être injectée dans un registre de pointeur de pile, le programme d'interruption comprend les étapes suivantes : écrire à une adresse déterminée un code de saut inconditionnel vers une case mémoire déterminée, pointer au moyen du pointeur de pile vers la valeur de retour du compteur de programme, transférer le contenu du pointeur de pile dans un premier registre, transférer 1 'adresse de retour du compteur de programme stockée dans la pile dans un deuxième registre, transférer le contenu du deuxième registre à la suite dudit code de saut inconditionnel, modifier le premier registre pour injecter l'erreur choisie dans le registre pointeur de pile un saut inconditionnel vers ladite adresse déterminée du saut inconditionnel mentionné en premier pour obtenir la valeur de retour du programme principal .
Ces objets, caractéristiques et avantages, ainsi que d'autres de la présente invention seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non-limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 est une représentation symbolique d'éléments d'un système matériel/logiciel auquel s'applique la présente invention ; et les figures 2 à 5 représentent des exemples de séquences de programme d'interruption respectivement applicables à un registre accessible directement, à un registre à accès indirect, au compteur de programme, et au pointeur de pile.
La figure 1 représente sous forme symbolique des éléments d'un système matériel/logiciel. On a représenté un programme principal 10 que l'on pourra considérer ou bien d'un point de vue logique comme une succession d' instructions ou bien d'un point de vue matériel comme une mémoire contenant les instructions. Le système comprend également un ou plusieurs programmes d'interruption 20 et une pile 30 ainsi qu'un pointeur de pile 40.
Dans une architecture d'ordinateur classique, lorsqu'un ordre d'interruption est lancé à une étape 10 (i) d'un programme principal 10, plusieurs opérations sont effectuées :
- on termine l'exécution de l'instruction 10 (i) en cours ;
- on sauvegarde le contexte du programme, c'est-à-dire essentiellement la valeur du compteur du programme PC correspondant à l'adresse de retour (10(i+D) du programme principal, et éventuellement le contenu de divers registres indicateurs d'état (flag) et d'autres paramètres clés du système ; cette sauvegarde du contexte est classiquement effectuée dans une pile 30 du type premier-entré/dernier-sorti sous le contrôle d'un registre pointeur de pile (SP) 40 ;
- on passe à la première étape (START) du programme d'interruption 20.
Ceci a été représenté symboliquement en figure 1 en indiquant qu'une interruption IT est susceptible de survenir à l'étape 10 (i), que l'on passe alors à la phase START du programme d'interruption 20, que cette phase START contrôle le pointeur de pile 40 qui pointe vers la pile 30 (classiquement, on considère que le pointeur de pile SP pointe vers la dernière case libre de la pile) .
Une fois ces opérations initiales effectuées, le programme d'interruption se déroule jusqu'à arriver à sa phase finale END. A ce moment, il fournit un ordre au pointeur de pile pour réaliser le desempilement du contenu de la pile, c'est-à- dire que toutes les informations relatives au contexte qui ont été mémorisées au moment de l'interruption sont remises à jour dans leurs emplacements d'origine. A la dernière étape de ce desempilement, on arrive au contenu du compteur de programme qui correspond à l'adresse i+1 du programme principal et on reprend le programme à l'étape 10 (i+1) comme cela est symbolisé par la liaison 31.
Comme on l'a rappelé précédemment, l'objet de l'inven- tion est d'introduire des erreurs de bits simples ou multiples (SEU) à partir de codes CEU génériques à tout emplacement choisi du système lors d'une étape choisie du déroulement du programme principal . 1. Injection d'erreur dans un registre à accès direct Un exemple de programme d'interruption destiné à permettre une injection d'erreur dans un registre ou mot mémoire accessible directement est illustré de façon très symbolique en figure 2.
Lors d'une première étape 201 d'initialisation (START), on transfère dans la pile 30 l'adresse contenue dans le compteur de programme ou plus exactement 1 ' adresse de retour [10 (i+1)] du compteur de programme.
Lors d'une étape optionnelle 202, on transfère (push) dans la pile 30, si cela n'est pas déjà prévu par le programme normal d'interruption du système concerné, des indicateurs d'état (flag ou F) et éventuellement d'autres registres clé.
A l'étape 203, on réalise le changement (chg) d'une ou plusieurs positions de bits (pos.bit) dans un mot mémoire accessible directement. L'étape 204 est une étape optionnelle qui est réalisée si l'étape 202 a été réalisée à savoir que l'on désempile (pop) les éléments du contexte de 1 ' ordinateur qui ont été empilés à l'étape 202 au moment de l'interruption. Un programme d'interruption se termine classiquement par une étape finale 205 qui renvoie à la continuation de l'exécution du programme interrompu.
On notera que le programme de la figure 2 est particulièrement simple à mettre en oeuvre et que, classiquement, il ne nécessite qu'une instruction pour le changement de position d'un bit dans la cible. Ce changement se fait en pratique au niveau du registre concerné par une opération de OU-Exclusif (XOR) entre le contenu du registre concerné et un masque contenu dans le code CEU. 2. Injection d' erreur dans un registre à accès indirect
Un exemple de programme d'interruption destiné à permettre une injection d'erreur dans un registre ou mot mémoire non accessible directement est illustré en figure 3.
Les étapes initiales 301 et 302 sont identiques aux étapes 201 et 202 décrites en relation avec la figure 2.
A l'étape 303, le programme met dans la pile (push) le contenu d'un registre ou accumulateur ACC.
A l'étape 304, on transfère (Ld) dans le registre ACC le contenu de la zone de mémoire interne (ZMI) cible. A l'étape 305, on effectue la modification recherchée au mot mémoire cible. Cette modification est maintenant effectuée dans le registre ACC qui est accessible, de façon similaire à la modification décrite en relation avec l'étape 203 de la figure 2. A l'étape 306, le contenu modifié du registre ACC est renvoyé vers la zone mémoire dans laquelle se trouvait le mot cible.
Ensuite, on procède à une étape de desempilement 307 complémentaire de l'étape d'empilement 302 pour remettre dans l'accumulateur ACC sa valeur d'origine avant l'exécution des opérations susmentionnées .
Le programme se termine par des étapes 308 et 309 respectivement similaires aux étapes 204 et 205 décrites en relation avec la figure 2.
3. Injection d'erreur dans le compteur de programme (PC)
Un programme d'interruption permettant l'injection d'erreur dans le compteur de programme est illustré en figure 4.
Dans ce cas, une difficulté particulière se pose du fait que le compteur de programme contrôle le sequencement des étapes d'exécution d'un programme et que, quand il est perturbé, il devient difficile d'exécuter correctement le programme.
Un programme d'injection d'erreur dans le contenu du compteur programme selon un mode de réalisation de la présente invention, commence par des étapes 401 et 402 similaires aux étapes 201 et 202 décrites en relation avec la figure 2.
A l'étape 403, on met dans la pile le contenu d'un premier registre R0.
A l'étape 404, on incorpore également dans la pile le contenu d'un deuxième registre ACC, couramment appelé accumulateur.
A l'étape 405, on transfère dans le registre R0, le contenu du pointeur de pile SP qui correspond à 1 ' adresse dans la pile de 1 ' adresse de retour du compteur de programme . A l'étape 406, on transfère dans l'accumulateur ACC le contenu (CP) du registre de compteur de programme tel qu'indiqué par le premier registre R0.
C'est alors seulement qu'à l'étape 407, on effectue l'injection d'erreur choisie sur le contenu du registre ACC, c'est-à-dire la valeur du compteur de programme.
A l'étape 408, on retransfère le contenu du registre ACC dans la pile à l'adresse indiquée par le registre R0.
Les opérations sont alors terminées et 1 ' on procède ensuite successivement à l'étape 409 au desempilage de l'accumu- lateur, à l'étape 410 au desempilage du registre R0, et aux étapes 411 et 412 aux étapes finales similaires aux étapes 204 et 205.
4. Injection d'une erreur dans le pointeur de pile (SP)
Un programme d'interruption permettant l'injection d'erreur dans le pointeur de pile est illustré en figure 5.
L'injection d'une erreur dans le pointeur de pile pose un problème particulier car si le pointeur de pile est perturbé lors du programme d'interruption, on ne peut a priori pas reprendre le déroulement du programme interrompu après l'exé- cution du programme d'interruption puisque le desempilement ne peut plus se dérouler normalement. En conséquence, la présente invention propose un procédé très spécifique incorporant des étapes de saut inconditionnel pour l'injection d'une erreur dans le pointeur de pile et le retour au programme interrompu. Un programme d'injection d'erreur dans le contenu du pointeur de pile selon un mode de réalisation de la présente invention, commence par des étapes 501 et 502 similaires aux étapes 201 et 202 décrites en relation avec la figure 2.
A l'étape 503-504, on écrit à une adresse déterminée (adbranch) un code (JMP) de saut inconditionnel vers une case mémoire déterminée. Cette opération se fait généralement en passant par un registre R.
A l'étape 505, on pointe (DEC) au moyen du pointeur de pile vers la valeur de retour du compteur de programme, A l'étape 506, on transfère le contenu du pointeur de pile (l'adresse dans la pile de l'adresse de retour du compteur de programme) dans un premier registre RI,
A l'étape 507, on transfère l'adresse de retour du compteur de programme stockée dans la pile dans un deuxième registre R2.
A l'étape 508, on transfère le contenu du deuxième registre à l'adresse (adbranch+1) qui suit l'adresse (adbranch) à laquelle on a écrit ledit code de saut inconditionnel, de façon à fixer l'adresse (celle qui contient la valeur de retour du compteur de programme) vers laquelle renverra le saut inconditionnel .
A l'étape 509, on modifie le premier registre RI pour injecter l'erreur choisie dans le registre pointeur de pile. A l'étape 510, on exécute un premier saut inconditionnel vers 1 ' adresse (adbranch) à laquelle on a écrit ledit code de saut inconditionnel et on exécute ce saut inconditionnel pour arriver à la valeur de retour du programme principal.
On notera que le programme ne se termine pas par des étapes dé desempilement qui ne sont plus réalisables puisque le pointeur de pile a été perturbé.
De façon générale, quelle que soit la cible du CEU, on notera que, pour la plupart des processeurs, les jeux d'instructions nécessaires à l'injection d'erreur selon l'invention permettent la réalisation de ces tâches en seulement quelques instructions en langage assembleur. Ces instructions, une fois compilées, donneront lieu à des codes d'au plus quelques dizaines de mots. L'aspect crucial pour simuler un SEU réside dans 1 ' insertion de ces codes dans le programme en cours d'exécution pour qu'ils soient exécutés à l'instant souhaité pendant 1 ' exécution d'un programme quelconque . Pour que 1 ' erreur injectée reproduise fidèlement les SEU survenant comme conséquence de l'effet des radiations, l'exécution de ce code doit avoir pour seul effet la corruption de la valeur de la cible du SEU, laissant inchangés les autres éléments de mémorisation du processeur.
La présente invention pourra être adaptée sans difficulté par l'homme de l'art du domaine de la programmation à des dispositions spécifiques matérielles ou logicielles. Notamment si la dimension des registres et autres mots mémoires destinés à être transférés d'une position à une autre est plus grande que la dimension de la case, registre ou pile vers lequel le transfert doit être effectué, le transfert pourra être décomposé en plusieurs transferts élémentaires, par exemple en séparant les bits les plus significatifs des bits les moins significatifs.

Claims

REVENDICATIONS
1. Procédé d'injection d'erreurs de bits dans un matériel opérant sous la commande d'un programme principal donné, consistant à procéder à une interruption et à introduire 1 'erreur de bit pendant le déroulement du programme d'interruption, dans lequel, au moment de l'interruption, la valeur de retour du registre de compteur de programme (PC) et éventuellement le contenu d'autres registres tels que des registres d'indicateurs d'état sont mémorisés dans une pile sous le contrôle d'un pointeur de pile (SP) , caractérisé en ce que, quand l'erreur doit être injectée dans un mot mémoire cible stocké à un emplacement non accessible directement, le programme d'interruption comprend les étapes suivantes : mettre dans la pile (303) le contenu d'un registre (ACC) , transférer (304) dans le registre (ACC) le contenu du mot mémoire cible, modifier (305) dans le registre (ACC) le contenu recopié du mot mémoire cible pour y injecter l'erreur choisie, transférer (306) le mot mémoire cible modifié à son emplacement d'origine, désempiler (307) le registre (ACC) , et terminer (308, 309) le programme d'interruption et revenir à 1 ' adresse du programme principal indiquée par le compteur de programme (PC) .
2. Procédé selon la revendication 1, caractérisé en ce que, quand l'erreur doit être injectée dans le registre de compteur de programme (PC), le programme d'interruption comprend les étapes suivantes : mettre dans la pile (403) le contenu d'un premier registre (R0) , mettre dans la pile (404) le contenu d'un accumulateur (ACC) , transférer (405) la valeur du registre de pointeur de pile (SP) (correspondant à l'adresse dans la pile de l'adresse de retour du compteur de programme) dans le premier registre (RO), transférer (406) le contenu du registre de compteur de programme (PC) tel qu'indiqué par le premier registre (RO) dans 1 ' accumulateur, modifier (407) la valeur du compteur de programme dans l'accumulateur (A) pour y injecter l'erreur choisie, recharger (408) la valeur du compteur de programme (PC) modifiée dans la pile à l'adresse contenue dans le premier registre (R0) , désempiler (409) l'accumulateur, et désempiler (410) le premier registre.
3. Procédé selon la revendication 1, caractérisé en ce que, quand l'erreur doit être injectée dans un registre de pointeur de pile (SP) , le programme d'interruption comprend les étapes suivantes : écrire (503-504) à une adresse déterminée (adbranch) un code de saut inconditionnel (JMP) vers une case mémoire déterminée, pointer (505) au moyen du pointeur de pile vers la valeur de retour du compteur de programme (PC) , transférer (506) le contenu du pointeur de pile (SP) dans un premier registre (RI) , transférer (507) l'adresse de retour du compteur de programme (PC) stockée dans la pile dans un deuxième registre
(R2), transférer (508) le contenu du deuxième registre (R2) à la suite dudit code de saut inconditionnel, modifier (509) le premier registre (RI) pour injecter l'erreur choisie dans le registre pointeur de pile (SP) exécuter (510) un saut inconditionnel vers ladite adresse déterminée du saut inconditionnel mentionné en premier pour obtenir la valeur de retour du programme principal.
PCT/FR2002/000167 2001-01-16 2002-01-16 Procede d'injection d'erreurs par interruptions WO2002056177A1 (fr)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US10/466,597 US20040153794A1 (en) 2001-01-16 2002-01-16 Method for error injection by interruptions
JP2002556368A JP2004526230A (ja) 2001-01-16 2002-01-16 割込みによる誤り注入方法
EP02700331A EP1352325A1 (fr) 2001-01-16 2002-01-16 Procede d'injection d'erreurs par interruptions

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR01/00518 2001-01-16
FR0100518A FR2819603B1 (fr) 2001-01-16 2001-01-16 Procede d'injecteur d'erreurs par interruptions

Publications (1)

Publication Number Publication Date
WO2002056177A1 true WO2002056177A1 (fr) 2002-07-18

Family

ID=8858855

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/FR2002/000167 WO2002056177A1 (fr) 2001-01-16 2002-01-16 Procede d'injection d'erreurs par interruptions

Country Status (5)

Country Link
US (1) US20040153794A1 (fr)
EP (1) EP1352325A1 (fr)
JP (1) JP2004526230A (fr)
FR (1) FR2819603B1 (fr)
WO (1) WO2002056177A1 (fr)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130139008A1 (en) * 2011-11-29 2013-05-30 Advanced Micro Devices, Inc. Methods and apparatus for ecc memory error injection
WO2014196059A1 (fr) 2013-06-06 2014-12-11 株式会社日立製作所 Procédé et système d'injection de défaut dans un microcontrôleur
US10019576B1 (en) * 2015-04-06 2018-07-10 Intelligent Automation, Inc. Security control system for protection of multi-core processors

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4999837A (en) * 1989-03-20 1991-03-12 International Business Machines Corporation Programmable channel error injection
US5793770A (en) * 1996-11-18 1998-08-11 The Regents Of The University Of California High-performance parallel interface to synchronous optical network gateway
US6182248B1 (en) * 1998-04-07 2001-01-30 International Business Machines Corporation Method and tool for computer bus fault isolation and recovery design verification
US6587961B1 (en) * 1998-06-15 2003-07-01 Sun Microsystems, Inc. Multi-processor system bridge with controlled access
US6304984B1 (en) * 1998-09-29 2001-10-16 International Business Machines Corporation Method and system for injecting errors to a device within a computer system
US6604211B1 (en) * 1999-08-31 2003-08-05 Seagate Technology Llc Tool for initiating and analyzing error recovery procedures in data storage devices
US6560720B1 (en) * 1999-09-09 2003-05-06 International Business Machines Corporation Error injection apparatus and method
US6701460B1 (en) * 1999-10-21 2004-03-02 Sun Microsystems, Inc. Method and apparatus for testing a computer system through software fault injection
US6484276B1 (en) * 1999-10-25 2002-11-19 Lucent Technologies Inc. Method and apparatus for providing extensible object-oriented fault injection
US6519718B1 (en) * 2000-02-18 2003-02-11 International Business Machines Corporation Method and apparatus implementing error injection for PCI bridges
US6799287B1 (en) * 2000-05-01 2004-09-28 Hewlett-Packard Development Company, L.P. Method and apparatus for verifying error correcting codes

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
GERARDIN J PH: "THE DEF.INJECTOR TEST INSTRUMENT, ASSISTANCE IN THE DESIGN OF RELIABLE AND SAFE SYSTEMS", COMPUTERS IN INDUSTRY, ELSEVIER SCIENCE PUBLISHERS. AMSTERDAM, NL, vol. 11, no. 4, 1 February 1989 (1989-02-01), pages 311 - 319, XP000111018, ISSN: 0166-3615 *
TSAI T K ET AL: "AN APPROACH TOWARDS BENCHMARKING OF FAULT-TOLERANT COMMERCIAL SYSTEMS", PROCEEDINGS OF THE 26TH. INTERNATIONAL SYMPOSIUM ON FAULT-TOLERANT COMPUTING. SENDAI, JP., JUNE 25 - 27, 1996, PROCEEDINGS OF THE INTERNATIONAL SYMPOSIUM ON FAULT-TOLERANT COMPUTING, LOS ALAMITOS, IEEE COMP. SOC. PRESS, US, vol. CONF. 26, 25 June 1996 (1996-06-25), pages 314 - 323, XP000679295, ISBN: 0-8186-7261-7 *
VELAZCO R ET AL: "Transient bitflip injection in microprocessor embedded applications", PROCEEDINGS 6TH IEEE INTERNATIONAL ON-LINE TESTING WORKSHOP (CAT. NO.PR00646), 6TH IEEE INTERNATIONAL ON-LINE TESTING WORKSHOP, PALMA DE MALLORCA, SPAIN, 3-5 JULY 2000, 2000, Los Alamitos, CA, USA, IEEE Comput. Soc, USA, pages 80 - 84, XP002178948, ISBN: 0-7695-0646-1 *

Also Published As

Publication number Publication date
JP2004526230A (ja) 2004-08-26
FR2819603A1 (fr) 2002-07-19
EP1352325A1 (fr) 2003-10-15
US20040153794A1 (en) 2004-08-05
FR2819603B1 (fr) 2003-06-13

Similar Documents

Publication Publication Date Title
FR2977694A1 (fr) Microprocesseur protege contre un debordement de pile
EP2453356B1 (fr) Procédé, programme d'ordinateur et dispositif de sécurisation de code intermédiaire de programmation pour son exécution par une machine virtuelle
FR2857115A1 (fr) Compatibilite des revisions de modules interchangeables
EP1960934B1 (fr) Procede pour securiser l'execution d'un code logiciel en langage intermediaire dans un appareil portatif
EP2188725A2 (fr) Procédé de débogage d'un logiciel de fonctionnement d'un système embarqué à bord d'un aéronef et dispositif de mise en oeuvre
US20140115720A1 (en) License verification method and apparatus
EP1881404A1 (fr) Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique
EP4042277A1 (fr) Procédé de simulation parallèle reproductible de niveau système électronique mis en oeuvre au moyen d'un système informatique multi-coeurs de simulation à événements discrets
FR2789502A1 (fr) Procede et outil d'analyse et de localisation de pannes materielles dans une machine informatique
WO2002056177A1 (fr) Procede d'injection d'erreurs par interruptions
KR102117209B1 (ko) 바이너리 취약점 패치 방법 및 장치
EP3610372A1 (fr) Procédé d'exécution d'un code machine d'une fonction sécurisée
WO2001002955A1 (fr) Procede de verification de transformateurs de codes pour un systeme embarque, notamment sur une carte a puce
EP3182286A1 (fr) Procede de verification de fonctionnalites d'un logiciel destine a etre embarque dans un composant cryptographique, systeme
US20080052587A1 (en) Unit Test Extender
WO2008125479A1 (fr) Procédé d'exécution sécurisée d'une application
EP3685259B1 (fr) Procédé d'exécution d'un code machine d'une fonction sécurisée
EP1775595B1 (fr) Simulateur de test de circuits intégrés
EP3828695A1 (fr) Procédé de construction d'une signature caractéristique des accès, par un microprocesseur, à une mémoire
EP2229648A1 (fr) Methode de transfert securise de donnees
EP1503288B1 (fr) Cellule de détection d'erreurs pour processeur intégré
EP0573314A1 (fr) Unité d'automate ou d'automatisme programmable
WO2013014239A1 (fr) Procédé de caractérisation de sensibilité d'un composant électronique pour procédé de conception d'équipement électronique
EP4131041A1 (fr) Procédé de vérification d'une exécution d'un programme logiciel
FR3107608A1 (fr) Dispositif electronique et procede de generation d'au moins un code informatique, programme d'ordinateur associe

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A1

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NO NZ OM PH PL PT RO RU SD SE SG SI SK SL TJ TM TN TR TT TZ UA UG US UZ VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A1

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
DFPE Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101)
WWE Wipo information: entry into national phase

Ref document number: 2002556368

Country of ref document: JP

WWE Wipo information: entry into national phase

Ref document number: 2002700331

Country of ref document: EP

WWP Wipo information: published in national office

Ref document number: 2002700331

Country of ref document: EP

REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

WWE Wipo information: entry into national phase

Ref document number: 10466597

Country of ref document: US

WWW Wipo information: withdrawn in national office

Ref document number: 2002700331

Country of ref document: EP