BINARY MULTIPLIER WITH SIGN EXTENSION FOR THE MULTIPLICATION OF SIGNED AND UNSIGNED NUMBERS

Abstract: 1. Binary multipier comprising a plurality of decoders (D1, D2...) each receiving two bits of the multiplicator (Y) and eventually a carry-over issued from a decoder of inferior order, each decoder supplying control signals (C0 , Cx , Cxm , C2x ) intended to define, for two given bits of the multiplicator, a partial product among four possible ones 0, X, -X or 2X to be added to the partial products corresponding to the bits of inferior order of the multiplicator, a partial product being added to the preceding ones in a row of elementary adders (A20 , A21 ...) receiving the outputs of a row of change-over elements (PP30 , PP31 ...) controlled by the signals issued from a decoder (D2) associated with this same row and this partial product (P3), the adders further receiving the outputs of adders (A10 , A11 ...) of a preceding row (D1, D2), characterized in that each decoder further comprises a sign extension module (XST1, XST2...) receiving the most significant bit (x15 ) of the multiplicand (X) and receiving a signal (TCX) indicating the mode of representation, signed or unsigned, of the multiplicand, this module supplying a signal (T1, T2,...) applied to an input, associated with a number to be added, of an elementary adder (A116 , A215 ...) of the row corresponding to the following decoder (D2, D3...) of the multiplicand.

Description: PIULTIPLIEUR BINAIRE AVEC EXTENSION DE SIGNE POUR LA MULTIPLICATION DE NOMBRES SIGNES OU NON SIGNES La présente invention concerne les multiplieurs binaires. Le principe de la multiplication de nombres binaires est classique : le multiplicande est multiplié par le chiffre de poids le plus faible du multiplicateur, puis par le chiffre de poids inr médiatement supérieur, et ainsi de suite jusqu'au poids le plus fort ; il en résulte à chaque fois un produit partiel, et les dif férents produits partiels sont additionnés avec un décalage latéral d'un chiffre vers la gauche entre chaque produit partiel et le suivant. La somme de tous les produits partiels progressivement décalés constitue le résultat de la multiplication. Cependant, pour augmenter la vitesse de multiplication, on prévoit généralement de réduire le nombre de produits partiels à additionner, en regroupant les bits du multiplicateur selon un décodage approprié. Dans une variante de l'algorithme de Booth, on ne génère que l+n/2 produits partiels au lieu de n pour un multiplicateur à n chiffres, chacun de ces produits partiels ayant comme valeurs possibles non pas simplement O ou X (X étant le multiplicande) mais 0, X, -X ou 2X. tes produits partiels réalisés peuvent dont être positifs ou négatifs. S'ils sont négatifs, on utilisera pour les représenter la convention dite du complément à deux òù le bit de poids le plus fort est égal à 1 et est affecté d'un signe négatif, tandis que les autres bits sont affectés d'un signe positif. Lorsqu'on fait une multiplication binaire en additionnant successivement plusieurs produits partiels progressivement décalés à gauche, il ne faut pas oublier de procéder à ce que l'on appelle une extension de signe des nombres négatifs. Cette extension de signe consiste à répéter le bit de signe vers la gauche pour ne pas fausser le résultat de l'addition par un bit de signe qui ne serait pas à la position de poids le plus fort du résultat de l'addition. Ainsi, la multiplication suivante du multiplicande signe X = 1011 (X = -5) par un multiplicateur Y = 0101 (Y = +5) conduit à un résultat faux si on l'écrit sans extension de signe 1 0 1 1 (-5) x O 1 O 1 (+5) 1011 0000 1011 0000 O l i O 1 1 1 (+55) résultat faux. La multiplication doit s'écrire avec extension de signe comme cidessous 1 O 1 1 (-5) x o l O l (+5) 1111011 000000 11011 0000 1 1 1 O 0 1 1 1 -25) résultat juste. Pour effectuer une multiplication, il faudra donc tenir compte de ces bits supplémentaires dits d'extension de signe qui doivent etre ajoutés à la gauche des produits partiels successifs. Une première difficulté vient du nombre d'additionnneurs elementaires qui devraient être rajoutes pour prendre en compte ces bits dtextension de signe. Ce nombre est élevé pour une multiplication 16 bits par 16 bits, et il serait très souhaitable de le réduire au maximum. Une deuxième difficulté vient de ce qu'on souhaite effectuer des multiplications binaires avec des nombres signés ou non signés : le multiplicande X comme le multiplicateur Y peuvent être signés ou non signés et la signification de leur bit de poids le plus fort n'est pas la même selon qu'ils sont signés ou non. Par exemple 1101 représente -3 si on sait que c'est un nombre signé mais représente +13 si on sait que c'est un nombre non signé. On conçoit que l'extension de signe sera différente selon que le multiplicande X est signé ou non (cette extension de signe reste nécessaire même pour des nombres non signés car on réalise des produits partiels qui, eux, sont de toutes façons signes étant donné qu'il faut pouvoir réaliser soit X soit -X). La présente invention propose une structure de multiplieur telle que l'extension de signe soit prise en compte pour des nombres signés comme pour des nombres non signes, sans adjonction d'additionneurs supplémentaires par rapport à ceux qui sont de toutes façons prévus indépendamment de toute question d'extension de signe. Le multiplieur auquel s'applique la présente invention comprend une pluralité de décodeurs recevant chacun deux bits du multiplicateur (Y) et éventuellement une retenue issue du décodeur de rang immédiatement inférieur, chaque décodeur fournissant des signaux de commande définissant, pour deux bits donnés du multiplicateur, un produit partiel parmi quatre possibles 0, X, -X ou 2X (X étant le multiplicande) à additionner aux produits partiels précédents. L'addition d'un produit partiel aux précédents s'effectue dans une rangée d'additionneurs élémentaires recevant les sorties d'une rangée d'aiguillages commandés par un décodeur associé à cette même rangée et à ce produit partiel, les additionneurs recevant par ailleurs les sorties d'additionneurs de la rangée précédente. Selon l'invention, chaque décodeur commande également un module d'extension de signe qui reçoit le bit de plus fort poids du multiplicande et un signal indiquant le mode de représentation, signé ou non signé, du multiplicande, ce module fournissant un signal appliqué à une entrée d'un additionneur de la rangée correspondant au décodeur suivant. Plus précisément, le module fournit un signal (T1) qui peut prendre les valeurs suivantes en fonction du bit de plus fort poids (x15) du multiplicande et en fonction du produit partiel de fini par le décodeur qui commande ce module produit partiel : O multiplicande signé T1 = 1 : X " T1 = X15 produit partiel : -X multiplicande signé T1 = X15 produit partiel : O multiplicande non signé Tl = l : X X T1 = l 2 X .. .. T1 = O Dans tout ce qui suit l'astérisque indique le complément d'un nombre binaire. Le signal (Tl) fourni par le module d'extension de signe est appliqué à un additionneur recevant par ailleurs (pour les produits partiels 0, X, -X), le bit (x14) précédent le bit de plus fort poids du multiplicande. Pour tenir compte du cas ou le produit partiel défini par un décodeur est 2X, on prévoir de plus que le module d'extension de signe commande par ce décodeur fournit en fait deux signaux (T1 et U1), que le deuxième est nul sauf éventuellement si le produit partiel est 2X et que dans ce dernier cas, le premier signal est égal à x15* et le deuxième signal est égal à O (multiplicande signé) ou x15 (multiplicande non signe). Le premier signal est appliqué à l'avant-dernier additionneur de la rangée correspondant au décodeur suivant ; le second signal est appliqué au dernier additionneur de cette rangée. Ce dernier additionneur reçoit par ailleurs la sortie du dernier aiguillage de la rangée qui lui est associée (aiguillage fournissant le bit de plus fort poids xls, ou son complément, ou le bit immédiatement précédent, ou encore un niveau zero) ; enfin, ce dernier additionneur de chaque rangee reçoit sur une entree supplementaire un niveau logique "1". Pour terminer, il faut signaler qu'il est prévu en outre, pour la première rangee d'additionneurs, un module d'extension de signe supplementaire recevant le produit x15.y0 du bit de plus fort poids du multiplicande et du bit de plus faible poids du multiplicateur, ainsi que le signal indiquant si le multiplicande est signe, ce module fournissant des signaux appliques a des entrees de l'ante-penultième et de l'avant dernier additionneur de la premrere rangee. D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description détaillée qui suit et qui est faite en référence aux dessins annexés dans lesquels - la figure 1 représente schématiquement les éléments permettant l'addition des trois premiers produits partiels de la multiplication - la figure 2 represente la structure en rangées d'aiguillages et d'additionneurs, plus précisément à propos de l'addition du quatrième produit partiel aux précédents ; - la figure 3 représente la structure selon l'invention pour l'extension de signe - la figure 4 représente le module d'extension de signe supplémentaire de la première rangée d'additionneurs - la figure 5 représente la structure d'un nodule d'extension de signe normal d'une rangée quelconque. L'algorithme de multiplication utilisé met en jeu quatre produits partiels 0, X, -X, 2X òù X est le multiplicande à 16 chiffres xo à xl5. Cet algorithme consiste à examiner deux à deux les bits Yo à Y15 du multiplicateur Y et à engendrer, pour chaque groupe de deux bits consécutils, un produit partiel 0, X, -X ou 2X. En fait on engendre un premier produit partiel O ou X pour yO (selon que yO est égal à O ou 1), puis des produits partiels pour les groupes de deux bits successifs y1y2, Y3Y4 etc., Y13y14 et enfin un neuvième et dernier produit partiel pour Y15 (car Y15 joue un rôle particulier puisque c'est un bit de signe lorsque Y est un nombre signé). On doit noter que lorsque les produits partiels sont additionnés entre eux, il y a un decalage de deux crans à gauche d'un produit partiel au suivant puisque l'algorithme utilisé n'engendre qu'un produit partiel sur deux (sauf toutefois entre le premier et le deuxième produit partiel òù il n'y a qu'un cran de décalage). Si un groupe de deux bits a les valeurs suivantes : 00, 01, 10 ou 11, on comprend que le produit partiel à engendrer pour ce groupe doit être respectivement 0, X, 2X ou 3X ; en fait on considérera que 3X c'est -X + 4X et que 4X est équivalent à N sur le produit partiel suivant (puisque ce dernier est décalé de deux crans à gauche) ; on réalisera donc un produit partiel -X pour le groupe de deux bits considéré et on transmettra une sorte de retenue pour le groupe de deux bits immédiatement consécutif. S'il y a une retenue, le décodage des deux bits immédiatement consécutifs donnera alors les produits partiels suivants x+0 > X+X, X+2X ou X+3X, c'est à dire X, 2Xs 3X ou 4X selon que les bits ont les valeurs 00, 01, 10 ou 11. La encore 3X peut s'écrire -X +4X ; donc, les deux derniers cas (bits 10 ou 11) correspondront à un produit partiel -X ou O avec une retenue pour le décodage du groupe de bits suivant. Il y a donc propagation possible de la retenue de ce décodage d'un groupe au suivant. Autrement dit, le premier produit partiel à réaliser est O ou X selon que yO égale O ou l ; le second produit partiel est 0, X, 2X ou -X selon que Y1Y2 égale 00 ou 01 ou 10 ou 11 et dans le dernier cas il y a génération d'une retenue, les produits partiels suivants (du troisième au huitième) sont 0, X, 2X ou -X si le groupe de deux bits correspondants est 00, 01, 10 ou 11 et qu'il n'y a pas de retenue issue du décodage du groupe précédent les produits partiels en question sont au contraire égaux a X, 2X, -X ou O si le groupe de deux bits est 00, 01, 10 ou 11 et qu'il y a une retenue issue du groupe précédent ; enfin, le neuvième produit partiel a les valeurs possibles suivantes O ou X pour y15 = O ou 1 si Y est un nombre non signé et s'il n'y a pas de retenue du groupe précédent ; O ou -X pour y = O ou l si Y est un nombre signé et s'il n'y a pas de retenue du groupe précédent ; X ou 2X pour Yl5 = O ou 1 si Y est un nombre non signé et s'il y a une retenue du groupe précédent ; X ou O pour Y15 = O ou 1 si Y est un nombre signé et s'il y a une retenue. Toutes les indications précédentes permettent de construire un décodeur (Dl, D2, etc.) pour chaque groupe de deux bits et pour le bit y15 (décodeur inutile pour yO : il suffit d'une rangée de portes ET commandées par yO et les bits de X). Chaque décodeur reçoit un groupe de deux bits consecutifs de Y et, sauf pour le premier décodeur, la retenue du décodeur précédent ; chaque décodeur engendre quatre signaux de commande qu'on appellera CO, Cx, C2x > C2#,Cxm et une retenue pour le décodeur suivant ; les quatre signaux de commande ont pour fonction l'etablissement d'un produit partiel bien déterminé, respectivement 0, X, 2X ou -X pour le rang correspondant à ce décodeur. Un produit partiel de rang déterminé doit être additionné à la somme des produits partiels déjà additionnés entre eux, avec un décalage approprié vers la gauche (un cran entre le premier produit partiel PO et le second Pi, deux crans entre les produits partiels successifs Pi à P8). Il en résulte que le multiplieur a une structure en rangées successives d'additionneurs dont les sorties fournissent les produits partiels cumulés. ta première rangée d'additonneur (Al0 à Al17) a trois séries d'entrées pour recevoir respectivement les produits partiels PO, P1 et P2 > avec les décalages à gauche appropriés (un cran et deux crans). PO est égal à yO.X et est engendré par une série de portes ET commandées par le bit de plus faible poids yO du multiplicateur. Pi est égal à O ou X ou 2X ou -X selon la commande qui est active parmi les commandes C0, CxX C2xs Cxm issue du premier décodeur D1 (décodeur de y1y2). Pl est engendré par une première serie d'aiguillages PPlo, PPl1...PPlls commandes par le premier décodeur il. P2 est O ou X ou 2X ou -X selon la commande qui est active parmi les commandes C0, Cx, C2x, Cxm du deuxième décodeur D2 (décodeur de y3y4) ; P2 est engendré par une deuxième série d'aiguillages PP20, PP215 commandes par le deuxième decodeur D2. Ainsi de suite, chaque produit partiel est engendré par une série d'aiguillages commandés par un décodeur associé a ce produit partiel. La première rangée d'additionneurs doit additionner les trois premiers produits partiels PO, P1 et P2. Les sorties des portes ET sont appliquées à une première série d'entrées des additionneurs. Les sorties des aiguillages de la première série d'aiguillages sont appliquées à une deuxième série d'entrées et les sorties des aiguillages de la deuxième série sont appliquées à une troisième série d'entrées des addtionneurs. Si la commande CO issue d'un décodeur est active, le produit partiel à réaliser est O ; les aiguillages de la série correspondante transmettent des bits O sur les entrees correspondantes des additionneurs. Si la commande Cx est active, le produit partiel à réaliser est X ; les aiguillages dirigent les bits xi du multiplicande vers les entrées appropriées des additionneurs ; si la commande C2x est active, il faut additionner 2X ; les aiguillages dirigent non pas xi mais xi¯1 vers les additionneurs car le terme 2X est l'équivalent du terme X décalé d'un cran à gauche. Enfin, si la commande Cxm est active, il faut additionner -X , ce que l'on fera en considérant que -X s'écrit X*+l dans la notation en complément à deux des nombres signés (X* est le complément de X) ; d'une part on appliquera un nombre 1 (par exemple la commande Cxm elle-même) sur une entrée de retenue d'un addtionneur de position O (A10 si c'est le produit partiel P1 qui est égal à -X, A20 si c'est le produit partiel P2) ; d'autre part les aiguillages dirigeront vers les entrées des addtionneurs les compléments xi* des bits xi. Pour préciser complètement cette structure, on peut prendre le cas d'un additionneur de position i (Ali) de la première rangée. Cet additionneur reçoit sur sa première entrée (correspondant au produit partiel PO) le terme YO-si+lw Il reçoit sur sa deuxième entrée (produit partiel P1) un terme issu d'un aiguillage de position i (pli) de la première série d'aiguillages. Ce terme est O ou xi ou xi¯1 ou xi* selon que le produit partiel Pi à réaliser est O-ou X ou 2X ou -X. Il reçoit enfin sur sa troisième entrée (sauf pour i plus petit que 2) un terme correspondant au produit partiel P2, issu d'un aiguillage de position i-2 (PP2i¯2) de la deuxième série d'aiguillages. Ce terme est O ou xi-2 ou xi-3 ou xAi-2 selon que le produit partiel P2 à réaliser est O ou X ou 2X ou -X. Cet additionneur de position i (Ali) a une sortie somme représentant les trois premiers produits partiels cumulés et une sortie retenue qui est envoyée à 11 additionneur de position i-l de la deuxième rangée d'additionneurs (A2i-1). La sortie somme est envoyée à la première entrée de l'additionneur de position 1-2 de la deuxième rangée (A2i¯2). Ptur i=O la sortie somme constitue un résultat partiel de multiplication (bit rl du résultat XY, le bit r0 étant simplement xO.yO) et la sortie retenue est envoyée à la deuxième entrée de l'additionneur de position 1 de la première rangée (Al1) ; ; pour i=l, la sortie somme constitue un autre résultat partiel (bit r2 du résultat R). Lorsque P1 doit être égal à 2X (C2x actif pour le premier décodeur D1, l'aiguillage de position 0 de la première série (PPl0) dirige un bit zéro sur la deuxième entrée de l'additionneur de position O de la première rangée (A10) ; lorsque P2=2X (C2x actif pour le deuxième décodeur D2, l'aiguillage de position O de la deuxième série (PP20) dirige un bit zero vers la troisième entrée de l'additonneur de position 2 (A12). Lorsque P1 = -X, la commande Cxm du premier décodeur (D1) est utilisée pour appliquer un bit "un sur la troisième entrée de l'additionneur de position 0 de la première rangée (AI0). Lorsque P2 = -X, la commande Cxm du deuxième décodeur (D2) etablit un bit "un" sur la troisième entrée de l'addtionneur de position O de la deuxième rangée d'additionneurs (A20). Pour terminer la description de la première rangée d'additonneurs, il faut préciser qu'il est prévu des additonneurs de position 16 et 17 (18 additonneurs au total par rangée pour un multiplicande à 16 bits). L'additionneur de position 16 (A116) reçoit la sortie de l'aiguillage de position 14 (PP214) de la deuxième série l'additionneur de position 17 (AI17) reçoit la sortie de l'aiguillage de position 15 (PP215) de la deuxième série, donc un bit O ou xl4 ou x15 ou x15*. En ce qui concerne le reste de la structure du multiplieur il se compose de rangées successives d'aiguillages (pour l'élaboration des produits partiels successifs P3, P4, etc.) et de rangées d'additionneurs correspondant à ces rangées d'aiguillages. Cette structure est représentée à la figure 2 pour les première et seconde rangées d'additionneurs. Une rangée d'additionneurs reçoit sur une première série d'entrées les sorties sommes des additionneurs de la rangée précédente (avec un décalage de deux crans à gauche) ; sur une deuxième série d'entrées les sorties retenues des additionneurs de la rangée précédente (avec un décalage d'un cran), et sur une troisième série d'entrées les sorties des aiguillages correspondant à la meme rangée d'additionneurs (avec un décalage de deux crans à droite). Autrement dit, l'additionneur de position i (42i) reçoit la sortie somme de l'addtionneur de position i+2 de la rangée précédente (Ali+2), la sortie retenue de l'additionneur de position ltl de la rangée précédente (A1ifl), et la sortie de l'aiguillage de position i-2 de la meme rangée (aiguillage PP3i¯2) qui transmet donc des bits O ou xi¯2 ou X*i-2 ou xi¯3 selon la commande active pour le décodeur D3 de la rangée correspondante). Pour chaque rangée, l'additionneur de position O (AZo par exemple) reçoit sur son entrée de retenue la commande Cxm issue du décodeur D2 correspondant à la rangée précédente. Il fournit sur sa sortie somme un bit de résultat de la multiplication (r3) et sa sortie retenue est reliée à entrée de retenue de l'additionneur de position 1 (A21) de la même rangée. Ce dernier fournit aussi un bit de résultat de la multiplication (r4) sur sa sortie somme. L'essentiel de la structure du multiplieur peut être établi à partir des indications qui précèdent. Les aiguillages peuvent facilement être réalisés sachant ce qu'ils doivent transmettre (0 ou xi ou xi¯l ou xi*) en fonction des commandes qu'ils reçoivent. Il reste à réaliser l'extension de signe. Pour un multiplieur 16 bits par 16 bits, cela nécessiterait normalement non pas 18 additionneurs (positions O à 17) par rangée mais plutôt 32 pour la première rangée, 30 pour la deuxième rangée, puis 28, 26, etc. L'invention résulte de la remarque que l'on peut remplacer les bits de signe à étendre par des valeurs qui résument la totalité de l'influence de l'extension de signe sur le résultat de la multiplication, et qu'on peut appliquer ces valeurs non pas sur des additionneurs supplémentaires mais sur les entrées libres des additionneurs de position 16 et 17 de chaque rangée. En effet, la structure qui a été décrite en référence aux figures 1 et 2 montre que les additionneurs de position 16 possèdent une entrée inutilisée et ceux de position 17 possèdent deux entrées inutilisées. De plus, pour la première rangée, on a même deux entrées inutilisées pour l'additonneur de position 16 et une pour 11 additionneur de position 15. Les valeurs à rajouter pour tenir compte de l'extension de signe dépendent - de la valeur du bit x15 du multiplicande ; - du fait que ce bit est un bit de signe ou non (multiplicande signé ou non signé) - de chaque produit partiel à réaliser 0, X, -X ou 2. Ces valeurs sont élaborées, pour chaque rangée d'additionneurs, par un module d'extension de signe, qui est commandé par les commandes CO, Cxs C2x, Cxm issues du décodeur correspondant à la rangée d'additonneurs précédente : par exemple, le décodeur D3 des bits Ysys commande la formation du produit partiel P3 qui sera appliqué aux troisièmes entrées de la deuxième rangée d'additionneurs (A2i). Le module d'extension de signe commandé par ce même décodeur D3 établira des signaux à appliquer aux entrées des additionneurs de position 16 (essentiellement) et 17 (accessoirement) de la troisième rangée d'additionneurs. On verra qu'on prévoit un module d'extension de signe pour chaque produit partiel, en pratique un module pour chaque rangée d'additionneurs et deux modules pour la première rangée d'additionneurs. On peut montrer mathématiquement que, si on appelle SO, Si et S2....S8 les bits de signe à étendre pour les neuf produits partiels PO à P8 (produits partiels qui sont tous des nombres de 16 bits), on peut résumer l'influence de l'extension de signe de tous ces produits partiels en ajoutant au résultat de la multiplication erronnee, faite sans extension de signe, la valeur suivante (5o*+1)216 + Sl*217 + 1.218 + S2*219+.... +1.230 + S8*.231 (1) Or, la sortie somme de l'additionneur de position 15 de la première rangée (Al15) représente un terme de poids 216 et celle de l'additionneur de position 16 un terme de poids 217. (So*+l) 216 peut s'écrire (SO*+SO*+sO) 216, soit S0*217+S0216. On se sert de ces additionneurs, qui ont des entrées inutilisées, pour réaliser l'addition du terme (S0*+1)216. On réalise alors un premier module d'extension de signe XSTO, recevant : - le bit de poids le plus fort x15 du multiplicande et le bit de poids le plus faible yO du multiplicateur (ou bien recevant simplement yoxlf qui par ailleurs est appliqué à une entrée de l'additionneur A114) ; - un signal TCX indiquant si le multiplicande X est signé. Ce module d'extension fournit un signal SO appliqué à une entrée de l'additionneur A115 et un signal So* appliqué à une entrée de l'additionneur A116 (en fait, on pourrait prévoir un seul signal S0 sans son complément dans le cas où les additionneurs sont conçus pour avoir une entrée inversée c'est à dire lorsque l'additionneur recevant deux signaux a et b effectue en fait par construction la somme a*+b et non a+b). Si TCX = 1 (multiplicande X signé), alors le signe à étendre est le bit de poids fort du produit partiel PO, donc S0 est égal à X15 Yo- Si TCX = O, (multiplicande X non signés alors le signe à étendre est 0 ; So = O. La figure 3 montre l'ensemble des circuits d'extension de signe selon l'invention, et notamment le premier module XSTO. Le détail de ce module est visible à la figure 4. Le signal TCX et son inverse TCX* commandent chacun un transistor NOS dont l'un permet la transmission d'un zéro (Vss) à la sortie SO et l'autre la transmission de x15.yO. La sortie So peut être inversée par un inverseur pour produire So* si cela est nécessaire. Revenant à la figure 3, on réalise l'addition du terme Sl*217 par un signal appliqué à une entrée inutilisée de l'additionneur de position 16 de la première rangée (A116) puisque la sortie somme de cet additionneur a justement un poids 217. Ce signal est obtenu à partir d'un module d'extension de signe XST1 relatif au produit partiel P1. Ce module reçoit le bit x15 et le signal TCX indiquant si ce bit est un bit de signe ou non. De plus, comme la valeur du signe à étendre S1, donc du terme S1*, dépend de la valeur du produit partiel P1 qui est O ou X ou 2X ou -X, le module d'extension de signe XST1 reçoit les comnandes CO, Cx, C2x et Cxm correspondant au produit partiel P1 donc issus du premier décodeur D1. On verra plus loin comment on calcule le terme S1*. Cependant on peut déjà donner la précision suivante le module d'extension de signe XST1 devrait fournir uniquement un signal S1* appliqué à l'additionneur A116, la valeur de S1* dépendant du fait que le multiplicande est signé (TCX = 1) ou non signé (TCX = 0) ; en fait, on préfère, pour des raisons pratiques, élaborer par le module d'extension de signe deux signaux Tl et U1 dont le premier est appliqué à la dernière entrée libre de l'additionneur A116 et dont le second est appliqué à une entrée libre de l'additionneur Al17. la raison de cette disposition est le fait qu'il faut prévoir le cas ou le produit partiel P1 est égal à 2X car dans ce cas il faut rajouter un terme xls.2l7 au terme S1* 217. Avant de rentrer plus avant dans ces détails pratiques, on vérifie donc sur la figure 3 que le module d'extension de signe XST1 fournit les signaux T1 et U1 appliqués aux additionneurs A116 et Al17. Pour l'addition du terme 1.218 de la somme (1), on applique simplement un 1 à la dernière entrée libre de l'additionneur A117 (dont la sortie somme a un poids 218). De la même manlère on réalise les termes 1.220? 1.222 etc... par un bit 1 appliqué à une entrée des additionneurs de dernière position des autres rangées, à savoir les additionneurs A217, A317...etc. A717 dont les sorties somme correspondent effectivement à des poids respectifs 220 222 etc...230. De la même manière aussi, on réalise l'addition des termes S2*.219, S3*221...S8*231, chacun par un nodule d'extension de signe respectif XST2, xST3...XST8, commandé respectivement par les sorties du décodeur correspondant D2, D3...D8 et fournissant chacun deux signaux (T2, U2), (T3, U3)...(T8, U8) appliqués aux deux derniers additionneurs de chaque rangée. Par exemple, comme on le voit sur la figure 3, le module XST2 fournit un signal T2 à une entrée de l'additionneur A216 et un signal U2 à une entrée de l'additionneur A2l7. En revenant a l'élaboration des signaux issus de chaque module d'extension de signe, il faut étudier le tableau des valeurs possibles du signe à étendre. Prenant par exemple le signe S1 du produit partiel P1, on a les cas possibles suivants : en fonction des valeurs de X15 et du produit partiel Fl. 1. Multiplicande X signé (TCX = 1) 1.1 P1 = O alors S1 = O S1* = 1 1.2 P1 = X alors S1 = x15 S1* = x15* 1.3 P1 = -X alors Si = xl5* S1* = x15 1.4 P1 = 2X alors S1 = x15 Sl* = xl5* 2. Multiplicande X non signé (TCX = O) 2.1 P1 = O alors S1 = O S1* = 1 2.2 P1 = X alors S1 = O S1* = 1 2.3 P1 = -X alors S1 = 1 S1* = O 2.4 P1 = 2X alors S1 = 0 S1* = 1 La dernière colonne représente le terme à rajouter sur l'avant-dernier additionneur (Al16 pour la première rangée). Mais, pour les cas où Pi = 2X, il faut en plus rajouter sur cet additionneur un terme égal à x15 car, si on regarde bien la figure 3, on voit que dans le cas où P1 = 2X, on décale, par les aiguillages PPl0 à PPl15, les bits du multiplicande d'un cran vers la gauche du bit xO au bit X14 mais que le bit x15 disparaît car il n'y a pas d'aiguillage PPl16 de position 16. C'est le module d'extension de signe (XST1 en l'occurence) qui tient lieu de cet aiguillage manquant D'autre part, lorsque P1 = 2x, il faut aussi retrancher 51.217 à l'équation (1) car l'extension du signe Si ne commence alors qu'à la puissance 18 et non à la puissance 17 du fait du décalage d'un cran à gauche. Ainsi, lorsque P1 = 2x, il faut rajouter un terme S1* + x15 - S1 au poids 217 donc sur l'additionneur All. Si le multiplicande est signé, Slft = x15* ; le terme à rajouter est x15*. Si le multiplicande n'est pas signé, S1* = l ; le terme à rajouter est 1 + x15. Il faut donc rajouter soit x15* (multiplicande signé) soit x15 + 1 (multiplicande non signé) sur l'additonneur Al16¯ Comme il n'y a qu'une entrée disponible, on ne peut pas facilement additionner x15 + 1. On considère alors dans ce dernier cas que x15 + 1 = x15+(x15+x15*) =2x15 + x15* et on rajoute x15* sur l'additionneur d'avant dernière position A116 (comme lorsque le multiplicande est signé) et x15 sur l'additionneur de dernière position Al17, ce qui réalise bien la somme 2x15 1 x15* sur le poids 217. Les explications qui précédent font comprendre la raison pour laquelle le module d'extension de signe XST1 (et bien entendu les autres aussi) fournit non pas un seul signal qui aurait la valeur S1* et qui serait appliqué à l'additionneur A116 mais deux signaux dont l'un, T1, appliqué à l'additionneur Al16, a essentiellement une valeur égale à S1* pour P1 = O, P1 = X et Fl = -X mais a une valeur x15* pour P1 = 2X (multiplicande signé ou non signé) et dont l'autre, U1, appliqué à l'additionneur A117, a une valeur nulle sauf pour P1 = 2X et TCX = 0 auquel cas Ul = xl. En résumé, la table de vérité pour l'élaboration des signaux T1 et U1 est la suivante Commande TCX T1 U1 C0 = 1 1 1 0 Cx =1 1 x15* 0 Cxm = 1 1 x15 0 2x = 1 1 X15* 0 C0 = 1 0 I 0 Cx =1 O 1 0 C =1 0 0 0 xm C2x = 1 0 x15* X15 Cette table est la même pour les modules d'extension de signe XST1 à XST8. Là encore, comme pour le module XSTO, on peut très bien concevoir que les modules fournissent non pas T1 et U1 tels que définis ci-dessus mais par exemple T1 et U1* Si l'additionneur A117 possède une entrée inversée telle que pour additionner U1 il faille entrer U1*. La figure 5 représente le schéma du module d'extension de signe XST1, les autres étant identiques. Ce schéma est simplement la traduction de la table de vérité ci-dessus. Vss correspond un niveau logique "0" et Vdd à un niveau "1 . Le module reçoit non seulement TCX mais aussi TCX* pour éviter de prévoir un inverseur dans chaque module, et de même il peut recevoir x15 et x15*.

Claims: REVENDICATIONS 1. Multiplieur binaire comportant une pluralité de décodeurs (D1, D2...) recevant chacun deux bits du multiplicateur (Y) et éventuellement une retenue issue d'un décodeur de rang inférieur, chaque décodeur fournissant des signaux de commande (C0, Cx, Cxm, C2x) destinés a définir, pour deux bits donnés du multiplicateur, un produit partiel parmi quatre possibles o, X, -X ou 2X à additionner aux produits partiels correspondant aux bits de rang inférieur du multiplicateur, l'addition d'un produit partiel aux précédents s'effectuant dans une rangée d'additionneurs élémentaires (A20, A2î...) recevant les sorties d'une rangée d'aiguillages (PP30, PP31...) commandés par les signaux issus d'un décodeur (D2) associé à cette même rangée et à ce produit partiel (P3), les additionneurs recevant par ailleurs les sorties d'additionneurs (Al0, Al1...) d'une rangée précédente, (D1, D2) caractérisé en ce que chaque décodeur commande également un module d'extension de signe (XST1, XST2...) recevant le bit de poids le plus fort (x15) du multiplicande (X) et recevant un signal (TCX) indiquant le mode de représentation, signé ou non signé, du multiplicande, ce module fournissant un signal (TI) appliqué à une entrée d'un additionneur (AI16, A2l5. ..) de la rangée correspondant au décodeur suivant (D2, D3...) du multiplicande. 2. Multiplieur binaire selon la revendication 1, caractérisé en ce que le module d'extension de signe (XST1) four nit un signal (T1) qui peut prendre les valeurs suivantes en fonction du bit de plus fort poids (x15) du multiplicande (X), du signal TCX et du produit partiel commandé par le décodeur correspondant à ce module, ce signal étant appliqué a une entrée d'un additionneur (Al16) Produit partiel : O multiplicande signé Tl = 1 N : X " " T1 = : -X Tl = x15 : O multiplicande non signé T1 = 1 Produit partiel : X Hultiplieur non signé T1 = i x n Tl = O 3. Multiplieur binaire selon la revendication 2, caractérisé en ce que le module d'extension de signe (XSTI) fournit deux signaux (T1 et U1) appliqués respectivement à l'avantdernier (Al16) et au dernier (A117) additionneur de la rangée correspondent au décodeur (D2) qui suit immédiatement le décodeur (D1) commandant le module d'extension de signe (XST1), en ce que le deuxième signal (U1) est nul sauf éventuellement lorsque le décodeur commandant le module indique que le produit partiel # réaliser est 2X, et en ce que dans ce dernier cas le signal T1 est égal à xl5* et le signal U1 est égal à O (multiplicande signé) ou xls (multiplicande non signé), x15 étant le bit de plus fort poids du multiplicande. 4. Multiplieur binaire selon la revendication 3, caractérisé en ce que le dernier additionneur de chaque rangée, recevant le deuxième signal (U1, U2...) issu du module d'extension de signe correspondant au décodeur de la rangée précédente, reçoit par ailleurs - d'une part, venant du dernier aiguillage de la rangée correspondant à cet additionneur, le bit de plus fort poids (x15) de multiplicande ou son complément lorsque le produit partiel à additionner dans cet additionneur est X ou -X, ou le bit précédent (x14) lorsque le produit partiel est 2X ; - et d'autre part, un niveau logique "1". 5. Multiplieur binaire selon l'une des revendications 1 à 4, caractérisé en ce qu'il est prévu en outre pour la première rangée d'additionneurs un autre module d'extension de signe (XsTO) recevant le produit (xls.yO) du bit de plus fort poids du multiplicande et du bit de plus faible poids du multiplicateur, ainsi que le signal (TCX) indiquant si le multiplicande est signé ou non, ce module fournissant deux signaux complémentaires (S0 et S0*) appliqués l'un a l'ante-pénultieme additionneur de la première rangée, l'autre à l'avant-dernier additionneur de cette première rangée, le signal So ayant la valeur dudit produit.

Inventors: MOUGEAT, PAUL, PICCO, ANDRE, Picco, André
Applicants: SOCIETE POUR L'ETUDE ET LA FABRICATION DE CIRCUITS INTEGRES SPECIAUX - E.F.C.I.S.
Application year: 1984
Main classification: G06F7
IPC codes: G06F7