Brevet FR2759176A1 — publié le 19980807

Micro-Brocesseur faisant une prédiction d'adresse rapide L'invention concerne un micro-processeur faisant une prédiction d'adresse rapide. L'invention peut s'appliquer à tous les micro-processeurs de petite dimension fonctionnant avec des fréquences d'horloge un peu inférieures aux fréquences limites fixées par la technologie de réalisation du processeur. Il existe à l'heure actuelle une très grande variété de micro-processeurs. Un premier point commun est qu'ils disposent tous d'au moins un registre d'adresse qui mémorise l'adresse de la prochaine instruction. Un deuxième point commun est qu'ils disposent tous d'au moins une instruction de branchement afin de pouvoir effectuer des boucles et des sauts dans le déroulement d'un programme. Depuis longtemps, on connaît le problème de l'instruction qui peut être invalide après branchement. Ce problème est d'ailleurs très accentué avec les architectures de type Pipe-Line où plusieurs instructions peuvent être invalides. Or comme l'homme du métier le sait, il n'est pas question d'utiliser des instructions qui risquent d'être non valides d'où une perte de cycles d'horloge lors du déroulement du programme. Une solution "logicielle" est de faire exécuter une (ou des) instruction(s) qui est (sont) indépendante(s) du branchement si c'est possible. Cette solution est assez lourde à gérer et apporte des contraintes assez importantes sur les compilateurs et en augmente la complexité. L'instruction NOP (de l'anglais No OPeration), bien connu de l'homme du métier est souvent placée après une instruction de branchement car il n'était pas possible (ou trop compliqué) de placer d'autres instructions. Une autre solution qui s'est développée avec les architecture Pipe-Line est la prédiction d'adresse. Plusieurs registres d'adresses sont utilisés pour lire à l'avance le contenu de différentes adresses probables afin de commencer à traiter parallèlement plusieurs instructions dont une seule sera effectivement achevée, Cependant la prédiction d'adresse ne permet pas toujours de réagir instantanément et souvent apparait la perte d'un cycle d'horloge lors du branchement (ce qui est mieux que la perte de 3 ou 4 cycles d'horloge). En fait la quasi totalité des micro-processeurs et dérivés existant à l'heure actuelle utilisent des éléments qui ont été conçus pour fonctionner à une fréquence d'horloge qui soit proche de la fréquence maximale autorisée par la technologie. Les mises à jour des registres d'adresse sont faites de manière synchrone car lorsque l'on travaille à des fréquences proches de la limite imposée par la technologie les durées de calcul doivent être masquées au maximum. Pour ne pas risquer d'avoir une adresse un peu trop lentement le calcul de l'adresse s'effectue en général pendant la lecture précédente d'où la perte d'un cycle d'horloge. A l'heure actuelle des micro-contrôleurs utilisent des coeurs de micro-processeurs un peu plus anciens qui ont été transposés dans des technologies plus rapides à des fréquences plus élevées. Des modifications sont effectuées afin de rendre le coeur de micro-processeur plus performant. Néanmoins, pour des raisons de fiabilité de fonctionnement, on continue de mettre à jour les registres d'adresse de manière synchrone en effectuant les calculs pendant la lecture de l'adresse précédente. L'invention propose de mettre à jour les registres d'adresse pendant le cycle où les adresses que l'on rentre sont utilisées pour lire une mémoire. C'est à dire que lors du début de cycle de lecture ou d'écriture l'adresse présente au niveau du décodeur d'adresse de la mémoire n'est pas stabilisé. L'invention a pour objet un processeur comportant un circuit de décodage d'instruction, une mémoire de programme, un registre d'adresse et des moyens pour mettre à jour ledit registre d'adresse, les moyens de mise à jour étant placés entre la sortie du registre d'adresse et une entrée d'adresse de la mémoire de programme afin que le registre d'adresse soit mis à jour après une réception d'une nouvelle adresse par la mémoire de programme. L'invention a également pour objet un procédé de prédiction d'adresse pour un processeur comportant un circuit de décodage d'instruction, une mémoire de programme, un registre d'adresse et des moyens pour mettre à jour ledit registre d'adresse, dans lequel une nouvelle adresse est fournie à la mémoire de programme par les moyens de mise à jour avant que ladite nouvelle adresse soit stockée dans le registre d'adresse. L'invention sera mieux comprise et d'autres avantages apparaîtront à la lecture de la description qui va suivre, ladite description faisant référence aux dessins annexés parmi lesquels: la figure 1 représente une structure de processeur selon l'état de l'art, la figure 2 représente l'amélioration apportée par l'invention, et la figure 3 représente des chronogrammes mettant en valeur l'intérêt de l'invention. Le circuit de la figure 1 représente un processeur 1 de type micro-contrôleur selon l'état de l'art. Afin de simplifier les schéma et la description, certains signaux de synchronisation ont été omis. De plus l'homme de métier comprendra que lorsque l'on parle de sorties ou d'entrées qui concernent des informations sur plusieurs bits (adresses, instructions, données,...) il s'agit en fait d'entrées et de sorties parallèles. Le processeur 1 comporte une mémoire de programme 2 qui peut être de type RAM ou de type ROM, un circuit de décodage d'instruction 3, une mémoire de données 4, une unité arithmétique et logique 5 (ALU) , un registre d'instruction 6, un accumulateur 7, un circuit de gestion d'adresse 8. Le circuit de gestion d'adresse 8 comporte un registre d'adresse 9, un multiplexeur 10, et un circuit d'incrémentation 11. La mémoire de programme 2 comporte une sortie de donnée connectée à une entrée d'instruction du circuit de décodage 3. Le circuit de décodage 3 comporte une sortie d'adresse de donnée 4 connectée à une entrée d'adresse de la mémoire de données 4. Le circuit de décodage 3 comporte une sortie d'instructions connectée à une entrée d'instruction du registre d'instruction 6. Le circuit de décodage 3 comporte une sortie d'adresse de branchement et une sortie de sélection respectivement connectées à une entrée d'adresse de branchement et à une entrée de sélection du circuit de gestion 8. Le circuit de gestion 8 comporte une sortie d'adresse connectée à une entrée d'adresse de la mémoire de programme 2. Le registre d'instruction 6 comporte une sortie d'instruction 6 connectée à une entrée d'instruction de l'ALU 5. L'ALU 5 comporte une sortie d'indicateur connectée à une entrée d'indicateur du circuit de décodage 3. L'ALU 5 comporte une sortie de donnée connectée d'une part à une entrée de donnée de l'accumulateur 7 et d'autre part à une entrée de donnée de la mémoire de données 4. Une sortie de donnée de l'accumulateur 7 est connectée à une première entrée de donnée de l'ALU 5. Une sortie de donnée de la mémoire de donnée 4 est connectée à une deuxième entrée de donnée de l'ALU 5. D'autre part, l'entrée d'adresse de branchement et l'entrée de sélection du circuit de gestion 8 sont respectivement connectées à une première entrée d'adresse et à une entrée de sélection du multiplexeur 10. Une sortie d'adresse du multiplexeur 10 est connectée à une entrée d'adresse du registre d'adresse 9. Une sortie d'adresse du registre d'adresse 9 est connectée d'une part à la sortie d'adresse du circuit de gestion 8 et d'autre part à une entrée d'adresse du circuit d'incrémentation 11. Une sortie d'adresse du circuit d'incrémentation est connectée à une deuxième entrée du multiplexeur 10. Sur la figure 2 est représenté le circuit de gestion 8 modifié selon l'invention. Le circuit de gestion comporte les mêmes éléments que le circuit de gestion 8 de l'état de la technique mais la sortie d'adresse du circuit de gestion 8 est connectée à la sortie du multiplexeur 10 au lieu de la sortie d'adresse du registre d'adresse 9. Cependant, pour qu'un tel perfectionnement fonctionne il faut prendre en compte la fréquence de fonctionnement du processeur et la technologie utilisée pour le réaliser. Le fait de shunter le registre d'adresse 9 cause une instabilité sur l'adresse à prendre en compte à l'entrée d'adresse de la mémoire de programme 2. Or si l'on utilise une technologie particulièrement rapide du type CMOS 0,5 Um ou 0,35 ym avec une fréquence d'horloge de l'ordre de 40 MHz, l'instabilité ne perturbe pas le fonctionnement du processeur 1. On peut considérer d'une manière plus générale que si un processeur est destiné à être utilisé à une fréquence d'horloge inférieure à 25% de la fréquence d'horloge maximale autorisé par la technologie alors un tel système peut s'appliquer sans aucun problème. Si par contre on désire utiliser un tel système à une vitesse plus élevée que celle qui est indiquée précédemment alors il faudra vérifier qu'il n'apparaît pas de problème temporel avec la mémoire. Les chronogrammes de la figure 3 permettent d'expliquer le fonctionnement du processeur de la figure 1 dans un exemple concret. De plus, ces chronogrammes font apparaître plus clairement l'avantage procuré par l'invention par rapport à l'état de la technique. Sur ces chronogramme, on a représenté la succession de deux instructions bien connues de l'homme du métier: LDA et BEQ. LDA est une instruction de chargement de données. Dans notre exemple, on utilise un adressage où l'adresse de la donnée est comprise dans le mot d'instruction. LDA consiste à lire une donnée dans la mémoire de donnée 4 et à la stocker dans l'accumulateur 7 par l'intermédiaire de 1'ALU 5. BEQ est une instruction de branchement conditionnel à une adresse Y de la mémoire de programme qui est donnée, dans notre exemple, avec le mot d'instruction. BEQ effectue le branchement du programme à l'adresse Y uniquement si la dernière donnée qui est passée dans l'ALU 7 était nulle. Afin de mieux mettre en évidence le problème posé, l'homme du métier remarquera que l'on utilise une structure de type pipeline ayant une profondeur d'un cycle d'horloge. Sur la figure 3, on a indiqué des premier à cinquième cycles d'horloge 12 à 16 qui cadencent le système (notamment les entrées de donnée dans les différents registres) . La partie supérieure 17 des chronogrammes représente l'enchaînement des instructions dans le processeur 1 selon l'état de la technique. La partie inférieure 18 des chronogrammes représente l'enchaînement des instructions dans le processeur 1 modifié selon l'invention comme indiqué sur la figure 2. On s'intéressera d'abord à la partie 17. Lors du premier cycle 12, l'adresse présente à l'entrée d'adresse de la mémoire de programme a la valeur PC pendant toute la durée du premier cycle 12. Pendant ce premier cycle 12 le circuit d'incrémentaion 11 va incrémenter l'adresse de une unité, le circuit de décodage 3 va décoder l'instruction précédente et indiquer après un délai que l'on sélectionne l'adresse fournie par le circuit d'incrémentation 11, l'ALU 5 va exécuter l'instruction présente dans le registre d'instruction 6. Lors d'un premier front montant 19, le registre d'adresse 9 va charger la nouvelle adresse PC+1 et la présenter quasi-instantanément à l'entrée d'adresse de la mémoire de programme 2 pour toute la durée du deuxième cycle 13; le registre d'instruction 6 va charger l'opération à exécuter dans l'ALU 5 qui correspond à l'instruction décodée précédemment dans le circuit de décodage 3; et le circuit de décodage 3 va charger l'instruction présente à l'adresse PC. Après un certain temps, le circuit de décodage 3 a décodé l'instruction LDA. Lors d'un deuxième front montant 20, le registre d'adresse charge l'adresse PC+2; le registre d'instruction 6 charge l'opération "load" qui correspond à envoyer la donnée présente sur la première entrée; le circuit de décodage 3 fournit à l'entrée de la mémoire de donnée 4 l'adresse correspondant à l'instruction LDA et charge l'instruction correspondant à l'adresse PC+1. Après un premier temps de propagation, le circuit de décodage 3 décode qu'il s'agit de l'instruction BEQ à l'adresse Y; et l'ALU 5 indique sur sa sortie d'indicateur que la donnée présente à sa sortie est égale à zéro. Après un deuxième temps de propagation, le circuit de décodage va indiquer que la prochaine adresse est Y au circuit de gestion 8. Lors d'un troisième front montant 21, le registre d'adresse charge l'adresse Y; l'accumulateur 7 charge la donnée qui était présente à la sortie de 1'ALU 5 (en l'occurrence zéro); le registre d'instruction 6 indique à 1ALU 5 qu'aucune opération n'est à faire; le circuit de décodage 3 charge l'instruction présente à l'adresse PC+2 or cette instruction peut ne pas être valide. Deux possibilités sont envisageables, soit l'instruction est traitée soit elle ne l'est pas. Dans le cas où l'opération est traitée par le circuit de décodage 3, le programmeur devra faire attention à ce qu'elle ne provoque pas d'erreur lors du déroulement du programme. L'instruction présente à l'adresse Y n'est traitée que lors du cinquième cycle d'horloge 16. La partie 18, correspondant à l'invention, diffère au niveau de la présentation des adresses à l'entrée de la mémoire de programme 2. En effet, un délai apparaît au début de chaque cycle d'horloge. Pendant ce premier cycle 12, le circuit de décodage 3 va décoder l'instruction précédente et indiquer après un délai que l'on sélectionne l'adresse fournie par le circuit d'incrémentation 11, l'ALU 5 va exécuter l'instruction présente dans le registre d'instruction 6. Lors du premier front montant 19, le registre d'adresse 9 va charger la nouvelle adresse PC; le registre d'instruction 6 va charger l'opération à exécuter dans l'ALU 5 qui correspond à l'instruction décodée précédemment dans le circuit de décodage 3; et le circuit de décodage 3 va charger l'instruction présente à l'adresse PC. Après un certain temps, le circuit de décodage 3 a décodé l'instruction LDA; l'adresse présente à l'entrée d'adresse de la mémoire de programme 2 devient stable et égale à PC+1. Lors du deuxième front montant 20, le registre d'adresse charge l'adresse PC+1; le registre d'instruction 6 charge l'opération "load" qui correspond à envoyer la donnée présente sur la première entrée; le circuit de décodage 3 fournit à l'entrée de la mémoire de donnée 4 l'adresse correspondant à l'instruction LDA et charge l'instruction correspondant à l'adresse PC+1. Après un premier temps de propagation, le circuit de décodage 3 décode qu'il s'agit de l'instruction BEQ à l'adresse Y; et 1'ALU 5 indique sur sa sortie d'indicateur que la donnée présente à sa sortie est égale à zéro. Après un deuxième temps de propagation, le circuit de décodage 3 va indiquer que la prochaine adresse est Y au circuit de gestion 8 et le circuit de gestion 8 va fournir l'adresse Y à l'entrée d'adresse de la mémoire de programme. Lors du troisième front montant 21, le registre d'adresse charge l'adresse Y; l'accumulateur 7 charge la donnée qui était présente à la sortie de l'ALU 5 (en l'occurrence zéro); le registre d'instruction 6 indique à 1'ALU 5 qu'aucune opération n'est à faire; le circuit de décodage 3 charge l'instruction présente à l'adresse Y. Le traitement des instructions se fait donc plus rapidement. Dans notre exemple, on a représenté un processeur de type pipe-line. L'homme du métier comprendra aisément que si le processeur n'a pas de pipe-line les chronogrammes changerons légèrement. Sans pipe-line, les opérations de l'ALU 5 correspondent avec l'instruction décodée, ce qui a pour effet de retarder d'un temps de propagation l'indicateur fournit par l'ALU 5 et donc l'adresse de trois temps de propagation lors du troisième cycle 14. Pour toute la figure 3, les délais et temps de propagation sont représentés comme étant de la même durée; en réalité, ces temps de propagation sont tous différents et dépendants de la complexité du circuit qui fournit le signal et de l'instruction en cours de traitement. Pour avoir un bon fonctionnement, il suffit que l'adresse soit stable suffisamment de temps pour que la mémoire puisse fournir l'instruction juste avant le cycle d'horloge suivant. Un tel système est particulièrement bien adapté pour les mémoires intégrées au processeur comme c'est le cas des micro-contrôleurs. Sur la figure 1, il a été représenté un processeur utilisant une mémoire de programme 2 et une mémoire de donnée 4. Il va de soit qu'un processeur utilisant une unique mémoire, confondant la mémoire de programme 2 et la mémoire de données 4, peut également utiliser l'invention. A titre d'exemple, on peut utiliser un multiplexeur supplémentaire entre la sortie du multiplexeur 10 et l'entrée d'adresse de la mémoire de programme ainsi qu'un registre d'adresse supplémentaire. L'invention peut également être adaptée pour des mémoires où les adresses sont échantillonnées par le signal d'horloge, dans ce cas, il est nécessaire d'utiliser des fronts différents pour séquencer la mémoire et le reste du processeur. Dans notre exemple, le circuit d'incrémentation 11 et le multiplexeur 10 forment des moyens de mise à jour du registre d'adresse 9. Il va de soit que d'autres types de moyens peuvent être utilisés, tels que des sorties trois états pour remplacer le multiplexeur, le circuit d'incrémentation peut également être remplacé par un circuit d'addition/soustraction qui recalculera l'adresse complètement à partir d'une valeur de saut d'adresse. L'important dans l'invention étant de placer ces moyens de mise à jour entre le registre d'adresse 9 et l'entrée d'adresse de la mémoire de programme 2 afin que le registre d'adresse 9 soit mis à jour après une réception d'une nouvelle adresse par la mémoire de programme 2. Ces moyens de mise à jour peuvent utiliser tout type de moyen d'incrémentation et tout type de moyen de sélection pour mettre à jour l'adresse. REVENDICATIONS 1. Processeur (1) comportant un circuit de décodage d'instruction (3), une mémoire de programme (2), un registre d'adresse (9) et des moyens pour mettre à jour (10 et 11) ledit registre d'adresse (9), caractérisé en ce que les moyens de mise à jour (10 et 11) sont placés entre la sortie du registre d'adresse (9) et une entrée d'adresse de la mémoire de programme (2) afin que le registre d'adresse (9) soit mis à jour après une réception d'une nouvelle adresse par la mémoire de programme (2). 2. Processeur (1) selon la revendication 1, caractérisé en ce que les moyens de mise à jour (10 et 11) comportent un moyen d'incrémentation (11) pour incrémenter l'adresse d'une adresse. 3. Processeur (1) selon l'une des revendications 1 ou 2, caractérisé en ce que les moyens de mise à jour (10 et 11) comporte un moyen de sélection (10) pour déterminer si la nouvelle adresse correspond à une incrémentation d'adresse ou à une adresse provenant du décodeur d'instruction (3). 4. Procédé de prédiction d'adresse pour un processeur (1) comportant un circuit de décodage d'instruction (3), une mémoire de programme (2), un registre d'adresse (9) et des moyens pour mettre à jour (10 et 11) ledit registre d'adresse (9), caractérisé en ce qu'une nouvelle adresse est fournie à la mémoire de programme (2) par les moyens de mise à jour (10 et 11) avant que ladite nouvelle adresse soit stockée dans le registre d'adresse (9).