FR 3142583 A1 20240531 FR 2212440 A 20221128 Méthode et circuit de réalisation d’opérations de multiplication et d’accumulation en mémoire Méthode de réalisation d’opérations de multiplication et d’accumulation en mémoire dans laquelle on détermine le résultat du produit matriciel d’un vecteur ayant éléments représentés chacun sur ) bits et d’une matrice W = composée de éléments représentés chacun sur bits, chaque élément du produit matriciel étant la somme de produits scalaires , , i ∈ {1, ..., }, j ∈ {1, ..., }, lesdites opérations conduisant au produit scalaire en appliquant à des portes logiques les valeurs desdits vecteurs et celles de masques temporels associés PX et PW de sorte à générer au moins un signal de commande SC d’au moins une source de courant, le signal de commande SC activant ladite au moins une source de courant de façon à accumuler des charges capacitives dans une ligne d’accumulation. Figure pour l’abrégé : Fig. 14 Méthode et circuit de réalisation d’opérations de multiplication et d’accumulation en mémoire La présente invention concerne le domaine du calcul en mémoire, et concerne plus particulièrement une méthode de réalisation de multiplication et d’accumulation en mémoire et un circuit associé, notamment pour un réseau de neurones où l’opération de base pour un perceptron est la multiplication et l’accumulation (MAC). L'émergence de l'internet des objets crée une demande croissante de solutions informatiques à ultra-basse consommation pour apporter de l'intelligence artificielle à de tels appareils. Le surcoût de consommation empêchant l'apprentissage automatique sur les systèmes embarqués provient de la consommation due aux mouvements de données. Dans une architecture « Von Neumann » classique, il faut déplacer les données stockées de la mémoire au processeur pour les calculer pas à pas. Dans l’exemple donné à la publication Boris Murmann “Mixed-Signal Processing Opportunities for AI”, pour réaliser une opération MAC (une multiplication et une addition), il faut récupérer les données de la mémoire quatre fois. En prenant le coût d'accès aux seules données et en estimant cet accès à 50fJ/octet, la consommation globale est de 200fJ/MAC, plafonnant l’efficacité à 10 TOPS/W. Une façon d'alléger cette contrainte, que l'on appelle le mur de la mémoire (« memory wall » en anglais) ou le « goulot d'étranglement de Von Neumann », est d'amener les éléments de traitement (« processing elements » en anglais) à l'intérieur de la mémoire afin d’éviter une perte d'énergie en accédant aux données. Le calcul en mémoire (« in-memory computing » en anglais) est une technique consistant à exécuter des calculs informatiques entièrement dans la mémoire de l'ordinateur. Le traitement en mémoire est une méthode pour résoudre les inconvénients, notamment en termes de performances et de coût énergétique, causés par le déplacement des données entre le processeur et la mémoire. La présente le principe du calcul en mémoire d’opérations MAC dans l’art antérieur. Un vecteur numérique [X 1 , ..., X m ] est diffusé sur plusieurs lignes. La multiplication de ce vecteur par des éléments d’une matrice de poids W s’effectue à l'intérieur de la mémoire où la matrice de poids W est stockée. L'accumulation, dans le domaine du courant ou de la tension, s’effectue au niveau de chaque colonne dans une ligne capacitive, également appelée ligne d'accumulation AL. Cette méthode à signaux mixtes produit le résultat des opérations MAC en analogique, un convertisseur analogique-numérique A/D au bout de chaque ligne d'accumulation AL convertissant le résultat en numérique, représenté par le vecteur [O 1 , ..., O n ], afin que ce résultat soit réutilisable. Chaque ligne d'accumulation AL est l’équivalent d’un perceptron sans la fonction d'activation. Il existe différentes approches dans l’art antérieur pour effectuer un tel calcul en mémoire. Dans une approche résistive illustrée à la et faisant l’objet de l’article Q. Liu et al. « A Fully Integrated Analog ReRAM Based 78.4 TOPS/W Compute-In-Memory Chip with Fully Parallel MAC Computing » , des memristors sont utilisés pour effectuer la multiplication. Le vecteur X est envoyé sous forme de tension analogique sur toutes les lignes. Les poids W sont stockés en tant que valeurs de conductance des memristors, modulant le courant à travers chaque ligne d’accumulation AL. Cependant, cette approche nécessite des convertisseurs numérique-analogique avec des courants en sortie d’intensité importante et un comparateur de courant. Il est possible d'effectuer des opérations multi-bits avec cette approche en utilisant jusqu'à 16 états de conductance, selon l’article susmentionné. Les variations de processus empêchent d'atteindre un nombre de bits supérieur. De plus, en termes de dissipation d'énergie, l'écriture nécessite des pics de courant importants (de l'ordre de 6μA dans la publication Nguyen Cong Dao et al. “ Memristor- based Reconfigurable Circuits: Challenges in Implementation ”). Il est à noter qu'un compromis existe entre la consommation d'énergie et la variabilité. Dans une approche capacitive illustrée à la et faisant l’objet de la publication D. Bankman et al. « An 8-bit, 16 input, 3.2 pJ /op switched-capacitor dot product circuit in 28-nm FDSOI CMOS » , la multiplication est basée sur le partage de charges ou de courants sur une ligne capacitive, en utilisant généralement des portes XNOR pour la multiplication binaire. Les condensateurs unitaires sont chargés en fonction de chaque multiplication binaire et les charges sont redistribuées sur tous les condensateurs au niveau d'une ligne d’accumulation AL, ce qui donne une tension à convertir par le convertisseur analogique-numérique. Pour effectuer une opération multi-bits avec des condensateurs commutés, l’article Boris Murmann “ Mixed-Signal Computing for Deep Neural Network Inference ” montre une topologie similaire à un multiplicateur numérique utilisant une ligne d’accumulation pour chaque bit. Cependant, cette méthode nécessite des circuits supplémentaires pour combiner tous les résultats de la ligne, ce qui est suffisant pour un nombre réduit de lignes ( Il existe donc un besoin pour perfectionner les techniques de multiplication et d’accumulation (MAC) en mémoire, notamment en termes de consommation énergétique. Méthode de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire L’invention vise à répondre à cet objectif et a pour objet, selon l’un de ses aspects, une méthode de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire, notamment pour un réseau de neurones, dans laquelle on détermine le résultat du produit matriciel d’un vecteur composé de éléments représentés chacun sur ) bits et d’une matrice W = composée de éléments représentés chacun sur bits : chaque élément du produit matriciel étant la somme de produits scalaires avec , i ∈ {1, ..., }, j ∈ {1, ..., }, avec le vecteur de bits et le vecteur de bits de poids , les opérations de multiplication et d’accumulation conduisant au produit scalaire en appliquant à un ensemble de portes logiques les valeurs des vecteurs et et celles de masques temporels associés, les masques temporels étant associés aux bits des éléments du vecteur et les masques temporels étant associés aux bits des éléments du vecteur , de sorte à générer au moins un signal de commande SC d’au moins une source de courant, le signal de commande SC activant ladite au moins une source de courant de façon à accumuler des charges capacitives dans une ligne d’accumulation, notamment de manière proportionnelle au produit scalaire . Par « la réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire », on entend l’exécution de ces opérations dans une mémoire de la puce électronique où sont stockées les opérandes et . Par « activer la source de courant », on entend permettre à ladite source de débiter un courant circulant dans la ligne d’accumulation. L’invention fournit une nouvelle méthode de calcul d’opérations MAC en mémoire en réduisant la puissance consommée. De préférence, l’un au moins des deux vecteurs est signé, étant le bit de signe du vecteur et/ou étant le bit de signe du vecteur de bits de poids , l’ensemble de portes logiques générant un signal de polarité SP = chargeant ou déchargeant la ligne d’accumulation. Les masques temporels sont préférentiellement générés sous forme d’impulsions. Les masques temporels PX et PW peuvent être générés par un bloc générateur de masques temporels situé hors mémoire, c’est-à-dire à l’extérieur de la mémoire de la puce électronique où sont stockées les opérandes et . Dans un mode de réalisation, les masques temporels sont générés de manière à s’activer successivement pendant une durée sensiblement égale à , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, les masques temporels étant générés de manière à s’activer successivement pour chaque pendant une durée sensiblement égale à T. Ce cas de figure correspond à la présence d’un seul signal de commande commandant une seule valeur d’intensité de courant en valeur absolue, en chargeant ou déchargeant la ligne d’accumulation, tel que : , avec i ∈ {1, ..., }, j ∈ {1, ..., }. Il y a ici une pondération par le temps d’activation de la source de courant. Dans ce cas de figure, la tension aux bornes de la ligne d’accumulation pour une opération de multiplication et d’accumulation peut être égale à : C étant la valeur de la capacité de la ligne d’accumulation et I l’intensité du courant de la source de courant. Notons que la capacité de la ligne d’accumulation peut être une capacité parasite et/ou distribuée. Dans le cas où au moins deux sources de courant sont présentes, chacune étant commandée par un signal de commande SC respectif, les masques temporels PW(d) peuvent être générés de manière à s’activer successivement pendant une durée sensiblement égale à T d = , avec d ∈ {0, ..., }, les ) bits de PW étant répartis en k intervalles k étant le nombre de sources de courant ou de signaux de commande, avec l ∈ {0, ..., }, , { étant choisis de telle sorte que l’ensemble des intervalles représente une partition de l’intervalle , l’intervalle le plus long étant [0 , ] , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, les masques temporels étant générés de manière à s’activer successivement pour chaque pendant une durée sensiblement égale à T. Ce cas de figure correspond à la présence de plusieurs signaux de commande commandant k sources de courant, en chargeant ou déchargeant la ligne d’accumulation, tels que : , l ∈ {0, ..., k-1}. Il y a ici une pondération par le courant, en ayant plusieurs sources de courant, pondérées par une puissance de deux et commandées par des signaux de commande représentatifs des valeurs des bits associés à cette pondération. Cela augmente avantageusement la vitesse de calcul en réduisant la durée des signaux de commande. Dans ce cas, la tension aux bornes de la ligne d’accumulation pour une opération de multiplication et d’accumulation peut être égale à : C étant la valeur de la capacité de la ligne d’accumulation et I l’intensité du courant de la source de courant de poids le plus faible (i.e. pour =0). Par exemple, dans le cas où et , il est possible de répartir les 4 bits équitablement entre les deux sources : Ou bien de répartir les bits non équitablement : Circuit de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire L’invention a encore pour objet, selon un autre de ses aspects, un circuit de réalisation d’opérations de multiplication et d’accumulation en mémoire, notamment pour un réseau de neurones, configuré pour déterminer le résultat du produit matriciel d’un vecteur composé de éléments représentés chacun sur ) bits et d’une matrice W = composée de éléments représentés chacun sur bits : chaque élément du produit matriciel étant la somme de produits scalaires avec , i ∈ {1, ..., }, j ∈ {1, ..., }, avec le vecteur de bits et le vecteur de bits de poids , le circuit comportant : - un bloc logique comportant des portes logiques auxquelles sont appliquées les valeurs des vecteurs et et celles de masques temporels associés, les masques temporels étant associés aux bits des éléments du vecteur et les masques temporels étant associés aux bits des éléments du vecteur , le bloc logique étant configuré pour générer en sortie au moins un signal de commande SC destiné à activer au moins une source de courant, et - ladite au moins une source de courant configurée pour être activée par le signal de commande SC de sorte à accumuler des charges capacitives dans une ligne d’accumulation. De préférence, l’un au moins des deux vecteurs est signé, étant le bit de signe du vecteur et/ou étant le bit de signe du vecteur de bits de poids , ladite ligne d’accumulation étant configurée pour être chargée ou déchargée en fonction d’un signal de polarité SP = ce signal SP étant notamment obtenu en sortie d’une porte logique XOR ou XNOR recevant en entrée le bit de signe et le bit de signe . Dans un mode de réalisation, le bloc logique comporte des portes logiques NAND et/ou NOR. Le bloc logique peut comporter un premier sous-bloc logique pour le masquage temporel des bits et un deuxième sous-bloc logique pour le masquage temporel des bits de poids , ces deux sous-blocs étant mis en cascade de sorte que les sorties du premier sous-bloc soient en entrée du deuxième sous-bloc. Le premier sous-bloc, recevant en entrée les masques temporels PX et PW ainsi que les bits , peut comporter deux étages de portes logiques : - un premier étage comportant plusieurs niveaux de portes logiques, les niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie, premier étage dans lequel chaque bit et le masque temporel PX associé sont en entrée d’une porte logique de premier niveau, notamment une porte NAND ou NOR ; et - un deuxième étage comportant au moins un niveau de portes logiques, dans lequel le signal en sortie du premier étage et chaque masque temporel PW sont en entrée d’une porte logique dudit niveau, notamment une porte NAND ou NOR. Le deuxième sous-bloc, recevant en entrée les signaux en sortie du premier sous-bloc et les bits de poids , peut comporter plusieurs niveaux de portes logiques, les niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie correspondant au signal de commande SC, chaque porte logique de premier niveau recevant en entrée un signal en sortie du premier sous-bloc et le bit de poids correspondant. Le deuxième sous-bloc peut comporter une porte XOR ou XNOR recevant en entrée le bit de signe du vecteur de bits et le bit de signe du vecteur de bit . Si le signe positif est interprété comme un ‘0’ binaire et le signe négatif comme un ‘1’ binaire, une porte XOR peut être utilisée pour les bits de signe. Si le signe positif est interprété comme un ‘1’ binaire et le signe négatif comme un ‘0’ binaire, une porte XNOR peut être utilisée pour les bits de signe. Dans un mode de réalisation, ladite au moins une source de courant est créée par des miroirs de courant utilisant des transistors CMOS. Les miroirs de courant comprennent préférentiellement des transistors PMOS pour charger la ligne d’accumulation et des transistors NMOS pour décharger ladite ligne. De préférence, les miroirs de courant ont une architecture cascodée. Ceci permet d’augmenter l’impédance de sortie des miroirs de courant et d’avoir une valeur de courant plus stable en dépit de la variation de la tension de la ligne d’accumulation. Dans un mode de réalisation, le circuit comporte au moins un interrupteur électronique, étant notamment une porte de transmission, commandé par le signal de commande SC pour l’activation de ladite au moins une source de courant. Le circuit peut comporter au moins un condensateur en sortie dudit au moins un interrupteur électronique pour augmenter la capacité de la ligne d’accumulation. Le circuit comporte préférentiellement une ligne d’accumulation secondaire connectée à la ligne d’accumulation par l’intermédiaire d’un amplificateur suiveur. Une telle ligne d’accumulation secondaire est destinée à piloter le courant. De préférence, le circuit comporte un amplificateur suiveur connecté entre la ligne d’accumulation et la ligne d’accumulation secondaire. Ceci a pour avantage de permettre que chacune des deux lignes d’accumulation reste au même niveau de tension dans le but de contrecarrer l'effet de partage de charges lorsque les interrupteurs s'ouvrent et se ferment. Dans un mode de réalisation, le circuit comporte un convertisseur analogique-numérique connecté soit directement à la ligne d’accumulation en l’absence de ligne d’accumulation secondaire, soit à la ligne d’accumulation secondaire notamment par le biais d’un amplificateur suiveur. Le convertisseur analogique-numérique peut comporter : - deux comparateurs analogiques, l’un comparant à +LSB et l’autre à -LSB la valeur de la charge de la ligne d’accumulation à laquelle le convertisseur analogique-numérique est connecté ; - un compteur configuré pour s’incrémenter ou décrémenter en fonction du résultat de la comparaison des comparateurs, et dont la sortie étant celle du convertisseur ; - un bloc injecteur de charges configuré pour ramener la charge de la ligne d’accumulation connectée au convertisseur à sa valeur initiale dans le cas où le compteur indique que cette ligne a été déchargée ; et - un bloc déchargeur configuré pour décharger la ligne d’accumulation connectée au convertisseur et la ramener à sa valeur initiale dans le cas où le compteur indique qu’elle a été chargée. Le convertisseur analogique-numérique peut comporter une table de correspondance (LUT : « Look Up Table » en anglais) recevant en entrée la sortie du compteur et étant configurée pour appliquer en sortie une valeur de substitution choisie lors de l’étalonnage et/ou correspondant à une fonction d’activation. Dans le cas notamment où les valeurs de la table LUT sont choisies lors de l’étalonnage, la sortie de la LUT agit via une boucle de rétroaction sur les valeurs des entrées de référence +LSB et -LSB des comparateurs analogiques et/ou sur le temps unitaire et/ou sur le courant unitaire. La table de correspondance peut permettre de corriger les non-linéarités du circuit ou de respecter toute autre forme de réponse. On peut agir sur le temps unitaire dans le cas où il existe un seul signal de commande contrôlant une source de courant. On peut agir sur le courant unitaire dans le cas où il existe plusieurs signaux de commande contrôlant plusieurs sources de courant générant un multiple de ce courant. On peut agir sur les valeurs des entrées de référence +LSB et -LSB dans l’un ou l’autre des cas susmentionnés. Cet étalonnage peut être effectué au moins une fois pour mesurer les non-linéarités du circuit, le calibrer et réduire l’erreur de sortie. Il est aussi possible, en choisissant des valeurs appropriées pour la LUT, d'imiter une fonction d'activation en intelligence artificielle, en ajustant la valeur d’un paramètre de la génération du signal de commande. Une fonction d'activation sert à modifier de manière non linéaire les données. Cela peut être une sigmoïde, ou Tanh, ou ReLU, etc. Elle représente notamment la réponse non linéaire prédéfinie que l’on cherche à obtenir. Dans un mode de réalisation, le circuit comporte un bloc générateur de masques temporels situé hors mémoire. Dans un mode de réalisation, le bloc générateur est configuré pour générer les masques temporels de sorte que les masques temporels PW(d) soient activés successivement pendant une durée sensiblement égale à , et que les masques temporels PX(c) soient activés successivement pour chaque pendant une durée sensiblement égale à T, T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible. Dans ce cas de figure, le circuit selon l’invention comporte préférentiellement une seule valeur d’intensité de courant en valeur absolue, commandée par un seul signal de commande SC. Dans un autre mode de réalisation, le circuit selon l’invention comporte au moins deux sources de courant, chacune étant commandée par un signal de commande SC respectif, le bloc générateur étant configuré pour générer les masques temporels de sorte que les masques temporels PW(d) soient activés successivement pendant une durée T d sensiblement égale à , avec d ∈ {0, ..., }, les ) bits de PW étant répartis en k intervalles k étant le nombre de sources de courant ou de signaux de commande, avec l ∈ {0, ..., }, , { étant choisis de telle sorte que l’ensemble des intervalles représente une partition de l’intervalle , l’intervalle le plus long étant [0 , ] , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, et que les masques temporels PX(c) soient activés successivement pour chaque pendant une durée sensiblement égale à T. L’invention a également pour objet, selon un autre de ses aspects, un ensemble de circuits de réalisation d’opérations de multiplication et d’accumulation MAC en mémoire, notamment pour un réseau de neurones, configuré pour déterminer le résultat du produit matriciel d’un vecteur par une matrice de poids W= comportant une pluralité de circuits selon l’invention mis en parallèle les uns avec les autres et partageant un seul bloc générateur de masques temporels situé hors mémoire. L’invention pourra être mieux comprise à la lecture de la description détaillée qui va suivre, d’exemples non limitatifs de mise en œuvre de celle-ci, et à l’examen du dessin annexé, sur lequel : la illustre schématiquement le principe du calcul en mémoire d’opérations MAC dans l’art antérieur ; la représente schématiquement un exemple de calcul en mémoire d’opérations MAC selon une approche résistive dans l’art antérieur ; la illustre schématiquement un exemple de calcul en mémoire d’opérations MAC selon une approche capacitive dans l’art antérieur ; la est une vue d’un circuit représentant schématiquement le principe du calcul en mémoire d’une opération MAC selon l’invention ; la rappelle l’équation du produit scalaire de deux vecteurs de 4 bits chacun ; la montre l’évolution temporelle des termes du produit scalaire de la ; la représente la courbe de l’évolution temporelle de la tension au niveau d’une ligne d’accumulation pendant un calcul de 100 MAC ; la illustre un premier exemple de chronogrammes de masques temporels ; la représente un deuxième exemple de chronogrammes de masques temporels ; la figure 10 illustre schématiquement un exemple de premier sous-bloc logique pour le masquage temporel d’un vecteur binaire à 4 bits ; la figure 11 représente schématiquement un exemple de deuxième sous-bloc logique pour le masquage temporel d’un vecteur binaire à 4 bits ; la figure 12 est analogue à la figure 8 et montre les détails d’une partie du produit scalaire desdits vecteurs et à partir des masques temporels ; la montre le chronogramme du signal de commande résultant d’une simulation du produit scalaire des vecteurs X et W donnée en exemple aux figures 10 à 12 ; la illustre schématiquement l’architecture d’un circuit selon l’invention ; la représente schématiquement un premier mode de réalisation de sources de courant pouvant être utilisées dans le circuit de la ; la illustre schématiquement un deuxième mode de réalisation de sources de courant pouvant être utilisées dans le circuit de la ; la représente schématiquement un exemple d’un interrupteur pouvant être utilisé dans le circuit de la ; la illustre schématiquement une ligne d’accumulation pouvant être utilisée dans le circuit de la ; la représente schématiquement une ligne d’accumulation et une ligne d’accumulation secondaire pouvant être utilisées dans le circuit de la ; la est similaire à la représentant en plus des interrupteurs connectés aux lignes d’accumulation ; la représente schématiquement un premier mode de réalisation d’un convertisseur analogique-numérique pouvant être utilisé dans le circuit de la ; la illustre schématiquement un deuxième mode de réalisation d’un convertisseur analogique-numérique pouvant être utilisé dans le circuit de la ; la représente schématiquement un troisième mode de réalisation d’un convertisseur analogique-numérique pouvant être utilisé dans le circuit de la ; la illustre schématiquement un exemple d’architecture d’un ensemble de circuits selon l’invention avec l’approche de pondération temporelle ; la représente schématiquement un exemple de circuit selon l’invention fonctionnant selon l’approche de pondération par le courant ; la illustre un premier exemple de chronogrammes de masques temporels pouvant être utilisés pour le circuit de la ; la représente schématiquement un premier exemple d’architecture d’un ensemble de circuits selon l’invention avec l’approche de pondération par le courant ; la illustre un deuxième exemple de chronogrammes de masques temporels pouvant être utilisés pour le circuit de la ; et la représente schématiquement un deuxième exemple d’architecture d’un ensemble de circuits selon l’invention avec l’approche de pondération par le courant. Description détaillée Les figures 1 à 3 se réfèrent à des exemples de l’art antérieur et ont été décrites plus haut. On a illustré schématiquement à la un circuit illustrant le principe du calcul en mémoire d’une opération MAC selon l’invention. Ce principe repose sur l’accumulation de charges sur une ligne capacitive AL par le biais de sources de courant CS. L’exemple illustré se rapporte à une multiplication ternaire d’un bit X par un bit de poids W en tenant compte des bits de signes respectifs auxquels ils sont associés. Une telle multiplication ternaire est implémentée dans un bloc logique LG dont la sortie est un signal de commande qui, selon le signe du résultat de la multiplication ternaire, active un interrupteur SW qui permet à une source de courant CS soit de charger ou de décharger la ligne capacitive AL. Le résultat est ensuite numérisé par un convertisseur analogique-numérique ADC. Ce principe d’accumulation de charges sur une ligne d’accumulation sera extrapolé à une multiplication multi bit. La rappelle l’équation du produit scalaire de deux vecteurs, un vecteur X et un vecteur de poids W, de 4 bits chacun. , avec et , les vecteurs n’ayant pas de bit de signe dans cet exemple. Un signal de commande, représentant ce produit scalaire, sera utilisé pour contrôler des sources de courant. A cet effet, les sources de courant seront activées pendant un temps unitaire de référence T pondéré par les poids des termes du produit scalaire de la . La montre un tel signal correspondant à l’évolution temporelle des termes du produit scalaire de la . Selon le signe du produit scalaire, la ligne d’accumulation sera chargée ou déchargée en utilisant les sources de courant. La méthode selon l’invention exploite le temps nécessaire pour charger une ligne d’accumulation pendant une longue période avec un faible courant, grâce à la récente technologie avancée CMOS. Si on prend un temps unitaire de référence T de 20 ns, le temps total pour une opération MAC de 5 bits est de 5 μs. Pour une ligne d'accumulation pouvant recevoir le résultat de 100 MAC, le débit est de 50 GOPS (Giga Opérations Par Seconde). Ce débit est suffisamment élevé pour de nombreuses applications telles que les applications audio, notamment l’identification de mots clés ou « Key Word Spotting » (KWS) en anglais où une nouvelle donnée entre toutes les 10 ms. La représente la courbe de l’évolution temporelle de la tension au niveau d’une ligne d’accumulation pendant un calcul de 100 MAC. La ligne est initialisée à 0.5 V (la moitié de la dynamique d'un circuit alimenté à 1 V) afin de pouvoir représenter des valeurs négatives. Pour obtenir le signal de commande représentant le produit scalaire des vecteurs multi bit et , un bloc logique LG recevant en entrée ces vecteurs et des masques temporels associés PX et PW est implémenté. La illustre un premier exemple de chronogrammes de masques temporels où la génération de ces signaux commence par la pondération la plus faible. Un masque temporel PX, PW est généré pour chaque bit des éléments du vecteur X et de la matrice de poids W. Dans le cas d’une multiplication 4 bits, il y a besoin de 4 masques temporels. Il y a donc 8 masques temporels au total : PX=[PX(0), ..., PX(3)] associés aux bits des éléments du vecteur X et PW=[PW(0), ..., PW(3)] associés aux bits des éléments de la matrice de poids W. Les masques temporels PW(d) sont de préférence générés de manière à s’activer successivement pendant une durée sensiblement égale à , T étant le temps unitaire de référence correspondant à la durée d’activation du masque temporel associé au bit de poids le plus faible, les masques temporels PX(c) étant générés de manière à s’activer successivement pour chaque pendant une durée sensiblement égale à T ; {c, d} ∈ {0, ..., 3}. Il est également possible que la génération des signaux PX et PW commence par la pondération la plus forte, comme illustré sur l’exemple de la , ou dans n'importe quel ordre, tant que les masques temporels PX et PW sont synchronisés. Le bloc logique LG recevant en entrée les vecteurs X et W et les masques temporels associés PX et PW comprend préférentiellement un premier sous-bloc logique pour le masquage temporel des bits X et un deuxième sous-bloc logique pour le masquage temporel des bits de poids W, ces deux sous-blocs étant mis en cascade de sorte que les sorties du premier sous-bloc soient en entrée du deuxième sous-bloc. La figure 10 illustre schématiquement un exemple de premier sous-bloc logique LGX pour le masquage temporel d’un vecteur binaire à 4 bits. Le premier sous-bloc logique LGX comporte deux étages de portes logiques : un premier étage 10 et un deuxième étage 11. Dans cet exemple, le premier étage 10 comporte 4 niveaux de portes logiques, les niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie 101. Chaque bit X j [0], ..., X j [3] et le masque temporel PX(0), ..., PX(3) associé sont en entrée d’une porte logique de premier niveau, en l’occurrence une porte NAND à 2 entrées. Le signal 101 en sortie du premier étage représente donc la valeur suivante : Le deuxième étage 11 comporte dans cet exemple deux niveaux de portes logiques : un niveau de portes NAND à deux entrées et un niveau de portes NOT. Le signal 101 en sortie du premier étage et chaque masque temporel PW(0), ..., PW(3) sont en entrée d’une porte logique du niveau de portes NAND. Le niveau de portes NOT donne en sortie quatre signaux notés XW(0), ..., XW(3) qui vont être injectés en entrée du deuxième sous-bloc logique. La figure 11 représente schématiquement un exemple de deuxième sous-bloc logique LGW pour le masquage temporel du vecteur de poids à 4 bits. Le deuxième sous-bloc LGW reçoit en entrée les signaux en sortie du premier sous-bloc XW(0), ..., XW(3) et les bits de poids W j,i [0], ..., W j,i [3] et comporte plusieurs niveaux de portes logiques, en l’occurrence 4 niveaux, ces niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie correspondant au signal de commande SC. Chaque porte logique de premier niveau (une porte NAND à deux entrées dans cet exemple) reçoit en entrée un signal en sortie XW(0), ..., XW(3) du premier sous-bloc LGX et le bit de poids W j,i [0], ..., W j,i [3] correspondant. Le signal SC représente donc la valeur suivante : SC = . Le deuxième sous-bloc LGW comporte également une porte XNOR recevant en entrée le bit de signe du vecteur ( ) et le bit de signe du vecteur ( ). La sortie de la porte XNOR donne un signal de polarité SP = * . En fonction de sa valeur (+ ou -) représentative du signe du produit scalaire des vecteurs et , SP active un des interrupteurs SW pour charger ou décharger la ligne d’accumulation AL. La figure 12 reprend les chronogrammes de la figure 8 en montrant les détails d’une partie du produit scalaire desdits vecteurs et à partir des masques temporels associés. La figure 13 montre le chronogramme du signal de commande SC résultant d’une simulation du produit scalaire des vecteurs et donnée en exemple aux figures 10 à 12. Les vecteurs et sont les suivants : =[11010] et =[10110], le bit de signe étant celui tout à droite. Les petits pics qu’on voit sur le signal SC de la indiquent simplement une transition vers le même état, mais cela ne se produit pas dans la réalité. La illustre schématiquement l’architecture d’un circuit 1 selon l’invention. Ce circuit comprend un générateur PG de masques temporels PX, PW, des sous-blocs logiques LGX, LGW, des sources de courant CS, des interrupteurs SW, des lignes d’accumulation AL et des convertisseurs analogique-numérique ADC. Le générateur PG est préférentiellement situé hors mémoire et génère des masques temporels PX, PW pour tous les sous-blocs logiques LGX associés aux vecteurs X 1 , ..., X a . Les sorties XW des sous-blocs logiques LGX sont diffusées sur plusieurs lignes d’une matrice de poids W : W 1 ,1 , ..., W m ,1 , W 1,2 , ..., W m ,2 , (...), W 1,n , ..., W m ,n , les indices en deuxième position allant de 1 à n correspondant aux colonnes de la matrice. Les valeurs des vecteurs X et de la matrice W sont préférentiellement stockées à proximité des blocs logiques afin de réduire le coût d'accès aux données, en utilisant des registres Flip-Flop ou tout autre mémoire capable de stocker une valeur sans consommer trop d'énergie, comme une mémoire SRAM. Chaque bit est de préférence stocké individuellement pour être utilisé en entrée du bloc logique. Dans cet exemple, à chaque colonne de la matrice W, sont associés une ligne d’accumulation AL et un convertisseur analogique-numérique ADC. A chaque ligne de la matrice de poids, les sorties XW sont ramenées en entrée du sous-bloc logique LGW correspondant, pour obtenir un signal de commande et un signal de polarisation (non représentés sur la ). Comme expliqué ci-avant, le signal de polarisation permet de contrôler un interrupteur SW qui activera la source de courant CS qui lui est connectée pour charger ou décharger la ligne d’accumulation AL conformément à l’évolution temporelle du signal de commande. Un premier mode de réalisation de sources de courant CS pouvant être utilisées dans le circuit de la est illustré à la . Les sources de courant CS sont créées à l'aide de miroirs de courant. Un miroir de courant composé de transistors PMOS 14 charge la ligne d'accumulation AL et un autre miroir composé de transistors NMOS 15 décharge la ligne d'accumulation AL. La représente une ligne d'accumulation AL où les sorties des miroirs de courant sont connectées à la ligne d'accumulation AL via des interrupteurs SW. Les transistors utilisés peuvent être de type standard, mais lorsque le nombre de transistors d’un miroir de courant augmente, des transistors à oxyde épais (« thick oxide transistors » en anglais) peuvent être utilisés pour réduire les fuites de grille. Comme la tension de la ligne d'accumulation AL peut varier, il est possible d'augmenter l'impédance de sortie des miroirs de courant en utilisant une architecture cascodée comme illustré sur la . Une telle architecture permet d'avoir une valeur de courant plus stable sur toute la dynamique [V dd – 0], V dd étant la tension d’alimentation du circuit. Comme une source de courant doit être activée et désactivée à plusieurs niveaux de tension de la ligne d'accumulation, un interrupteur électronique SW de type porte de transmission (« pass gate switch » en anglais) est préférentiellement utilisé. La représente schématiquement un exemple d’un tel interrupteur électronique SW comprenant deux transistors, un NMOS 17 et un PMOS 16, dont les drains sont connectés ensemble et les sources aussi. Le signal appliqué à la grille de l’un de ces transistors est le complémentaire binaire de celui appliqué à la grille de l’autre. Cet interrupteur permet d'obtenir de bonnes performances le long de la dynamique. La ligne d’accumulation AL comprend une ligne métallique. Sa capacité est celle de la ligne métallique et de toutes les capacités parasites 18 des interrupteurs électroniques SW qui sont connectés à la ligne d’accumulation, comme illustré schématiquement sur la . La valeur de la ligne est facilement estimée dans les simulations et la valeur de la source de courant peut être réglée pour correspondre à la capacité de la ligne d'accumulation. La capacité de la ligne d'accumulation peut être augmentée en ajoutant des condensateurs supplémentaires à la sortie des interrupteurs. Dans un mode de réalisation illustré à la , une ligne d'accumulation secondaire DAL est ajoutée pour effectuer le pilotage du courant. Un amplificateur opérationnel suiveur 19 peut être connecté entre les deux lignes d’accumulation AL et DAL pour que chacune reste au même niveau de tension dans le but de contrecarrer l'effet de partage de charges lorsque les interrupteurs SW s'ouvrent et se ferment. La est similaire à la représentant en plus des interrupteurs connectés aux lignes d’accumulation. Pour réduire le partage des charges, la ligne d'accumulation secondaire DAL peut être fabriquée avec une capacité inférieure à celle de la ligne d'accumulation AL, de sorte que les charges sont partagées proportionnellement au rapport entre les capacités des deux lignes. Le convertisseur analogique-numérique ADC est connecté soit directement à la ligne d’accumulation AL en l’absence de ligne d’accumulation secondaire DAL, soit à la ligne d’accumulation secondaire DAL notamment par le biais d’un amplificateur opérationnel suiveur 20 tel qu’illustré sur la . La représente schématiquement un premier mode de réalisation d’un convertisseur analogique-numérique ADC pouvant être utilisé dans le circuit de la . Dans cet exemple, le convertisseur analogique-numérique ADC comporte deux comparateurs analogiques 22 et 23, l’un comparant à +LSB et l’autre à -LSB la valeur de la charge de la ligne d’accumulation 21 à laquelle le convertisseur analogique-numérique ADC est connecté. Le convertisseur analogique-numérique comporte également un compteur 24 configuré pour s’incrémenter ou décrémenter en fonction du résultat de la comparaison des comparateurs analogiques 22 et 23, et dont la sortie 30 est celle du convertisseur. Le convertisseur analogique-numérique ADC comprend aussi un bloc injecteur de charges 25 configuré pour ramener la charge de la ligne d’accumulation 21 connectée au convertisseur à sa valeur initiale dans le cas où le compteur indique que cette ligne a été déchargée, et un bloc déchargeur 26 configuré pour décharger la ligne d’accumulation 21 connectée au convertisseur et la ramener à sa valeur initiale dans le cas où le compteur 24 indique qu’elle a été chargée. Les figures 22 et 23 illustrent schématiquement deux variantes du convertisseur de la dans lesquelles le convertisseur comporte une boucle de rétroaction 32 à des fins d’étalonnage. En effet, une boucle de rétroaction 32 peut être introduite soit pour modifier la valeur d'un LSB en fonction de la valeur en sortie du compteur 24 (cas de figure illustré à la ), soit pour modifier le temps unitaire T dans le générateur de masques temporels PG (cas de figure illustré à la ). Dans le cas de la , la boucle de rétroaction 32 peut servir à modifier, au lieu du temps unitaire T, un courant unitaire I d’une source de courant élémentaire, comme il sera expliqué plus loin en rapport avec les figures 25 à 27. Dans les variantes des figures 22 et 23, le convertisseur analogique-numérique ADC comporte une table de correspondance LUT recevant en entrée la sortie 30 du compteur 24 et étant configurée pour appliquer en sortie une valeur de substitution correspondant à une fonction d’activation ou une correction à des fins d’étalonnage. Une boucle de rétroaction 32 applique la sortie de la LUT sur les valeurs des entrées de référence +LSB et -LSB des comparateurs analogiques 22 et 23 et/ou est utilisée pour ajuster le temps unitaire et/ou le courant unitaire. Dans l’exemple illustré à la , la boucle de rétroaction 32 applique la sortie de la table de correspondance LUT aux entrées de référence +LSB et -LSB des comparateurs 22 et 23. Dans l’exemple illustré à la , ladite boucle 32 applique la sortie de la table de correspondance LUT au générateur de masques temporels PG pour modifier le temps unitaire T ou à la source de courant de référence pour modifier le courant de référence I. La table de correspondance peut permettre ainsi de calibrer le circuit en corrigeant les non-linéarités ou d’obtenir une réponse non linéaire prédéfinie qui peut correspondre à une fonction d’activation en intelligence artificielle. La illustre schématiquement l’architecture d’un ensemble de circuits pour la réalisation d’opérations de multiplication et d’accumulation MAC en mémoire, notamment pour un réseau de neurones, configuré pour déterminer le résultat du produit matriciel d’un vecteur [X 1 , ..., X m ] par une matrice de poids ([W 1 ,1 , ..., W m ,1 ], ..., [W 1 ,n , ..., W m ,n ]), comportant une pluralité de circuits selon l’invention mis en parallèle les uns avec les autres et partageant un seul bloc générateur de masques temporels PG, situé hors mémoire, et fonctionnant par exemple à 50 MHz. La représente schématiquement un circuit selon l’invention fonctionnant selon l’approche de pondération par le courant. En rapport avec les figures précédentes, on a vu qu’il était possible d’utiliser une source de courant CS en pondérant le temps de charge/décharge de la ligne d’accumulation AL. La tension aux bornes de la ligne d’accumulation AL pour une opération de multiplication et d’accumulation (MAC) est égale à : C étant la valeur de la capacité de la ligne d’accumulation et I l’intensité du courant de la source de courant CS. Il est possible d’obtenir le même résultat R de produit scalaire en pondérant le courant et en réduisant le temps de charge/décharge. Selon l’approche de pondération par le courant, il existe plusieurs sources de courant (k étant le nombre de sources de courant), pondérées par une puissance de deux et commandées par des signaux de commande SC représentatifs des valeurs des bits associés à cette pondération. Cela augmente avantageusement la vitesse de calcul en réduisant la durée des signaux de commande. Dans l’exemple illustré à la , il y a deux signaux de commande SC 0,j ,i et SC 1,j,i activant respectivement les sources de courant d’intensités I et 2 l *I, I étant le courant élémentaire de référence associé aux bits de poids faible d’indice 0 à (k-1). Dans cet exemple, k=2, puisqu’il n’y a que deux signaux de commande. La génération des masques temporels PX est la même que dans le cas de la pondération temporelle vue précédemment, mais la génération des masques temporels PW diffère. En effet, si l’on prend l’exemple d’une multiplication à 4 bits (sans le bit de signe), les masques temporels PX et PW sont représentés à la . Le calcul prend deux fois moins de temps que s’il s’agissait d’une pondération temporelle, les signaux de PW(0) et PW(2) sont identiques, ainsi que PW(1) et PW(3). En effet, les mêmes signaux sont utilisés, mais sur des sources de courant différentes. Dans l’exemple des chronogrammes représentés à la , les 4 bits sont répartis équitablement entre les deux sources, de sorte que les signaux de commande sont tels que : . La est analogue à la représentant un ensemble de circuits selon l’invention, avec la variante de pondération par le courant, dans le cas d’une multiplication à 4 bits avec répartition équitable des bits entre les 2 sources de courant. Le courant de référence pour la charge est noté I ref_P et le courant de référence pour la décharge est noté I ref_ N , avec I ref_P = I ref_ N . Les transistors des sources de courant correspondantes sont dimensionnés de sorte à fournir une telle intensité de courant. Le rapport W/L est lié à la transconductance gm qui est définie comme le rapport entre la variation du courant de drain et la variation de la tension grille-source. Ainsi, pour une tension grille-source donnée, un rapport W/L plus élevé entraîne un courant plus élevé, W étant la largeur du canal conducteur et L sa longueur. Les transistors des sources de courant de pondération supérieure ont un rapport 4W/L. La illustre un deuxième exemple de chronogrammes de masques temporels pouvant être utilisés pour le circuit de la . Dans cet exemple, les 4 bits sont répartis d’une façon non équitable entre les 2 sources, de sorte que les signaux de commande sont tels que : La est analogue à la représentant un ensemble de circuits selon l’invention, avec la variante de pondération par le courant, dans le cas d’une multiplication à 4 bits avec répartition non équitable des bits entre les 2 sources de courant. Les transistors des sources de courant de pondération supérieure ont un rapport 8W/L. En effet, comme la deuxième source de courant n’est commandée que par le bit et que PW(3) est équivalent à PW(0), le courant porte la pondération Il est donc nécessaire de modifier la taille du transistor du même facteur. Parmi les applications de l’invention, on peut citer l’optimisation des calculs dans les préprocesseurs, les perceptrons et les classifieurs. L’invention n’est pas limitée aux exemples de réalisation décrits ci-dessus. Par exemple, le bloc logique peut être implémenté avec des portes logiques différentes, typiquement des portes NOR à la place des portes NAND. La fréquence du bloc générateur de masques temporels peut être modifiée pour répondre aux besoins de l’application cible. Méthode de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire, notamment pour un réseau de neurones, dans laquelle on détermine le résultat du produit matriciel d’un vecteur composé de éléments représentés chacun sur ) bits et d’une matrice W = composée de éléments représentés chacun sur bits : chaque élément du produit matriciel étant la somme de produits scalaires avec , i ∈ {1, ..., }, j ∈ {1, ..., }, avec le vecteur de bits et le vecteur de bits de poids , les opérations de multiplication et d’accumulation conduisant au produit scalaire en appliquant à un ensemble de portes logiques les valeurs des vecteurs et et celles de masques temporels associés, les masques temporels étant associés aux bits des éléments du vecteur et les masques temporels étant associés aux bits des éléments du vecteur , de sorte à générer au moins un signal de commande SC d’au moins une source de courant, le signal de commande SC activant ladite au moins une source de courant de façon à accumuler des charges capacitives dans une ligne d’accumulation, notamment de manière proportionnelle au produit scalaire . Méthode selon la revendication précédente, l’un au moins des deux vecteurs est signé, étant le bit de signe du vecteur et/ou étant le bit de signe du vecteur de bits de poids , l’ensemble de portes logiques générant un signal de polarité SP = chargeant ou déchargeant la ligne d’accumulation (AL). Méthode selon l'une des deux revendications précédentes, les masques temporels PX et PW étant générés sous forme d’impulsions. Méthode selon l'une quelconque des revendications précédentes, les masques temporels PX et PW étant générés par un bloc générateur de masques temporels situé hors mémoire. Méthode selon l'une quelconque des revendications précédentes, les masques temporels étant générés de manière à s’activer successivement pendant une durée sensiblement égale à , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, les masques temporels étant générés de manière à s’activer successivement pour chaque pendant une durée sensiblement égale à T. Méthode selon la revendication précédente, le signal de commande SC commandant une seule valeur d’intensité de courant en valeur absolue, en chargeant ou déchargeant la ligne d’accumulation, tel que : , avec i ∈ {1, ..., }, j ∈ {1, ..., }. Méthode selon l'une quelconque des revendications 1 à 4, au moins deux sources de courant (CS) étant présentes, chacune étant commandée par un signal de commande SC respectif, les masques temporels étant générés de manière à s’activer successivement pendant une durée sensiblement égale à T d = , avec d ∈ {0, ..., }, les ) bits de PW étant répartis en k intervalles k étant le nombre de sources de courant ou de signaux de commande, avec l ∈ {0, ..., }, , { étant choisis de telle sorte que l’ensemble des intervalles représente une partition de l’intervalle , l’intervalle le plus long étant [0 , ] , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, les masques temporels étant générés de manière à s’activer successivement pour chaque pendant une durée sensiblement égale à T. Méthode selon la revendication précédente, les signaux de commande étant tels que : , l ∈ {0, ..., k-1}. Méthode selon l’une quelconque des revendications précédentes, la tension aux bornes de la ligne d’accumulation (AL) pour une opération de multiplication et d’accumulation étant égale à : C étant la valeur de la capacité de la ligne d’accumulation (AL) et I l’intensité du courant de la source de courant (CS) de poids le plus faible (i.e. pour =0). Circuit (1) de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire, notamment pour un réseau de neurones, configuré pour déterminer le résultat du produit matriciel d’un vecteur composé de éléments représentés chacun sur ) bits et d’une matrice W = composée de éléments représentés chacun sur bits : chaque élément du produit matriciel étant la somme de produits scalaires avec , i ∈ {1, ..., }, j ∈ {1, ..., }, avec le vecteur de bits et le vecteur de bits de poids , le circuit comportant : - un bloc logique (LG) comportant des portes logiques auxquelles sont appliquées les valeurs des vecteurs et et celles de masques temporels associés, les masques temporels étant associés aux bits des éléments du vecteur et les masques temporels étant associés aux bits des éléments du vecteur , le bloc logique étant configuré pour générer en sortie au moins un signal de commande SC destiné à activer au moins une source de courant (CS) ; et - ladite au moins une source de courant (CS) configurée pour être activée par le signal de commande SC de sorte à accumuler des charges capacitives dans une ligne d’accumulation (AL). Circuit selon la revendication précédente, l’un au moins des deux vecteurs étant signé, étant le bit de signe du vecteur et/ou étant le bit de signe du vecteur de bits de poids , ladite ligne d’accumulation (AL) étant configurée pour être chargée ou déchargée en fonction d’un signal de polarité SP = ce signal SP étant notamment obtenu en sortie d’une porte logique XOR ou XNOR recevant en entrée le bit de signe et le bit de signe . Circuit selon l’une des deux revendications précédentes, le bloc logique (LG) comportant des portes logiques NAND et/ou NOR. Circuit selon la revendication précédente, le bloc logique (LG) comportant un premier sous-bloc logique (LGX) pour le masquage temporel des bits et un deuxième sous-bloc logique (LGW) pour le masquage temporel des bits de poids , ces deux sous-blocs étant mis en cascade de sorte que les sorties du premier sous-bloc soient en entrée du deuxième sous-bloc. Circuit selon la revendication précédente, le premier sous-bloc (LGX) recevant en entrée les masques temporels PX et PW ainsi que les bits , et comportant deux étages de portes logiques : - un premier étage (10) comportant plusieurs niveaux de portes logiques, les niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie, premier étage dans lequel chaque bit et le masque temporel PX associé sont en entrée d’une porte logique de premier niveau, notamment une porte NAND ou NOR ; et - un deuxième étage (11) comportant au moins un niveau de portes logiques, dans lequel le signal en sortie du premier étage et chaque masque temporel PW sont en entrée d’une porte logique dudit niveau, notamment une porte NAND ou NOR. Circuit selon la revendication précédente, le deuxième sous-bloc (LGW) recevant en entrée les signaux en sortie du premier sous-bloc (10) et les bits de poids et comportant plusieurs niveaux (12) de portes logiques, les niveaux étant connectés en cascade de sorte que le signal ou les signaux en sortie d’un niveau soient le signal ou les signaux en entrée du niveau suivant jusqu’à aboutir à un seul signal en sortie correspondant au signal de commande SC, chaque porte logique de premier niveau recevant en entrée un signal en sortie du premier sous-bloc (LGX) et le bit de poids correspondant. Circuit selon la revendication précédente dans son rattachement à la revendication 11, comportant une porte XOR ou XNOR recevant en entrée le bit de signe du vecteur de bits et le bit de signe du vecteur de bit . Circuit selon l’une quelconque des revendications 10 à 16, ladite au moins une source de courant (CS) étant créée par des miroirs de courant utilisant des transistors CMOS (14, 15). Circuit selon la revendication précédente, les miroirs de courant comprenant des transistors PMOS (14) pour charger la ligne d’accumulation (AL) et des transistors NMOS (15) pour décharger ladite ligne. Circuit selon la revendication 17 ou 18, les miroirs de courant ayant une architecture cascodée. Circuit selon l’une quelconque des revendications 10 à 19, comportant au moins un interrupteur électronique (SW), étant notamment une porte de transmission, commandé par le signal de commande SC pour l’activation de ladite au moins une source de courant (CS). Circuit selon l’une quelconque des revendications 10 à 20, comportant au moins un condensateur en sortie dudit au moins un interrupteur électronique (SW) pour augmenter la capacité de la ligne d’accumulation (AL). Circuit selon l’une quelconque des revendications 10 à 21, comportant une ligne d’accumulation secondaire (DAL) connectée à la ligne d’accumulation (AL) par l’intermédiaire d’un amplificateur suiveur (19). Circuit selon la revendication précédente, comportant un amplificateur suiveur (19) connecté entre la ligne d’accumulation (AL) et la ligne d’accumulation secondaire (DAL). Circuit selon la revendication 22 ou 23, comportant un convertisseur analogique-numérique (ADC) connecté soit directement à la ligne d’accumulation (AL) en l’absence de ligne d’accumulation secondaire (DAL), soit à la ligne d’accumulation secondaire notamment par le biais d’un amplificateur suiveur (20). Circuit selon la revendication précédente, le convertisseur analogique-numérique (ADC) comportant : - deux comparateurs analogiques (22, 23), l’un comparant à +LSB et l’autre à -LSB la valeur de la charge de la ligne d’accumulation (21) à laquelle le convertisseur analogique-numérique est connecté ; - un compteur (24) configuré pour s’incrémenter ou décrémenter en fonction du résultat de la comparaison des comparateurs, et dont la sortie (30) étant celle du convertisseur ; - un bloc injecteur de charges (25) configuré pour ramener la charge de la ligne d’accumulation (21) connectée au convertisseur à sa valeur initiale dans le cas où le compteur indique que cette ligne a été déchargée ; et - un bloc déchargeur (26) configuré pour décharger la ligne d’accumulation (21) connectée au convertisseur et la ramener à sa valeur initiale dans le cas où le compteur (24) indique qu’elle a été chargée. Circuit selon la revendication précédente, le convertisseur analogique-numérique (ADC) comportant une table de correspondance (LUT) recevant en entrée la sortie (30) du compteur (24) et étant configurée pour appliquer en sortie une valeur de substitution choisie lors de l’étalonnage et/ou correspondant à une fonction d’activation. Circuit selon la revendication précédente, dans le cas où les valeurs de la table de correspondance (LUT) sont choisies lors de l’étalonnage, la sortie de la table de correspondance agit via une boucle de rétroaction (32) sur les valeurs des entrées de référence +LSB et -LSB des comparateurs analogiques (22, 24) et/ou sur le temps unitaire (T) et/ou sur le courant unitaire (I). Circuit selon l’une quelconque des revendications 10 à 27, comportant un bloc générateur de masques temporels (PG) situé hors mémoire. Circuit selon la revendication précédente, le bloc générateur (PG) étant configuré pour générer les masques temporels de sorte que les masques temporels PW(d) soient activés successivement pendant une durée sensiblement égale à , et que les masques temporels PX(c) soient activés successivement pour chaque pendant une durée sensiblement égale à T, T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible. Circuit selon la revendication 28, comportant au moins deux sources de courant (CS), chacune étant commandée par un signal de commande SC respectif, le bloc générateur (PG) étant configuré pour générer les masques temporels de sorte que les masques temporels PW(d) soient activés successivement pendant une durée T d sensiblement égale à , avec d ∈ {0, ..., }, les ) bits de PW étant répartis en k intervalles k étant le nombre de sources de courant ou de signaux de commande, avec l ∈ {0, ..., }, , { étant choisis de telle sorte que l’ensemble des intervalles représente une partition de l’intervalle , l’intervalle le plus long étant [0 , ] , T étant un temps unitaire correspondant à la durée d’activation du masque temporel associé au bit du vecteur de poids le plus faible, et que les masques temporels PX(c) soient activés successivement pour chaque pendant une durée sensiblement égale à T. Ensemble de circuits de réalisation d’opérations de multiplication et d’accumulation (MAC) en mémoire, notamment pour un réseau de neurones, configuré pour déterminer le résultat du produit matriciel d’un vecteur par une matrice de poids W= comportant une pluralité de circuits (1) selon l'une quelconque des revendications 10 à 30 mis en parallèle les uns avec les autres et partageant un seul bloc générateur (PG) de masques temporels situé hors mémoire.