Brevet FR2825810A1 — publié le 20021213

DESCRIPTION La présente invention concerne un dispositif électronique à processeur pipeline utilisant un compactage de code, et un procédé de gestion d'un tel processeur. Les concepteurs de dispositifs électroniques embarqués complexes ont souvent besoin de la puissance de traitement de processeurs RISC (processeur à jeu d'instructions réduit) pour réaliser des dispositifs ayant des caractéristiques et des performances élevées, et un coût fixe le plus bas possible. Or, ceci est difficile à réaliser. De tels processeurs RISC embarqués, par exemple intégrés dans un circuit intégré spécifique (ASIC), présentent des caractéristiques contraignantes en ce qui concerne leur capacité de stockage, et spécialement leur capacité de stockage de code. Un procédé de compactage de code permet, en effet, de réduire la capacité de stockage pour une application embarquée. Le dispositif IBM à compactage de code appelé "CodePack", tel que décrit dans les documents référencés [1] et [2] en fin de description, est un exemple de réalisation d'un dispositif de ce type Une technique de compactage de code, comme décrit dans le document référencé [2] et comme illustré sur la figure 1, consiste généralement à : - d'une part, utiliser un programme logiciel 10 pour traduire un code source 11 en instructions compactées 12 qui sont placées dans une mémoire programme 13, - d'autre part, décompacter les instructions au vol dans le circuit intégré spécifique 15, dans une unité de décompactage 14 située entre un processeur RISC 16 et la mémoire 13, les bus 18 et 19 étant respectivement un bus interne et un bus externe. Une telle technique de compactage présente, cependant, un inconvénient majeur : il y a une perte de puissance de traitement du fait que le flot d'instructions compactées puis décompactées n'est pas identique à celui que l'on aurait eu sans ces étapes de compactage et décompactage. Le document référencé [2] prévoit ainsi une perte de puissance pouvant aller jusqu'à 10%. D'autre part, lorsqu'un processeur RISC est utilisé, son architecture peut également influer sur les performances du dispositif. La plupart des processeurs RISC possèdent, en effet, un pipeline dont le nombre d'étages dépend de la conception du processeur. C'est le cas des processeurs ARM7 de la société Advance Risc Machine Ltd et des processeurs R3000 de la société MIPS, par exemple. Le premier étage de tous les processeurs pipeline est un étage pour aller chercher ("fetch"). Dans cet étage le processeur commande son bus adresse pour obtenir une instruction sur son bus données. Dans de tels processeurs, chaque boucle de programme qui se termine par une instruction de branchement conditionnel occasionne une grande perte de temps : en effet, plusieurs instructions, dont le nombre dépend de l'étendue du pipeline, sont appelées après un branchement conditionnel, et ne sont pas exécutées lorsqu'un branchement en début de boucle a lieu. Le pipeline doit alors être vidé, et rempli à nouveau à partir du début de la boucle. Le pipeline est ainsi vidé et re-rempli à chacun des rebouclages en début de boucle, ce qui a un impact négatif sur la performance du processeur. La figure 2 met en évidence un tel inconvénient lors de l'exécution d'une boucle de n instructions par un pipeline à trois étages, la nième instruction étant l'instruction de branchement conditionnel. Ces trois étages sont respectivement un étage pour aller chercher (tâche A), un étage pour décoder (tâche B) et un étage pour exécuter (tâche C). Dans cet exemple chaque fois que la boucle est exécutée, deux cycles, référencés 20, correspondant aux appels d'instructions en dehors de la boucle (cycles n + 1 et n + 2) sont perdus, ce qui entraîne une diminution de la puissance de traitement du processeur. Les cycles représentés en hachuré correspondent à des cycles de vidage. Si l'on suppose que cette boucle est exécutée 100 fois et que la taille de la boucle est de 20 instructions, 200 cycles sur 2000 sont alors perdus, ce qui représente une perte de 9%. Pour résoudre ce problème, comme décrit dans le document référencé [3], certains microprocesseurs complexes intègrent une unité de branchement qui permet d'anticiper l'adresse d'appel suivante. Mais, dans le domaine des dispositifs électroniques embarqués, les processeurs utilisés classiquement ne possèdent pas une telle unité, car dans ce domaine on s'efforce de viser au plus juste en termes de coût et d'autonomie. La présente invention a pour objet de pallier les inconvénients définis ci-dessus. La présente invention concerne un dispositif électronique utilisant un compactage de code, qui comprend un processeur pipeline, une unité de branchement qui permet d'anticiper l'adresse de l'instruction suivante, une unité de décompactage du code, et une mémoire, un nouveau jeu d'instructions étant défini pour l'ensemble processeur, unité de branchement, et unité de décompactage, caractérisé en ce que l'unité de décompactage est apte à envoyer deux signaux de début et de fin de boucle à l'unité de branchement en décodant des étiquettes de début et de fin de boucle qui ont été introduites dans le nouveau jeu d'instructions et en ce que l'unité de branchement est apte à traiter ces deux signaux. L'unité de branchement, qui a un fonctionnement transparent lorsqu'il n'y a pas de signaux de début ou de fin de boucle, effectue dans ce cas une recopie des signaux entrants vers les signaux sortants. La présente invention concerne également un procédé de gestion d'un processeur pipeline dans une boucle de programme compactée qui se termine par une instruction de branchement conditionnel, caractérisé en ce qu'il comprend les étapes suivantes : - on introduit des étiquettes de début et de fin de boucle dans les première et dernière instructions de la boucle, - on mémorise l'adresse de début de boucle lorsque l'étiquette de début de boucle est rencontrée, - lorsque l'étiquette de fin de boucle est rencontrée, en cas de rebouclage, on prend en compte l'instruction située à l'adresse de début de boucle. La solution proposée par l'invention peut être appliquée à la plupart des processeurs RISC utilisant une technique de compactage. Elle permet de diminuer le temps d'exécution et offre un bon compromis entre la taille de code et la puissance de traitement. Avantageusement le dispositif de l'invention peut être utilisé dans le domaine des dispositifs portables, spécialement dans le domaine des télécommunications par téléphones mobiles. Il permet d'une part d'éviter une augmentation de la taille mémoire lors d'un ajout de nouvelles caractéristiques, et d'autre part d'obtenir un coût très compétitif. D'autres avantages apparaîtront lors de la description suivante d'un exemple de réalisation de l'invention qui va être faite en regard des dessins annexés, dans lesquels : La figure 1 illustre un dispositif de compactagedécompactage de code de l'art connu. La figure 2 illustre le comportement d'un pipeline à trois étages pendant l'exécution d'une boucle de n instructions, la nième instruction étant une instruction de branchement conditionnel. La figure 3 illustre le dispositif de l'invention. La figure 4 illustre un organigramme d'un exemple de fonctionnement du dispositif de l'invention. Comme illustré sur la figure 3, le dispositif de l'invention est un dispositif utilisant un compactage de code comprenant un processeur pipeline 25, par exemple un processeur embarqué, une unité de branchement 26, une unité de décompactage 27 modifiée afin de diminuer le nombre de fois où le pipeline est vidé, et une mémoire 28. Sur cette figure sont représentés les bus adresse BA, les bus données BD, les signaux de contrôle SC, et deux signaux BeginOfLoop et EndOfLoop spécifiques de l'invention. L'unité de branchement 26 permet d'anticiper l'adresse correcte pour éviter de vider le pipeline. De nouvelles étiquettes de début et de fin de boucle sont introduites dans les première et dernière instructions de chaque boucle. L'adresse de début de boucle est ainsi mémorisée lorsque l'étiquette de début de boucle est rencontrée. Lorsque l'étiquette de fin de boucle est rencontrée, s'il y a rebouclage, l'instruction prise en compte n'est pas l'instruction située à l'adresse suivant la boucle mais à l'adresse de début de boucle. Il n'est donc plus nécessaire de vider le pipeline pour exécuter la boucle une nouvelle fois. Tous les vidages de pipeline sont ainsi évités si ce n'est celui existant en fin de boucle. Dans le dispositif de l'invention l'unité de branchement 26 est disposée à l'extérieur du processeur, ce qui permet d'améliorer le fonctionnement du processeur, et de compenser l'impact, en termes de performance, de l'unité de décompactage 27. Dans le dispositif de l'invention, tel qu'illustré sur cette figure 3, un circuit intégré spécifique (ASIC) peut intégrer : - soit l'ensemble des composants 25,26, 27 et 28, - soit l'ensemble des composants sauf la mémoire 28, qui reste externe, - soit l'ensemble des composants sauf le processeur 25, - soit l'unité de branchement 26 et l'unité de décompactage 27. Dans un exemple de réalisation, qui correspond au dispositif illustré sur la figure 3, on considère un processeur 25 de type ARM7TDMI, très utilisé pour les applications embarquées. L'unité de décompactage 27 permet de générer les deux signaux de début et de fin de boucle"BeginOfLoop"et "EndOfLoop"vers l'unité de branchement 26, en décodant les deux étiquettes de début et de fin de boucle introduites dans le jeu d'instructions compactées. Les signaux de contrôle SC sont les signaux permettant l'accès à la mémoire, le signal ABORT qui permet de générer une exception sur le processeur, le signal nEXEC, qui indique qu'une instruction dans l'étage d'exécution n'est pas en train d'être exécutée, et le signal nOPC, qui indique un appel de code opération. Pour des appels mémoire qui ne correspondent pas à aller chercher un code opération, l'unité de branchement est transparente, ce qui consiste en une recopie des bus adresses et données, schématisée par les équations suivantes : Abu [31 : 0] =Ap [31 : 0] et Dbu [31 : 0] =Dp [31 : 0] Un exemple de fonctionnement de l'unité de branchement 26 est alors illustré dans l'organigramme de la figure 4, dans lequel on a successivement : - un test de début de boucle (référence 30), - une initialisation d'une première variable dénommée"offset"sur la taille de l'instruction (référence 31), - un test de fin de boucle (référence 32), - une modification de la variable offset (référence 33), - une recopie de bus (référence 34), - une initialisation d'une seconde variable dénommée, index" (référence 35), - un test du moment où l'instruction de fin de boucle est dans l'étage d'exécution du processeur (référence 36), - un test de branchement conditionnel exécuté (référence 37), - une génération de l'exception ABORT (référence 38), - une action pour rendre transparent le phénomène de pipe-line et éviter tout vidage (référence 39). Une exception ABORT est générée pour sortir de la boucle, lorsque le branchement conditionnel n'est pas exécuté. Cette exception change son adresse de retour pour reprendre correctement l'exécution du code. REFERENCES [1]"PowerPC adopts Code Compression"de Jim Turley (Microdesign Resources, 26 octobre 1998, Microprocessor Report). [2] "CodePackTM : Code Compression for PowerPCTM Processors"de Mark Game et Alan Booker (site internet : www. chips. ibm. com/products/powerpc/corer/cd pack-wp. pdf ; version 1.0). [3]"PowerPC 603e RISC Microprocessor Technical Summary" (MPR603TSU-04, MPC603E/D, Motorola Inc., 1995, pages 1-32). REVENDICATIONS 1. Dispositif électronique utilisant un compactage de code, qui comprend un processeur pipeline (25), une unité de branchement (26) qui permet d'anticiper l'adresse de l'instruction suivante, une unité de décompactage du code (27), et une mémoire (28), un nouveau jeu d'instructions compactées étant défini pour l'ensemble processeur (25), unité de branchement (26), et unité de décompactage (27), caractérisé en ce que l'unité de décompactage (27) est apte à envoyer deux signaux de début et de fin de boucle (BeginOfLoop, EndOfLoop) à l'unité de branchement (26) en décodant des étiquettes de début et de fin de boucle qui ont été introduites dans le nouveau jeu d'instructions compactées, et en ce que l'unité de branchement (26) est apte à traiter ces deux signaux. 2. Dispositif selon la revendication 1, dans lequel l'unité de branchement (26) a un fonctionnement transparent lorsqu'il n'y a pas de signaux de début ou de fin de boucle, et effectue alors une recopie des signaux entrants vers les signaux sortants. 3. Dispositif selon la revendication 1 comportant un circuit intégré spécifique qui intègre le processeur (25), les unités (26,27) de branchement et de décompactage, et la mémoire (28). 4. Dispositif selon la revendication 1 comportant un circuit intégré spécifique qui intègre le processeur (25) et les unités (26,27) de branchement et de décompactage. 5. Dispositif selon la revendication 1 comportant un circuit intégré spécifique qui intègre les unités (26, 27) de branchement et de décompactage et la mémoire (28). 6. Dispositif selon la revendication 1 comportant un circuit intégré spécifique qui intègre les unités (26, 27) de branchement et de décompactage. 7. Dispositif selon l'une quelconque des revendications précédentes, qui est un dispositif embarqué. 8. Procédé de gestion d'un processeur pipeline dans une boucle de programme compactée qui se termine par une instruction de branchement conditionnel, caractérisé en ce qu'il comprend les étapes suivantes : - on introduit des étiquettes de début et de fin de boucle dans les première et dernière instructions de la boucle, - on mémorise l'adresse de début de boucle lorsque l'étiquette de début de boucle est rencontrée, - lorsque l'étiquette de fin de boucle est rencontrée, en cas de rebouclage, on prend en compte l'instruction située à l'adresse de début de boucle. 9. Procédé selon la revendication 8, dans lequel le processeur pipeline est un processeur RISC.