Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
SCALAR PRODUCT CIRCUIT, AND METHOD FOR CALCULATING BINARY SCALAR PRODUCTS OF AN INPUT VECTOR WITH WEIGHT VECTORS
Document Type and Number:
WIPO Patent Application WO/2022/063658
Kind Code:
A1
Abstract:
The invention relates to: a scalar product circuit for calculating a binary scalar product of an input vector with a weight vector; and an associated method. The scalar product circuit comprises one or more adders and at least one matrix circuit having memory cells arranged in matrix form in a plurality of rows and a plurality of columns, each memory cell having a first and a second memory state. Each matrix circuit has at least one weight range having one or more bit sections, wherein the matrix circuit has an analogue-to-digital converter and a bit shifting unit connected thereto for each bit section, wherein the column lines of the bit section are connected to the analogue-to-digital converter, and wherein a column selection switching element is provided for each column. The bit shifting units are connected to one of the adders, wherein those bit shifting units which are included in a weight range are each connected to the same adder.

Inventors:
GUNTORO ANDRE (DE)
SOLIMAN TAHA (DE)
KIRCHNER TOBIAS (DE)
Application Number:
PCT/EP2021/075407
Publication Date:
March 31, 2022
Filing Date:
September 16, 2021
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
BOSCH GMBH ROBERT (DE)
International Classes:
G11C11/54; G06F7/544; G06G7/16; G06N3/063; G11C7/10; G11C11/22; G11C13/00; G11C16/04
Foreign References:
US10496855B22019-12-03
Other References:
SOLIMAN TAHA ET AL: "A Ferroelectric FET Based In-memory Architecture for Multi-Precision Neural Networks", 2020 IEEE 33RD INTERNATIONAL SYSTEM-ON-CHIP CONFERENCE (SOCC), IEEE, 8 September 2020 (2020-09-08), pages 96 - 101, XP033968566, DOI: 10.1109/SOCC49529.2020.9524750
SEBASTIAN ABU ET AL: "Memory devices and applications for in-memory computing", NATURE NANOTECHNOLOGY, NATURE PUB. GROUP, INC, LONDON, vol. 15, no. 7, 30 March 2020 (2020-03-30), pages 529 - 544, XP037194929, ISSN: 1748-3387, [retrieved on 20200330], DOI: 10.1038/S41565-020-0655-Z
HUNG JE-MIN ET AL: "Challenges and Trends inDeveloping Nonvolatile Memory-Enabled Computing Chips for Intelligent Edge Devices", IEEE TRANSACTIONS ON ELECTRON DEVICES, IEEE, USA, vol. 67, no. 4, 1 April 2020 (2020-04-01), pages 1444 - 1453, XP011779978, ISSN: 0018-9383, [retrieved on 20200323], DOI: 10.1109/TED.2020.2976115
Download PDF:
Claims:
- 26 -

Ansprüche

1 . Skalarproduktschaltung zum Berechnen eines binären Skalarprodukts eines Eingangsvektors mit einem Gewichtsvektor, umfassend einen oder mehrere Addierer (22), die dazu eingerichtet sind, empfangene Binärwerte zu addieren und einen Summenbinärwert zu bilden; und wenigstens eine Matrixschaltung (40) mit in mehreren Zeilen und mehreren Spalten matrixförmig angeordneten Speicherzellen (24), die jeweils einen ersten und einen zweiten Speicherzustand aufweisen, wobei die Matrixschaltung für jede Zeile eine Zeilenleitung (26) und für jede Spalte eine Spaltenleitung (28) aufweist, wobei jede Speicherzelle mit einer Zeilenleitung und einer Spaltenleitung verbunden ist und dazu eingerichtet ist, einen elektrischen Strom in die mit der Speicherzelle verbundene Spaltenleitung zu leiten, wobei eine Stromstärke des Stroms von einer an der mit der Speicherzelle verbundenen Zeilenleitung anliegenden Spannung und dem Speicherzustand der Speicherzelle abhängig ist, wobei die Stromstärke gleich Null ist, wenn eine Spannung von Null angelegt wird, und wobei die Stromstärken für den ersten und den zweiten Speicherzustand verschieden voneinander sind, wenn die angelegte Spannung einen vorbestimmten Spannungswert ungleich Null aufweist; wobei jede Matrixschaltung wenigstens einen Gewichtsbereich (20) mit einem oder mehreren Bitabschnitten (30) aufweist, wobei jeder Bitabschnitt jeweils wenigstens eine Spalte umfasst, wobei die Speicherzellen innerhalb jedes Bitabschnitts so eingerichtet sind, dass, wenn an den Zeilenleitungen, die mit den Speicherzellen verbunden sind, jeweils eine Spannung mit dem vorbestimmten Spannungswert anliegt und wenn sich die Speicherzellen in dem zweiten Speicherzustand befinden, von jeder Speicherzelle der Strom mit gleicher Stromstärke in die entsprechende Spaltenleitung geleitet wird; wobei die Matrixschaltung für jeden Bitabschnitt einen Analog-Digital- Wandler (32) und eine damit verbundene Bitschiebeeinheit (34) aufweist, wobei die Spaltenleitungen des Bitabschnitts mit dem Analog-Digital- Wandler verbunden sind und der Analog-Digital-Wandler dazu eingerichtet ist, einen Binärwert entsprechend der Stromstärke eines an einem Eingang des Analog-Digital-Wandlers fließenden Stroms zu bestimmen und an die Bitschiebeeinheit zu übertragen, wobei jede Bitschiebeeinheit dazu eingerichtet ist, die Bits des jeweiligen Binärwerts um eine vorgebbare Anzahl von Bits in eine Richtung, die arithmetisch einer Multiplikation mit einer entsprechenden Potenz von 2 entspricht, zu verschieben; wobei für jede Spalte ein Spaltenauswahlschaltelement vorgesehen ist, das dazu eingerichtet ist, die Spalte zu aktivieren, wobei, wenn die Spalte aktiviert ist, durch die Spaltenleitung ein Strom entsprechend der an den Zeilenleitungen anliegenden Spannungen und den Speicherzuständen der Speicherzellen an dem mit der Spaltenleitung verbundenen Analog-Digital- Wandler bereitgestellt wird, und, wenn die Spalte nicht aktiviert ist, kein Strom durch die Spaltenleitung an dem damit verbundenen Analog-Digital- Wandler bereitgestellt wird; wobei die Bitschiebeeinheiten mit einem der Addierer verbunden sind, wobei jeweils diejenigen Bitschiebeeinheiten, die in einem Gewichtsbereich umfasst sind, mit demselben Addierer verbunden sind.

2. Skalarproduktschaltung nach Anspruch 1 , wobei jede der Speicherzellen (24) so eingerichtet ist, dass, wenn der vorbestimmte Spannungswert anliegt, die Stromstärke des Stroms, der in die Spaltenleitung geleitet wird, wenn sich die Speicherzelle im zweiten Speicherzustand befindet, um ein Vielfaches größer ist als die Stromstärke des Stroms, der in die Spaltenleitung geleitet wird, wenn sich die Speicherzelle im ersten Speicherzustand befindet; wobei das Vielfache bevorzugt mindestens 100, weiter bevorzugt mindestens 1000, ist.

3. Skalarproduktschaltung nach einem der vorstehenden Ansprüche, wobei jede der Speicherzellen (24) so eingerichtet ist, dass, wenn sich die Speicherzelle im ersten Zustand befindet, kein Strom in die damit verbundene Spaltenleitung geleitet wird. Skalarproduktschaltung nach einem der vorstehenden Ansprüche, wobei die Speicherzellen (24) einen Memristor und/oder ein Halbleiterschaltelement (50), insbesondere einen ferroelektrischen Feldeffekttransistor oder einen Feldeffekttransistor mit schwebendem Gate, umfassen. Skalarproduktschaltung nach einem der vorstehenden Ansprüche, wobei mehrere Matrixschaltungen (40) vorgesehen sind, wobei die Bitschiebeeinheiten von jeweils einem Gewichtsbereich in zwei oder mehreren der Matrixschaltungen mit demselben Addierer verbunden sind. Skalarproduktschaltung nach einem der vorstehenden Ansprüche, wobei für jede Zeilenleitung ein Spannungserzeugungselement vorgesehen ist, das mit der Zeilenleitung verbunden ist und eingerichtet ist, in Abhängigkeit von einem vorgegeben Eingangssignal, das in zwei verschiedenen Wertebereiche liegen kann, eine Spannung von 0 V oder eine Spannung mit dem vorbestimmten Spannungswert zu erzeugen und an der Zeilenleitung anzulegen. Skalarproduktschaltung nach einem der vorstehenden Ansprüche, wobei die Analog-Digital-Wandler eingerichtet sind, die Binärwerte mit 5 Bit, bevorzugt mit 4 Bit, weiter bevorzugt 3 Bit oder weniger Bit, bestimmen. Verfahren zum Berechnen binärer Skalarprodukte eines oder mehrerer Eingangsvektoren, die jeweils binäre Eingangselemente aufweisen, mit einem oder mehreren vorbestimmten ersten Gewichtsvektoren, die jeweils binäre Gewichtselemente aufweisen, unter Verwendung einer Skalarproduktschaltung nach einem der vorstehenden Ansprüche, die Addierer entsprechend der Anzahl vorbestimmter erster Gewichtsvektoren aufweist, wobei jedem Addierer ein oder mehrere Gewichtsbereiche zugeordnet sind, die, wenn mehrere Gewichtsbereiche zugeordnet sind, in verschiedenen Matrixschaltungen der Skalarproduktschaltung liegen, wobei jeder Addierer mit den Bitschiebeelementen verbunden ist, die über die Analog-Digital-Wandler mit den Bitabschnitten verbunden sind, die in den dem Addierer zugeordneten Gewichtsbereichen umfasst sind; umfassend - 29 -

A) Zuordnen (102) eines Addierers zu jedem ersten Gewichtsvektor und Zuordnen der dem Addierer zugeordneten Gewichtsbereiche zu dem Gewichtsvektor, dem der Addierer zugeordnet ist;

B) Speichern (104) der Bits der binären Gewichtselemente der ersten Gewichtsvektoren, wobei für jeden Gewichtsvektor die Bits der Gewichtselemente des Gewichtsvektors in Speicherzellen gespeichert werden, die in jeweils einer Spalte eines Bitabschnitts eines dem Gewichtsvektor zugeordneten Gewichtsbereichs enthalten sind, wobei die Bits eines Gewichtselements jeweils in einer Zeile gespeichert werden, wobei Bits verschiedener Gewichtselemente des Gewichtsvektors, die die gleiche Wertigkeit aufweisen und die im gleichen Gewichtsbereich gespeichert werden, im gleichen Bitabschnitt dieses Gewichtsbereichs gespeichert werden, wobei beim Speichern eines Bits in einer Speicherzelle die Speicherzelle in den ersten Speicherzustand gesetzt wird, wenn das Bit den Wert 0 aufweist, und die Speicherzelle in den zweiten Speicherzustand gesetzt wird, wenn das Bit den Wert 1 aufweist;

C) Aktivieren (106) der Spalten, in denen Bits der Gewichtselemente der ersten Gewichtsvektoren gespeichert wurden;

D) für wenigsten einen der Eingangsvektoren: a) Setzen (108) der Summenbinärwerte der Addierer auf Null; b) für die Bits der Eingangselemente des jeweiligen Eingangsvektors mit der gleichen Wertigkeit jeweils: i) Anlegen (112) von Spannungen entsprechend den Bits an den Zeilenleitungen, wobei an verschiedene Zeilenleitungen Spannungen entsprechend den Bits verschiedener Eingangselemente angelegt werden, wobei eine Spannung von 0 V angelegt wird, wenn das jeweilige Bit den Wert 0 aufweist, und eine Spannung mit dem vorbestimmten Spannungswert angelegt wird, wenn das jeweilige Bit den Wert 1 aufweist; ii) Bestimmen (114) von Binärwerten durch die Analog-Digital- Wandler; iii) Verschieben (116) der Binärwerte durch die Bitschiebeeinheiten, um verschobene Binärwerte zu erhalten, wobei jeder Bitschiebeinheit eine Anzahl von Bits vorgegeben wird, um die der Binärwert verschoben werden soll, wobei die vorgegebene Anzahl von Bits bestimmt wird als - 30 -

Summe von Wertigkeit der Bits der Eingangselemente, entsprechend derer Spannungen angelegt sind, und von Wertigkeit der Bits der Gewichtselemente, die in dem Bitabschnitt gespeichert sind, mit dem die jeweilige Bitschiebeeinheit über den Analog-Digital-Wandler verbunden ist; iv) Addieren (118) der verschobenen Binärwerte durch die Addierer; c) Auslesen (122) der Summenbinärwerte als erste binäre Skalarprodukte. Verfahren nach Anspruch 8, wobei weiterhin zweite binäre Skalarprodukte des einen oder der mehreren Eingangsvektoren, mit einem oder mehreren vorbestimmten zweiten Gewichtsvektoren, die jeweils binäre Gewichtselemente aufweisen, berechnet werden, wobei die Anzahl der zweiten Gewichtsvektoren gleich oder kleiner als die Anzahl der ersten Gewichtsvektoren ist; umfassend

E) Zuordnen eines Addierers zu jedem zweiten Gewichtsvektor und Zuordnen der dem Addierer zugeordneten Gewichtsbereiche zu dem Gewichtsvektor, dem der Addierer zugeordnet ist;

F) Speichern der Bits der binären Gewichtselemente der zweiten Gewichtsvektoren, wobei für jeden Gewichtsvektor entsprechend Schritt B) vorgegangen wird, wobei die Bits der Gewichtselemente der zweien Gewichtsvektoren in Spalten gespeichert werden, die verschieden von den Spalten sind, in denen die Bits der Gewichtselemente der ersten Gewichtsvektoren gespeichert sind;

G) Aktivieren der Spalten, in denen Bits der Gewichtselemente der zweiten Gewichtsvektoren gespeichert wurden;

H) für wenigstens einen der Eingangsvektoren, Durchführen der Teilschritte entsprechend Schritt D), mit dem Unterschied, dass in Teilschritt c) die Summenbinärwerte als zweite Skalarprodukte ausgelesen werden. Modul umfassend eine Skalarproduktschaltung nach einem der Ansprüche 1 bis 7 und eine damit verbundene Recheneinheit, die dazu eingerichtet ist, alle Verfahrensschritte eines Verfahrens nach einem der Ansprüche 8 oder 9 durchzuführen. - 31 - Computerprogramm, das eine Recheneinheit dazu veranlasst, alle Verfahrensschritte eines Verfahrens nach einem der Ansprüche 8 oder 9 durchzuführen, wenn es auf der Recheneinheit ausgeführt wird. Maschinenlesbares Speichermedium mit einem darauf gespeicherten Computerprogramm nach Anspruch 11 .

Description:
Beschreibung

Titel

Skalarproduktschaltung und Verfahren zum Berechnen binärer Skalarprodukte eines Eingangsvektors mit Gewichtsvektoren

Die vorliegende Erfindung betrifft eine Skalarproduktschaltung und ein Verfahren zum Berechnen binärer Skalarprodukte eines Eingangsvektors mit Gewichtsvektoren, ein zugehöriges Modul sowie eine Recheneinheit und ein Computerprogramm zur Durchführung des Verfahrens.

Stand der Technik

In vielen rechenintensiven Aufgaben, insbesondere bei Künstliche-Intelligenz- Anwendungen bzw. bei Anwendungen des maschinellen Lernens, die neuronale Netzwerke verwenden, ist die Bestimmung von Skalarprodukten von Vektoren. Beispielsweise sind die Faltungen in einem "faltenden Neuronalen Netzwerk", im Weitern als CNN (convolutional neural network) bezeichnet, Skalarprodukte von Vektoren. Um solche Vektoroperationen schnell und effizient durchzuführen, können Vektor-Matrix-Multiplizierer in Form eigens dafür vorgesehener elektronischer Schaltungen verwendet werden.

In diesen Vektor-Matrix-Multiplizierern, die auch als "Dot-Product-Engines" bezeichnet werden, wird ein Vektor von Eingangsspannungen mittels einer matrix- förmigen Anordnung von Memristoren, die an Kreuzungspunkten von orthogonal zueinander verlaufenden Leitungen angeordnet sind und die die sich kreuzenden Leitungen paarweise verbinden, in einen Vektor von Ausgangsspannungen gewandelt, wobei die Ausgangsspannungen jeweils proportional zum Skalarprodukt ("dot product") des Vektors der Eingangsspannungen mit den Leitfähigkeiten der in einer Spalte angeordneten Memristoren sind. Die Eingangsspannungen wer- den dabei an die in eine Richtung verlaufenden Zeilenleitungen angelegt und führen zu Strömen über die Memristoren in die dazu orthogonal verlaufenden Spaltenleitungen, die mit einem Massepotential verbunden sind. Die Ströme werden mittels Transimpedanzverstärkern in die Ausgangsspannungen gewandelt. Solche Schaltungen können Größen von jeweils einigen 100 oder 1000 Zeilen und Spalten erreichen.

Offenbarung der Erfindung

Erfindungsgemäß werden eine Skalarproduktschaltung und ein Verfahren zum Berechnen binärer Skalarprodukte eines Eingangsvektors mit Gewichtsvektoren, ein zugehöriges Modul sowie eine Recheneinheit und ein Computerprogramm zur Durchführung des Verfahrens mit den Merkmalen der unabhängigen Patentansprüche vorgeschlagen. Vorteilhafte Ausgestaltungen sind Gegenstand der Unteransprüche sowie der nachfolgenden Beschreibung.

Die erfindungsgemäße Skalarproduktschaltung bzw. das zugehörige Verfahren bedienen sich der Maßnahme, in den Matrixschaltungen Gewichtsbereiche bereitzustellen, die Bitabschnitte für jedes Bit eines Gewichtselements aufweisen, die in den Speicherzellen einer Spalte der Bitabschnitte gespeichert werden. Der erste und der zweite Speicherzustand entsprechen dabei den beiden möglichen Werten eines Bits. An den Zeilenleitung können die Bits der Eingangselemente der Eingangsvektoren angelegt werden, wobei wiederum Spannungen von 0 V bzw. entsprechend dem vorbestimmten Spannungswert den beiden möglichen Werten eines Bits entsprechen. Die in den Spaltenleitungen erzeugten Ströme bzw. deren Stromstärke wird durch die Analog-Digital-Wandler als Binärwert bestimmt und durch die Bitschiebeeinheiten entsprechend der Wertigkeiten der Bits der Gewichtselemente und der Bits der Eingangselemente verschoben, so dass mit einer anschließenden Addition durch die Addierer ein arithmetisch korrekter Wert für das Skalarprodukt von Eingangsvektor und Gewichtsvektor als binärer Wert erhalten wird.

Durch die Erfindung werden die mit der analogen Vektormultiplikation verbundenen, im Zusammenhang mit den Figuren 1A und 1 B genauer erläuterten Pröble- me, insbesondere Ungenauigkeiten bei der Berechnung, vermieden, indem eine digitale Berechnung basierend auf binären Gewichten und Vektoren durch geführt wird, einzig die Bildung von Summenströmen in den Spaltenleitungen erfolgt analog. Ein weiterer Vorteil liegt darin, dass Analog-Digital-Wandler mit relativ wenig Bits (z.B. 3-Bit- Analog-Digital-Wandler) verwendet werden können, was einen einfachen Aufbau der Analog-Digital-Wandler ermöglicht. Weiterhin sind keine Digital-Analog-Wandler notwendig, die zu den normalerweise als Binärwert vorliegenden Eingangsvektoren entsprechende proportionale Spannungen erzeugen.

Bevorzugt weist wenigstens eine Matrixschaltung, weiter bevorzugt alle Mat- rixschaltungen, mehrere Gewichtsbereiche auf. Unabhängig davon weist wenigstens ein Gewichtsbereich, weiter bevorzugt alle Gewichtsbereiche, mehrere Bitabschnitte auf. Weiterhin, ebenfalls unabhängig von der Zahl der Gewichtsbereiche und/oder Bitabschnitte, weist bevorzugt wenigstens ein Bitabschnitt, weiter bevorzugt alle Bitabschnitte, mehrere Spalten auf.

Bevorzugt ist jede der Speicherzellen so eingerichtet, dass, wenn der vorbestimmte Spannungswert anliegt, die Stromstärke des Stroms, der in die Spaltenleitung geleitet wird, wenn sich die Speicherzelle im zweiten Speicherzustand befindet, um ein Vielfaches größer ist als die Stromstärke des Stroms, der in die Spaltenleitung geleitet wird, wenn sich die Speicherzelle im ersten Speicherzustand befindet; wobei das Vielfache bevorzugt mindestens 100, weiter bevorzugt mindestens 1000, ist. Damit können klar unterscheidbare Stromstärkenwerte an den Spaltenleitungen erreicht werden.

Ebenso bevorzugt ist jede der Speicherzellen so eingerichtet, dass, wenn sich die Speicherzelle im ersten Zustand befindet, kein Strom in die damit verbundene Spaltenleitung geleitet wird. Die Speicherzellen ermöglichen so die Implementierung einer logischen UND-Verknüpfung.

Bevorzugt umfassen die Speicherzellen einen Memristor und/oder ein Halbleiterschaltelement, insbesondere einen ferroelektrischen Feldeffekttransistor oder ei- nen Feldeffekttransistor mit schwebendem Gate. Dies ermöglicht die Herstellung der Skalarproduktschaltung unter Verwendung bekannter Technologien.

Bevorzugt sind mehrere Matrixschaltungen vorgesehen, wobei die Bitschiebeeinheiten von jeweils einem Gewichtsbereich in zwei oder mehreren der Matrixschaltungen mit demselben Addierer verbunden sind. Auf diese Weise können Skalarprodukte von Eingangsvektoren und Gewichtsvektoren berechnet werden, die eine größere Länge aufweisen als die Zeilenanzahl einer Matrixschaltung. Hat eine Matrixschaltung z.B. m Zeilen und werden die Bitschiebeeinheiten von Gewichtbereichen in k Matrixschaltungen mit demselben Addierer verbunden, können Skalarprodukte von Vektoren mit einer Länge von maximal m k direkt berechnet werden. Sollen Skalarprodukte von noch längeren Vektoren berechnet, können für Teile der Vektoren zunächst Teilsummen durch die Vektormultiplikationsschaltung gebildet werden, die anschließend addiert werden. Dabei können die Gewichte für die verschiedenen Teile in verschiedenen Spalten der Gewichtsbereiche gespeichert werden.

Vorzugsweise ist für jede Zeilenleitung ein Spannungserzeugungselement vorgesehen, das mit der Zeilenleitung verbunden ist und eingerichtet ist, in Abhängigkeit von einem vorgegeben Eingangssignal, das in zwei verschiedenen Wertebereiche liegen kann, eine Spannung von 0 V oder eine Spannung mit dem vorbestimmten Spannungswert zu erzeugen und an der Zeilenleitung anzulegen. Die zwei verschiedenen Werte des Eingangssignals entsprechen den zwei möglichen Werten eines Bits. Spannungserzeugungselemente sind vorteilhaft, wenn das Eingangssignal Spannungswerte aufweist, die nicht für eine direkte Verarbeitung durch die Matrixschaltung bzw. die Speicherzellen geeignet sind (z.B. zu kleine oder zu große Spannungen, oder weil das Eingangssignal innerhalb der Wertebereiche zu große Schwankungen aufweist).

Bevorzugt sind die Analog-Digital-Wandler eingerichtet, die Binärwerte mit 5 Bit, bevorzugt mit 4 Bit, weiter bevorzugt 3 Bit oder weniger Bit, bestimmen. Durch die geringe Bit-Breite können die Analog-Digital-Wandler einfach auf gebaut sein. Ein erfindungsgemäßes Verfahren zum Berechnen binärer Skalarprodukte eines oder mehrerer Eingangsvektoren, die jeweils binäre Eingangselemente aufweisen, mit einem oder mehreren vorbestimmten ersten Gewichtsvektoren, die jeweils binäre Gewichtselemente aufweisen, unter Verwendung einer Skalarproduktschaltung nach einem der vorstehenden Ansprüche, die Addierer entsprechend der Anzahl vorbestimmter erster Gewichtsvektoren aufweist, wobei jedem Addierer ein oder mehrere Gewichtsbereiche zugeordnet werden, die in verschiedenen Matrixschaltungen der Skalarproduktschaltung liegen, wobei jeder Addierer mit den Bitschiebeelementen verbunden ist, die über die Analog-Digital- Wandler mit den Bitabschnitten verbunden sind, die in den dem Addierer zugeordneten Gewichtsbereichen umfasst sind; umfassend

A) Zuordnen eines Addierers zu jedem ersten Gewichtsvektor und Zuordnen der dem Addierer zugeordneten Gewichtsbereiche zu dem Gewichtsvektor, dem der Addierer zugeordnet ist;

B) Speichern der Bits der binären Gewichtselemente der ersten Gewichtsvektoren, wobei für jeden Gewichtsvektor die Bits der Gewichtselemente des Gewichtsvektors in Speicherzellen gespeichert werden, die in jeweils einer Spalte eines Bitabschnitts eines dem Gewichts vektor zugeordneten Gewichtsbereichs enthalten sind, wobei die Bits eines Gewichtselements jeweils in einer Zeile gespeichert werden, wobei Bits verschiedener Gewichtselemente des Gewichtsvektors, die die gleiche Wertigkeit aufweisen und die im gleichen Gewichtsbereich gespeichert werden, im gleichen Bitabschnitt dieses Gewichtsbereichs gespeichert werden, wobei beim Speichern eines Bits in einer Speicherzelle die Speicherzelle in den ersten Speicherzustand gesetzt wird, wenn das Bit den Wert 0 aufweist, und die Speicherzelle in den zweiten Speicherzustand gesetzt wird, wenn das Bit den Wert 1 aufweist;

C) Aktivieren der Spalten, in denen Bits der Gewichtselemente der ersten Gewichtsvektoren gespeichert wurden;

D) für wenigstens einen der Eingangsvektoren: a) Setzen der Summenbinärwerte der Addierer auf Null; b) für die Bits der Eingangselemente des jeweiligen Eingangsvektors mit der gleichen Wertigkeit jeweils: i) Anlegen von Spannungen entsprechend den Bits an den Zeilenleitungen, wobei an verschiedene Zeilenleitungen Spannungen entsprechend den Bits verschiedener Eingangselemente angelegt werden, wobei eine Spannung von 0 V angelegt wird, wenn das jeweilige Bit den Wert 0 aufweist, und eine Spannung mit dem vorbestimmten Spannungswert angelegt wird, wenn das jeweilige Bit den Wert 1 aufweist; ii) Bestimmen von Binärwerten durch die Analog-Digital-Wandler; iii) Verschieben der Binärwerte durch die Bitschiebeeinheiten, um verschobene Binärwerte zu erhalten, wobei jeder Bitschiebeinheit eine Anzahl von Bits vorgegeben wird, um die der Binärwert verschoben werden soll, wobei die vorgegebene Anzahl von Bits bestimmt wird als Summe von Wertigkeit der Bits der Eingangselemente, entsprechend derer Spannungen angelegt sind, und von Wertigkeit der Bits der Gewichtselemente, die in dem Bitabschnitt gespeichert sind, mit dem die jeweilige Bitschiebeeinheit über den Analog-Digital-Wandler verbunden ist; iv) Addieren der verschobenen Binärwerte durch die Addierer; c) Auslesen der Summenbinärwerte als erste binäre Skalarprodukte.

Mittels dieses Verfahrens können beispielweise in einem CNN (convolutional neural network) Faltungen mit mehreren (entsprechend der Anzahl der ersten Gewichtsvektoren) Faltungskernen in einer Schicht gleichzeitig berechnet werden.

Bevorzugt umfasst das Verfahren weiterhin ein Berechnen zweiter binärer Skalarprodukte des einen oder der mehreren Eingangsvektoren, mit einem oder mehreren vorbestimmten zweiten Gewichtsvektoren, die jeweils binäre Gewichtselemente aufweisen, wobei die Anzahl der zweiten Gewichtsvektoren gleich o- der kleiner als die Anzahl der ersten Gewichtsvektoren ist; umfassend

E) Zuordnen eines Addierers zu jedem zweiten Gewichtsvektor und Zuordnen der dem Addierer zugeordneten Gewichtsbereiche zu dem Gewichtsvektor, dem der Addierer zugeordnet ist;

F) Speichern der Bits der binären Gewichtselemente der zweiten Gewichtsvektoren, wobei für jeden Gewichtsvektor entsprechend Schritt B) vorgegangen wird, wobei die Bits der Gewichtselemente der zweien Gewichtsvektoren in Spalten gespeichert werden, die verschieden von den Spalten sind, in denen die Bits der Gewichtselemente der ersten Gewichtsvektoren gespeichert sind; G) Aktivieren der Spalten, in denen Bits der Gewichtselemente der zweiten Gewichtsvektoren gespeichert wurden;

H) für wenigstens einen der Eingangsvektoren, Durchführen der Teilschritte entsprechend Schritt D), mit dem Unterschied, dass in Teilschritt c) die Summenbinärwerte als zweite Skalarprodukte ausgelesen werden.

Weist ein neuronales Netzwerk, insbesondere ein CNN, mehrere Schichten auf, so können die Faltungskerne der verschiedenen Schichten als Gewichtsvektoren in unterschiedlichen Spalten derselben Skalarproduktschaltung gespeichert werden.

Ein erfindungsgemäßes Modul umfasst eine erfindungsgemäße Skalarproduktschaltung und eine damit verbundene Recheneinheit, die dazu eingerichtet ist, alle Verfahrensschritte eines erfindungsgemäßen Verfahrens durchzuführen. Ein solches Modul bzw. Rechenmodul kann z.B. zur Beschleunigung von Künstliche- Intelligenz-Anwendungen verwendet werden, die auf neuronalen Netzen basieren. Ein solches Modul kann beispielsweise in einem Computer, z.B. als Steckmodul, oder auch in einem Steuergerät eines Kraftfahrzeugs oder einer Maschine verwendet werden.

Eine erfindungsgemäße Recheneinheit ist, insbesondere programmtechnisch, dazu eingerichtet, ein erfindungsgemäßes Verfahren durchzuführen.

Auch die Implementierung eines erfindungsgemäßen Verfahrens in Form eines Computerprogramms oder Computerprogrammprodukts mit Programmcode zur Durchführung aller Verfahrensschritte ist vorteilhaft, da dies besonders geringe Kosten verursacht, insbesondere wenn ein ausführendes Steuergerät noch für weitere Aufgaben genutzt wird und daher ohnehin vorhanden ist. Geeignete Datenträger zur Bereitstellung des Computerprogramms sind insbesondere magnetische, optische und elektrische Speicher, wie z.B. Festplatten, Flash-Speicher, EEPROMs, DVDs u.a.m. Auch ein Download eines Programms über Computernetze (Internet, Intranet usw.) ist möglich. Die Ausdrücke "Verbindung", "verbunden ist" u.Ä. sind im Rahmen dieser Anmeldung im Sinne elektrisch leitender Verbindungen zu verstehen, außer es ist etwas anderes gesagt, z.B. wenn in einer Verbindung ein Schaltelement vorgesehen ist, so kann die Verbindung getrennt und wieder geschlossen werden.

Weitere Vorteile und Ausgestaltungen der Erfindung ergeben sich aus der Beschreibung und der beiliegenden Zeichnung.

Die Erfindung ist anhand von Ausführungsbeispielen in der Zeichnung schematisch dargestellt und wird im Folgenden unter Bezugnahme auf die Zeichnung beschrieben.

Kurze Beschreibung der Zeichnungen

Figuren 1A und 1B zeigen einen nicht-erfindungsgemäßen Vektor-Matrix- Multiplizierer;

Figur 2 zeigt einen Gewichtsbereich einer Matrixschaltung und einen Addierer gemäß einer bevorzugten Ausführungsform, die in einer erfindungsgemäßen Skalarproduktschaltung umfasst sein können;

Figur 3 zeigt eine bevorzugte Skalarproduktschaltung mit mehreren Addierern und mit einer Matrixschaltung, die mehrere Gewichtsbereiche aufweist, gemäß der Erfindung;

Figur 4 zeigt eine bevorzugte Skalarproduktschaltung mit mehreren Matrixschal- tungen gemäß der Erfindung;

Figur 5 zeigt den Aufbau einer Speicherzelle, die für die Erfindung verwendet werden kann; und

Figur 6 zeigt ein Ablaufdiagramm eines bevorzugten Verfahrens gemäß der Erfindung. Ausführungsform(en) der Erfindung

Die Figuren 1A und 1B stellen einen nicht-erfindungsgemäßen Vektor-Matrix- Multiplizierer, auch als "dot produkt engine" bezeichnet, dar. Der Vektor-Matrix- Multiplizierer umfasst in Zeilen und Spalten matrixförmig angeordnete Speicherzellen in Form von Memristoren 2. Die Anzahl von Zeilen und die Anzahl von Spalten sind jeweils beliebig, wobei exemplarisch eine 4x4-Anordnung dargestellt ist. Die Speicherfunktion der Memristoren ergibt sich daraus, dass der Widerstand der Memristoren durch Anlegen einer Programmierspannung einstellbar ist.

Der Vektor-Matrix-Multiplizierer umfasst weiterhin für jede Zeile der matrixförmi- gen Anordnung eine Zeilenleitung 4 und für jede Spalte eine Spaltenleitung 6. Die Memristoren 2 sind an den Kreuzungspunkten der zueinander senkrecht verlaufenden Zeilen- und Spaltenleitungen angeordnet und verbinden jeweils eine Zeilenleitung mit einer Spaltenleitung, die anderweitig nicht verbunden sind.

Werden an die Zeilenleitungen Spannungen angelegt, so fließen Ströme von den Zeilenleitungen 4 durch die Memristoren 2 in die Spaltenleitungen 6. Dies ist für eine Spalte und zwei Zeilen in Figur 1 B illustriert. Dort wird an eine der Zeilenleitungen eine Spannung U1 angelegt und an die andere eine Spannung U2. Der Strom 11 durch einen der Memristoren wird durch dessen Leitfähigkeit G1 bestimmt: 11 = G1 ■ U1 ; der Strom I2 durch den anderen Memristor, dessen Leitfähigkeit G2 ist, ist entsprechend I2 = G2 ■ U2. Durch die Spaltenleitung 6 fließt dann die Summe der Ströme, d.h. der Gesamtstrom I = 11 + I2 = G1 ■ U1 + G2 ■ U2. Es findet also eine Skalarproduktbildung der als Vektor aufgefassten Spannungen U1, U2 an den Zeilenleitungen 4 mit den als Vektor aufgefassten Leitfähigkeiten G1, G2 der Memristoren in einer Spalte statt, wobei der Gesamtstrom proportional zum Ergebnis dieses Skalarprodukts ist. Bezogen auf die gesamte Matrixanordnung findet also im Prinzip eine Multiplikation des Vektors der Spannungen mit den als Matrixelemente aufgefassten Leitfähigkeiten der Memristoren statt. Zur Funktion der Schaltung liegt das Ende der Spaltenleitung 6 auf einem Bezugs- bzw. Massepotential, gegenüber dem die Spannungen gemessen werden. Der Gesamtstrom jeder Spalte wird üblicherweise mittels eines Transimpedanzverstärkers 8 in eine Ausgangspannung lla gewandelt. Der hier beispielhaft dargestellte, an sich bekannte Transimpedanzverstärker 8 umfasst einen Operationsverstärker 10, dessen invertierender Eingang mit der Spaltenleitung verbunden ist und dessen nichtinvertierender Eingang auf Masse liegt, und einen Widerstand 12, über den der Operationsverstärker gegengekoppelt ist, so dass die Ausgangsspannung lla gegeben ist als lla = - R ■ I, wobei R der Widerstandswert des Widerstands 12 ist. Der Transimpedanzverstärker 8 erzeugt am invertierenden Eingang des Operationsverstärkers 10 eine sogenannte "virtuelle Masse", die sich aufgrund der hohen Leerlaufverstärkung des Operationsverstärkers (z.B. 100000) nur wenig (z.B. nur ca. 50 pV, wenn die Spannungen U1, U2 im Bereich von etwa 5 V liegen) vom Massepotential unterscheidet, so dass messtechnisch am Ende der Spaltenleitung das Massepotential (d.h. die virtuelle Masse) anliegt, wie für die Funktion der Schaltung erforderlich.

Die Spannungen an den Zeilenleitungen werden typischerweise aus digitalen Signalen mittels Digital-Analog-Wandlern 14 erzeugt. Ebenso werden typischerweise die Ausgangsspannungen an den Spaltenleitungen mittels Abtast-Halte- Gliedern 16 (Sample-and-Hold-Schaltungen) und einem Analog-Digital-Wandler 18 wieder in ein digitales Signal umgesetzt. Um eine hohe Genauigkeit zu erreichen und einen großen Wertebereich bei den Eingangs- und Ausgangssignalen abdecken zu können, sind also Digital-Analog-Wandler und Analog-Digital- Wandler mit entsprechend vielen Bits notwendig.

Diese nicht-erfindungsgemäße Schaltung weist mehrere Nachteile auf: So verringern die Leitungswiderstände der Zeilen- bzw. Spaltenleitungen zwischen einzelnen Zellen die Genauigkeit der Vektor-Matrix-Multiplikation, da diese Leitungswiderstände ebenso wie die Memristoren die Stärke der Ströme beeinflussen. Weiter führt ein stärkerer Strom in einer Spaltenleitung zu einem größeren Spannungsabfall entlang der Spaltenleitung, was zu Ungenauigkeiten führt, da die Berechnung darauf beruht, dass das Potential einer Spaltenleitung dem Masse-Potential entspricht. Dies gilt ebenso für die Zeilenleitungen, je stärker der Strom ist, desto größer ist der Spannungsabfall entlang der Zeilenleitungen, so dass die Eingangsspannungen einzelner Speicherzellen verschoben werden. Weiterhin, kann in Abhängigkeit von den Gewichten ein hoher Energieverbrauch und damit verbunden eine Abwärme auftreten. Relativ aufwendige bzw. komplizierte Digital-Analog-Wandler und Analog-Digital-Wandler sind notwendig. Diese Nachteile sind umso größer, je größer die Matrix ist.

Figur 2 stellt einen Gewichtsbereich 20 einer Matrixschaltung und einen damit verbundenen Addierer 22 gemäß einer bevorzugten Ausführungsform dar, die in einer erfindungsgemäßen Skalarproduktschaltung Verwendung finden können. Der Gewichtsbereich 20 umfasst eine Vielzahl von matrixförmig in Zeilen und Spalten angeordneten Speicherzellen 24 (von denen nur einige stellvertretend mit Bezugszeichen versehen sind). Es sind beispielhaft nur einige der im Gewichtsbereich 20 umfassten Speicherzellen dargestellt, wobei sich die dargestellten Speicherzellen 24 in den ersten beiden und in der letzten Zeile befinden und weitere Speicherzellen durch Punkte angedeutet sind.

Weiterhin sind durch den Gewichtsbereich 20 verlaufenden Zeilenleitungen 26 und Spaltenleitungen 28 der Matrixschaltung dargestellt (auch hier sind wieder nur einige stellvertretend mit Bezugszeichen versehen). Wie bei den Speicherzellen sind wieder nur einige Zeilenleitungen (nämlich die ersten beiden und die letzte Zeilenleitung der Matrixschaltung) und einige Spaltenleitungen aller durch den Gewichtsbereich verlaufenden Zeilen- bzw. Spaltenleitungen dargestellt. Im Allgemeinen umfasst eine Matrixschaltung mehrere Gewichtsbereiche, wobei die Zeilenleitungen durch alle Gewichtsbereiche der Matrixschaltung verlaufen (d.h. für alle Gewichtsbereiche der Matrixschaltung dieselben sind), so dass an die Zeilenleitungen angelegte Spannungen an den damit verbunden Speicherzellen aller Gewichtsbereiche anliegen.

Jede der Speicherzellen 24 ist mit einer Zeilenleitung 26 und einer Spaltenleitung 28 verbunden und eingerichtet, einen Strom in die Spaltenleitung zu leiten, dessen Stärke von einem Speicherzustand der Speicherzelle und einer an der mit der Speicherzelle verbundenen Zeilenleitung anliegenden Spannung abhängig ist. Die Zeilenleitungen sind nicht direkt mit den Spaltenleitungen verbunden, sondern lediglich indirekt über die Speicherzellen. Jede Speicherzelle weist zwei unterschiedliche Speicherzustände, einen ersten und einen zweiten, auf, wobei, wenn die an der mit der Speicherzelle verbundenen Zeilenleitung anliegende Spannung Null ist (0 V) beträgt, unabhängig davon, ob sich die Speicherzelle im ersten oder zweiten Speicherzustand befindet, kein Strom (Stromstärke gleich Null) fließen soll, d.h. kein Strom in die mit der Speicherzelle verbundene Spaltenleitung fließt bzw. geleitet wird.

Der Gewichtsbereich 20 ist in mehrere Abschnitte eingeteilt, die jeweils eine oder mehrere Spalten bzw. Spaltenleitungen umfassen. Diese Abschnitte werden als Bitabschnitte 30 bezeichnet, wobei in der Figur beispielhaft drei Bitabschnitte dargestellt sind. Verschiedene Bitabschnitte 30 können eine unterschiedliche Anzahl von Spalten umfassen, wobei bevorzugt ist, dass alle Bitabschnitte in einem Gewichtsbereich die gleiche Anzahl von Spalten umfassen. In der Figur sind in jedem Bitabschnitt 30 stellvertretend drei Spalten dargestellt und mögliche weitere Spalten wieder durch Punkte angedeutet (selbstverständlich kann die Spaltenanzahl in einem Bitabschnitt auch kleiner als drei sein). Die mit einer Spaltenleitung in demselben Bitabschnitt verbundenen Speicherzellen sind so eingerichtet, dass, wenn sie sich im zweiten Speicherzustand befinden und an den jeweiligen Zeilenleitungen eine Spannung mit einem vorbestimmten Spannungswert ungleich Null anliegt, der von jeder Speicherzelle des Bitabschnitts in die jeweilige Spaltenleitung geleitete Strom die gleiche Stromstärke aufweist. Vorzugsweise weisen alle Speicherzellen eines Bitabschnitts, weiter bevorzugt alle Speicherzellen eines Gewichtsbereichs, noch weiter bevorzugt alle Speicherzellen einer Matrixschaltung, am meisten bevorzugt alle Speicherzellen der Skalarproduktschaltung, den gleichen Aufbau bzw. die gleichen Eigenschaften auf, d.h. sie weisen die gleichen Speicherzustände auf und die Stromstärke des Stroms, der in die jeweilige Spaltenleitung geleitet wird, ist bei gleichem Speicherzustand und gleicher Spannung jeweils gleich groß.

Die Speicherzellen können beispielsweise, wie in den Figuren 1A und 1 B, durch Memristoren realisiert werden, die jeweils eine Zeilenleitung mit einer Spaltenleitung verbinden. Dabei werden Memristoren mit einem hohen An/Aus-Verhältnis (on/off- ratio) verwendet, d.h. die Leitfähigkeit des Memristors im zweiten Speicherzustand (An-Zustand) ist sehr viel höher als die Leitfähigkeit im ersten Spei- cherzustand (Aus-Zustand), das An/Aus-Verhältnis ist also das Verhältnis von Leitfähigkeit des Memristors im zweiten Speicherzustand zu Leitfähigkeit des Memristors im ersten Speicherzustand. Dadurch wird, wenn an den entsprechenden Zeilenleitungen eine Spannung anliegt, durch die Memristoren, die sich im ersten Speicherzustand befinden, relativ wenig Strom in die Spaltenleitung geleitet und durch die Memristoren, die sich im zweiten Speicherzustand befinden, relativ wenig Strom in die Spaltenleitung geleitet. Der Gesamtstrom ist dann im Wesentlichen durch die Anzahl der sich im zweiten Speicherzustand befindlichen Memristoren (und an deren Zeilenleitungen eine von Null verschiedene Spannung anliegt) bestimmt, wobei eine relativ kleine (zum An/Aus-Verhältnis proportionale) Abweichung aufgrund der sich im ersten Speicherzustand befindlichen Memristoren (und an deren Zeilenleitungen eine von Null verschiedene Spannung anliegt) auftritt. Bei der Wandlung in einen Binärwert durch den Analog- Digital-Wandler erfolgt im Prinzip eine Rundung, so dass diese Abweichung, vorausgesetzt sie ist klein genug, nicht berücksichtigt wird und der Binärwert der Anzahl der sich im zweiten Speicherzustand befindlichen Memristoren, an deren Zeilenleitungen eine von Null verschiedene Spannung anliegt, entspricht. Wie groß die Abweichung maximal sein darf hängt vom Analog-Digital-Wandler, insbesondere von dessen Genauigkeit, d.h. von der Anzahl der Bits (bzw. signifikante Stellen) des Binärwerts in den der Analog-Digital-Wandler den analogen Stromstärkewert wandelt, ab. Hierbei ist weiter zu berücksichtigen, dass die Anzahl der Bits des Binärwerts mindestens gleich der Anzahl der Zeilenleitungen der Matrixschaltung plus eins sein muss, um alle digital unterschiedlichen Zustände unterscheiden zu können.

Das An/Aus-Verhältnis beträgt bevorzugt mindestens 100, weiter bevorzugt mindestens 1000, wobei, abhängig von der Technologie der Memristoren, eine obere Grenze bei etwa 10000 liegt. Die zugehörige Anzahl N der Bits des Analog- Digital-Wandlers beträgt bevorzugt 5 oder weniger (bevorzugt 4 oder weniger, wenn das An/Aus-Verhältnis im Bereich zwischen 100 und kleiner 1000 liegt), wobei die Anzahl der Zeilenleitungen der Matrixschaltung jeweils maximal 2 N -1 ist. Gemäß einer anderen, bevorzugten Ausführung sind die Speicherzellen so eingerichtet, dass, wenn sich die Speicherzelle im ersten Zustand befindet, kein Strom in die damit verbundene Spaltenleitung geleitet wird, zumindest solange sich die an der Zeilenleitung angelegte Spannung in einem vorbestimmten Spannungsbereich befindet, der 0 V und den vorbestimmten Spannungswert umfasst. Dieser Spannungsbereich wird durch die Ausgestaltung der Speicherzelle bestimmt und stellt sozusagen den Arbeitsbereich der Speicherzelle dar, wobei für typische Speicherzellen Programmierspannungen außerhalb dieses Spannungsbereichs verwendet werden. Befindet sich die Speicherzelle im zweiten Speicherzustand, so fließt ein Strom mit einer von Null verschiedenen Stromstärke, wenn sich die anliegende Spannung hinreichend von Null unterscheidet, insbesondere, wenn die anliegende Spannung den vorbestimmten Spannungswert aufweist. Die Speicherzellen realisieren auf diese Weise eine logische UND- Verknüpfung zwischen dem Speicherzustand und der angelegten Spannung, wobei der erste Speicherzustand einer logischen 0 entspricht, der zweite Speicherzustand einer logischen 1 entspricht, eine angelegte Spannung von im Wesentlichen 0 V einer logischen 0 entspricht und eine angelegte Spannung von im Wesentlichen ungleich 0 V, insbesondere mit dem vorbestimmte Spannungswert, einer logischen 1 entspricht. "Im Wesentlichen" bezieht sich hier darauf, dass entsprechende Spannungsbereiche vorhanden sein können, die entsprechend interpretiert werden, dies hängt wiederum von der genauen Ausgestaltung der Speicherzellen ab.

Eine Implementierung entsprechender Speicherzellen, die eine UND- Verknüpfung realisieren, kann z.B. durch Halbleiterschaltelemente mit einem (programmierbaren) Speicherzustand erfolgen, die in Abhängigkeit von einer an einem Steueranschluss des Halbleiterschaltelements anliegenden Spannung und dem Speicherzustand zwischen einem leitenden und einem nichtleitenden Zustand schalten. Der Steueranschluss ist dann mit der Zeilenleitung verbunden, ein Ausgang des Halbleiterschaltelements ist mit der Spaltenleitung verbunden, und ein Eingang des Halbleiterschaltelements ist mit einer Stromquelle verbunden, wobei das Halbleiterschaltelement die Strecke zwischen Eingang und Ausgang zwischen dem leitenden und dem nichtleitenden Zustand schaltet. Konkret können als Halbleiterschaltelemente ferroelektrische Feldeffekttransistoren (FeFET) oder Floating-Gate-Metalloxid-Feldeffekttransistoren (FGMOS, Feldeffekttransistor mit schwebendem Gate) verwendet werden. Bei beiden kann die Schwellenspannung durch eine Programmierung verschoben werden, so dass Speicherzustände realisiert werden können. Bei FeFETs ist ein ferroelektrisches Material zwischen der Gateelektrode des FeFET und der Source-Drain- Strecke vorgesehen, dessen Polarisation die Schwellenspannung verschiebt. Der Speicherzustand entspricht der Polarisation des ferroelektrischen Materials. Bei FGMOSs ist zwischen der Gateelektrode des und der Source-Drain-Strecke ein isoliertes, sogenanntes schwebendes Gate (floating Gate) vorgesehen, in dem eine elektrische Ladung gespeichert werden kann, durch die die Schwellenspannung verschoben wird. Der Speicherzustand entspricht dann der gespeicherten Ladung. In beiden Fällen erfolgt die Programmierung durch Anlegen geeigneter (relativ hoher) Programmierspannungen.

Werden Feldeffekttransistoren (FET) mit verschiedenen Speicherzuständen verwendet, insbesondere FeFETs oder FGMOSs, kann für jede Spalte zusätzlich zu der Spaltenleitung eine Stromzufuhrleitung vorgesehen sein, die mit einer Stromquelle bzw. Spannungsversorgung verbunden ist. In Figur 5 ist ein beispielhafter Aufbau einer entsprechenden Speicherzelle 24 dargestellt: die Zeilenleitung 26 ist mit dem Gate 52 des FET 50 verbunden, der Sourceanschluss 54 des FET 50 ist mit der Spaltenleitung verbunden und der Drainanschluss 56 des FET 50 ist mit der Stromzufuhrleitung 58 der Spalte verbunden. Als Speicher für die Speicherzustände dient ein entsprechende Materialschicht 60 des FET 50; das Bezugszeichen 60 bezieht sich als auf die ferroelektrische Schicht bei einem FeFET bzw. das schwebende Gate bei einem FGMOS.. Speicherzustände (Polarisation bei einem FeFET, Ladung im schwebenden Gate bei einem FGMOS) sind dann wie folgt bestimmt: im ersten Speicherzustand ist die Drain-Source-Strecke nichtleitend, unabhängig davon ob eine Spannung von 0 V oder eine Spannung mit dem vorbestimmten Spannungswert (z.B. 5 V) anliegt; im zweiten Speicherzustand ist die Drain-Source-Strecke nichtleitend, wenn eine Spannung von 0 V anliegt, und leitend, wenn der vorbestimmte Spannungswert anliegt, wobei für verschiedene FETs die Stromstärke des Stroms gleich ist. In Figur 2 sind die Spaltenleitungen 28 mit einem Analog-Digital-Wandler 32 verbunden, der einen Binärwert entsprechend einer Stromstärke des zum Analog- Digital-Wandler fließenden Stroms bestimmt, wobei die Spaltenleitungen eines Bitabschnitts mit demselben Analog-Digital-Wandler verbunden sind. Für jede Spalte der Matrixschaltung und insbesondere jedes Gewichtsbereichs der Mat- rixschaltung ist jeweils ein Spaltenauswahlschaltelement (nicht dargestellt) vorgesehen, mit dem die jeweilige Spalte aktiviert werden kann. Nur wenn die Spalte aktiviert ist, wird durch deren Spaltenleitung ein Strom am Analog-Digital- Wandler 32 bereitgestellt, dessen Stromstärke durch die an den Zeilenleitungen anliegenden Spannungen und die Speicherzustände der sich in der Spalte befindenden Speicherzellen bestimmt ist (d.h. die Stromstärke kann auch Null sein, etwa wenn sich alle Speicherzellen der Spalte im ersten Speicherzustand befinden, oder wenn an allen Zeilenleitungen eine Spannung von 0 V anliegt). Ist andererseits die Spalte nicht aktiviert, wird kein Strom durch die entsprechende Spaltenleitung bereitgestellt.

Die Spaltenauswahlschaltelemente können (auch abhängig vom Aufbau der Speicherzellen) auf verschiedene Weise implementiert werden. Beispielsweise können in den Spaltenleitungen in der Verbindung zwischen den Speicherzellen und dem jeweiligen Analog-Digital-Wandler Schaltelemente vorgesehen sein, die diese Verbindung trennen und herstellen (bzw. schließen) können, dies können Halbleiterschaltelemente, insbesondere Feldeffekttransistoren sein, deren Steueranschluss über entsprechend vorzusehende Steuerleitungen angesteuert wird. Auch kann in jeder Speicherzelle ein entsprechendes Schaltelement vorgesehen sein, wobei dann die Steueranschlüsse all dieser Schaltelemente innerhalb einer Spalte mit einer vorzusehenden Steuerleitung verbunden sind. Werden Memris- toren verwendet, können diese, in jeder Speicherzelle vorgesehenen Schaltelemente, z.B. in Reihe mit den Memristoren geschaltet sein (d.h. bei FETs ist die Drain-Source-Strecke in Reihe mit den Memristoren geschaltet). Werden FeFETs oder FGMOSs als Speicherzellen verwendet, deren Drainanschluss, wie oben beschrieben, mit einer in jeder Spalte vorgesehenen Stromzufuhrleitung verbunden ist, können an den Stromzufuhrleitungen Schaltelemente (insbesondere Halbleiterschaltelemente, z.B. FETs) angeordnet sein, die die Verbindung der Stromzufuhrleitungen zur Stromquelle trennen und herstellen können. Diese Möglichkeiten sind lediglich Beispiele, weitere Ausgestaltungen der Spaltenauswahlschaltelemente sind, je nach Aufbau der Speicherzellen bzw. der Mat- rixschaltung, ebenso denkbar.

In der Verbindung zwischen den Spaltenleitungen und dem Analog-Digital- Wandler 32 kann ein Transimpedanzverstärker (nicht dargestellt, vgl. Figuren 1A und 1 B) vorgesehen sein, der den Strom in eine dazu proportionale Spannung wandelt, die vom Analog-Digital-Wandler verarbeitet wird. Ein solcher Transimpedanzverstärker stellt gleichzeitig ein Bezugspotential bzw. Massepotential (virtuelle Masse) an den damit verbundenen Spaltenleitungen bereit, wie im Zusammenhang mit den Figuren 1A und 1B beschrieben, gegenüber dem die Spannungen (insbesondere die Spannungen an den Zeilenleitungen) gemessen werden.

Der Transimpedanzverstärker kann auch als Teil des Analog-Digital-Wandlers betrachtet werden. Im Allgemeinen (im Sinne dieser Anmeldung) ist unter Ana- log-Digital-Wandler also ein Stromstärkenmesselement zu verstehen, dass die Stromstärke eines an einem Eingang des Stromstärkenmesselements fließenden elektrischen Stroms bestimmt und als Binärwert (in durch den Analog-Digital- Wandler bestimmten Einheiten) ausgibt, wobei gleichzeitig ein Massepotential, bzw. eine virtuelle Masse, am Eingang bereit gestellt wird. Dieses Massepotential ist das Bezugspotential, auf das sich Spannungen, insbesondere die an den Zeilenleitungen anliegenden Spannungen, beziehen.

In der Ausführungsform der Figur 2 ist weiterhin für jeden Bitabschnitt eine Bitschiebeeinheit 34 vorgesehen, die mit dem jeweiligen Analog-Digital-Wandler verbunden ist, d.h. der von dem Analog-Digital-Wandler bestimmte Binärwert wird an die Bitschiebeeinheit weitergegeben. Jede Bitschiebeeinheit 34 ist eingerichtet, die Bits des Binärwerts um eine vorgebbare Anzahl von Bits zu verschieben, wobei die Bits in eine Richtung verschoben werden, die arithmetisch einer Multiplikation des Binärwerts mit einer der vorgegebenen Anzahl entsprechenden Zweierpotenz entspricht (d.h. wenn um k Bits verschoben wird, wird der Binärwert mit 2 k multipliziert). Nach Verschieben der Bits wird der von der Bitschie- beinheit bestimmte bzw. ausgegebene binäre Wert auch als "verschobener Binärwert" bezeichnet.

Die Bitschiebeeinheiten 34 des Gewichtsbereichs 20 sind wiederum mit dem Addierer 22 verbunden, d.h. die Bitschiebeeinheiten 34 übertragen die "verschobenen" Binärwerte an den Addierer 22. Der Addierer 22 ist dazu eingerichtet, Binärwerte, die er empfängt, d.h. die von den Bitschiebeneinheiten 34 übertragen verschobenen Binärwerte, aufzusummieren und einen Summenbinärwert zu bilden.

Bei der Verwendung der Skalarproduktschaltung bzw. der Matrixschaltung, d.h. bei der Berechnung von Skalarprodukten von Eingangsvektoren mit vorbestimmten Gewichtsvektoren, werden in jeder Zeile eines Gewichtsbereichs jeweils die Bits eines als binärer Wert gegebenen Gewichtselements eines Gewichtsvektors gespeichert, wobei in jedem Bitabschnitt jeweils ein Bit des Gewichtselements gespeichert wird, d.h. in einer der Spalten des Bitabschnitts. Die Bits verschiedener Gewichtselemente eines Gewichtsvektors werden dabei in denselben Spalten gespeichert, wobei jeder Bitabschnitt einer bestimmten Wertigkeit der Bits der binären Gewichtselemente entspricht. Anders gesagt ist für jeden Gewichtsvektor in den Bitabschnitten jeweils genau eine Spalte vorgesehen, in deren Speicherzellen die Bits der binären Gewichtselemente des Gewichtsvektors mit einer bestimmten Wertigkeit gespeichert werden. Die Speicherzellen einer Zeile in den dem Gewichtvektor zugeordneten Spalten speichern also die Bits eines Gewichtselements.

"Speichern eines Bits" bedeutet, dass, wenn das Bit den Wert 0 hat, in der Speicherzelle der erste Speicherzustand programmiert wird, und, wenn das Bit den Wert 1 hat, in der Speicherzelle der zweite Speicherzustand programmiert wird. Ein "Vektor" ist hier eine Menge bzw. ein Tupel mehrerer Zahlenwerte, die in einer Reihenfolge geordnet sind, wobei jeder dieser Zahlenwerte ein "Element" des Vektors darstellt. Als "Skalarprodukt" zweier Vektoren gleicher Länge (d.h. mit gleich vielen Elementen) wird wie üblich die Summe über die Produkte einander entsprechend der Reihenfolge zugeordneter Elemente aus den beiden Vektoren bezeichnet. In weiteren Spalten der Bitabschnitte können die Bits weiterer Gewichtsvektoren gespeichert werden, die z.B. einer anderen Schicht eines CNN zugeordnet sind.

Bei der Verwendung werden zunächst die einem Gewichtsvektor zugeordneten Spalten aktiviert (die dem Gewichtsvektor nicht zugeordneten Spalten sind nicht aktiviert). An den Zeilenleitungen werden dann der Reihe nach in mehreren (entsprechend der Anzahl der Bits der Eingangselemente) Durchgängen die Bits der Eingangselemente des Eingangsvektors angelegt, d.h. es wird eine Spannung entsprechend dem Wert des Bits erzeugt und an die entsprechende Zeilenleitung angelegt. Dabei wird, wenn der Wert des Bits 0 ist, eine Spannung von 0 V erzeugt und, wenn der Wert des Bits 1 ist, eine Spannung entsprechend dem vorbestimmten Spannungswert erzeugt.

In jedem Durchgang wird durch jeden der Analog-Digital-Wandler 32 ein Binärwert bestimmt, der der Stromstärke des Stroms in der jeweiligen Spaltenleitung (von denen in den Bitabschnitten nur eine aktiviert ist) entspricht. Diese Binärwerte werden durch die Bitschiebeeinheiten 34 um eine Anzahl von Bits, die jeder der Bitschiebeeinheiten in jedem Durchgang jeweils vorgegeben wird, verschoben, d.h. die Bits der Binärwerte werden um die jeweils vorgegebene Anzahl verschoben. Die einer Bitschiebeeinheit vorgegebene Anzahl, um die die Bits verschoben werden, ist dabei gleich der Summe i + j aus der Wertigkeit i der Bits der Eingangselemente, die in dem jeweiligen Durchgang an die Zeilenleitungen angelegt werden, und der Wertigkeit j der Bits der Gewichtselemente, die in dem Bitabschnitt, dem die Bitschiebeeinheit zugeordnet ist, gespeichert sind. Der Binärwert wird also im Prinzip mit dem Faktor 2 i+j multipliziert um den verschobenen Binärwert zu bilden.

Die "Wertigkeit" eines Bits b f eines Binärwerts B , der wie folgt geschrieben wird

N

(2-adische Darstellung): B = '^b i 2‘ , wobei N eine ganze Zahl größer oder gleich 0 ist und b f die Werte 0 oder 1 annehmen kann, ist durch den Index z definiert. Die verschobenen Binärwerte werden in jedem Durchgang an den Addierer 22 übertragen, der diese innerhalb jedes Durchgangs und über die mehreren Durchgänge hinweg zu einem Summenbinärwert aufsummiert, der, nach dem letzten Durchgang (d.h. nachdem die letzten Bits des Eingangsvektors angelegt wurden), das Skalarprodukt des Eingangsvektors mit dem Gewichtsvektor ist. Vor dem ersten Durchgang sollte der Summenbinärwert im Addierer offensichtlich auf Null gesetzt werden.

Bevorzugt weist eine Matrixschaltung mehrere Gewichtsbereiche auf, durch die dieselben Zeilenleitungen verlaufen. So können mehrere Gewichtsvektoren gespeichert und gleichzeitig das Skalarprodukt mit demselben Eingangsvektor gebildet werden. Jeder Gewichtsbereich ist dann mit einem anderen Addierer verbunden. Dies ist in der folgenden Figur 3 illustriert.

In Figur 3 stellt eine bevorzugte Skalarproduktschaltung mit mehreren Addierern 22 und mit einer Matrixschaltung 40, die mehrere Gewichtsbereiche 20 aufweist, dar. Die matrixförmig in Zeilen und Spalten angeordneten Speicherzellen 24 sind hier lediglich als kleine Quadrate illustriert, ohne ihren inneren Verbindungen mit den Zeilenleitungen 26 und Spaltenleitungen 28 im Einzelnen darzustellen. Wie in Figur 2 sind wieder nur einige der Elemente beispielhaft eingezeichnet und weitere durch Punkte angedeutet, wobei wieder nur einige der eingezeichneten Elemente stellvertretend mit Bezugszeichen versehen sind.

Jeder der Gewichtsbereiche 20 ist wie im Zusammenhang mit Figur 2 beschrieben aufgebaut, d.h. umfasst jeweils einen oder mehrere Bitabschnitte 30, die jeweils eine oder mehrere Spalten aufweisen. Die Speicherelemente 24 sind wieder mit einer Zeilenleitung 26 und einer Spaltenleitung 28 verbunden, wobei die Speicherzellen wie vorstehend beschrieben funktionieren bzw. eingerichtet sind. Die Zeilenleitungen 26 und die Spaltenleitungen 28 sind lediglich am Rand der Matrixanordnung der Speicherzellen angedeutet, diese sollen sich allerdings durch die Matrixanordnung erstrecken (vgl. Figur 2). Insbesondere erstrecken sich die Zeilenleitungen 26 durchgehend durch alle Gewichtsbereiche 20. Jedem Bitabschnitt 30 ist ein Analog-Digital-Wandler 32 (Stromstärkenmesselement wie oben beschrieben) und ein damit verbundenes Bitschiebeelement 34 zugeordnet, wobei der Analog-Digital-Wandler 32 mit den Spaltenleitungen 28 des Bitabschnitts 30 verbunden ist. Auch hier gelten wieder die im Zusammenhang mit Figur 2 gemachten Erläuterungen. Insbesondere ist wieder jede Spalte durch nicht dargestellte Spaltenauswahlschaltelemente gezielt aktivierbar bzw. auswählbar. Die Bitschiebelemente 34 jedes Gewichtsbereichs 20 sind mit einem Addierer 22 verbunden, der wie oben erläutert, die verschobenen Binärwerte aufsummiert.

Jeder Gewichtsbereich 20 ist also aufgebaut wie im Zusammenhang mit Figur 2 beschrieben, wobei jedem Gewichtsbereich ein Addierer 22 zugeordnet ist, der die jeweiligen verschobenen Binärwerte, die aus den Bitabschnitten 20 bzw. den Analog-Digital-Wandlern 32 in Verbindung mit den Bitschiebeelementen 34 innerhalb des jeweiligen Gewichtsbereichs 20 erhalten werden, aufsummiert. Der Unterschied zur Schaltung der Figur 2 liegt darin, dass mehrere (nicht nur ein) Gewichtsbereiche 20 mit jeweilig zugeordneten Addierern 22 entlang der Spaltenleitungen 26 vorgesehen sind, so dass mehrere verschiedene Gewichtsvektoren in den verschiedenen Gewichtsbereichen gespeichert werden können und gleichzeitig (d.h. die Bits des Eingangsvektors müssen nur einmal an die Zeilenleitungen angelegt werde) verschiedene Skalarprodukte (die als Summenbinärwerte an den Addierern 22 erhalten werden) der Gewichtsvektoren mit ein und demselben Eingangsvektor berechnet werden können. Dies ist hilfreich bei CNNs (convolutional neural networks), in denen eine Schicht mehrere sogenannte 'Feature Maps' umfasst, die jeweils durch Faltung mit verschiedenen Filterkernen (die den Gewichtsvektoren entsprechen) erhalten werden.

Bevorzugt werden Analog-Digital-Wandler mit möglichst wenig Bits, insbesondere mit nur 4, 3 oder 2 Bits, verwendet, was vorteilhaft ist, da dadurch ein einfacher Aufbau der Analog-Digital-Wandler ermöglicht wird. Das impliziert, dass die entsprechende Matrixschaltung nur eine begrenzte Anzahl von Zeilen aufweisen darf, um alle möglichen unterschiedlichen Stromstärkenwerte an den Zeilenleitungen unterscheiden zu können (für einen n-Bit-Analog-Digital-Wandler sollte die Anzahl der Zeilen gleich oder kleiner als 2 n -1 sein). Andererseits weisen in CNNs verwendete Filterkerne (d.h. Gewichtsvektoren) oftmals deutlich mehr Einträge auf, z.B. mehrere Hundert oder auch über Tausend Einträge. Für deren Verarbeitung kann bevorzugt eine Skalarproduktschaltung mit mehreren Mat- rixschaltungen verwendet werden, wie sie in Figur 4 gezeigt ist.

Figur 4 stellt eine bevorzugte Skalarproduktschaltung mit mehreren Matrixschal- tungen 40 dar. Beispielhaft sind zwei Matrixschaltungen 40 dargestellt, wobei im Allgemeinen auch mehr Matrixschaltungen (durch Punkte angedeutet) verwendet werden können, z.B. auch mehr als 10, mehr als 50 oder mehr als 100, die wie dargestellt miteinander zusammengeschaltet sind, d.h. mit Addierern 22 verbunden sind.

Jede Matrixschaltung 40 in Figur 4 entspricht der in Figur 3 dargestellten Mat- rixschaltung, d.h. umfasst mehreren Gewichtsbereiche 20 (auch nur ein Gewichtsbereich ist möglich, dies wäre dann die Matrixschaltung der Figur 2) mit jeweils einem oder mehreren Bitabschnitten 30. Hier gelten wieder die Ausführungen im Zusammenhang mit den Figuren 2 und 3. Die Gewichtsbereiche 20 (die jeweils die gestrichelt dargestellten Bereiche und die damit verbundenen, jeweils zwei, gezeichneten Bitabschnitte 30 umfassen) sind in Figur 4 der Übersichtlichkeit halber und um die Verbindungen mit den Addierern in die 2- dimensionale Figur einzeichnen zu können mit etwas Abstand zueinander gezeichnet. Die Zeilenleitungen 26 erstrecken sich durch alle Gewichtsbereiche einer Matrixschaltung hindurch, auch wenn sie in der Figur nur am Rand links angedeutet sind. Ein solcher Abstand ist in einer realen Implementierung in einem Chip nicht notwendig, sondern dient hier nur dazu um die Struktur erkennbar zu machen.

Die Skalarproduktschaltung umfasst mehrere Addierer 22, wobei hier wesentlich ist, dass jeder Addierer 22 mit den Bitschiebeeinheiten 34 mehrerer Gewichtsbereiche, die in verschiedenen Matrixschaltungen liegen, verbunden ist, hier mit den Bitschiebeeinheiten in jeweils zwei Gewichtsbereichen 20, die in den zwei Matrixschaltungen 40 liegen. Sind mehr Matrixschaltungen vorhanden, kann ein Addierer mit den Bitschiebeeinheiten (genau) eines Gewichtsbereichs in jeder der mehreren Matrixschaltungen verbunden sein. Die Verbindungen sind hier als durch die Abstände zwischen den Gewichtsbereichen verlaufend dargestellt. In einer realen Implementierung in einem Chip verlaufen sie beispielsweise in einer unterschiedlichen Ebene des Chips.

Die Gewichtselemente eines für eine einzelne Matrixschaltung zu langen Gewichtsvektors können auf die mehreren Matrixschaltungen aufgeteilt werden, wobei die Gewichtselemente in Gewichtsbereichen gespeichert werden, die mit demselben Addierer verbunden sind. Die Bits der Eingangselemente der Eingangsvektoren werden an die entsprechenden Zeilenleitungen der mehreren Matrixschaltungen angelegt.

Figur 6 stellt ein Ablaufdiagramm eines bevorzugten Verfahrens gemäß der Erfindung dar. Im Verfahren werden binäre Skalarprodukte eines oder mehrerer Eingangsvektoren, mit einem oder mehreren vorbestimmten Gewichtsvektoren unter Verwendung einer Skalarproduktschaltung berechnet. Die Elemente der Eingangsvektoren und der Gewichtsvektoren sind jeweils in binärer Form, d.h. als binäre Eingangselemente und binäre Gewichtselemente gegeben.

Die Skalarproduktschaltung weist Addierer entsprechend der Anzahl vorbestimmter Gewichtsvektoren auf, d.h. mindestens ebenso viele Addierer wie Gewichtsvektoren, wobei jedem Addierer ein oder mehrere Gewichtsbereiche zugeordnet sind, die, wenn mehrere Gewichtsbereiche zugeordnet sind, in verschiedenen Matrixschaltungen der Skalarproduktschaltung liegen, wobei jeder Addierer mit den Bitschiebeelementen verbunden ist, die über die Analog-Digital-Wandler mit den Bitabschnitten verbunden sind, die in den dem Addierer zugeordneten Gewichtsbereichen umfasst sind. Dies entspricht einer Skalarproduktschaltung wie im Zusammenhang mit den Figuren 2 bis 4 beschrieben.

Im Verfahren wird in Schritt 102 zunächst jedem Gewichtsvektor ein Addierer zugeordnet und darauf aufbauend werden jedem Gewichtsvektor diejenigen Gewichtsbereiche zugeordnet, die dem Addierer, der dem jeweiligen Gewichtsvektor zugeordnet ist, zugeordnet sind. ln Schritt 104 werden die Bits der binären Gewichtselemente gespeichert. Dabei werden für jeden Gewichtsvektor die Bits der Gewichtselemente in Speicherzellen gespeichert, die in jeweils einer Spalte eines Bitabschnitts eines dem Gewichtsvektor zugeordneten Gewichtsbereichs enthalten sind. Die Bits eines Gewichtselements werden jeweils in einer Zeile gespeichert und die Bits verschiedener Gewichtselemente des Gewichtsvektors, die die gleiche Wertigkeit aufweisen und die im gleichen Gewichtsbereich gespeichert werden, werden im gleichen Bitabschnitt dieses Gewichtsbereichs gespeichert. Speichern eines Bits in einer Speicherzelle heißt dabei, dass die Speicherzelle in den ersten Speicherzustand gesetzt wird, wenn das Bit den Wert 0 aufweist, und die Speicherzelle in den zweiten Speicherzustand gesetzt wird, wenn das Bit den Wert 1 aufweist.

In Schritt 106 werden die Spalten, in denen Bits der Gewichtselemente gespeichert wurden, aktiviert, die anderen Spalten sind nicht aktiviert.

Anschließend wird einer der Eingangsvektoren, für den die Skalarprodukte berechnet werden sollen, gewählt und für diesen Eingangsvektor in Schritt 108 die Summenbinärwerte der Addierer auf Null gesetzt. In Schritt 110 werden die Bits der Eingangselemente des jeweils gewählten Eingangsvektors, die die gleiche Wertigkeit aufweisen, ausgewählt.

In Schritt 112 werden Spannungen entsprechend den Bits an den Zeilenleitungen angelegt (dies kann auch als Anlegen von Bits bezeichnet werden), wobei an verschiedene Zeilenleitungen Bits verschiedener Eingangselemente angelegt werden. Dabei wird eine Spannung von 0 V angelegt, wenn das jeweilige Bit den Wert 0 aufweist, und eine Spannung mit dem vorbestimmten Spannungswert angelegt, wenn das jeweilige Bit den Wert 1 aufweist.

In Schritt 114 werden Binärwerte durch die Analog-Digital-Wandler bestimmt, die wie oben beschrieben den Stromstärken der Ströme in den aktivierten Spaltenleitungen entsprechen.

Diese Binärwerte werden in Schritt 116 durch die Bitschiebeeinheiten verschoben, um verschobene Binärwerte zu erhalten, wobei jeder Bitschiebeinheit eine Anzahl von Bits vorgegeben wird, um die der Binärwert verschoben werden soll. Die vorgegebene Anzahl von Bits wird bestimmt als Summe von Wertigkeit der Bits der Eingangselemente, entsprechend derer Spannungen angelegt sind, und von Wertigkeit der Bits der Gewichtselemente, die in dem Bitabschnitt gespeichert sind, mit dem die jeweilige Bitschiebeeinheit über den Analog-Digital- Wandler verbunden ist.

Die verschobenen Binärwerte durch die Addierer in Schritt 118 addiert, wobei klarerweise von jedem Addierer diejenigen verschobenen Binärwerte addiert werden, die von den Bitschiebeeinheiten, die mit dem jeweiligen Addierer verbunden sind, bestimmt und übertragen werden.

In Schritt 120 wird geprüft, ob die Schritte 110 bis 118 bereits für die Bits der Eingangselemente aller Wertigkeiten durchgeführt wurden. Wenn nicht, wird mit Schritt 110 (Bits mit bestimmter Wertigkeit wählen) fortgefahren, wobei darin Bits mit einer anderen, noch nicht verwendeten Wertigkeit ausgewählt werden. Wenn ja, werden die Summenbinärwerte in Schritt 122 als binäre Skalarprodukte des gewählten Eingangsvektors mit dem Gewichtsvektor ausgelesen.

In Schritt 124 wird geprüft, ob bereits Skalarprodukte für alle Eingangsvektoren berechnet wurden (Schritte 108 bis 122). Wenn nicht, wird erneut mit Schritt 108 (Nullsetzen) fortgefahren, wobei ein Eingangsvektor gewählt wird, für den die Skalarprodukte noch nicht berechnet wurden. Wenn ja, wird das Verfahren in Schritt 126 beendet.

Wie erwähnt können weitere Gewichtsvektoren in anderen Spalten der Bitabschnitte gespeichert werden, beim Speichern dieser Gewichtsvektoren wird wie oben in Schritt 104 beschrieben vorgegangen. Diese Spalten können dann aktiviert werden, um Skalarprodukte dieser weiteren Gewichtsvektoren mit möglicherweise anderen Eingangsvektoren zu bilden.