DE102022130488A1 - Verarbeitungsschaltung - Google Patents

Verarbeitungsschaltung Download PDF

Info

Publication number
DE102022130488A1
DE102022130488A1 DE102022130488.4A DE102022130488A DE102022130488A1 DE 102022130488 A1 DE102022130488 A1 DE 102022130488A1 DE 102022130488 A DE102022130488 A DE 102022130488A DE 102022130488 A1 DE102022130488 A1 DE 102022130488A1
Authority
DE
Germany
Prior art keywords
operand
significant bit
bit portion
multiplier
sum
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102022130488.4A
Other languages
English (en)
Inventor
Erich Wenger
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102022130488.4A priority Critical patent/DE102022130488A1/de
Priority to US18/485,550 priority patent/US20240168713A1/en
Publication of DE102022130488A1 publication Critical patent/DE102022130488A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

Es wird eine Verarbeitungsschaltung beschrieben, die einen ersten Multiplizierer zum Multiplizieren der niedrigstwertigen Teile eines ersten und eines zweiten Operanden aufweist, einen zweiten Multiplizierer zum Multiplizieren der Summe eines höchstwertigen und des niedrigstwertigen Teils des ersten Operanden mit der Summe eines höchstwertigen und des niedrigstwertigen Teils des zweiten Operanden und des niedrigstwertigen Teils des zweiten Operanden, einen dritten Multiplizierer, um die höchstwertigen Teile des ersten und des zweiten Operanden zu multiplizieren, und eine Ausgabeschaltung, um eine Ausgabe zu bestimmen, die das Ergebnis des ersten Multiplizierers, das Ergebnis des dritten Multiplizierers mal zwei hoch zweimal der Anzahl der Bits der niedrigstwertigen Bitanteile und, falls aktiviert, das Ergebnis des zweiten Multiplizierers minus die Ergebnisse des ersten und des dritten Multiplizierers mal zwei hoch die Bitanzahl der niedrigstwertigen Teile enthält.

Description

  • Die vorliegende Offenbarung bezieht sich auf Verarbeitungsschaltungen.
  • Bei der kryptographischen Verarbeitung von Daten, wie z. B. der Berechnung einer Signatur, der Ver- oder Entschlüsselung von Daten, ist die Multiplikation ganzer Zahlen eine typische Operation, die sehr oft durchgeführt werden muss. Dies ist insbesondere bei der asymmetrischen Kryptographie basierend auf ECC (Elliptic Curve Cryptography) oder RSA (Rivest, Shamir, Adleman) aber auch PQC (Post-Quantum Cryptography) der Fall. Um eine hohe Verarbeitungsgeschwindigkeit zu erreichen, ist eine in Bezug auf Fläche und Stromverbrauch optimierte Schaltung zur effizienten Durchführung von Multiplikationen, insbesondere im Rahmen der Kryptographie, wünschenswert.
  • Gemäß verschiedenen Ausführungsformen wird eine Schaltung bereitgestellt, aufweisend
    • • einen ersten Eingang, eingerichtet zum Empfangen eines ersten Operanden, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des ersten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des ersten Operanden enthält, besteht;
    • • einen zweiten Eingang, eingerichtet zum Empfangen eines zweiten Operanden, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des zweiten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des zweiten Operanden enthält, besteht;
    • • einen Steuereingang, eingerichtet zum Empfangen eines Volloperanden-Aktivierungssignals;
    • • einen ersten Multiplizierer, eingerichtet zum Multiplizieren des niedrigstwertigen Bitanteils des ersten Operanden mit dem niedrigstwertigen Bitanteil des zweiten Operanden;
    • • einen zweiten Multiplizierer, eingerichtet zum Multiplizieren der Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden mit der Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden;
    • • einen dritten Multiplizierer, eingerichtet zum Multiplizieren des höchstwertigen Bitanteils des ersten Operanden mit dem höchstwertigen Bitanteil des zweiten Operanden und
    • • eine Ausgabeschaltung, eingerichtet
      • ◯ eine Ausgabesumme zu ermitteln, die Folgendes enthält
        • ▪ das Ergebnis der Multiplikation mit dem ersten Multiplizierer,
        • ▪ das Ergebnis der Multiplikation mit dem dritten Multiplizierer mal zwei hoch zweimal der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und
        • ▪ je nachdem, ob das Volloperanden-Aktivierungssignal gesetzt ist oder nicht, das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und
      • ◯ die Ausgabesumme als Ergebnis auszugeben.
  • In den Zeichnungen beziehen sich ähnliche Bezugszeichen im Allgemeinen auf die gleichen Teile in den unterschiedlichen Ansichten. Die Zeichnungen sind nicht notwendigerweise maßstabsgetreu, sondern veranschaulichen im Allgemeinen die Prinzipien der Erfindung. In der folgenden Beschreibung werden verschiedene Aspekte unter Bezugnahme auf die folgenden Zeichnungen beschrieben, in denen:
    • 1 zeigt ein Beispiel für eine Vorrichtung zur Datenverarbeitung.
    • 2 zeigt eine Schaltung zur Multiplikation von zwei 64-Bit-Operanden mit einem Volloperandenmodus und einem SIMD-Modus (Single Instruction Multiple Data) gemäß einer Ausführungsform.
    • 3 zeigt eine Verarbeitungsschaltung, die zur Berücksichtigung eines additiven Eingangsoperanden eingerichtet ist, gemäß einer Ausführungsform.
    • 4 zeigt eine Verarbeitungsschaltung, die zur Berücksichtigung eines additiven Eingangsoperanden eingerichtet ist, gemäß einer anderen Ausführungsform.
    • 5 zeigt eine Verarbeitungsschaltung von zwei 64-Bit-Operanden mit einem Vollmultiplikationsmodus und einem SIMD-Modus für vier parallele 16*16-Bit-Multiplikationen gemäß einer Ausführungsform.
    • 6 zeigt eine Verarbeitungsschaltung gemäß einer Ausführungsform.
  • Die folgende detaillierte Beschreibung bezieht sich auf die beigefügten Zeichnungen, die zur Veranschaulichung spezifische Details und Aspekte dieser Offenbarung zeigen, in denen die Erfindung ausgeführt werden kann. Andere Aspekte können verwendet werden, und strukturelle, logische und elektrische Änderungen können vorgenommen werden, ohne vom Anwendungsbereich der Erfindung abzuweichen. Die verschiedenen Aspekte dieser Offenbarung schließen sich nicht unbedingt gegenseitig aus, da einige Aspekte dieser Offenbarung mit einem oder mehreren anderen Aspekten dieser Offenbarung kombiniert werden können, um neue Aspekte zu bilden.
  • 1 zeigt ein Beispiel für eine Datenverarbeitungsvorrichtung 100.
  • Die Datenverarbeitungsvorrichtung 100 kann ein Computer, eine Steuereinrichtung oder ein Mikrocontroller sein, z.B. in einem Fahrzeug, z.B. eine ECU (Electronic Control Unit) in einem Auto. Es kann sich auch um eine integrierte Schaltung (IC) einer Chipkarte handeln, wie z. B. eine Chipkarte mit irgendeines Formfaktor, z. B. für einen Pass oder für ein SIM (Subscriber Identity Module).
  • Die Datenverarbeitungsvorrichtung 100 verfügt über eine integrierte Schaltung in Form eines Chips 101. Der Chip 101 kann ein Steuerchip sein und einen Prozessor 102 und einen Speicher 103, z.B. einen RAM (Random Access Memory), implementieren. Es sei darauf hingewiesen, dass der Prozessor 102 und der Speicher 103 auch auf separaten Chips implementiert sein können. Der Chip 101 kann z. B. auch ein RFID-Chip (Radio Frequency Identification) sein oder ein SIM-Modul (Subscriber Identity Module) für ein Mobiltelefon implementieren. Der Chip 101 kann für eine Sicherheitsanwendung vorgesehen sein, d. h. er kann ein Sicherheitschip sein. Der Speicher 103 speichert beispielsweise geheime Daten, die für eine kryptografische Operation verwendet werden, z. B. zur Authentifizierung eines Benutzers oder zum Ver-/Entschlüsseln oder Signieren von Daten, z. B. gemäß einem asymmetrischen Kryptographieschema. Dementsprechend kann die Datenverarbeitungsvorrichtung eine kryptografische Verarbeitungsvorrichtung sein, d. h. eine Vorrichtung, die eine kryptografische Verarbeitung von Daten durchführt.
  • Asymmetrische Kryptographie basierend auf ECC (Elliptic Curve Cryptography) oder RSA (Rivest, Shamir, Adleman) erfordert für die Kryptographie der nächsten Generation Multiplikationen einer bestimmten Bitlänge (z. B. 64 Bit), während bei der gitterbasierten PQC (Post Quantum Cryptography) im Gegensatz dazu Bitmultiplikationen von geringerer Länge zu erwarten sind, da viele der gitterbasierten PQC-Parametersätze Moduli von weniger als 32 Bit verwenden.
  • Um die Vorteile eines 64-Bit-Datenpfads zu nutzen, können die PQC-Operanden in einer SIMD-Methode (single instruction multiple data) angeordnet werden, bei der zwei 32-Bit-Werte gleichzeitig mit einem 64-Bit-Datenpfad verarbeitet werden.
  • In diesem Zusammenhang kann eine 64x64-Bit-Multiplikation als Vollmultiplikation (d.h. Volloperandenverarbeitung) betrachtet werden, bei der ein erster Wert, repräsentiert durch 64 Bit, mit einem zweiten Wert, ebenfalls repräsentiert durch 64 Bit, multipliziert wird, um ein 128-Bit-Produkt zu erzeugen. Zwei 32x32-Bit-Multiplikationen können stattdessen als SIMD-Operation (single instruction multiple data) betrachtet werden, um zwei 64-Bit-Produkte zu erzeugen: Von einem ersten 64-Bit-Operanden werden die höheren 32 Bits (d. h. die höchstwertigen 32 Bits) als erster Wert genommen und mit den höheren 32 Bits eines zweiten 64-Bit-Operanden (als zweiter Wert genommen) multipliziert und parallel dazu werden die niedrigeren 32 Bits (d. h. die niedrigstwertigen 32 Bits) des ersten als dritter Wert genommen und mit den niedrigeren 32 Bits des zweiten 64-Bit-Operanden (als vierter Wert genommen) multipliziert.
  • Gemäß verschiedenen Ausführungsformen ist in der datenverarbeitenden Vorrichtung (hier als Teil des Prozessors 102) eine Hardware-Verarbeitungsschaltung 104 vorgesehen, die einen Volloperandenmodus (z. B. Multiplikation von zwei 64-Bit-Werten) und einen SIMD-Modus (z. B. zwei Multiplikationen von je zwei 32-Bit-Werten) unterstützt.
  • 2 zeigt eine Verarbeitungsschaltung 200 zur Multiplikation von zwei 64-Bit-Operanden mit einem Volloperanden-Modus und einem SIMD-Modus gemäß einer Ausführungsform.
  • Die Verarbeitungsschaltung 200 empfängt zwei 64-Bit-Operanden, die als a[63:0] und b[63:0] bezeichnet werden. Die niedrigstwertige Hälfte der Bits des ersten Operanden a0:=a[31 :0] wird in einem ersten Register 201 gespeichert. Die niedrigstwertige Hälfte der Bits des zweiten Operanden b0:=b[31 :0] wird in einem zweiten Register 202 gespeichert. Die höchstwertige Hälfte der Bits des ersten Operanden a1:=a[63:32] wird in einem dritten Register 203 gespeichert. Die höchstwertige Hälfte der Bits des zweiten Operanden b1:=b[63:32] wird in einem vierten Register 204 gespeichert. Es sei darauf hingewiesen, dass unter einem Register ein Satz von Ein-Bit-Speicherelementen (in der Regel Flipflops) zur Speicherung mehrerer Bits zu verstehen ist.
  • Ferner empfängt ein erster Addierer 205 die niedrigstwertige Hälfte der Bits des ersten Operanden a0 und die höchstwertige Hälfte der Bits des ersten Operanden a1, addiert sie und speichert das Ergebnis in einem fünften Register 207.
  • In ähnlicher Weise empfängt ein zweiter Addierer 206 die niedrigstwertige Hälfte der Bits des zweiten Operanden b0 und die höchstwertige Hälfte der Bits des zweiten Operanden b1, addiert sie und speichert das Ergebnis in einem sechsten Register 208.
  • Es ist zu beachten, dass jede Hälfte der Bits (oder allgemein jeder „Bitanteil“, falls die Operanden nicht 50:50 geteilt werden) als der Binärwert interpretiert wird, den die darin enthaltenen Bits repräsentieren, wenn sie z. B. von einem Addierer oder Multiplizierer verarbeitet werden.
  • Ein erster Multiplizierer 209 erhält dann a0 und b0 aus dem ersten Register 201 und dem zweiten Register 201 und berechnet a0*b0 (bezeichnet als prod_00).
  • Ein zweiter Multiplizierer 210 erhält a0+a1 und b0+b1 aus dem fünften Register 207 und dem sechsten Register 208 und berechnet (a0+a1)*(b0+b1) (bezeichnet als prod_0101.
  • Ein dritter Multiplizierer 211 erhält dann a1 und b1 aus dem dritten Register 203 und dem vierten Register 204 und berechnet a1*b1 (bezeichnet als prod_11).
  • Ein dritter Addierer 212 berechnet dann temp:=prod_0101-prod_00-prod_11. Dies kann als Korrekturterm für eine Volloperandenmultiplikation angesehen werden.
  • Die Verarbeitungsschaltung 200 weist ferner eine Ausgabeschaltung 213 auf, die ein UND-Gatter 214 aufweist, das temp und ein Volloperanden-Aktivierungssignal empfängt, sowie einen vierten Addierer 215, der die Ausgabe des UND-Gatters 214 sowie prod_00 und prod_11 empfängt und die Ausgabe „Produkt“ der Verarbeitungsschaltung erzeugt.
  • Wenn das Volloperanden-Aktivierungssignal gesetzt ist, erhält der Viertaddierer 215 prod_00, prod_11 und temp. Er berechnet dann die Ausgabe als Produkt = prod _ 11 * W 2 + temp * W + prod _ 00
    Figure DE102022130488A1_0001
    wobei W = 2 32
    Figure DE102022130488A1_0002
    derart, dass Produkt = a 1 b 1 * W 2 + ( a 0 b 1 + a 1 b 0 ) * W + a 0 b 0 = ( a 1 * W + a 0 ) * ( b 1 * W + b 0 )
    Figure DE102022130488A1_0003
    was das richtige Ergebnis für die Vollmultiplikation ist. Um zu sehen, dass dies wahr ist, ist zu beachteten, dass temp = prod _ 0101 prod _ 00 prod _ 11 = ( a 0 + a 1 ) * ( b 0 + b 1 ) a 0 b 0 a 1 b 1 = a 0 b 1 + a 1 b 0.
    Figure DE102022130488A1_0004
  • Wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist, erhält der vierte Addierer 215 prod_00 und prod_11 und 0 anstelle von temp (oder, anders ausgedrückt, temp wird auf 0 gesetzt). Er berechnet die Ausgabe also als Produkt = prod _ 11 * W 2 + prod _ 00
    Figure DE102022130488A1_0005
    was das richtige Ergebnis für die SIMD-Multiplikation ist, nämlich das Wertepaar (prod_11, prod_00) = (aib1, a0b0), jeweils repräsentiert durch 64 Bit, da das Ergebnis jeder 32*32-Bit-Multiplikation 64bit haben kann.
  • Es ist zu beachten, dass der SIMD-Modus aktiviert ist, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist. Wenn also das Volloperanden-Aktivierungssignal auf einen Pegel gesetzt wird, der die Vollmultiplikation deaktiviert, ist dies gleichbedeutend mit der Aktivierung des SIMD-Modus, d. h. mit dem Setzen eines SIMD-Aktivierungssignals (das im logischen Sinne invers zum Volloperanden-Aktivierungssignal ist, d. h. es wird gesetzt, wenn das andere nicht gesetzt ist und umgekehrt).
  • Durch Aktivierung des SIMD-Modus kann der Hardware-Multiplizierer 200 also direkt zur Berechnung des SIMD-Ergebnisses (Single-Instruction-Multiple-Data) verwendet werden: a0b0, alb1. Mit dem UND-Gatter 214 wird der „temp“-Term (d.h. der Volloperandenkorrekturterm) gegatet und die beiden Produkte können direkt an der Ausgabe des Hardware-Multiplizierers 200 abgelesen werden. Es sei darauf hingewiesen, dass während des SIMD-Betriebs (d.h. einer Folge von SIMD-Multiplikationen) die Aktualisierung des fünften Registers 207 und des sechsten Registers 208 abgeschaltet werden kann und der zweite Addierer 210 im Leerlauf ist, so dass der Stromverbrauch im Vergleich zum Vollmultiplikationsmodus reduziert wird.
  • Im Vollmultiplikationsmodus, d. h. wenn der SIMD-Modus nicht aktiviert ist, wird die Berechnung des Produkts als Produkt = a 1 b 1 * W 2 + ( a 0 b 1 + a 1 b 0 ) * W + a 0 b 0 = ( a 1 * W + a 0 ) * ( b 1 * W + b 0 )
    Figure DE102022130488A1_0006
    mit nur drei Multiplikationen erreicht (die Multiplikationen mit W und W2 können mit Shiftern durchgeführt werden), statt mit vier Multiplikationen, wenn man die direkte Berechnung Produkt = ( a 1 * W + a 0 ) * ( b 1 * W + b 0 ) = a 1 b 1 * W 2 + a 1 b 0 * W + a 0 b 1 * W + a 0 b 0
    Figure DE102022130488A1_0007
    verwendet.
    Dies spart ca. 20 % der Chipfläche ein.
  • Darüber hinaus sind gemäß einer Ausführungsform, wie in 2 veranschaulicht, der erste Addierer 205 und der zweite Addierer 206 vor dem fünften Register 207 bzw. dem sechsten Register 208 (die z. B. als Rising-Edge-Flip-Flops implementiert sind) angeordnet, so dass der kritische Pfad (z. B. zwischen dem fünften Register 207 und dem sechsten Register 208 und einem Register, in dem die Ausgabe „Produkt“ gespeichert wird) zu einem Multiplizierer führt, der den direkten Berechnungsansatz verwendet. Dadurch, dass der erste Addierer 205 und der zweite Addierer 206 vor dem fünften Register 207 und dem sechsten Register 208 angeordnet sind, kann in Verbindung mit dem Multiplikationsansatz, bei dem nur drei Multiplizierer 209, 210, 211 verwendet werden, im Vergleich zum direkten Berechnungsansatz etwa 30 % Leistung eingespart werden.
  • Gemäß verschiedenen Ausführungsformen kann der Hardware-Multiplizierer ferner die Berücksichtigung eines additiven Eingangsoperanden c (der z. B. ebenfalls 128 Bit hat) ermöglichen, so dass er a*b+c berechnet (d. h. eine affine Operation anstelle einer Multiplikation durchführt). Dies ist in 3 veranschaulicht.
  • 3 zeigt eine Verarbeitungsschaltung 300, die eingerichtet ist, um einen additiven Eingangsoperanden gemäß einer Ausführungsform zu berücksichtigen.
  • Ähnlich wie die Verarbeitungsschaltung 200 von 2 weist die Verarbeitungsschaltung 300 einen ersten Multiplizierer 309, einen zweiten Multiplizierer 310, einen dritten Multiplizierer 311, einen dritten Addierer 312, ein UND-Gatter 314 und einen vierten Addierer 315 auf. Der Einfachheit halber wird der Teil vor den Multiplizierern 309, 310, 311 in 3 weggelassen. Er ist ähnlich wie in 2 (d. h. er weist die Addierer 205, 206 und die Register 201, 202, 203, 204, 207, 208 auf).
  • Am Ausgang des vierten Addierers 314 wird die niedrigstwertige Hälfte der Bits des Ergebnisses „Produkt“ einem fünften Addierer 316 und die höherwertige Hälfte der Bits des Ergebnisses „Produkt“ einem sechsten Addierer 317 zugeführt. Dem fünften Addierer 316 wird ferner die niedrigstwertige Hälfte der Bits (c0) des additiven Eingangsoperanden c zugeführt und dem sechsten Addierer 317 die höchstwertige Hälfte der Bits (c1) des additiven Eingangsoperanden c. Die Übertrag-Ausgabe des fünften Addierers 316 wird in ein zweites UND-Gatter 318 eingegeben, das als zweite Eingabe das Volloperanden-Aktivierungssignal erhält. Die Ausgabe des zweiten UND-Gatters 318 wird dem Übertragseingang des sechsten Addierers 317 zugeführt. Dies ermöglicht die Berechnung von a*b+c im Vollmultiplikationsmodus und von a1*b1+c1 und a0*b0+c0 im SIMD-Modus.
  • Das Paar der Ausgabewerte des fünften Addierers 318 und des sechsten Addierers 317 bildet das affine Operationsergebnis „Produkt_plus_c“.
  • Der fünfte Addierer 316, der sechste Addierer 317 und das zweite UND-Gatter 318 können auch vor den vierten Addierer 315 geschaltet werden, wie in 4 veranschaulicht.
  • 4 zeigt eine Verarbeitungsschaltung 400, die zur Berücksichtigung eines additiven Eingangsoperanden eingerichtet ist, gemäß einer anderen Ausführungsform.
  • Ähnlich wie die Verarbeitungsschaltung 300 weist die Verarbeitungsschaltung 400 einen ersten Multiplizierer 409, einen zweiten Multiplizierer 410, einen dritten Multiplizierer 411, einen dritten Addierer 412, ein UND-Gatter 414, einen vierten Addierer 415, einen fünften Addierer 416 und einen sechsten Addierer 417 auf. Auch hier wird der Einfachheit halber der Teil vor den Multiplizierern 409, 410, 411 in 4 weggelassen.
  • Der fünfte Addierer 416 empfängt prod_00 und die niedrigstwertige Hälfte der Bits (c0) des additiven Eingangsoperanden c und der sechste Addierer 417 empfängt prod_11 und die höchstwertige Hälfte der Bits (c0) des additiven Eingangsoperanden c.
  • In der Ausführungsform von 4 wird die Propagation des Übertrags vom fünften Addierer 416 zum sechsten Addierer 417 zum vierten Addierer 416 hin verschoben (er kann in einen nachfolgenden Taktzyklus verschoben werden, indem er in einem Register gespeichert und von dort aus propagiert wird). Dies bedeutet, dass das zweite UND-Gatter 418 wegfällt und die Übertrag-Ausgabe des fünften Addierers 416 in den vierten Addierer 416 geht. Die SIMD-Ausgabe Produkt_plus_c_simd = (a1*b1+c1, a0*b0+c0) kann dann direkt vor dem vierten Addierer 416 abgegriffen werden (ohne dass die Operation des vierten Addierers 415 im kritischen Pfad liegt). Der vierte Addierer 416 propagiert den Übertrag und berechnet die volle Multiplikationsausgabe Produkt_plus_c_integer = a*b+c.
    Der fünfte Addierer 416 und der sechste Addierer 417 können als Teil der Ausgabeschaltung 413 betrachtet werden. In ähnlicher Weise können der fünfte Addierer 316 und der sechste Addierer 317 von 3 als Teil der Ausgabeschaltung 313 betrachtet werden.
  • Es ist zu beachten, dass in den obigen Beispielen die beiden Eingangsoperanden zwar eine Bitlänge von 64 haben, aber auch andere Bitlängen der Operanden und Werte möglich sind (z. B. können sowohl a als auch b 128 Bit haben und jeweils in zwei 64-Bit-Hälften aufgeteilt werden usw.).
  • Darüber hinaus kann auch eine Architektur verwendet werden, die jeden Operanden in mehr als zwei Teile (oder Unterwörter) unterteilt. Als Beispiel wird im Folgenden eine Schaltung beschrieben, bei der zwei 64-Bit-Operanden in jeweils vier 16-Bitanteile unterteilt werden (und nicht in zwei 32-Bitanteile wie in den Beispielen der 2 bis 4).
  • 5 zeigt eine Verarbeitungsschaltung 500 für zwei 64-Bit-Operanden mit einem Vollmultiplikationsmodus und einem SIMD-Modus für zwei parallele 32*32-Bit-Multiplikationen oder für vier parallele 16*16-Multiplikationen gemäß einer Ausführungsform.
  • Die Verarbeitungsschaltung 500 weist eine erste Teilschaltung 501 und eine zweite Teilschaltung 502 auf, die jeweils der Verarbeitungsschaltung 200 der 2 entsprechen, mit dem Unterschied, dass die Eingänge zu den Multiplizierern eine Bitbreite von 16 bzw. 17 Bit anstelle von 32 bzw. 33 Bit aufweisen, da die 64-Bit-Operanden a[63:0] und b[63:0] in 16-Bitanteile a3:=a[63:48], a2:=a[47:32], a1:=a[31:16], a0:=a[15:0] und b3:=b[63:48], b2:=b[47:32], b1:=b[31:16], b0:=b[15:0] aufgeteilt werden, die von den Teilschaltungen 501, 502 anstelle der 32-Bitanteile wie in den Beispielen der 2 bis 4 verarbeitet werden.
  • Ferner empfängt ein erster Addierer 503 die niedrigstwertige Hälfte der Bits des ersten Operanden (a0, a1) und die höchstwertige Hälfte der Bits des ersten Operanden (a2, a3), addiert sie und speichert das Ergebnis in einem ersten Register 505. In ähnlicher Weise erhält ein zweiter Addierer 504 die niedrigstwertige Hälfte der Bits des zweiten Operanden (b0, b1) und die Hälfte der höchstwertigen Bits des zweiten Operanden (b2, b3), addiert sie und speichert das Ergebnis in einem zweiten Register 506. Diese beiden Werte werden mit einem Multiplizierer 507 multipliziert.
  • Das Ergebnis der ersten Teilschaltung 501 (bezeichnet als „prod_low“), das Ergebnis der zweiten Teilschaltung 502 (bezeichnet als „prod_high“) und das Ergebnis des Multiplizierers 503 (bezeichnet als „prod_0123“) werden einem dritten Addierer 508 zugeführt, der prod_0123-prod_low_prod_high berechnet. Das Ergebnis wird als „inter_0123“ bezeichnet.
  • Die Verarbeitungsschaltung 500 weist ferner eine Ausgabeschaltung 509 auf, die ein UND-Gatter 510 aufweist, das inter_0123 und das Volloperanden-Aktivierungssignal empfängt, sowie einen vierten Addierer 511, der die Ausgabe des UND-Gatters 510 sowie prod_low und prod_high empfängt und das Ergebnis „Produkt“ der Verarbeitungsschaltung erzeugt.
  • Im Vollmultiplikationsmodus sollte „Produkt“ gleich sein mit
    ( a 3 * W 3 + a 2 * W 2 + a 1 * W + a 0 ) * ( b 3 * W 3 + b 2 * W 2 + b 1 * W + b 0 )
    Figure DE102022130488A1_0008
    Analog zum Fall der Aufteilung jedes Operanden in zwei Teile in 2 wird dies durch die Schaltung 500 wie folgt erreicht.
  • In der ersten Teilschaltung 501 werden die folgenden Produkte berechnet (wobei die Additionen wiederum vor den Registern durchgeführt werden können, um die Länge des kritischen Pfades zu verringern): prod _ 00 = a 0 b 0
    Figure DE102022130488A1_0009
    prod _ 01 = ( a 0 + a 1 ) * ( b 0 + b 1 )
    Figure DE102022130488A1_0010
    prod _ 11 = a 1 b 1
    Figure DE102022130488A1_0011
  • In der zweiten Teilschaltung 501 werden die folgenden Produkte berechnet (wobei die Additionen wiederum vor den Registern durchgeführt werden können, um die Länge des kritischen Pfades zu verringern): prod _ 22 = a 2 b 2
    Figure DE102022130488A1_0012
    prod_23 = ( a2 + a3 ) * ( b2 + b3 )
    Figure DE102022130488A1_0013
    prod_33 = a3b3
    Figure DE102022130488A1_0014
  • Außerdem berechnen die erste Teilschaltung 501 und die zweite Teilschaltung 502, ähnlich wie die Berechnung von temp in der Schaltung 200 von 2 inter_01 = ( prod_01 a1b1 a0b0 )
    Figure DE102022130488A1_0015
    bzw. inter_23 = ( prod_23 a3b3 a2b2 )
    Figure DE102022130488A1_0016
    und berechnen als Ausgabe (wenn die Vollmultiplikationsaktivierung gesetzt ist), prod_low = a1b1 * W 2 + inter_01 * W + a0b0
    Figure DE102022130488A1_0017
    und prod_high = a3b3 * W 2 + inter_02 * W + a2b2
    Figure DE102022130488A1_0018
  • Der „mittlere“ Multiplizierer 507 berechnet prod_0123 = ( a1 * W + a0 + b1 * W + b0 ) * ( a3 * W + a2 + b3 * W + b2 )
    Figure DE102022130488A1_0019
  • Der Addierer 508 berechnet inter_0123 = prod_0123 prod_low prod_high
    Figure DE102022130488A1_0020
  • Die Ausgabeschaltung 509 berechnet dann (bei Aktivierung der Vollmultiplikation Produkt = prod_high * W 4 + inter_0123 * W 2 + prod_low
    Figure DE102022130488A1_0021
    was das richtige Ergebnis für die Multiplikation von a und b ist.
  • Die Produkte a0b0, a1b1, a2b2, a3b3 werden als SIMD-Ergebnis ausgegeben (wenn die Vollmultiplikationsaktivierung nicht gesetzt ist), da inter_01, inter_23 und inter_0123 gagatet sind.
  • Für eine Vollmultiplikation von zwei 64-Bit-Wörtern sind also vier 16-Bit-, zwei 17-Bit- und eine 33-Bit-Multiplikation erforderlich. Die Schaltung 500 ist etwa 10 % größer als das Zwei-Wort-Teile-Design von 2 und weist ein ähnliches Leistungsprofil auf.
  • Zusammenfassend lässt sich sagen, dass gemäß verschiedenen Ausführungsformen eine Verarbeitungsschaltung vorgesehen ist, wie in 6 veranschaulicht.
  • 6 zeigt eine Verarbeitungsschaltung 600 gemäß einer Ausführungsform.
  • Die Verarbeitungsschaltung 600 weist einen ersten Eingang 601 auf, der zum Empfangen eines ersten Operanden eingerichtet ist, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des ersten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des ersten Operanden enthält, besteht, und einen zweiten Eingang 602, der zum Empfangen eines zweiten Operanden eingerichtet ist, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des zweiten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des zweiten Operanden enthält, besteht.
  • Die Verarbeitungsschaltung 600 weist ferner einen Steuereingang 603 auf, der zum Empfangen eines Volloperanden-Aktivierungssignals eingerichtet ist, einen ersten Multiplizierer 604, der zum Multiplizieren des niedrigstwertigen Bitanteils des ersten Operanden mit dem niedrigstwertigen Bitanteil des zweiten Operanden eingerichtet ist, einen zweiten Multiplizierer 605, eingerichtet zum Multiplizieren der Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden mit der Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden, und einen dritten Multiplizierer 606, eingerichtet zum Multiplizieren des höchstwertigen Bitanteils des ersten Operanden mit dem höchstwertigen Bitanteil des zweiten Operanden.
  • Die Verarbeitungsschaltung 600 weist ferner eine Ausgabeschaltung 607 auf, die eingerichtet ist
    • • eine Ausgabesumme zu bestimmen, die Folgendes enthält (d. h. eine Summe von oder eine Summe von mindestens)
      • ◯ das Ergebnis der Multiplikation mit dem ersten Multiplizierer,
      • ◯ das Ergebnis der Multiplikation mit dem dritten Multiplizierer mal zwei hoch zweimal der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und
      • ◯ je nachdem, ob das Volloperanden-Aktivierungssignal gesetzt ist oder nicht, das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und
    • • die Ausgabesumme als Ergebnis auszugeben.
  • Gemäß verschiedenen Ausführungsformen verfügt eine Verarbeitungsschaltung über eine Architektur zur Durchführung einer Operation, der eine Multiplikation enthält, wobei die Multiplikation in drei Teilmultiplikationen aufgeteilt ist, von denen zwei die SIMD-Ergebnisse und eine den Korrekturterm für eine volle Operation erzeugt. Der Korrekturterm für die volle Operation kann gegatet werden, so dass die Schaltung zwischen einem SIMD-Modus und einem Volloperandenmodus umgeschaltet werden kann.
  • In den obigen und den folgenden Beispielen und Ausführungsformen bezieht sich der Begriff „Summe“ auf die arithmetische Summe. Außerdem kann ein „Addierer“ eine „Additionsschaltung " bedeuten. Dennoch können „Addierer“ und „Additionsschaltung“ verwendet werden, um zwei Komponenten zu unterscheiden (die beide die Funktion eines Addierers haben).
  • Im Folgenden werden verschiedene Beispiele beschrieben.
  • Beispiel 1 ist eine Verarbeitungsschaltung, wie sie oben mit Bezug auf 6 beschrieben wurde.
  • Beispiel 2 ist die Verarbeitungsschaltung von Beispiel 1, die einen ersten Addierer aufweist, der so eingerichtet ist, dass er die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden berechnet und die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden in einem ersten Register speichert, und einen zweiten Addierer aufweist, der so eingerichtet ist, dass er die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden berechnet und die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden in einem zweiten Register speichert, wobei der zweite Multiplizierer eingerichtet ist, um die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden aus dem ersten Register zu empfangen und um die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden aus dem zweiten Register zu empfangen.
  • Beispiel 3 ist die Verarbeitungsschaltung von Beispiel 2, die weitere Register aufweist, die eingerichtet sind, um den höchstwertigen Bitanteil des ersten Operanden, den niedrigstwertigen Bitanteil des ersten Operanden, den höchstwertigen Bitanteil des zweiten Operanden und den niedrigstwertigen Bitanteil des zweiten Operanden zu speichern, wobei der erste Multiplizierer eingerichtet ist, den niedrigstwertigen Bitanteil des ersten Operanden und den niedrigstwertigen Bitanteil des zweiten Operanden von den weiteren Registern zu empfangen, und der dritte Multiplizierer eingerichtet ist, den höchstwertigen Bitanteil des ersten Operanden und den höchstwertigen Bitanteil des ersten Operanden von den weiteren Registern zu empfangen.
  • Beispiel 4 ist die Verarbeitungsschaltung irgendeines der Beispiele 1 bis 3, die ferner einen dritten Eingang aufweist, der eingerichtet ist, um einen dritten Operanden zu empfangen, wobei die Ausgabesumme ferner den dritten Operanden enthält und wobei die Ausgabeschaltung so konfiguriert ist, dass sie einen Übertrag von einem niedrigstwertigen Bitanteil der Ausgabesumme zu einem höchstwertigen Bitanteil der Ausgabesumme propagiert, wenn das Volloperanden-Aktivierungssignal gesetzt ist.
  • Beispiel 5 ist die Verarbeitungsschaltung von Beispiel 4, wobei die Ausgabeschaltung eine erste Additionsschaltung aufweist, die eingerichtet ist, die Summe des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und dem dritten Operanden zu bestimmen, eine zweite Additionsschaltung, die eingerichtet ist, die Summe des Ergebnisses der Multiplikation mit dem zweiten Multiplizierer und dem dritten Operanden zu bestimmen, und eine dritte Additionsschaltung, die eingerichtet ist, zu addieren
    • die von der ersten Additionsschaltung ermittelte Summe,
    • die von der zweiten Additionsschaltung ermittelte Summe,
    • wenn das Volloperanden-Aktivierungssignal gesetzt ist, das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und wenn das Volloperanden-Aktivierungssignal gesetzt ist, den Übertrag der von der ersten Additionsschaltung ermittelten Summe.
  • Beispiel 6 ist die Verarbeitungsschaltung von Beispiel 5, wobei die Ausgabeschaltung eingerichtet ist, um die Propagierung des Übertrags vom niedrigstwertigen Bitanteil der Ausgabesumme zum höherwertigen Bitanteil der Ausgabesumme zu sperren, wenn das Volloperandenaktivierungssignal nicht gesetzt ist.
  • Beispiel 7 ist die Verarbeitungsschaltung von Beispiel 5 oder 6, wobei der niedrigstwertige Teil der Ausgabesumme das Zweifache der Anzahl von Bits aufweist, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten.
  • Beispiel 8 ist die Verarbeitungsschaltung irgendeines der Beispiele 1 bis 7, wobei die Ausgabeschaltung so eingerichtet ist, dass sie das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, von der Ausgabesumme weglässt, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist.
  • Beispiel 9 ist die Verarbeitungsschaltung eines der Beispiele 1 bis 8, wobei die Ausgabeschaltung eine Summierschaltung aufweist, die eingerichtet ist, um die Ausgabesumme zu berechnen, und eine Gatter-Schaltung aufweist, die eingerichtet ist, um das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer an die Summierschaltung zu liefern, wenn das Volloperanden-Aktivierungssignal gesetzt ist, und um eine Null an die Summierschaltung zu liefern, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist.
  • Beispiel 10 ist eine Datenverarbeitungsschaltung, die eine erste Teilschaltung und eine zweite Teilschaltung aufweist, die jeweils gemäß der Verarbeitungsschaltung irgendeines der Beispiele 1 bis 9 eingerichtet sind, eine Eingangsschaltung, die so eingerichtet ist, dass sie einen niedrigstwertigen Bitanteil eines ersten Binärwertes als ersten Operanden an die erste Teilschaltung und einen niedrigstwertigen Bitanteil eines zweiten Binärwertes als zweiten Operanden an die erste Teilschaltung liefert, einen zusätzlichen Multiplizierer, der eingerichtet ist, um die Summe des höchstwertigen Bitanteils des ersten Binärwerts und des niedrigstwertigen Bitanteils des ersten Binärwerts mit der Summe des höchstwertigen Bitanteils des zweiten Binärwerts und des niedrigstwertigen Bitanteils des zweiten Binärwerts zu multiplizieren, und eine zusätzliche Ausgabeschaltung, die eingerichtet ist, um eine Ausgabesumme zu bestimmen, die Folgendes enthält
    • das von der ersten Teilschaltung ausgegebene Ergebnis,
    • das von der zweiten Teilschaltung ausgegebene Ergebnis mal zwei hoch zweimal der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Binärwerte jeweils enthalten, und, je nachdem, ob das Volloperanden-Aktivierungssignal gesetzt ist oder nicht, das Ergebnis der Multiplikation mit dem zusätzlichen Multiplizierer abzüglich des von der ersten Teilschaltung ausgegebenen Ergebnisses und abzüglich des von der zweiten Teilschaltung ausgegebenen Ergebnisses, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Binärwerte jeweils enthalten, und
    die Ausgabesumme als Endergebnis auszugeben.
  • Obwohl hier spezifische Ausführungsformen veranschaulicht und beschrieben wurden, wird der normale Fachmann auf dem Stand der Technik erkennen, dass eine Vielzahl alternativer und/oder gleichwertiger Implementierungen anstelle der gezeigten und beschriebenen spezifischen Ausführungsformen verwendet werden können, ohne vom Anwendungsbereich der vorliegenden Erfindung abzuweichen. Die vorliegende Anmeldung soll sich auf irgendwelche Anpassungen oder Variationen der hierin beschriebenen spezifischen Ausführungsformen erstrecken. Daher ist beabsichtigt, dass diese Erfindung nur durch die Ansprüche und deren Äquivalente begrenzt wird.
  • Bezugszeichen
  • 100
    Datenverarbeitungsvorrichtung
    101
    Chip
    102
    Prozessor
    103
    Speicher
    104
    Hardware-Verarbeitungsschaltung
    200
    Verarbeitungsschaltung
    201-204
    Register
    205, 206
    Addierer
    207, 208
    Register
    209-211
    Multiplizierer
    212
    Addierer
    213
    Ausgabeschaltung
    214
    UND-Gatter
    215
    Addierer
    300
    Verarbeitungsschaltung
    309-311
    Multiplizierer
    312
    Addierer
    313
    Ausgabeschaltung
    314
    UND-Gatter
    315-317
    Addierer
    400
    Verarbeitungsschaltung
    409-411
    Multiplizierer
    412
    Addierer
    413
    Ausgabeschaltung
    414
    UND-Gatter
    415-417
    Addierer
    500
    Verarbeitungsschaltung
    501, 502
    Teilschaltungen
    503,504
    Addierer
    505,506
    Register
    507
    Multiplizierer
    508
    Addierer
    509
    Ausgabeschaltung
    510
    UND-Gatter
    511
    Addierer
    600
    Verarbeitungsschaltung
    601, 602
    Operanden-Eingänge
    603
    Steuereingang
    604-606
    Multiplizierer
    607
    Ausgabeschaltung

Claims (10)

  1. Eine Verarbeitungsschaltung, aufweisend: einen ersten Eingang, eingerichtet zum Empfangen eines ersten Operanden, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des ersten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des ersten Operanden enthält, besteht; einen zweiten Eingang, eingerichtet zum Empfangen eines zweiten Operanden, der aus einem höchstwertigen Bitanteil, der die höchstwertigen Bits des zweiten Operanden enthält, und einem niedrigstwertigen Bitanteil, der die niedrigstwertigen Bits des zweiten Operanden enthält, besteht; einen Steuereingang, eingerichtet zum Empfangen eines Volloperanden-Aktivierungssignals; einen ersten Multiplizierer, eingerichtet zum Multiplizieren des niedrigstwertigen Bitanteils des ersten Operanden mit dem niedrigstwertigen Bitanteil des zweiten Operanden; einen zweiten Multiplizierer, eingerichtet zum Multiplizieren der Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden mit der Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden; einen dritten Multiplizierer, eingerichtet zum Multiplizieren des höchstwertigen Bitanteils des ersten Operanden mit dem höchstwertigen Bitanteil des zweiten Operanden; und eine Ausgabeschaltung, eingerichtet zum Bestimmen einer Ausgabesumme, die Folgendes enthält das Ergebnis der Multiplikation mit dem ersten Multiplizierer, das Ergebnis der Multiplikation mit dem dritten Multiplizierer mal zwei hoch zweimal der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und, je nachdem, ob das Volloperanden-Aktivierungssignal gesetzt ist oder nicht, das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und die Ausgabesumme als Ergebnis auszugeben.
  2. Die Verarbeitungsschaltung nach Anspruch 1, die einen ersten Addierer aufweist, der so eingerichtet ist, dass er die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden berechnet und die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden in einem ersten Register speichert, und die einen zweiten Addierer aufweist, der so eingerichtet ist, dass er die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden berechnet und die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden in einem zweiten Register speichert, wobei der zweite Multiplizierer eingerichtet ist, um die Summe des höchstwertigen Bitanteils des ersten Operanden und des niedrigstwertigen Bitanteils des ersten Operanden aus dem ersten Register zu empfangen und um die Summe des höchstwertigen Bitanteils des zweiten Operanden und des niedrigstwertigen Bitanteils des zweiten Operanden aus dem zweiten Register zu empfangen.
  3. Die Verarbeitungsschaltung nach Anspruch 2, die weitere Register aufweist, die so eingerichtet sind, dass sie den höchstwertigen Bitanteil des ersten Operanden, den niedrigstwertigen Bitanteil des ersten Operanden, den höchstwertigen Bitanteil des zweiten Operanden und den niedrigstwertigen Bitanteil des zweiten Operanden speichern, wobei der erste Multiplizierer so eingerichtet ist, dass er den niedrigstwertigen Bitanteil des ersten Operanden und den niedrigstwertigen Bitanteil des zweiten Operanden von den weiteren Registern empfängt, und der dritte Multiplizierer so eingerichtet ist, dass er den höchstwertigen Bitanteil des ersten Operanden und den höchstwertigen Bitanteil des ersten Operanden von den weiteren Registern empfängt.
  4. Die Verarbeitungsschaltung nach irgendeinem der Ansprüche 1 bis 3, die ferner einen dritten Eingang aufweist, der zum Empfangen eines dritten Operanden eingerichtet ist, wobei die Ausgabesumme ferner den dritten Operanden enthält und wobei die Ausgabeschaltung so eingerichtet ist, dass sie einen Übertrag von einem niedrigstwertigen Bitanteil der Ausgabesumme zu einem höchstwertigen Bitanteil der Ausgabesumme propagiert, wenn das Volloperanden-Aktivierungssignal gesetzt ist.
  5. Die Verarbeitungsschaltung nach Anspruch 4, wobei die Ausgabeschaltung eine erste Additionsschaltung aufweist, die eingerichtet ist, die Summe des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und dem dritten Operanden zu bestimmen, eine zweite Additionsschaltung, die eingerichtet ist, die Summe des Ergebnisses der Multiplikation mit dem zweiten Multiplizierer und dem dritten Operanden zu bestimmen, und eine dritte Additionsschaltung, die eingerichtet ist, die von der ersten Additionsschaltung ermittelte Summe, die von der zweiten Additionsschaltung ermittelte Summe, wenn das Volloperanden-Aktivierungssignal gesetzt ist, das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, und wenn das Volloperanden-Aktivierungssignal gesetzt ist, den Übertrag der von der ersten Additionsschaltung ermittelten Summe zu addieren.
  6. Die Verarbeitungsschaltung nach Anspruch 5, wobei die Ausgabeschaltung so eingerichtet ist, dass sie die Propagierung des Übertrags vom niedrigstwertigen Bitanteil der Ausgabesumme zum höchstwertigen Bitanteil der Ausgabesumme deaktiviert, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist.
  7. Die Verarbeitungsschaltung nach Anspruch 5 oder 6, wobei der niedrigstwertige Teil der Ausgabesumme das Zweifache der Anzahl der Bits aufweist, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten.
  8. Die Verarbeitungsschaltung nach irgendeinem der Ansprüche 1 bis 7, wobei die Ausgabeschaltung so eingerichtet ist, dass sie das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Operanden jeweils enthalten, von der Ausgabesumme weglässt, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist.
  9. Die Verarbeitungsschaltung nach einem der Ansprüche 1 bis 8, wobei die Ausgabeschaltung eine Summierschaltung aufweist, die zum Berechnen der Ausgabesumme eingerichtet ist und eine Gatter-Schaltung aufweist, die so eingerichtet ist, dass sie das Ergebnis der Multiplikation mit dem zweiten Multiplizierer abzüglich des Ergebnisses der Multiplikation mit dem ersten Multiplizierer und abzüglich des Ergebnisses der Multiplikation mit dem dritten Multiplizierer an die Summierschaltung liefert, wenn das Volloperanden-Aktivierungssignal gesetzt ist, und dass sie eine Null an die Summierschaltung liefert, wenn das Volloperanden-Aktivierungssignal nicht gesetzt ist.
  10. Eine Datenverarbeitungsschaltung, aufweisend: eine erste Teilschaltung und eine zweite Teilschaltung, jeweils gemäß der Verarbeitungsschaltung nach einem der Ansprüche 1 bis 9, eine Eingangsschaltung, die eingerichtet ist, um einen niedrigstwertigen Bitanteil eines ersten Binärwertes als ersten Operanden an die erste Teilschaltung und einen niedrigstwertigen Bitanteil eines zweiten Binärwertes als zweiten Operanden an die erste Teilschaltung zu liefern; einen zusätzlichen Multiplizierer, eingerichtet zum Multiplizieren der Summe des höchstwertigen Bitanteils des ersten Binärwerts und des niedrigstwertigen Bitanteils des ersten Binärwerts mit der Summe des höchstwertigen Bitanteils des zweiten Binärwerts und des niedrigstwertigen Bitanteils des zweiten Binärwerts; und eine zusätzliche Ausgabeschaltung, eingerichtet zum Bestimmen einer Ausgabesumme, die Folgendes enthält das von der ersten Teilschaltung ausgegebene Ergebnis, das von der zweiten Teilschaltung ausgegebene Ergebnis mal zwei hoch zweimal der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Binärwerte jeweils enthalten, und, je nachdem, ob das Volloperanden-Aktivierungssignal gesetzt ist oder nicht, das Ergebnis der Multiplikation mit dem zusätzlichen Multiplizierer abzüglich des von der ersten Teilschaltung ausgegebenen Ergebnisses und abzüglich des von der zweiten Teilschaltung ausgegebenen Ergebnisses, mal zwei hoch der Anzahl der Bits, die die niedrigstwertigen Bitanteile der Binärwerte jeweils enthalten, und die Ausgabesumme als Endergebnis auszugeben.
DE102022130488.4A 2022-11-17 2022-11-17 Verarbeitungsschaltung Pending DE102022130488A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102022130488.4A DE102022130488A1 (de) 2022-11-17 2022-11-17 Verarbeitungsschaltung
US18/485,550 US20240168713A1 (en) 2022-11-17 2023-10-12 Processing circuit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102022130488.4A DE102022130488A1 (de) 2022-11-17 2022-11-17 Verarbeitungsschaltung

Publications (1)

Publication Number Publication Date
DE102022130488A1 true DE102022130488A1 (de) 2024-05-23

Family

ID=90922934

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022130488.4A Pending DE102022130488A1 (de) 2022-11-17 2022-11-17 Verarbeitungsschaltung

Country Status (2)

Country Link
US (1) US20240168713A1 (de)
DE (1) DE102022130488A1 (de)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120226731A1 (en) 2011-03-01 2012-09-06 Gashkov Sergey B Low depth combinational finite field multiplier
US11301213B2 (en) 2019-06-24 2022-04-12 Intel Corporation Reduced latency multiplier circuitry for very large numbers

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120226731A1 (en) 2011-03-01 2012-09-06 Gashkov Sergey B Low depth combinational finite field multiplier
US11301213B2 (en) 2019-06-24 2022-04-12 Intel Corporation Reduced latency multiplier circuitry for very large numbers

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Karatsuba algorithm. In: Wikipedia, Bearbeitungsstand vom 30. August 2022 05:50 (UTC). URL: https://en.wikipedia.org/wiki/Karatsuba_algorithm, archiviert in https://web.archive.org am 01. Oktober 2022 [abgerufen am 27.07.2023]

Also Published As

Publication number Publication date
US20240168713A1 (en) 2024-05-23

Similar Documents

Publication Publication Date Title
EP1342148B1 (de) Kryptographieprozessor
EP1342154B1 (de) Kryptographieprozessor
DE69430838T2 (de) Schaltung und Verfahren zur parallelen Verschiebung und Addition
DE69811877T2 (de) ARITHMETISCHER PROZESSOR, der endliche Felder Arithmetik und ganzzahlige modular Arithmetik kombiniert.
DE69435047T2 (de) Schaltung und Verfahren zur parallelen Addition und Mittelwertbildung
DE102020102453A1 (de) Integrierte Schaltung zum modularen Multiplizieren von zwei ganzen Zahlen für ein kryptographisches Verfahren und Verfahren zur kryptographischen Verarbeitung von Daten basierend auf modularer Multiplikation
DE102018115439A1 (de) Technologien zur fehlertoleranten Berechnung von Elliptische-Kurven-Digitalsignaturen
DE112007001319T5 (de) Multiplizieren zweier Zahlen
WO2013060467A1 (de) Effiziente primzahlprüfung
EP1499954B1 (de) Berechnung eines ergebnisses einer modularen multiplikation
DE102006025569A1 (de) Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE60127524T2 (de) Cachespeicher für arithmetische Rechenoperationen mit partieller Resultatsausgabe bei partieller Operandenübereinstimmung
EP1474741B1 (de) Vorrichtung und verfahren zum berechnen eines ergebnisses aus einer division
DE102006025677B4 (de) Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer Summe mit einem Rechenwerk mit begrenzter Wortlänge
DE112018002723T5 (de) System, verfahren und vorrichtung zur verschleierung von vorrichtungsoperationen
DE102022130488A1 (de) Verarbeitungsschaltung
DE102019116104A1 (de) Kryptographieverarbeitungsvorrichtung und -verfahren zum kryptographischen verarbeiten von daten
DE10156708B4 (de) Verfahren und Vorrichtung zum Multiplizieren und Verfahren und Vorrichtung zum Addieren auf einer elliptischen Kurve
DE102020133312A1 (de) Kryptographische verarbeitungsvorrichtung und verfahren zur kryptographischen verarbeitung von daten
EP3504616B1 (de) Modul und verfahren zur abgesicherten berechnung von mathematischen operationen
DE10219164A1 (de) Vorrichtung und Verfahren zum Berechnen eines ganzzahligen Quotienten
EP1497713B1 (de) Prozessor und verfahren zum gleichzeitigen ausführen einer berechnung und eines kopiervorgangs
DE102022131526A1 (de) Verarbeitungsschaltung
DE102022201693A1 (de) Effizienter montgomery-multiplikator
DE10050589A1 (de) Schnellere Schiebewertberechnung unter Verwendung eines modifizierten Übertrag-Vorausschau-Addierers

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication