Brevet FR2644258A1 — publié le 19900914

La présente invention a pour objet un circuit intégré, hybride ou de preférrence monolithique, pouvant réaliser, au choix de son utilisateur, l'une ou l'autre de plusieurs opérations numériques1 rationnelles ou transcendantes, sur un opérande numérique donné. Des exemples de telles opérations sont les calculs de l'inverse (nécessaire pour effectuer les divisions), de la racine carrée, de l'exponentielle ou du logarithme à base 2, les calculs trigonométriques. Selon les techniques actuellement connues, des circuits intégrés réalisent seulement l'addition et la multiplication; d'autres circuits intégrés réalisent le transfert de l'opérande et de résultats intermediaires de calcul entre divers registres, de manière à calculer l'inverse ou la racine carrée de l'opérande par approximations successives, en utilisant des multiplieurs et des additionneurs existant couramment. Ces calculs, éxecutés par exemple selon l'algorithme dit de Xewton-Ralphson, sont alors très lents, leur période de récurrence est dix à vingt fois celle de la multiplication. Cette dures peut être excessive dans certains cas de calculateurs en temps réel, par exemple navigation par inertie ou synthèse de musique, exigeant beaucoup de calculs trigonométriques, ou dans des cas de calculateurs scientifiques dits "vectoriels", comportant un grand nombre de microprocesseurs opérant en parallèle. Le gain de temps dû au parallélisme est alors perdu à cause de quelques opérations arithmétiques, même peu nombreuses, mais prenant chacune beaucoup de temps, comme par exemple des calculs de longueurs dans des traitements d'images, utilisant la fonction racine carrée. Le circuit ici présenté a l'avantage de réaliser ces fonctions les plus courantes aussi rapidement que les multiplications réalisées par les multiplieur6 actuellement disponibles. La description ci-dessous sera basée sur l'hypothèse d'une précision conforme à la representation normalisée å 32 bits en virgule flottante, selon laquelle l'opérande et le resultat comportent un exposant décalé de huit bits, un bit de signe, et une nantisse composée d'un bit implicite et de vingt-trois bits significatifs. Le principe exposé est adaptable à des opérandes plus courts ou plus longs, et à des résultat; de précision différente. Dans l'état actuel des technologies C-MOS disponibles, un tel circuit peut réaliser une vingtaine de telles opérations par microseconde. Avec des technologies plus rapides ou en acceptant une moindre précision, la cadence des opérations peut être plus élevée. Le principe exposé est applicable à toute autre technologie, dans la mesure où elle permet la réalisation effective de circuits intégrés aussi complexes: ce pourra être le cas prochainement par exemple des circuits de type ECL, des matériaux semiconducteurs de type III-V ou de l'effet Josephson dans les matériaux supraconducteurs. Le principe général du calcul est basé sur un développement en série de la fonction à calculer, à partir de sa valeur et de ses dérivées, lues dans des mémoires mortes (6), correspondant à des valeurs discrètes de l'opérande. Ces valeurs discrètes sont peu nombreuses: dans l'exemple de réalisation choisi pour la description détaillée ci-dessous > elles sont au nombre de 64, définies par les six premiers bits significatifs de la partie fractionnaire de l'opérande1 lus dans le registre Ces valeurs discrètes constituent les adresses des mémoires mortes (6), constituant les tables numériques (31) à La partie fractionnaire de l'opérande x est décomposée en un premier mot de six bits, noté a, et le reste, noté b, composé de deux mots de six bits bl et b2, et un mot b3 de cinq bit. Le résultat F(x) est égal à F(a) + b F'(a) + b2/2 F"(a) + b3/6 F"' (a) + b#/24 FIV(a) Les autres termes du développement sont négligés.On lit dans les mémoires mortes des tables (6) les données suivantes: d = F(a) = d + dO + dl f d2 + d3 + d4 e = F'(a) = et + eO + el + e2 + e3 f = F" (a) za = fO + fi + f2 g = F' > '(a) /6 = gO + gl h = FrV(a) /24 = hO Les termes d et e sont des bits unités éventuels Les autres termes sont des mots de six bits au plus, dont les indices numériques indiquent les valeurs maximales: par exemple l'indice 2 correspond à 2-'2. Les tables de mémoire morte (7) contiennent respectivement les termes 3 b12, b22, b13, b14, b12. Ces tables ont pour adresses b1 ou b2. Ces tables sont communes à toutes les fonctions à calculer, alors que les tables (6) sont spécifiques à chacune des fonctions à calculer. Le résultat de l'opération est calculé par des multiplieurs et des additionneurs, à partir du contenu des tables. Dans d'autres cas, en particulier à des nombres présentés comme des entiers, ou å d'autres définitions de la précision, par exemple 32 bits en virgule fixe, il faudra définir d'autres structures de détail. La description détaillée de l'exemple de réalisation choisi est illustrée par les figures suivantes: - la figure 1 représente schématiquement l'architecture générale du processeur et sa décomposition en plusieurs "étages", définie en vue d'une utilisation en wplpe-linet, permettant d'introduire chaque nouvel opérande et son code d'opération avant que le traitement de l'opérande précédent selon son code d'opération ne soit terminé; - la figure 2 représente un peu plus de détails du premier étage; - la figure 3 représente de méme le deuxième étage. Sur la figure 1, on trouve les registres (1), 2), (3) où sont admis les composantes de l'opérande: la partie entière et le signe en (1), les six bits de poids fort en (2), les autres en (3). Le code d'opération, définissant quelle opération numérique doit être effectuée, et le code de test, utilisé pour vérifier que le fonctionnement du circuit est conforme à ses spécifications, sont présentés sur la borne d'entrée (4), en même temps qu'un signal de synchronisation. Le code d'opération, et les données du registre (1), sont traités par les circuits logiques (5) pour définir le choix de la table à lire en (6). L'adresse des tables (6) est le contenu du registre (2). Le code de test a pour effet de bloquer, selon la valeur du code binaire introduit, la transmission de certains des signaux entre les étages successifs du circuit, Le sous-ensemble (7) comporte un multiplieur et des tables dont les adresses sont des termes trouvée dans le registre (3). Il sera détaillé plus loin. Les signaux délivrés par les circuits (5), (6), (7) sont transmis b un ensemble (8) de registres parallèles, où ils attendent un signal de synchronisation pour être transmis, si le code de test ne l'interdit pas, à un ensemble logique (9). Les signaux délivrés par cet ensemble logique Ces résultats sont alors rendus disponibles sur des registres de sortie, respectivement La figure (2) représente mieux le premier étage, constitué par les sous-ensembles (5), Les données du registre (1) sont décomposées en signe de l'opérande, sur le registre (21), et partie entière, sur le registre (22). Les données du registre (3) sont décomposées dans l'ordre de poids décroissant en deux mots de six bits b1, rangé en (23), et b2, rangé en (24), et un mot b3 de cinq bits, rangé en (25). Le registre (2) contient le terme a de poids fort de la partie fractionnaire de l'opérande. Le sous-ensemble logique (5) comporte des circuits logiques (26), qui combinent le code d'opération et le signe de l'opérande, et (27), qui combinent avec le code d'opération des données de la partie entière: par exemple, un signe négatif est incompatible avec les fonctions racine carrée ou logarithme; pour les fonctions trigonométriques sin ::/4 x ou C06 m/4 X, les circuits logiques (27) permutent les tables å lire selon les valeurs comparées des deux derniers bits de la partie entière de x, et fixent le signe selon le code d'opération et les deux bits qui précèdent le dernier.Ces circuits logiques (26) et (27) introduisent donc des commandes sur le circuit Le mot de six bits a, lu dans le registre 2, est communiqué au décodeur d'adresse - table (31) calcul de 1 / a pour 1 - table (32) racine carrée, pour 1 - table (33) racine carrée, pour 2 - table (34) exponentielle 2^ pour O - table (35) logarithme de a å base 2 pour 1 - table (36) cos mf4 a pour O - table (37) sin it/4 a pour O Les données lues dans les tables sont choisies comme expliqué cidessus par le circuit de commutation (38) et acheminées dans les registres de transmission å l'étage suivant: - termes d = d# + dO + dl + d2 + d3 + d4 dans le registre (45); - termes e = e + eO + el + e2 + e3 dans le registre - termes f = fO + fl + f2 dans le registre - termes g = gO + gl dans. le registre (48); - termes h = hO dans le registre Le mot de six bits bl, lu dans le registre (23), est acheminé au décodeur d'adresse (40) des tables (41), et le mot de six bits b2, lu dans le registre Ces mêmes données entrent aussi sur le multiplieur (44), qui donne sur une entrée du sous-ensemble de registres (50) le produit bl I b2. Sur les autres entrées de ce sous-ensemble (50), on trouve aussi les contenus des tables (41) et (43) et des registres (23), (24) et (25). Les registres (28) et (45) à (50) ne communiquent leurs données qu'à réception d'un signal de synchronisation, le même que pour les données définissant l'opérande sur les registres (2) et (21) à (25). La figure 3 représente plus de détails du deuxième étage du processeur arithmétique polyvalent. Sur cette figure 3, on retrouve les registres d'entrée Selon la valeur du code de test, ou bien tous les signaux des registres Du registre (39) sortent quatre groupes de conducteurs, (61) qui contient le terme bl seul, (62) qui contient à la fois les termes bl et b2, (63) qui contient le terme b2 seul, et (64) qui contient le terme b3. De même, du registre (46) sortent quatre groupes de conducteurs, (70) qui contient un seul bit es, (71) qui contient à la fois les termes eO et el, (72) qui contient le terme e2, (73) qui contient le terme e3. Le réseau de multiplieurs (9), encadre par un contour en pointillés, contient un circuit (80) de commutation qui laisse passer les termes bl, b2 et b3 si el est égal à l'unit, un additionneur préliminaire (58) qui effectue en avance la somme des termes calculés avant les autres, et douze multiplieurs détaillés ci-dessous: - (81), 5 x 5 bits, qui effectue le produit de b2, qui vient par les conducteurs - (82), 4 x 5 bits, qui effectue le produit de ce dernier résultat par gO, qui vient par les conducteurs (65); le résultat est acheminé vers le registre de sortie (96) vers le troisième étage; - (83), 5 x 5 bits, qui effectue le produit de fO, qui vient par les conducteurs - (84), 10 x 10 bits, qui effectue le produit de (g0 + g1), qui vient par les conducteurs (66), par b13, qui vient du registre (54); le résultat est acheminé vers le registre - (85), 5 x 5 bits, qui effectue le produit de hO, qui vient du registre - (86), 12 x 12 bits, qui effectue le produit de (f0 + f1), qui vient par les conducteurs (68), par le produit (b1 # b2), qui vient du registre (53); le résultat est acheminé vers le registre (94); - (87), 12 x 12 bits, qui effectue le produit de (f0 + f1), qui vient par les conducteurs (68), par b12, qui vient du registre (56); le résultat est acheminé vers le registre (95); - (88), 5 x 5 bits, qui effectue le produit de f2, qui vient par les conducteurs (69), par b12, qui vient du registre (56); le résultat est acheminé vers l'additionneur (58); - (89), 12 x 12 bits, qui effectue le produit de (eO + el), qui vient par les conducteurs (71), par (bl + b2), qui vient par les conducteurs (62); le résultat est acheminé vers le registre (98); - (90), 12 x 5 bits, qui effectue le produit de (e0 + e1), qui vient par les conducteurs (71), par b3, qui vient par les conducteurs (64); le résultat est acheminé vers le registre (97); - (91), 12 x 6 bits, qui effectue le produit de (bl + b2), qui vient par les conducteurs (62), par e2, qui vient par les conducteurs (72); le résultat est acheminé vers le registre (99); - (92), 5 x 5 bits, qui effectue le produit de bl, qui vient par les conducteurs Le résultat de l'additionneur Ainsi un certain nombre de termes qui restent à additionner se retrouvent sur le sous-ensemble (10) de registres représenté sur la figure 1, et ici encadré par un contour en pointillés, qui comporte les registres (59) et (93) à (99). Tous ces registres, comme ceux qui constituent le sous-ensemble Le troisiéms étage, qui est schématiquement représenté sur la figure 1, comporte un additionneur (11), dont le résultat, éventuellement décalé, est transmis au registre (13), et un circuit logique (12), qui délivre sur un ensemble (14) de bornes de sortie le signe et la partie entière éventuelle du résultat, et sur une borne de sortie (15) un signal de validation indiquant que l'opération est valable, selon les principes mentionnes plus baut à propos des circuits (26) et (27). D'autres circuits, non détaillée, traitent séparément le cas où la partie fractionnaire de l'opérande est strictement nulle, et introduisent directement dans ce cas particulier le résultat, lu dans des tables ne dépendant que du code d'opération, sur le registre de sortie (13). Les circuits non détaillés ci-dessus sont réalisés selon des schémas connus de l'homme de l'art. La description ci-dessus d'un exemple de réalisation peut faire l'objet de diverses variantes qui n'en altèrent pas le principe: Des éléments complémentaires facultatifs peuvent être ajoutés en amont du premier étage, pour transformer de manière correspondante aux registres d'entrée (1), (2), (3) décrits ci-dessus, des données présentées directement selon la norme internationale de représentation en virgule flottante b 32 bits. Les registres, constituant tout ou partie des sous-ensembles (8) et (10), peuvent être doublés par des registres à décalage recevant les némes données, mais permettant leur acheminement séparé, b des fins de test du circuit, sous l'effet d'un signal de synchronisation indépendant de celui qui produit la transmission des données vers l'étage suivant, vers des bornes de sortie supplémentaires, réservées au test. Les multiplieurs peuvent porter sur un nombre plus bas ou plus élevé de bits, choisi en fonction de la précision globale requise. L'additionneur préliminaire (58) peut recevoir d'autres produits que ceux qui ont été mentionnés ci-dessus, les autres étant acheminés vers des registres de transmission au troisième Otage. Les termes blt ou b22 peuvent être calculés par des multiplieurs au lieu d'être lus dans des tables en mémoire morte. Les termes a, bl, b2, b3 de l'opérande peuvent être définis par des mots de 5 bits seulement, ou au contraire 7 ou même 8 bits; alors les tables de données en mémoire sort (31) à 37), (41), (43), sont définies par des adresses de 5, 7 ou 8 bits. La transmission de certains registres du sous-ensemble (10) peut être bloquée, comme celle des registres du sous-ensemble (8), par certaines autres valeurs du code de test. les éléments complémentaires peuvent être ajoutés en aval du troisième étage, pour transformer ainsi les résultats du calcul et les présenter à la sortie directement selon la norme de représentation en virgule flottante à 32 bits. D'autres modifications de détail, non mentionnées ci-dessus, mais n'altérant pas les principes généraux exposés ci-dessus, peuvent être introduites dans les schémas du circuit. R E V E N D I C A T I O N S 1 Circuit intégré monolithique ou hybride, destiné à calculer au oins une fonction arithmétique d'un opérande numérique, caractérisé en ce qu'il comporte des mémoires mortes (6) dont les adresses sont constituées des bits de poids les plus forts de cet opérande, d'autres mémoires mortes (al) dont les adresses sont constituées des bits suivants de l'opérande dans l'ordre de poids décroissant, et qu'il comporte aussi un réseau (9) de multiplieure numériques. 2 Circuit intégré selon la revendication 1, dont les éléments sont répartie en plusieurs étages, l'un composé des éléments (5) à (7) et corportant l'ensemble des mémoires mortes, le suivant étant le roseau de multiplieurs (9), le suivant étant composé des éléments (11) et (12), caractérisé en ce que ces étages sont séparés entre eux par des sous ensembles (8) et (10) de registres pouvant transmettre simultanément tout ou partie de leurs données, respectivement des éléments (5) à (7) vers (9) par les registres (8) et des éléments (9) vers (11) et (12) par les registres 3 Circuit intégré selon les revendications 1 et 2, caractérisé en ce que le premier étage, qui comportre les mémoires mortes, comporte aussi au moins un multiplieur réalisant le produit de deux termes constitués par des parties successives de l'ensemble des bits de l'opérande, classés dans l'ordre de poids décroissant. 4 Circuit intégré selon les revendications 1 et 2, caractérisé en ce que les registres du sous-ensemble (8) sont réalisés de sorte que la transmission de leurs données vers le réseau de multiplieurs (9) peut être interrompue si un code de test est introduit sur les bornes d'entrée. 5 Circuit intégré selon les revendications 1 et 2, carecterise en ce que le réseau de multiplieurs (9) comporte au moins un multiplieur (89), réalisant un produit de termes de l'opérande par des données lues dans une des mémoires mortes (6), et au moins un multiplieur (84), réalisant un produit de données lues dans une des mémoires mortes (6) par des données lues dans des mémoires mortes (41). 6 Circuit intégré selon les revendications 1 et 2, caructérisé en ce que le sous-ensemble (9) comporte, en plus des multiplieurs, un additionneur (58) qui effectue en avance, et transmet à un registre (59) du sous ensemble (10), la somme des résultats de certains des multiplieur6 du réseau (9 > , au lieu de transmettre séparément ces résultats å des registres distincts dans le sous-ensemble (10 > .