Brevet FR2777370A1 — publié le 19991015

ARCHITECREME DE DSP OPTIMISÉE POUR LES ACCES MEMOIRE La présente invention concerne un processeur de signal numérique, plus couramment appelé DSP, et plus particulièrement une architecture permettant d'éviter des problèmes dus à la la- tence de réponse d'une mémoire. La figure 1 représente schématiquement et partiellement une architecture de DSP classique. Le DSP comprend quatre modules ou unités de traitement fonctionnant en parallèle. Deux de ces modules sont des modules d'accès mémoire (MEMU) 10. I1 est par ailleurs prévu un module arithmétique et logique (ALU) 12 et un module de gestion de branchement (BRU) 14. Chacun des modules MEMU est relié à une mémoire 16 par l'intermédiaire d'un bus indépendant. Le module de gestion de branchement BRU reçoit d'une mémoire d'instruction, non-représentée, une instruction composite INST pouvant être composée de quatre instructions élémentaires à fournir à chacun des modules en parallèle. Le module BRU récupère l'instruction qui lui est destinée et répartit en parallèle les trois instructions restantes Il, I2 et I3 aux modules ALU et MEMU. Chacun des modules ALU et MEMU comprend généralement une file d'instructions 18, sous la forme d'une mémoire du type premier- entré/premier-sorti (FIFO), dans laquelle sont stockées les instruc- tions en attente d'être traitées par le module correspondant. Un DSP du type de la figure 1 est optimisé pour effec- tuer des opérations vectorielles du type X[i] OP Y[j], o i et j varient, généralement dans une boucle, et o OP désigne une opé- ration quelconque à effectuer par le module arithmétique 12. En effet, les opérandes X[i] et Y[j] peuvent être cherchés en même temps par l'intermédiaire des deux bus de la mémoire 16 et trai- tés, en théorie, dans le même cycle par le module arithmétique 12. En pratique, on rencontre des difficultés du fait de la structure des mémoires couramment utilisées, généralement des mé- moires statiques (SRAM). Bien que l'on puisse effectuer un accès mémoire à chaque cycle, la lecture d'une donnée dans une mémoire statique classique a généralement une latence de deux cycles. En effet, lors de l'exécution d'une instruction de lecture, on pré- sente l'adresse à la mémoire. Un cycle supplémentaire est néces- saire pour fournir à la mémoire un signal d'accès en lecture, et un dernier cycle est nécessaire pour que la mémoire présente les données sur son bus de données. Pour illustrer les difficultés que cela entraîne, on considère ci-après, à titre d'exemple, une boucle courante dont le rôle est d'incrémenter d'une constante des valeurs successives stockées en mémoire. Cette boucle peut s'écrire directement sous la forme: LD: R1 = [i] (1) OP: RI = R1 + R2 ST: [i] = RI BR: test i, i++, boucler Cette boucle, par souci de clarté, n'utilise qu'un seul des modules MEMU. Elle consiste à charger (LD) dans un registre RI la valeur stockée dans la mémoire à l'adresse i, à incrémenter (OP) le contenu du registre Ri par la valeur contenue dans un re- gistre R2, à stocker (ST) à l'adresse i le nouveau contenu du re- gistre RI, et finalement à incrémenter et tester l'adresse i pour recommencer la boucle (BR). La boucle sera quittée lorsque le mo- dule de gestion de branchement BRU détecte que l'adresse i a atteint une valeur prédéterminée. Dans un DSP il n'existe généra- lement pas d'instructions du type BR. Les boucles sont program- mées à l'avance en initialisant des registres prévus à cet effet dans l'unité BRU qui effectue les tests, incrémentations et bran- chements de manière transparente. Le registre R1 est un registre de travail du module arithmétique ALU, tandis que l'adresse i est stockée dans un re- gistre du module de branchement BRU. Les opérations LD et ST sont des opérations à effectuer par l'un des modules MEMU, l'opération OP est à effectuer par le module ALU, et l'opération BR est à ef- fectuer par le module BRU. Les opérations LD et OP seront four- nies en parallèle aux modules MEMU et ALU dans une même instruc- tion composite, tandis que les opérations ST et BR seront four- nies en parallèle aux modules MEMU et BRU dans une deuxième ins- truction composite. En fait, certaines instructions comportent des champs qui sont fournis à plusieurs modules à la fois. Par exemple, une instruction de lecture LD, destinée à un module MEMU, comporte également un champ destiné au module ALU pour préparer l'un de ses registres (R1) à recevoir la donnée qui sera présentée par la mémoire. De même, une instruction d'écriture ST comporte un champ destiné au module ALU pour sélectionner un registre dont le contenu est présenté sur le bus mémoire. Ainsi, cormme cela est représenté en figure 1, un champ f de chacune des instructions I2 et I3 fournies aux modules MEMU est fourni à la file d'instruc- tions 18 du module ALU parallèlement à une instruction normale Il, et le module ALU est capable d'exécuter en un cycle une ins- truction normale et une opération indiquée par un champ f. La table ci-dessous illustre, pour plusieurs itérations de la boucle, les opérations effectuées par un module d'accès mé- moire MEMU et par le module arithmétique ALU. Les instructions de branchement BR ne posent aucun problème et la table ne les illus- tre pas par souci de clarté. Chaque rangée de la table correspond à un cycle d'ins- truction et chaque opération marquée dans la table est affectée d'un numéro correspondant à l'itération de la boucle. Files d'instructions Modules Cycle MEMU ALU MEMU ALU 1 LD1 OPi LD1 - 2 ST1 - - Opi 3 LD2 0P2 - OPi ST1 Opi 4 ST2 ST1 - LD2 OP2 ST1 LD3 0P3 LD2 - ST2 LD2 OP2 6 ST3 - - LD3 OP3 ST2 OP2 7 LD4 OP4 - OP2 ST3 LD3 OP3 ST2 _LD5 OP2 _ 8 ST4 ST2 - LD4 OP4 ST3 LD3 OP3 ST2 9 LD5 OP5 LD3 - ST4 LD4 OP4 ST3 LD3 0P3 ST5 - - LD5 0P5 ST4 LD4 OP4 ST3 OP3 il 1LD6 OP6 - OP3 ST5 LD5 OP5 ST4 LD4 OP4 ST3 OP3 12 ST6 ST3 LD6 OP6 ST5 LD5 OP5 ST4 LD4 OP4 ST3 Au premier cycle, les modules MEMU et ALU reçoivent les premières instructions LD et OP (LD1, OP1). Le module MEMU exé- cute immédiatement l'instruction LD1, ce qui commence le cycle de lecture en mémoire de la valeur stockée à l'adresse i. L'ins- truction LD1 est effacée de la file d'instructions du module MEMU. L'instruction OP1, qui a besoin de la valeur demandée par l'instruction LD1, ne peut encore être exécutée. Cette instruc- tion OP1 attend dans la file d'instructions du module ALU. Au deuxième cycle, le module MEMU reçoit la première instruction ST (ST1). L'instruction ST1, qui a besoin du résultat de l'opération OP1, ne peut encore être exécutée et attend dans la file d'instructions du module MEMU. L'instruction OP1 attend toujours dans la file du module ALU, car la mémoire ne renvoie toujours pas l'opérande qu'elle requiert. Au troisième cycle, les modules MEMU et ALU reçoivent les instructions LD2 et OP2. Ces instructions sont mises dans les files après les instructions non encore exécutées ST1 et OP1. La mémoire renvoie enfin l'opérande requis par l'instruction OP1. Cette instruction OP1 est alors exécutée et effacée de la file d'instructions. Au cycle 4, le module MEMU reçoit l'instruction ST2. L'instruction ST2 est mise en attente dans la file du module MEMU après l'instruction LD2. L'instruction OPl ayant été exécutée au cycle précédent, son résultat est disponible. L'instruction ST1 peut donc être exécutée et effacée de la file. Bien que l'ins- truction OP2 soit la seule dans la file du module ALU, cette ins- truction ne peut encore être exécutée car elle requiert un opé- rande qui sera demandé par l'exécution de l'instruction LD2. Au cycle 5, les modules MEMU et ALU reçoivent les ins- tructions LD3 et OP3. L'instruction LD2 est exécutée et effacée de la file. L'instruction OP2 doit encore attendre dans la file, car elle requiert l'opérande qui sera renvoyé par la mémoire deux cycles plus tard en réponse à l'instruction LD2. A partir du cinquième cycle, l'exécution des ins- tructions de la deuxième itération de boucle s'enchaîne comme celle de la première itération commençant au cycle 1. Comme le montre la table, bien que le processeur puisse effectuer un accès mémoire à chaque cycle, on constate qu'il n'accède à la mémoire que deux cycles sur quatre, c'est-à-dire que l'efficacité d'exécution de la boucle n'est que de 50 %. Par ailleurs, à chaque nouvelle itération de boucle, la file d'instructions du module MEMU se remplit de deux ins- tructions supplémentaires et finit par déborder. Pour éviter le débordement, la fourniture d'instructions doit être régulièrement arrêtée pour permettre aux files de se vider. Ceci diminue nota- blement l'efficacité. En fait, la programmation de la boucle sous sa forme la plus directe n'est pas du tout optimale du fait de la latence de la mémoire. Pour améliorer l'efficacité compte tenu de la latence mémoire, on utilise souvent une technique de programmation de boucle appelée "unrolling" (développement). Cette technique consiste à programmer une macroboucle dont chaque itération cor- respond à plusieurs itérations de la boucle normale. Ainsi, la boucle précédente (1) s'écrit, par exemple, de la manière suivante: LDa: Ri = [i] (2) OPa: Ri = Rl + R2 LDb: R3 = [i+l] OPb: R3 = R3 + R2 STa: [i] = Rl STb: [i+l] = R3 BR: test i, i = +2, boucler Dans cette boucle, on charge (LDa) dans le registre Rl la valeur contenue à l'adresse i, on incrémente (OPa) le contenu du registre Ri par le contenu d'un registre R2, on charge (LDb) dans un registre R3 la valeur contenue à l'adresse i+l, on incré- mente (OPb) le contenu du registre R3 de la valeur contenue dans le registre R2, on stocke (STa) à l'adresse i le contenu du re- gistre Ri, on stocke (STb) à l'adresse i+l le contenu du registre R3, et on incrémente de 2 la variable i pour recormmencer la boucle. Cette boucle est programmée en quatre instructions composites. La première est constituée des opérations LDa et OPa, la deuxième des instructions LDb et OPb, la troisième de l'ins- truction STa, et la quatrième des instructions STb et BR. La table ci-dessous illustre le déroulement des opérations pour plu- sieurs itérations de boucle. Files d'instructions Modules Cycle MEMU] ALU MEMU J ALU 1 LDal OPal LDal 2 LDbl 0OPbl LDbl - OPal 3 STal - OPal OPbl OPal 4 STbl - OPbl STal OPbl LDa2 OPa2 STal - STbi STal 6 LDb2 Opb2 STbl - LDa2 OPa2 STbl O 7 STa2 LDa2 - LDb2 OPb2 LDa2 OPa2 8 STb2 LDb2 - STa2 LDb2 OPb2 OPa2 9 LDa3 OPa3 - OPa2 STb2 STa2 0Pb2 L_ _ OPa2 LDb3 OPb3 - OPb2 LDa3 OPa3 STb2 STa2 OPb2 11 |STa3 STa2 - LDb3 OPb3 LDa3 OPa3 STb2 STa2 12 STb3 STb2 - STa3 LDb3 OPb3 LDa3 OPa3 STb2 Au premier cycle, les modules MEMU et ALU reçoivent les premières instructions LDa et OPa (LDal, OPal). L'instruction LDal est immédiatement exécutée et effacée de la file d'attente. Au deuxième cycle, les modules MEMU et ALU reçoivent les instructions LDbl et OPbl. L'instruction LDbl est exécutée innmmédiatement et effacée de la file. Les instructions OPal et OPbl restent dans la file du module ALU en attente des opérandes correspondants que doit renvoyer la mémoire en réponse aux ins- tructions LDal et LDbl. Au troisième cycle, le module MEMU reçoit l'instruction STal. La mémoire renvoie l'opérande demandé par l'instruction LDal et requis par l'instruction OPal. L'instruction OPal peut donc être exécutée et effacée de la file. Au quatrième cycle, le module MEMU reçoit l'instruction STbl. La mémoire renvoie l'opérande demandé par l'instruction LDbl et requis par l'instruction OPbl. L'instruction OPbl peut donc être exécutée. Au cinquième cycle, les modules MEMU et ALU reçoivent les instructions LDa2 et OPa2. L'instruction STal peut être exé- cutée puisque la valeur qu'elle requiert a été calculée par l'instruction OPal deux cycles plus tôt. Au sixième cycle, les modules MEMU et ALU reçoivent les instructions LDb2 et OPb2. L'instruction STbl est exécutée, étant donné que la valeur qu'elle requiert a été calculée par l'ins- truction OPbl deux cycles plus tôt. Au septième cycle, le module MEMU reçoit l'instruction STa2. Une nouvelle itération de la boucle est commencée par l'exécution de l'instruction LDa2. On s'aperçoit dans cette table que le processeur exé- cute quatre accès mémoire tous les six cycles, ce qui représente une efficacité de 66 % et un gain de 33 % par rapport à la solu- tion précédente. On s'aperçoit toutefois que la file du module MEMU se remplit progressivement, nécessitant un arrêt régulier de la fourniture d'instructions. Elle se remplit de deux instructions tous les six cycles au lieu de deux instructions tous les quatre cycles coume c'était le cas pour la solution précédente. La technique du développement des boucles, bien qu'elle améliore sensiblement l'efficacité, ne constitue pas une solution optimale pour les processeurs superscalaires. En fait, elle fonc- tionne bien mieux sur des processeurs scalaires. Un objet de la présente invention est de prévoir une architecture de processeur superscalaire qui permette d'obtenir une efficacité maximale lors de l'exécution de boucles incluant des instructions d'accès mémoire. Cet objet et d'autres sont atteints grâce à un proces- seur comprenant au moins un module d'accès mémoire destiné à pré- senter une adresse de lecture ou d'écriture sur un bus d'adresses d'une mémoire en réponse à l'exécution d'une instruction de lec- ture ou d'écriture; et un module arithmétique et logique fonc- tionnant en parallèle avec le module d'accès mémoire et prévu au moins pour présenter une donnée sur un bus de données de la mé- moire tandis que le module d'accès mémoire présente une adresse d'écriture. Le processeur comprend une file d'adresses d'écriture dans laquelle est stockée chaque adresse d'écriture fournie par le module d'accès mémoire en attente de la disponibilité de la donnée à écrire. Selon un mode de réalisation de la présente invention, le module arithmétique et logique comprend deux files d'instruc- tions indépendantes destinées à recevoir des instructions en attente d'exécution, une première des files étant destinée à recevoir des instructions logiques et arithmétiques, et la deuxième file d'instructions étant destinée à recevoir des champs d'instructions fournies au module d'accès mémoire pour identifier des registres du module arithmétique et logique qui font l'objet d'opérations de lecture ou écriture. Selon un mode de réalisation de la présente invention, le module arithmétique et logique comprend une file de sortie de données dans laquelle chaque donnée à écrire dans la mémoire attend la présence d'une adresse d'écriture dans la file d'adres- ses d'écriture. Selon un mode de réalisation de la présente invention, le module arithmétique et logique compDrend une file d'entrée de données dans laquelle est écrite chaque donnée provenant de la mémoire à destination du module arithmétique et logique, en attente que le module arithmétique et logique soit disponible pour exploiter la donnée. Selon un mode de réalisation de la présente invention, le processeur comprend un module de gestion de branchement des- tiné à recevoir des instructions et à les répartir en parallèle entre lui-même, le module d'accès mémoire et le module arithmé- tique et logique. Selon un mode de réalisation de la présente invention, chacun des modules comprend une file de sortie de données dans laquelle chaque donnée à écrire dans la mémoire attend la pré- sence d'une adresse d'écriture dans la file d'adresses d'écriture. Selon un mode de réalisation de la présente invention, chacun des modules comprend une file d'entrée de données dans laquelle est écrite chaque donnée provenant de la mémoire à des- tination du module, en attente que le module soit disponible pour exploiter la donnée. 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, précédemment décrite, représente une architecture de DSP classique; et la figure 2 représente une architecture de DSP selon la présente invention. A la figure 2, un processeur selon l'invention comprend, comme celui de la figure 1, deux modules d'accès mé- moire 10 (MEMU) et un module logique et arithmétique (ALU), tous couplés à un module de gestion de branchement 14. Les modules 10 et 12 comportent des files d'instructions dans lesquelles le mo- dule de branchement BRU empile des instructions en attente d'exé- cution. Selon l'invention, chaque module d'accès mémoire MEMU comporte une file d'adresses d'écriture STAQ à partir de laquelle sont fournies les adresses utilisées pour les accès en écriture de la mémoire 16. Les adresses de lecture sont fournies à la mé- moire 16 de manière classique, comme cela est représenté par des pointillés qui traversent les files STAQ. Par ailleurs, le module ALU est muni d'une file de don- nées d'écriture STDQ et d'une file de données de lecture LDDQ par lesquelles transitent les données échangées avec la mémoire. En pratique, tous les modules d'un processeur sont classiquement susceptibles d'échanger des données avec la mémoire et comportent donc, comme cela est représenté, des files STDQ et LDDQ. Les files STAQ, STDQ et LDDQ sont toutes de type premier-entré/premier- sorti (FIFO). A chaque fois qu'un module MEMU exécute une instruction d'écriture, l'adresse d'écriture est empilée dans la file STAQ correspondante. La donnée à écrire par cette instruction est em- pilée dans une file de sortie de données STDQ correspondante, généralement du module ALU. Par exemple, si on doit écrire le contenu du registre Ri du module ALU à l'adresse i, le module MEMU qui exécute l'instruction d'écriture empile l'adresse i dans sa file STAQ tandis que le module ALU empile le contenu du registre R1 dans sa file STDQ. On remarquera que la donnée à écrire n'est pas forcément empilée dans la file STDQ en même temps que l'adresse est empilée dans la file STAQ. Ceci constitue un aspect essentiel de l'invention. A chaque cycle, les contenus des files STDQ et STAQ sont scrutés. Si la file STAQ contient une adresse et l'une des files STDQ contient une donnée, cette donnée est écrite à l'adresse contenue dans la file STAQ, puis les files STDQ et STAQ sont mises à jour. Si ces conditions ne sont pas remplies, c'est- à-dire si les files STAQ sont toutes vides ou bien si les files STDQ sont toutes vides, aucune écriture ne peut être effectuée. Le cas o deux files STDQ contiennent une donnée en même temps ne survient jamais. Dans le cas d'un DSP comportant deux modules d'accès mémoire MEMU, chaque emplacement des files STDQ est susceptible de contenir deux données, une pour chacun des modules MEMU. Alors, pour qu'une écriture se produise, il faut en outre que la donnée contenue dans l'emplacement d'une file STDQ corresponde au module MEMU dont la file STAQ n'est pas vide. Ce mécanisme permet d'exécuter une instruction d'écri- * ture immédiatement, sans tenir compte de la disponibilité du bus mémoire ni de la donnée à écrire. La donnée à écrire sera écrite ultérieurement dès qu'elle et le bus mémoire seront disponibles. Ce mécanisme est décrit ci-après plus en détail à l'aide d'un exemple. On considère de nouveau l'exemple de boucle (1), pro- granmée sous sa forme la plus directe: LD: R1 = [i] (1) OP: R1 = RI + R2 ST: [i] = RI BR: test i, i++, boucler Comme on l'a précédenmment indiqué, une instruction de lecture LD ou d'écriture ST, est constituée de deux champs, l'un destiné au module MEMU pour indiquer l'adresse de lecture ou d'écriture, et l'autre destiné au module ALU pour indiquer le re- gistre qui doit recevoir la donnée lue ou dont le contenu doit être écrit. Ainsi, une instruction LD ci-dessus se décompose en une instruction ALU: LDA: R1 = LDDQ, consistant à écrire dans le registre Ri le premier élément de la file de lecture LDDQ, et en une instruction MEMU: LDM: R(i), consistant à présenter l'adresse i en lecture. Une instruction ST ci-dessus se décompose en une ins- truction ALU: STA: STDQ = Rl, consistant à empiler le contenu du registre Rl dans la file d'écriture STDQ et en une instruction MEMU: STM: STAQ = i, consistant à empiler l'adresse d'écriture i dans la file d'adresses STAQ. Les champs f des instructions de lecture/écriture destinés au module ALU sont, selon l'invention, mis dans une file d'instructions 19 indépendante de la file 18 par laquelle sont reçues les instructions normales Il destinées au module ALU (telles que l'instruction OP). La table ci-dessous illustre, pour plusieurs itérations de la boucle (1), les opérations effectuées par l'un des modules MEMU et le module ALU, et les contenus des files d'instructions des modules MEMU et ALU, les contenus de la file STAQ du module MEMU et enfin les contenus des files STDQ et LDDQ du module ALU. Dans la table, les opérations sont affectées d'un numéro corres- pondant à l'itération. Files d'instructions Modules Files mémoire MEMU ALU Cycle MEMU ALU MEMU ALU STAQ STDQ LDDQ 1 LDM1 LDA1 OPi LDM1 - 2 STM1 STA1 STM1 - i LDA1 OP1 3 LDM2 LDA2 OP2 LDM2 LDA1 i [i] STA1 OP1i LDA1 OP1 4 STM2 STA2 STM2 STA1 i+l LDA2 OP2 i Rl STA1 LDM3 LDA3 0P3 LDM3 LDA2 i+l [i+1] STA2 0P2 LDA2 OP2 6 STM3 STA3 STM3 STA2 i+2 LDA3 OP3 i+1 R12 STA2 7 LDM4 LDA4 OP4 LDM4 LDA3 i+2 [i+2] STA3 OP3 LDA3 OP3 8 STM4 STA4 STM4 STA3 i+3 LDA4 OP4 i+2 R13 __ STA3 Au premier cycle, les modules MEMU et ALU reçoivent les instructions LD1 et OP1, l'instruction LD1 étant décomposée en une instruction LDM1 fournie au module MEMU et une instruction LDA1 fournie au module ALU. L'instruction LDM1, consistant à émettre une adresse en lecture, est immédiatement exécutée. L'instruction LDA1 est mise en attente, car elle requiert une valeur de la file de lecture LDDQ, qui est vide. L'instruction OP1, qui requiert cette même valeur, est également mise en attente. Au deuxième cycle, le module MEMU reçoit l'instruction ST1, décomposée en une instruction STM1 fournie au module MEMU et une instruction STA1 fournie au module ALU. L'instruction STM1 est exécutée et provoque l'empilement dans la file STAQ de l'adresse i à laquelle devra être écrit le résultat de l'opération OP1. L'instruction STA1 est mise en attente derrière l'instruction LDA1. Au troisième cycle, les modules MEMU et ALU reçoivent les instructions LD2 (LDM2, LDA2) et OP2. La mémoire fournit à la file LDDQ la valeur [i] demandée par l'instruction LDM1. L'instruction LDA1 est exécutée et provoque le transfert de la valeur [i] de la file LDDQ vers le registre RI. L'instruction OPl est exécutée et met à jour le contenu du registre R1. Le module MEMU étant libre, on exécute également l'instruction LDM2. Au quatrième cycle, le module MEMU reçoit l'instruction ST2 (STM2, STA2). Les instructions STM2 et STAl sont exécutées. L'instruction STAl provoque la recopie du contenu R11 du registre RI dans la file STDQ. L'instruction STM2 provoque l'empilement dans la file STAQ de l'adresse i+l à laquelle devra être écrit le résultat de l'opération OP2. Dans le même cycle, on détecte que la file STAQ contient une adresse i et que la file STDQ du module ALU contient une donnée R11. Le bus mémoire étant disponible, la donnée R11 est immédiatement écrite à l'adresse i et les files STAQ et STDQ sont mises à jour. Au cinquième cycle, les opérations du troisième cycle se répètent pour une nouvelle itération de boucle. La table ci-dessus illustre que le module mémoire MEMU exécute une instruction d'accès à chaque cycle. L'efficacité est donc maximale. Par ailleurs, les files d'instructions ne se remplissent pas. Il n'est donc pas nécessaire de régulièrement arrêter la fourniture d'instructions pour éviter le débordement des files. On s'aperçoit également, dans cet exemple, que les files STDQ et LDDQ reçoivent au plus un élément. Ces files pourraient donc être réduites à un simple registre, lequel registre est généralement prévu dans un module classique pour verrouiller les données entrantes et sortantes. Dans d'autres cas, pour des boucles plus complexes, il peut s'avérer que les files STDQ et LDDQ reçoivent plus d'un élément. Alors, le nombre d'emplacements des files STDQ et LDDQ est augmenté pour éviter tout risque de débordement. REVENDICATIONS 1. Processeur comprenant: - au moins un module d'accès mémoire (MEMU) destiné à présenter une adresse de lecture ou d'écriture sur un bus d'adresses d'une mémoire (16) en réponse à l'exécution d'une ins- truction de lecture ou d'écriture; - un module arithmétique et logique (ALU) fonctionnant en parallèle avec le module d'accès mémoire et prévu au moins pour présenter une donnée sur un bus de données de la mémoire tandis que le module d'accès mémoire présente une adresse d'écriture; caractérisé en ce qu'il comprend une file d'adresses d'écriture (STAQ) dans laquelle est stockée chaque adresse d'écriture fournie par le module d'accès mémoire en attente de la disponibilité de la donnée à écrire. 2. Processeur selon la revendication 1, caractérisé en ce que le module arithmétique et logique (ALU) comprend deux files d'instructions indépendantes (18, 19) destinées à recevoir des instructions en attente d'exécution, une première (18) des files étant destinée à recevoir des instructions logiques et arithmétiques, et la deuxième file d'instructions (19) étant des- tinée à recevoir des champs (f) d'instructions fournies au module d'accès mémoire (MEMU) pour identifier des registres du module arithmétique et logique (ALU) qui font l'objet d'opérations de lecture ou d'écriture. 3. Processeur selon la revendication 1, caractérisé en ce que le module arithmétique et logique (ALU) comprend une file de sortie de données (STDQ) dans laquelle chaque donnée à écrire dans la mémoire (16) attend la présence d'une adresse d'écriture dans la file d'adresses d'écriture (STAQ). 4. Processeur selon la revendication 1 ou 3, carac- térisé en ce que le module arithmétique et logique (ALU) comprend une file d'entrée de données (LDDQ) dans laquelle est écrite cha- que donnée provenant de la mémoire (16) à destination du module arithmétique et logique, en attente que le module arithmétique et logique soit disponible pour exploiter la donnée. 5. Processeur selon la revendication 1, caractérisé en ce qu'il comprend un module de gestion de branchement (BRU) des- tiné à recevoir des instructions et à les répartir en parallèle entre lui-même, le module d'accès mémoire (MEMU) et le module arithmétique et logique (ALU). 6. Processeur selon la revendication 5, caractérisé en ce que chacun des modules comprend une file de sortie de données (STDQ) dans laquelle chaque donnée à écrire dans la mémoire attend la présence d'une adresse d'écriture dans la file d'adres- ses d'écriture (STAQ). 7. Processeur selon la revendication 5 ou 6, carac- térisé en ce que chacun des modules comprend une file d'entrée de données (LDDQ) dans laquelle est écrite chaque donnée provenant de la mémoire à destination du module, en attente que le module soit disponible pour exploiter la donnée.