DE102019100009A1 - Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln - Google Patents

Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln Download PDF

Info

Publication number
DE102019100009A1
DE102019100009A1 DE102019100009.2A DE102019100009A DE102019100009A1 DE 102019100009 A1 DE102019100009 A1 DE 102019100009A1 DE 102019100009 A DE102019100009 A DE 102019100009A DE 102019100009 A1 DE102019100009 A1 DE 102019100009A1
Authority
DE
Germany
Prior art keywords
aes
affine
matrix
box
multiplication
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.)
Withdrawn
Application number
DE102019100009.2A
Other languages
English (en)
Inventor
Vikram Suresh
Sanu Matthew
Sudhir Satpathy
Vinodh Gopal
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of DE102019100009A1 publication Critical patent/DE102019100009A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/125Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Storage Device Security (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Abstract

Es werden Abwandlungen an einer Hardwarebeschleunigungsschaltungsanordnung nach dem fortschrittlichen Verschlüsselungsstandard (AES-Hardwarebeschleunigungsschaltungsanordnung), um eine Hardwarebeschleunigung der Schlüsseloperationen von Nicht-AES-Blockverschlüsselungssystemen wie SM4 und Camellia zu ermöglichen, beschrieben. In einigen Ausführungsformen wird die GF(2)-Invertierungsberechnungsschaltung in der AES-S-Box verwendet, um Xzu berechnen (wobei X das eingegebene Klartext- oder Kryptotext-Byte ist), und Hardwareunterstützung ist hinzugefügt, um parallele GF(2)-Matrixmultiplikationen zu berechnen. Die hier beschriebenen Ausführungsformen weisen einen minimalen Mehraufwand in Hardware auf und erreichen gleichzeitig eine höhere Geschwindigkeit als Softwareimplementierungen.

Description

  • Hintergrund
  • Der fortschrittliche Verschlüsselungsstandard (AES), der von dem National Institute of Standard and Technology (NIST) eingeführt wurde, ist für die meisten Anwendungen de facto die Standardverschlüsselung mit symmetrischen Schlüsseln. Der AES wird auf vielen Plattformen mit zahlreichen Funktionen umfassend unterstützt. Mittlerweile sind andere Verschlüsselungssysteme mit symmetrischen Schlüsseln eingeführt worden, insbesondere SM4 und Camellia. SM4 wurde vom Technischen Komitee für Informationssicherheitsstandardisierung in China standardisiert, und Camellia wurde von der Liste für empfohlene Verschlüsselungssysteme der japanischen E-Regierung standardisiert. Diese und andere Nicht-AES-Verschlüsselungssysteme erfordern ebenfalls Operationen, die den von AES-Beschleunigungshardware durchgeführten Operationen ähnlich sind, wie etwa affine Transformationen, jeweils mit eigener Abbildungsmatrix A und Additionskonstante, sowie Invertierungen.
  • Figurenliste
    • 1 zeigt einen AES-Hardwarebeschleuniger gemäß einigen Ausführungsformen.
    • 2 zeigt die S-Box eines AES-Hardwarebeschleunigers gemäß einigen Ausführungsformen.
    • 3 zeigt eine Nicht-AES-S-Box für eine Nicht-AES-Verschlüsselung gemäß einigen Ausführungsformen.
    • 4 zeigt die Operationen einer Nicht-AES-S-Box für eine Nicht-AES-Verschlüsselung gemäß einigen Ausführungsformen.
    • 5 zeigt ein Beispiel der AFFINE- und AFFINEINV-Logik eines vereinheitlichten Beschleunigers gemäß einer Ausführungsform.
    • 6 zeigt eine Ausführungsform der Matrixmultiplikationsstufen der AFFINE- und AFFINEINV-Logik.
    • 7 zeigt eine Ausführungsform der affinen AFFINE- und AFFINEINV-Transformationsoperationen.
    • 8 zeigt eine Ausführungsform einer modifizierten AES-S-Box zum Durchführen von Nicht-AES-Invertierungsoperationen.
    • 9 zeigt eine Ausführungsform eines vereinheitlichten Beschleunigers gemäß einigen Ausführungsformen.
    • 10 zeigt ein Verfahren zum Durchführen einer vereinheitlichten Beschleunigung gemäß einigen Ausführungsformen.
    • 11 zeigt eine Ausführungsform eines Computersystems, das einen vereinheitlichten Beschleuniger enthält.
    • 12A-12B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon gemäß einigen Ausführungsformen darstellen.
    • 13A-13D sind Blockdiagramme, die ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß einigen Ausführungsformen darstellen.
    • 14 ist ein Blockdiagramm einer Registerarchitektur gemäß einigen Ausführungsformen.
    • 15A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue Pipeline als auch eine beispielhafte nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß einigen Ausführungsformen darstellt.
    • 15B ist ein Blockdiagramm, das sowohl eine Ausführungsform eines reihenfolgetreuen Architekturkerns als auch eines beispielhaften Architekturkerns mit Registerumbenennung und nicht reihenfolgetreuer Ausgabe/Ausführung, die in einem Prozessor enthalten sein sollen, darstellt.
    • 16A-16B zeigen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder verschiedener Typen) in einem Chip wäre.
    • 17 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern, einen integrierten Speichercontroller und integrierte Grafik aufweisen kann, gemäß einigen Ausführungsformen.
    • 18-21 sind Blockdiagramme von beispielhaften Computerarchitekturen.
    • 22 ist ein Blockdiagramm gemäß einigen Ausführungsformen, das die Verwendung eines Softwarebefehlswandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz vergleicht.
  • Genaue Beschreibung
  • Bisherige Lösungen für die Implementierung von Nicht-AES-Blockverschlüsselungen umfassen entweder ihre Implementierung unter Verwendung von Software/Mikrocode oder einen Entwurf dedizierter Hardwarebeschleuniger für jede einzelne Blockverschlüsselung. Solche Software-/Mikrocode-Implementierungen von affinen und inversen Transformationen können jedoch normalerweise nicht die gewünschten Leistungsanforderungen erfüllen. Gleichzeitig erhöht ein dedizierter Hardwarebeschleuniger für jede Nicht-AES-Blockverschlüsselung die Produktkosten in Bezug auf die Siliziumfläche und die Verlustleistung, und es sind auch beträchtliche Design- und Validierungsanstrengungen nötig. In einem Aspekt schlägt diese Offenbarung einen vereinheitlichten Hardwarebeschleuniger vor, um eine Hardwarebeschleunigung sowohl für AES- als auch Nicht-AES-Verschlüsselungssystemen mit minimaler Beeinträchtigung des AES-Leistungsvermögens zu ermöglichen.
  • Hier wird ein Hardwarebeschleuniger für gepackte affine Transformationen beschrieben. Die affine Transformation ist eine kritische Operation in Blockverschlüsselungen wie AES, SM4 und Camellia. Diese Offenbarung schlägt einen kompakten Datenpfad vor, der parallele affine Transformationen an den Eingangsdaten oder dem Inversen der Eingangsdaten durchführt. In einer Ausführungsform wird die Affin-auf-invers-Transformation berechnet, indem Daten durch eine AES-S-Box geführt werden und die dort vorhandenen leistungskritischen inversen Schaltungen wiederverwendet werden.
  • Verschlüsselungssysteme mit symmetrischen Schlüsseln wie AES, SM4 und Camellia verwenden alle endliche Körper (auch bekannt als Galois-Körper, abgekürzt GF), um ihre arithmetischen Operationen auszuführen. Ein endlicher Körper ist im Grunde eine Menge, in der Addition, Subtraktion, Multiplikation und Division durchgeführt werden können, ohne die Menge zu verlassen. Ein Beispiel für einen endlichen Körper ist eine Menge mit einer primen Anzahl von m Elementen wie GF(m), wobei die Elemente des Körpers durch die ganzen Zahlen 0, 1, ..., m-1 repräsentiert werden und wobei Addition und Multiplikation in GF(m) modulo m durchgeführt werden. Der kleinste endliche Körper ist GF(2), wobei die Elemente des Körpers 0 und 1 sind und wobei die Multiplikation einer logischen UND-Operation entspricht und die Addition einer logischen XOR-Operation entspricht. Ein Galois-Erweiterungskörper mit 2n Elementen, als GF(2n) bezeichnet, kann ebenfalls definiert werden. In GF (2n) werden die Elemente des Körpers nicht als ganze Zahlen dargestellt, sondern als Polynome mit maximalem Grad n-1 mit Koeffizienten in GF(2). Aufgrund der bytebasierten Natur des Computerspeichers werden Operationen in AES, SM4 und Camellia an 8-Bit-Bytes in GF(28) ausgeführt, wobei jedes 8-Bit-Byte den Koeffizienten eines der 128 möglichen Polynome vom Grad 7 entspricht. Additions- und Subtraktionsoperationen in GF(28) werden in GF(2) ausgeführt und sind äquivalente Operationen, die sich auf eine bitweise XOR-Verarbeitung der Bytes, die addiert oder subtrahiert werden sollen, hinauslaufen. Multiplikation und Division in GF(28) sind definiert als Modulo-Operationen, die in Bezug auf ein spezifisches irreduzibles Generator- (oder Körper-)Polynom vom Grad 8 ausgeführt werden, das einen spezifischen GF (28)-Körper aus GF(2) generiert. Beispielsweise ist das für AES verwendete Körper-Polynom AE(x)=(x8+x4+x3+x+1), so dass sich ein spezifischer Galois-Körper ergibt, der als GFAES(28) bezeichnet werden kann. Aus Effizienzgründen können einige Berechnungen wie Invertierungen in einem Galois-Kompositkörper durchgeführt werden, der als GFC(24)2 bezeichnet wird und von einem spezifischen Körper-Polynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifisches Körper-Polynom R(x) vom Grad 4 aus GF(2) erzeugt wird. Die Körper GFAES (28) und GFC(24)2 sind linear isomorph, so dass die Konvertierung von einem zum anderen durch Matrixmultiplikation implementiert werden kann.
  • Während der Verschlüsselung oder Entschlüsselung bearbeitet das AES-Verschlüsselungssystem aufeinanderfolgende 16-Byte-Datenblöcke, wobei jeder dieser Blöcke manchmal als Zustandsmatrix bezeichnet wird. Um Klartext-Eingabedaten zu Kryptotext zu verschlüsseln, werden mehrere Runden durchlaufen, wobei jede Runde eine Zeilenverschiebungsoperation, die die Daten auf Byteebene permutiert, eine Bytesubstitutionsschicht, die in GF(28) eine Affin-auf-invers-Transformation durchführt, eine Spaltenmischoperation (mit Ausnahme der letzten Runde), die auch die Arithmetik in GF(28) verwendet, und eine Rundenschlüsseladditionsoperation, bei der die Daten bitweise mit einem Eingabeschlüssel XOR-verknüpft werden, umfasst. Die AES-Entschlüsselung ähnelt der Verschlüsselung und beinhaltet ein Umkehren der für die Verschlüsselung verwendeten Operationen.
  • 1 zeigt den AES-Abschnitt eines vereinheitlichten Hardwarebeschleunigers gemäß einer Ausführungsform, die Stufen des AES-Algorithmus zur Verschlüsselung oder Entschlüsselung implementiert, wie sie oben beschrieben sind. Es ist gezeigt, dass der Beschleuniger eine eingegebene 4-Byte-Spalte der 128-Bit-Zustandsmatrix auf einmal bearbeitet. Die Zeilenverschiebungsoperation wird von der Zeilenverschiebungsoperationsschaltung 101 angewendet, wobei das Ergebnis in dem Register 102 gespeichert wird. Die S-Box-Schaltungen 103 können dann die Byte-Ersetzungsfunktion für jedes Byte aus, wobei die Ergebnisse im Register 105 gespeichert werden. Ein Multiplexer 106 ermöglicht es die S-Boxen 103 zu umgehen, indem entweder die Ausgänge des Registers 105 oder die Ausgänge des Registers 104 ausgewählt werden, zu denen die Ausgänge des Registers 102 eingetaktet sind. Eine an den Multiplexer 106 angelegte InvMixCol-Eingabe wählt die Ausgaben des Registers 102 zur Weiterverarbeitung durch Umgehen der S-Boxen 103 aus. Ein solches Umgehen der S-Boxen 103 erfolgt während einer Entschlüsselungsprozedur, bei der die inverse Spaltenmischungsfunktion ausgeführt wird. Die Spaltenmischungsoperation wird von der Spaltenmischungsschaltung 107 durchgeführt. Die Spaltenmischungsoperation wird nicht während der letzten Runde der AES-Verschlüsselung durchgeführt und somit während dieser Runde durch eine Letzte-Runde-Eingabe in einen Multiplexer 108 umgangen. Die Rundenschlüsseladditionsschaltung 109 führt die Rundenschlüsseladditionsoperation durch, wobei das Ergebnis in einem Register 110 gespeichert wird.
  • 2 zeigt die S-Box 103 des in 1 dargestellten AES-Hardwarebeschleunigers genauer. Die AES-Invertierungsoperation wird in einem Kompositkörper GF(24)2 ausgeführt, der von einem spezifischen Körper-Polynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der von einem spezifischen Körper-Polynom R(x) von Grad 4 aus GF(2) erzeugt wird. Die Polynome P(x) und R(x) sind spezifisch für die AES-Invertierung und führen zu einem spezifischen GF(24)2-Kompositkörper, der als GFC(24)2 bezeichnet wird. Eine Schaltung 201 bildet das eingegebene Byte aus GF(28) auf den Kompositkörper GF(24)2 ab, während eine Schaltung 202 das eingegebene Byte aus GF(28) auf den Kompositkörper GF(24)2 abbildet und zusätzlich die inverse affine AES-Transformation durchführt (zur Entschlüsselung). Gemäß der Eingabe AESENC (Festlegen von Verschlüsselung) wählt ein Multiplexer 203 zwischen den Ausgaben der Schaltung 201 und der Schaltung 202 aus, um sie an eine Invertierungsschaltung (X-1)-Schaltung 204 weiterzugeben, die die Invertierung des Eingangsvektors in GF(24)2 durchführt. Die Ausgabe der Invertierungsschaltung 204 wird dann an Schaltungen 205 und 206 übergeben. Die Schaltung 205 bildet die Ausgabe der Invertierungsschaltung 204 von GF(24)2 auf GF(28) ab, während die Schaltung 206 die affine AES-Transformation an der Ausgabe der Invertierungsschaltung 204 durchführt und das Ergebnis von GF(24)2 nach GF(28) abbildet. Ein Multiplexer 207 wählt gemäß der Eingabe AESENC zwischen den Ausgängen der Schaltung 205 oder der Schaltung 206 aus. Zur Verschlüsselung erfolgt der Datenfluss von der Schaltung 201 zu der Invertierungsschaltung 204 zu der Schaltung 206. Zur Entschlüsselung erfolgt der Datenfluss von der Schaltung 202 zu der Invertierungsschaltung 204 zu der Schaltung 205.
  • Die affine Transformation ist eine kritische lineare Transformation in dem Galois-Körper von 28 GF (28), die auf Daten-Bytes in Verschlüsselungssystemen mit symmetrischen Schlüsseln wie AES, SM4 und Camellia angewendet wird. Sie ist als „A*X+b“ definiert, wobei A eine 8-mal-8-Bit-Matrix und b eine 8-Bit-Konstante ist, die auf das Eingangs-Byte X angewendet werden. Alle Operationen in GF(28) sind durch ein standardspezifisches Generatorpolynom der Ordnung 8 (z. B. verwendet AES x8+x4+x3+x+1) definiert. Die Affin-auf-invers-Transformation (hier als AFFINEINV bezeichnet) ist als „A*X-1+b“ definiert, wobei X-1 das multiplikative Inverse der Eingabe X ist. Diese Operationen sind bei Implementation in Software oder Mikrocode sehr aufwendig und die meisten modernen Systeme umfassen Hardwarebeschleuniger, um das Leistungsvermögen dieser kritischen Kryptotransformationen zu verbessern. Hierin sind alternative Datenflüsse und Logik beschrieben, um generische affine Operationen für Nicht-AES-Verschlüsselungssysteme auf die AES-Datenpfade abzubilden, ohne erheblichen Mehraufwand für die AES-Latenz und die Fläche zu bedeuten. In einigen Ausführungsformen wird die X-1-Schaltung der AES-S-Box für Affin-auf-invers-Operationen wiederverwendet.
  • 3 zeigt eine Nicht-AES-S-Box 300 für ein Nicht-AES-Verschlüsselungssystem wie etwa das Camellia- und das SM4-Verschlüsselungsystem, gemäß einigen Ausführungsformen. Die S-Box 300 umfasst eine erste affine Transformation 301, eine Invertierung 302 und eine zweite affine Transformation 303 nach der Invertierung. 4 zeigt diese Operationen genauer. Es wird angenommen, dass der Eingang x ein 8-Bit-Eingangsvektor oder Byte ist. Die erste affine Transformation 301 ist als Multiplikation mit einer Matrix AS1 und der Addition eines Vektors bS1 definiert, was ergibt: A S 1 * x + b S 1
    Figure DE102019100009A1_0001
    Darauf folgt die Invertierung, die ergibt: ( A S 1 * x + b S 1 ) 1
    Figure DE102019100009A1_0002
    Die zweite affine Transformation 303 wird dann als Multiplikation mit einer Matrix AS2 und Addition eines Vektors bS2 angewendet, was ergibt: A S 1 * ( A S1 * x+b S1 ) 1 + b S 2
    Figure DE102019100009A1_0003
  • Die Matrizen AS1 und AS2 und die Translationsvektoren bS1 und bS2 sind spezifisch für das bestimmte Nicht-AES-Verschlüsselungssystem (z. B. Camellia oder SM4). In einigen Ausführungsformen wird, wie es nachstehend beschrieben ist, eine einzelne Nicht-AES-Affin-Transformationsschaltung mit variablen (d. h. konfigurierbaren) Abbildungs- und Translationsvektorfunktionen in einer Operation mit zwei Durchläufen verwendet, um die Nicht-AES-S-Box zu implementieren. Das heißt, der 8-Bit-Eingangsvektor wird weitergeleitet an: die Nicht-AES-Affin-Transformationsschaltungsanordnung, die mit einer Abbildungsfunktion, die die Multiplikation mit einer Matrix AS1 umfasst, und einer Translationsfunktion, die die Addition eines Vektors bS1 umfasst, ausgebildet ist, die AES-S-Box, bei der die affine AES-Transformation umgangen wird, und die Nicht-AES-Affin-Transformationsschaltungsanordnung, die mit der Abbildungsfunktion, die die Multiplikation mit der Matrix AS2 umfasst, und der Translationsfunktion, die die Addition eines Vektors bS2 umfasst, ausgebildet ist.
  • Nun wird der Betrieb des vereinheitlichten Hardwarebeschleunigers für Nicht-AES-Verschlüsselungssysteme wie Camellia und SM4 beschrieben. Wie es oben beschrieben ist, werden die AES-S-Box-Operationen unter Verwendung des AES-Hardwarebeschleunigers in einem einzigen Durchlauf durchgeführt. Bei Nicht-AES-Verschlüsselungssystemen wird die S-Box-Logik dagegen in einer Operation mit zwei Durchgängen implementiert. Die erste affine Transformation der Nicht-AES-Verschlüsselung wird auf die AFFINE-Logik des vereinheitlichten Beschleunigers unter Verwendung der für das Verschlüsselungssystem spezifischen affinen Matrix „A“ und der additiven Konstante „b“ abgebildet. Der zweiten affinen Transformation der Nicht-AES-Verschlüsselung geht eine Inversenberechnung voraus und diese wird daher auf die AFFINEINV-Logik abgebildet. Die in den Galois-Körper-Berechnungen verwendeten Reduktionspolynome in SM4 (x8+x7+x6+x5+x4+x2+1) und Camellia (x8+x6+x5+x3+1) unterscheiden sich jedoch von dem für AES verwendeten (x8+x4+x3+1). Die leistungs- und flächenlimitierende Inversenberechnung kann effizient implementiert werden, indem die S-Box-Eingaben von GF(28) auf GF(24)2 abgebildet werden und die Inversenberechnung in GF(24)2 durchgeführt wird. Infolgedessen können sowohl SM4 als auch Camellia und andere Nicht-AES-Verschlüsselungssysteme mit dem gleichen Kompositkörper wie dem in den AES-Beschleuniger verwendeten abgebildet werden. Dies löst das Problem verschiedener Reduktionspolynome und ermöglicht die Verwendung der gleichen Inversenberechnungslogik, die für die AES-Verarbeitung verwendet wird.
  • 5 zeigt ein Beispiel der AFFINE- und AFFINEINV-Logik eines vereinheitlichten Beschleunigers, der zum Implementieren einer Nicht-AES-S-Box gemäß einer Ausführungsform verwendet wird. Die Operationen werden an 16 gepackten binären 8-Bit-Ringangsvektoren x[15:0] ausgeführt. Die affine Operation umfasst eine Abbildungsfunktion und eine Translationsfunktion und ist durch A*x+b definiert. Die Eingabe A ist eine binäre 8x8-Matrix zum Multiplizieren mit dem Eingangsvektor x (die Abbildungsfunktion) und der Vektor b ist ein binäre 8-Bit-Eingabe zum Addieren zu dem Produkt (die Translationsfunktion). Sowohl die Matrix A als auch der Vektor b sind über alle 16 parallelen Transformationsoperationen hinweg konstant. Die Affin-auf-invers-Operation ist durch A*x-1+b definiert, wobei x-1 das in GF(28) berechnete multiplikative Inverse von x ist, wobei ein Reduktionspolynom in dem bestimmten Nicht-AES-Verschlüsselungsstandard angegeben ist. Ein Multiplexer 502 wählt eines der Eingangs-Bytes x oder der Invertierung x-1 davon (als Ergebnis des Durchlaufens der Invertierungsschaltung 501) für die affine Transformation aus. Wie nachstehend beschrieben wird, verwendet die Invertierungsschaltung 501 in einigen Ausführungsformen die gleiche S-Box, die für die AES-Verarbeitung verwendet wird. Die von dem Multiplexer 502 ausgewählte Eingabe wird dann verwendet, um über den Matrixmultiplizierer 503 A*x zu berechnen, wobei die unteren 8 Bytes der Eingabe mit einer der 8×8-Binärmatrizen arbeiten und die oberen 8 Bytes mit der anderen. Die durch den Matrixmultiplizierer 503 ausgeführte A*x-Funktion ist die Matrixmultiplikation von A(8x8) mit x(8x1) und ist wie in 6 gezeigt über UND Gatter 601 und XOR Gatter 602 implementiert. Die Summierung der Ausgabe mit dem Vektor b übersetzt sich in parallele XOR-Operationen über XOR-Gatter 504.
  • Während die oben beschriebene Affin-Transformationsschaltung mit Kombinationen von UND- und XOR-Gattern implementiert werden kann, muss die Invertierungsschaltung das multiplikative Inverse von x in GF(28) berechnen. Dies ist eine rechenaufwändige Operation, die vorteilhafterweise von der gleichen S-Box ausgeführt werden kann, die für die AES-Verarbeitung verwendet wird. In einigen Nicht-AES-Verschlüsselungssystemen wie etwa SM4 wird die Invertierungsoperation an den 8-Bit-Vektoren nach der Abbildung von GF(28) auf einen GF(24)2-Kompositkörper unter Verwendung einer Matrix MS durchgeführt, die für dieses bestimmte Verschlüsselungssystem spezifisch ist. Die Inversenberechnung wird in GF(24)2 an den abgebildeten Daten MS*x durchgeführt und das Ergebnis wird unter Verwendung einer inversen Abbildungsmatrix MS -1 wieder auf GF(28) abgebildet, was MS -1(MS*x)-1 ergibt. Daran kann sich eine affine Transformation anschließen, die A*(MS -1(MS*x)-1)+b ergibt. Die erste affine Transformation kann direkt auf die AFFINE-Logik des vereinheitlichten Beschleunigers abgebildet werden. Das Abbilden der Affin-auf-invers-Operation auf die AES-S-Box führt jedoch einen zusätzlichen AES-Abbildungsterm MA durch die AES-S-Box-Abbildung auf ihren eigenen Galois-Kompositkörper ein, wie es oben erläutert ist. Um dies zu kompensieren, kann die anfängliche affine Transformationsmatrix mit MSMA -1 anstelle von MS multipliziert werden, um eine kombinierte Affin-auf-invers-GF(28)-nach-GF(24)2-Abbildung sowie eine Kompensation für den zusätzliche MA-Term durchzuführen, was einen Zwischenwert von MSMA -1AS1*x ergibt. Der Translationsvektor bS1 wird auf ähnliche Weise mit MSMA -1 multipliziert, um einen neuen Translationsvektor cS1 zu erhalten.
  • 7 zeigt die erste affine Transformation 701 mit Matrixmultiplikation mit dem Matrixprodukt MSMA -1AS1 und Translation mit dem Vektor cS1 = MSMA -1*bS1. Der Term MSMA -1AS1*x+cS1 kann dann als Eingangsvektor x für die Invertierungsstufe 702 der AFFINEINV-Logik verwendet werden. Während der Inversenberechnung wird die Abbildungsfunktion in der AES-S-Box durch MA -1 kompensiert, um einen inversen Wert (MS*x+MSbS1)-1 zu erhalten. Die inverse Abbildungsoperation in der AES-S-Box führt jedoch wiederum einen zusätzlichen Faktor MA -1 ein, so dass die Ausgabe der AES-S-Box MA -1 (MS*x+MSbS1)-1 ist. Die Kompensation dieses zusätzlichen Faktors sowie die inverse Abbildung von dem SM4-Kompositkörper auf den SM4-Primkörper kann erreicht werden, indem die affine Matrix, die in die zweite affine Transformation 703 der AFFINEINV-Logik eingegeben wird, von „AS2“ in „MS -1MAAS2“ geändert wird, was zu der endgültigen AFFINEINV-Ausgabe AS2(AS1*x+bS1)-1+bS2 führt. Die vollständige S-Box-Operation kann auf eine Implementierung mit zwei Durchläufen von jeweils einer AFFINE- und einer AFFINEINV-Operation abgebildet werden. Die S-Box-Operation für andere Nicht-AES-Verschlüsselungssysteme wie Camellia kann auf ähnliche Weise auf den AFFINE/AFFINEINV-Hardwarebeschleuniger, wobei die Matrix MS für das bestimmte Nicht-AES-Verschlüsselungssystem spezifisch ist, abgebildet werden, um im Vergleich zu Softwareimplementierungen eine signifikante Leistungsverbesserung zu erreichen. Der vereinheitlichte AFFINE/AFFINEINV-Beschleuniger kann weiter modifiziert werden, um eine separate affine Matrix und eine additive Konstante für 2/4/8 aufeinanderfolgende Eingangs-Bytes zu verwenden. Dies ermöglicht parallele Runden- oder Schlüsselerzeugungsoperationen im Falle von Verschlüsselungssystemen wie SM4 (erfordert 4 S-Box-Operationen pro Runde) oder Camellia (erfordert 8 S-Box-Operationen pro Runde), um die Hardwareauslastung des vereinheitlichten Beschleunigers zu erhöhen.
  • Die AES-S-Box, die vorstehend unter Bezugnahme auf 2 erörtert ist, kann modifiziert werden, wie es in 8 gezeigt ist, um ihre Wiederverwendung zu unterstützen, um die Invertierungsfunktion für Nicht-AES-Verschlüsselungssysteme durchzuführen. Da affine Transformationen für AES mit Präfix versehen sind, können sie nicht für Nicht-AES-Verschlüsselungen verwendet werden. Dementsprechend wird eine zusätzliche Affin-Transformationsschaltung für affine Nicht-AES-Transformationen verwendet, wie es vorstehend diskutiert ist. Der inverse Block (X-1) kann jedoch für Nicht-AES-Verschlüsselungssysteme verwendet werden, indem ein neuer Datenfluss eingeführt wird, der sowohl affine als auch invers-affine AES-Transformationen umgeht, die für die AES-Verschlüsselung bzw. -Entschlüsselung verwendet werden. Wie es in 8 gezeigt ist, umgeht der Multiplexer 203 die inverse affine AES-Transformation 202, wenn entweder die AESENC-Eingabe (die eine AES-Verschlüsselungsoperation kennzeichnet) oder die AFFINV-Eingabe (der eine Nicht-AES-affin-auf-invers-Operation kennzeichnet) des Multiplexers 203 auf 1 gesetzt ist. Ebenso umgeht der Multiplexer 207 die affine AES-Transformation 206, wenn die AESENC-Eingabe und die invertierte AFFINV-Eingabe auf 0 gesetzt sind. Der in 8 gezeigt modifizierte Datenpfad bildet somit die Eingangsdaten in der Schaltung 201 auf GF(24)2 ab, führt eine Inversenberechnung in GF(24)2 in der Schaltung 204 durch und bildet die inverse Ausgabe in der Schaltung 205 wieder auf GF(28) ab. Da die Modifikationen an den Auswahlsignalen der Multiplexer 203 und 207 vorgenommen werden, beeinflussen sie den kritischen Pfad in der S-Box-Implementierung nicht.
  • 9 zeigt den vereinheitlichten Beschleuniger gemäß einer Ausführungsform, der Datenpfade sowohl für AES- als auch für Nicht-AES-Verschlüsselungssysteme zeigt. Eine separate Nicht-AES-Affin-Transformationsschaltung 902 ist für affine Nicht-AES-Transformationen vorgesehen, die parallel mit der Spaltenmischungsschaltung 106 arbeitet. Um die Nicht-AES-Verschlüsselungsoperationen einer affinen Transformation gefolgt von einer Affin-auf-invers-Operation durchzuführen, werden zwei Durchgänge durch die Schaltungsanordnung eingesetzt. Während jedes Durchlaufs wird die Zeilenverschiebungsschaltung 101 von einer AFFINEINV- oder AFFINE-Eingabe in den Multiplexer 901 umgangen. Während jedes Durchlaufs werden zudem die Spaltenmischungsschaltung 107 und die Rundenschlüsseladditionsschaltung 109 von einer AFFINEINV- oder AFFINE-Eingabe in den Multiplexer 903 umgangen, was zu der affinen Transformation durch die Affin-Transformationsschaltung 902 führt. Während des ersten Durchlaufs werden die AES-S-Boxen 103 von einer AFFINE-Eingabe in den Multiplexer 106 umgangen und die erste affine Transformation wird von der Affin-Transformationsschaltung 902 mit Matrix- und Translationsvektor-Eingaben durchgeführt, wie es vorstehend unter Bezugnahme auf 7 beschrieben ist. Während des zweiten Durchlaufs wird die Invertierungsoperation durch die AES-S-Boxen 103 ausgeführt und die zweite affine Transformation wird durch die Affin-Transformationsschaltung 902 mit Matrix- und Translationsvektor-Eingaben durchgeführt, wie es vorstehend unter Bezugnahme auf 7 beschrieben ist. Wie es vorstehend unter Bezugnahme auf 8 erläutert ist, sind die AES-S-Boxen 103 dazu ausgelegt, nur eine Invertierung durchzuführen, wobei die Matrix- und Translationsvektor-Eingaben in die Affin-Transformationsschaltung 902 dazu ausgelegt sind, die von den AES-S-Boxen durchgeführte Kompositkörperabbildung zu kompensieren.
  • 10 zeigt ein Verfahren zum Durchführen einer vereinheitlichten Beschleunigung durch eine vereinheitlichte Beschleunigerhardware, wie sie oben unter Bezugnahme auf 9 beschrieben ist. Das Verfahren könnte beispielsweise von der Beschleunigerhardware selbst oder von einem Prozessor, der Befehle ausführt, die in einem computerlesbaren Medium enthalten sind, ausgeführt werden. Im letzteren Fall kann der Prozessor einen Befehlssatz haben, der Befehle enthält, die, wenn sie ausgeführt werden, den Prozessor dazu veranlassen, auf die vereinheitlichte Beschleunigerhardware zuzugreifen. In Schritt 910 werden die Zeilenverschiebungsschaltung und die S-Boxen für den ersten Durchgang umgangen. In Schritt 920 werden die Spaltenmischungs- und Rundenschlüsseladditionsschaltungen umgangen und eine erste Nicht-AES-Affin-Transformation wird an einem Nicht-AES-Verschlüsselungssystem-Eingabevektor mit der Abbildungsmatrix MSMA -1AS1 und dem Translationsvektor cS1 durchgeführt, um Folgendes zu berechnen: MSMA -1AS1*x+cS1, wobei cS1 = MSMA -1*bS1 ist. In Schritt 930 wird die Zeilenverschiebungsschaltung für den zweiten Durchgang umgangen. In Schritt 940 wird die S-Box-Invertierung durchgeführt, um Folgendes zu berechnen: MA -1(MS*x+MSbS1)-1. In Schritt 950 wird die zweite affine Transformation mit der Abbildungsmatrix MS -1MAAS2 und dem Translationsvektor bS2 durchgeführt, um Folgendes zu berechnen: AS2(AS1*x+bS1)-1+bS2.
  • 11 zeigt ein Computersystem gemäß einer Ausführungsform, das eine zentrale Verarbeitungseinheit (CPU) 2100, einen Speicher 2102, einen Takt 2104 und Eingabe/Ausgabe (E/A) und Speichervorrichtungen 2106 umfasst. Diese Komponenten kommunizieren alle über den CPU-Bus 2108. In einer Ausführungsform ist die vereinheitlichte Beschleunigerhardware in die CPU 2100 integriert und kann für den Befehlssatz der CPU zugänglich.
  • Zusätzliche Anmerkungen und Beispiele
  • In Beispiel 1 umfasst eine Vorrichtung für einen kryptografischen Hardwarebeschleuniger: eine AES-Substitutionsbox (AES-S-Box) für ein AES-Verschlüsselungssystem (Verschlüsselungssystem nach dem fortschrittlichen Verschlüsselungsstandard), wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingabevektoren durchführen soll, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Nicht-AES-Affin-Transformationsschaltungsanordnung zum Durchführen von affinen Transformationen an 8-Bit-Eingangsvektoren mit variablen (d. h. konfigurierbaren) Abbildungs- und Translationsfunktionen; und eine Schaltungsanordnung zum Durchführen einer S-Box-Funktion für ein Nicht-AES-Verschlüsselungssystem, das eine Schaltungsanordnung zum Leiten von 8-Bit-Eingangsvektoren an die Nicht-AES-Affin-Transformationsschaltungsanordnung mit einer Abbildungsfunktion, die eine Multiplikation mit einer Matrix AS1 umfasst, und einer Translationsfunktion, die eine Addition eines Vektors bS1 umfasst, Leiten des Ergebnisses der affinen Nicht-AES-Transformation an die AES-S-Box und Umgehen der affinen AES-Transformation, um nur eine Invertierung durchzuführen, und Leiten des Ergebnisses der S-Box-Invertierung an die Nicht-AES-Affin-Transformationsschaltungsanordnung mit der Abbildungsfunktion, die die Multiplikation mit einer Matrix AS2 umfassen soll, und der Translationsfunktion, die die Addition eines Vektors bS2 umfassen soll, umfasst.
  • In Beispiel 2 kann der Gegenstand des Beispiels 1 oder irgendeines der Beispiele hierin optional Folgendes umfassen, dass: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführen soll, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die Nicht-AES-Affin-Transformationsschaltungsanordnung mit einer Abbildungsfunktion, die eine Multiplikation mit einer Matrix MS, die vor der Invertierung durch die S-Box die Vektoren von GFS(28) auf GFC((24)2) abbildet, und eine Multiplikation mit einer Matrix MS -1, die nach der Invertierung durch die S-Box Vektoren von GFC((24)2) auf GFS(28) abbildet, umfasst.
  • In Beispiel 3 kann der Gegenstand des Beispiels 2 oder irgendeines der Beispiele hierin optional Folgendes umfassen, dass: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box ferner dazu dient, Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abzubilden und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abzubilden; und die Nicht-AES-Affin-Transformationsschaltung ist mit einer Abbildungsfunktion ausgebildet ist, die die Multiplikation mit der Matrix MA -1 vor der Invertierung durch die S-Box und die Multiplikation mit der Matrix MA nach der Invertierung mit der S-Box umfasst.
  • In Beispiel 4 kann der Gegenstand des Beispiels 1 oder eines der Beispiele hierin optional umfassen: eine Zeilenverschiebungsschaltung, eine Spaltenmischungsschaltung und eine Schlüsseladditionsschaltung zum Durchführen einer Verschlüsselung/Entschlüsselung gemäß dem AES-Verschlüsselungssystem; und wobei die Schaltungsanordnung zum Durchführen einer S-Box-Funktion für die Nicht-AES-Verschlüsselungsschaltungsanordnung eine Schaltungsanordnung zum Umgehen der Zeilenverschiebungsschaltung, der Spaltenmischungsschaltung und der Schlüsseladditionsschaltung enthält.
  • In Beispiel 5 kann der Gegenstand des Beispiels 3 oder eines der Beispiele hierin optional umfassen: einen AES-Verschlüsselungspfad durch die S-Box, der eine erste Verschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, eine zweite Verschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Verschlüsselungsoperation, die die affine AES-Transformation gefolgt von einer Multiplikation mit der Matrix MA -1 durchführt, umfasst; einen AES-Entschlüsselungspfad durch die S-Box, der eine erste Entschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, worauf eine inverse affine AES-Transformation folgt, eine zweite Entschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Entschlüsselungsoperation, die eine Multiplikation mit der Matrix MA -1 durchführt, umfasst; wobei die Schaltungsanordnung zum Durchführen einer S-Box-Funktion für das Nicht-AES-Verschlüsselungssystem, um die AES-Transformation und die inverse AES-Transformation der S-Box zu umgehen, einen Pfad durch die S-Box enthält, der die erste Verschlüsselungsoperation, die zweite Verschlüsselungs- oder Entschlüsselungsoperation und die dritte Entschlüsselungsoperation umfasst.
  • In Beispiel 6 kann der Gegenstand des Beispiels 3 oder eines der Beispiele hierin optional umfassen, dass: die Nicht-AES-Affin-Transformationsschaltungsanordnung mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die die Addition des Vektorprodukts MSMA -1*b1 umfasst, vor der Invertierung durch die AES-S-Box ausgebildet ist; und die Nicht-AES-Affin-Transformationsschaltungsanordnung mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die AES-S-Box ausgebildet ist.
  • In Beispiel 7 kann der Gegenstand des Beispiels 1 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x7+x6+x5+x4+x2+1).
  • In Beispiel 8 kann der Gegenstand des Beispiels 1 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x6+x5+x3+1).
  • In Beispiel 9 kann der Gegenstand des Beispiels 1 oder eines der Beispiele hierin optional umfassen, dass die Vorrichtung in eine zentrale Verarbeitungseinheit (CPU) für den Befehlssatz der CPU zugänglich eingebaut ist.
  • In Beispiel 10 kann der Gegenstand des Beispiels 1 oder eines der Beispiele hierin optional umfassen, dass die Vorrichtung in einen Coprozessor oder eine andere Einrichtung eingebaut ist, um eine Schnittstelle zu einer zentralen Verarbeitungseinheit (CPU) zu bilden.
  • In Beispiel 11 umfasst ein Verfahren zum Verwenden von AES-Beschleunigungshardware (Beschleunigungshardware für den fortschrittlichen Verschlüsselungsstandard) zum Durchführen von Nicht-AES-Verschlüsselungsoperationen: Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die die Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die die Addition eines Vektors bS1 umfasst, umfasst; Leiten des Eingangsvektors nach der ersten affinen Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von AES spezifiziert sind; Umgehen der affinen AES-Transformation der AES-S-Box; und Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die die Addition eines Vektors bS2 umfasst, ist.
  • In Beispiel 12 kann der Gegenstand des Beispiels 11 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  • In Beispiel 13 kann der Gegenstand des Beispiels 11 oder eines der Beispiele hierin optional umfassen, dass: Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  • In Beispiel 14 kann der Gegenstand des Beispiels 11 oder eines der Beispiele hierin optional umfassen, dass die AES-Beschleunigungshardware eine Zeilenverschiebungsschaltung, eine Spaltenmischungsschaltung und eine Schlüsseladditionsschaltung zum Durchführen einer Verschlüsselung/Entschlüsselung gemäß dem AES-Verschlüsselungssystem umfasst, und ferner umfasst: Umgehen der Zeilenverschiebungsschaltung, der Spaltenmischungsschaltung und der Schlüsseladditionsschaltung, wenn Nicht-AES-Verschlüsselungsoperationen ausgeführt werden.
  • In Beispiel 15 kann der Gegenstand des Beispiels 13 oder eines der Beispiele hierin optional umfassen, dass: ein AES-Verschlüsselungspfad durch die S-Box eine erste Verschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, eine zweite Verschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Verschlüsselungsoperation, die die affine AES-Transformation gefolgt von einer Multiplikation mit der Matrix MA -1 durchführt, umfasst; ein AES-Entschlüsselungspfad durch die S-Box eine erste Entschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, worauf eine inverse affine AES-Transformation folgt, eine zweite Entschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Entschlüsselungsoperation, die eine Multiplikation mit der Matrix MA -1 durchführt, umfasst; und ein Umgehen der AES-Transformation und der inversen AES-Transformation der S-Box umfasst, indem ein Pfad durch die S-Box durchlaufen wird, der die erste Verschlüsselungsoperation, die zweite Verschlüsselungs- oder Entschlüsselungsoperation und die dritte Entschlüsselungsoperation umfasst.
  • In Beispiel 16 kann der Gegenstand des Beispiels 13 oder eines der Beispiele hierin optional umfassen: Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS1 umfasst, und einer Translationsfunktion, die die Addition des Vektorprodukts MSMA -1*b1 umfasst; und Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  • In Beispiel 17 kann der Gegenstand des Beispiels 13 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x7+x6+x5+x4+x2+1).
  • In Beispiel 18 kann der Gegenstand des Beispiels 13 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x6+x5+x3+1).
  • In Beispiel 19 ein computerlesbares Speichermedium, das Befehle umfasst, um die Verarbeitungsschaltungsanordnung mit einem Befehlssatz für die kryptografische AES-Hardwarebeschleunigung (Hardwarebeschleunigung mit dem fortschrittlichen Verschlüsselungsstandard) bei Ausführung der Befehle durch die Verarbeitungsschaltungsanordnung zu Folgendem zu veranlassen: Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die die Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die die Addition eines Vektors bS1 umfasst, ist; Leiten des Eingangsvektors nach der ersten affinen Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Umgehen der affinen AES-Transformation der AES-S-Box; und Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die die Addition eines Vektors bS2 umfasst, ist.
  • In Beispiel 20 kann der Gegenstand des Beispiels 19 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet; und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  • In Beispiel 21 kann der Gegenstand des Beispiels 19 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2) - Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  • In Beispiel 22 kann der Gegenstand des Beispiels 19 oder eines der Beispiele hierin optional Befehle für Folgendes umfassen: Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die die Addition des Vektorprodukts MSMA -1*b1 umfasst; und Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  • In Beispiel 23 kann der Gegenstand des Beispiels 20 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x7+x6+x5+x4+x2+1).
  • In Beispiel 24 kann der Gegenstand des Beispiels 20 oder eines der Beispiele hierin optional enthalten, dass das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x6+x5+x3+1).
  • In Beispiel 25 kann der Gegenstand des Beispiels 19 oder eines der Beispiele hierin optional umfassen, dass die Verarbeitungsschaltungsanordnung eine zentrale Verarbeitungseinheit (CPU) ist, die einen Befehlssatz für AES-Hardwarebeschleunigung und affine Transformationen hat.
  • In Beispiel 26 umfasst eine Vorrichtung für AES-Beschleunigungshardware (Beschleunigungshardware für den fortschrittlichen Verschlüsselungsstandard) zum Durchführen von Nicht-AES-Verschlüsselungsoperationen: Mittel zum Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die die Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die die Addition eines Vektors bS1 umfasst, umfasst; Mittel zum Leiten des Eingangsvektors nach der ersten affinen Nicht-AES-Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Mittel zum Umgehen der affinen AES-Transformation der AES-S-Box; und Mittel zum Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die die Addition eines Vektors bS2 umfasst, ist.
  • In Beispiel 27 kann der Gegenstand des Beispiels 26 oder eines der Beispiele hierin optional umfassen, dass: affine Nicht-AES-Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  • In Beispiel 28 kann der Gegenstand von Beispiel 26 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  • In Beispiel 29 kann der Gegenstand des Beispiels 26 oder eines der Beispiele hierin optional umfassen, dass die AES-Beschleunigungshardware eine Zeilenverschiebungsschaltung, eine Spaltenmischungsschaltung und eine Schlüsseladditionsschaltung zum Durchführen einer Verschlüsselung/Entschlüsselung gemäß dem AES-Verschlüsselungssystem umfasst, und ferner Mittel zum Umgehen der Zeilenverschiebungsschaltung, der Spaltenmischungsschaltung und der Schlüsseladditionsschaltung dann, wenn Nicht-AES-Verschlüsselungsoperationen ausgeführt werden, umfassen.
  • In Beispiel 30 kann der Gegenstand des Beispiels 26 oder eines der Beispiele hierin optional umfassen, dass: ein AES-Verschlüsselungspfad durch die AES-S-Box eine erste Verschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, eine zweite Verschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Verschlüsselungsoperation, die die affine AES-Transformation gefolgt von einer Multiplikation mit der Matrix MA -1 durchführt, umfasst; ein AES-Entschlüsselungspfad durch die AES-S-Box eine erste Entschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, worauf eine inverse affine AES-Transformation folgt, eine zweite Entschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Entschlüsselungsoperation, die eine Multiplikation mit der Matrix MA -1 durchführt, umfasst; und ferner Mittel zum Umgehen der AES-Transformation und der inversen AES-Transformation der S-Box umfasst, indem ein Pfad durch die S-Box durchlaufen wird, der die erste Verschlüsselungsoperation, die zweite Verschlüsselungs- oder Entschlüsselungsoperation und die dritte Entschlüsselungsoperation umfasst.
  • In Beispiel 31 kann der Gegenstand des Beispiels 28 oder eines der Beispiele hierin optional umfassen: Mittel zum Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die die Addition des Vektorprodukts MSMA -1*b1 umfasst; und Mittel zum Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  • In Beispiel 32 kann der Gegenstand des Beispiels 26 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x7+x6+x5+x4+x2+1).
  • In Beispiel 33 kann der Gegenstand des Beispiels 26 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x6+x5+x3+1).
  • In Beispiel 34 umfasst ein Computersystem: eine zentrale Verarbeitungseinheit (CPU) und einen Speicher; einen CPU-Bus, um es der CPU zu ermöglichen, mit dem Speicher zu kommunizieren; wobei die CPU einen erweiterten Befehlssatz für den fortschrittlichen Verschlüsselungsstandard (AES) und kryptografische Nicht-AES-Hardwarebeschleunigung aufweist, so dass die Ausführung von Befehlen, die in dem erweiterten Befehlssatz enthalten sind, durch die CPU die CPU zu Folgendem veranlasst: Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die die Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die die Addition eines Vektors bS1 umfasst, ist; Leiten des Eingangsvektors nach der ersten affinen Nicht-AES-Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Umgehen der affinen AES-Transformation der AES-S-Box; und Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die die Addition eines Vektors bS2 umfasst, ist.
  • In Beispiel 35 kann der Gegenstand des Beispiels 34 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die ersten Nicht-AES-Affin-Transformationsmittel eine Abbildung sind, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet; und die zweiten Nicht-AES-Affin-Transformationsmittel eine Abbildung sind, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  • In Beispiel 36 kann der Gegenstand des Beispiels 34 oder eines der Beispiele hierin optional umfassen, dass: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; und die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  • In Beispiel 37 kann der Gegenstand des Beispiels 34 oder eines der Beispiele hierin optional umfassen, dass der erweiterte Befehlssatz ferner Befehle umfasst, die bei Ausführung die CPU zu Folgendem veranlassen: Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die die Addition des Vektorprodukts MSMA -1*b1 umfasst; und Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  • In Beispiel 38 kann der Gegenstand des Beispiels 35 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x7+x6+x5+x4+x2+1).
  • In Beispiel 39 kann der Gegenstand des Beispiels 35 oder eines der Beispiele hierin optional umfassen, dass das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S(x) = (x8+x6+x5+x3+1).
  • Beispiel 40 ist mindestens ein maschinenlesbares Medium, das Befehle enthält, die, wenn sie von einem Prozessor ausgeführt werden, den Prozessor dazu veranlassen, Operationen zum Implementieren irgendeines der Beispiele 1 bis 33 auszuführen.
  • Beispiel 41 ist eine Vorrichtung, die Mittel zum Implementieren irgendeines der Beispiele 1 bis 33 umfasst.
  • Beispiel 42 ist ein System zum Implementieren irgendeines der Beispiele 1 bis 33.
  • Beispiel 43 ist ein Verfahren zum Implementieren irgendeines der Beispiele 1 bis 33.
  • Beispielarchitekturen
  • Die nachstehend diskutierten Figuren zeigen beispielhafte Architekturen und Systeme zum Implementieren von Ausführungsformen des Vorstehenden genauer. In einigen Ausführungsformen werden eine oder mehrere Hardwarekomponenten und/oder Befehle, die oben beschrieben sind, emuliert oder als Softwareschaltungen implementiert, wie es nachstehend genau beschrieben ist.
  • Ausführungsformen des einen oder der mehreren Befehle können in einem „generischen vektorfreundlichen Befehlsformat“ verkörpert sein, das nachstehend genau beschrieben ist. In anderen Ausführungsformen wird solch ein Format nicht eingesetzt und ein anderes Befehlsformat verwendet. Die nachfolgende Beschreibung der Schreibmaskenregister, verschiedener Datentransformationen (Swizzle, Broadcast usw.), Adressierung usw. ist jedoch allgemein auf die Beschreibung der obigen Ausführungsformen des einen oder der mehreren Befehle anwendbar. Im Folgenden sind beispielhafte Systeme, Architekturen und Pipelines näher beschrieben. Ausführungsformen des oder der mehreren vorstehenden Befehle können auf diesen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die beschriebenen beschränkt.
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate enthalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Anzahl von Bits, Position von Bits) definieren, um unter anderem die auszuführende Operation (z. B. Opcode) und den/die Operanden, an dem/denen diese Operation ausgeführt werden soll, und/oder ein oder mehrere andere Datenfelder (z. B. Maske) zu spezifizieren. Einige Befehlsformate sind durch die Definition von Befehlsschablonen (oder Unterformaten) weiter unterteilt. Zum Beispiel können die Befehlsschablonen eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber haben mindestens einige unterschiedliche Bitpositionen, da weniger Felder enthalten sind), und/oder so definiert sein, dass ein gegebenes Feld anders zu interpretieren ist. Somit ist jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, falls definiert, in einer gegebenen Befehlsschablone dieses Befehlsformats) ausgedrückt und enthält Felder zum Spezifizieren der Operation und der Operanden. In einer Ausführungsform weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Spezifizieren dieses Opcodes und Operanden-Felder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) enthält; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfeldern haben, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als erweiterte Vektorerweiterungen (AVX) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-Codierungsschema (VEX-Codierungsschema) verwenden, wurde herausgegeben und/oder veröffentlicht (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, September 2014; und siehe Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • Beispielhafte Befehlsformate
  • Ausführungsformen der hierin beschriebenen Befehle können in verschiedenen Formaten verkörpert sein. Im Folgenden sind Beispielsysteme, Architekturen und Pipelines näher beschrieben. Ausführungsformen der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die beschriebenen beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Obwohl Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen durch das vektorfreundliche Befehlsformat.
  • 12A-12B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon gemäß Ausführungsformen der Erfindung darstellen. 12A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsschablonen davon gemäß Ausführungsformen der Beschreibung darstellt; während 12B ein Blockdiagramm ist, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsschablonen davon gemäß Ausführungsformen der Erfindung darstellt. Insbesondere ein generisches vektorfreundliches Befehlsformat 1000, für das Klasse-A- und Klasse-B-Befehlsschablone definiert sind, die jeweils keine Befehlsschablonen für den Speicherzugriff 1005 und Befehlsschablonen für den Speicherzugriff 1020 enthalten. Der Begriff generisch bezieht sich im Kontext des vektorfreundlichen Befehlsformats darauf, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Es sind zugleich Ausführungsformen der Erfindung beschrieben, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine Vektoroperandenlänge (oder -größe) von 64 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 doppelwortgroßen Elementen oder alternativ 8 vierfachwortgroßen Elementen); eine Vektoroperandenlänge (oder -größe) von 64 Byte mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine Vektoroperandenlänge (oder -größe) von 32 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine Vektoroperandenlänge (oder -größe) von 16 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); alternative Ausführungsformen können mehr, weniger und/oder andere Vektoroperandengrößen (z. B. 256 Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsschablonen in 12A umfassen: 1) in den Nichtspeicherzugriffs-Befehlsschablonen 1005 ist eine Nichtspeicherzugriffs-Vollrundungssteuerungs-Typ-Operations-Befehlsschablone 1010 und eine Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 1015 gezeigt; und 2) in den Speicherzugriffs-Befehlsschablonen 1020 ist eine Speicherzugriffs-Temporal-Befehlsschablone 1025 und eine Speicherzugriffs-Nichttemporal-Befehlsschablone 1030 gezeigt. Die Klasse-B-Befehlsschablonen in 12B umfassen: 1) in den Nichtspeicherzugriffs-Befehlsschablonen 1005 ist eine Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations- Befehlsschablone 1012 (Schreibmaskensteuerung in Figuren als WMC abgekürzt) und eine Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 1017 gezeigt; und 2) in den Speicherzugriffs-Befehlsschablonen 1020 ist eine Speicherzugriffs-Schreibmaskensteuerungs-Befehlsschablone 1027 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 1000 enthält die folgenden Felder, die unten in der in 12A-12B dargestellten Reihenfolge aufgelistet sind.
  • Formatfeld 1040 - ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert das vektorfreundliche Befehlsformat und somit das Auftreten von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsflüssen eindeutig. Daher ist dieses Feld optional in dem Sinne, dass es für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht benötigt wird.
  • Basisoperationsfeld 1042 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 1044 - sein Inhalt gibt, direkt oder durch Adresserzeugung, die Orte der Quell- und Zieloperanden an, ob sie nun in Registern oder im Speicher vorliegen. Diese umfassen eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einem PxQ-Registersatz (z. B. 32x512, 16x128, 32x1024, 64x1024). Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister darstellen kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können bis zu zwei Quellen unterstützt werden, wobei eine dieser Quellen auch als das Ziel dient, können bis zu drei Quellen unterstützt werden, wobei eine dieser Quellen auch als das Ziel dient, oder können bis zu zwei Quellen und ein Ziel unterstützt werden).
  • Modifikatorfeld 1046 - sein Inhalt unterscheidet Vorkommen von Befehlen in dem generischen Vektorbefehlsformat, die Speicherzugriff spezifizieren, von denen, die dies nicht tun; das heißt, zwischen Nichtspeicherzugriffs-Befehlsschablonen 1005 und Speicherzugriffs-Befehlsschablonen 1020. Speicherzugriffsoperationen lesen und/oder schreiben in der Speicherhierarchie (in einigen Fällen spezifizieren sie dabei die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern), während Nichtspeicherzugriffsoperationen dies nicht tun (beispielsweise sind die Quelle und die Ziele Register). Obwohl in einer Ausführungsform dieses Feld auch zwischen drei verschiedenen Arten, um Speicheradressberechnungen durchzuführen, unterscheidet, können alternative Ausführungsformen mehr, weniger oder andere Arten, Speicheradressberechnungen durchzuführen, unterstützen.
  • Erweiterungsoperationsfeld 1050 - sein Inhalt unterscheidet, welche einer Vielzahl unterschiedlicher Operationen zusätzlich zu der Basisoperation durchgeführt werden sollen. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 1068, ein Alphafeld 1052 und ein Betafeld 1054 unterteilt. Das Erweiterungsoperationsfeld 1050 erlaubt es, gewöhnliche Gruppen von Operationen in einem einzelnen Befehl anstatt in 2, 3 oder 4 Befehlen durchzuführen.
  • Skalierungsfeld 1060 - sein Inhalt erlaubt das Skalieren des Inhalts des Indexfelds zur Speicheradresserzeugung (beispielsweise zu einer Adresserzeugung, die 2Skala * Index + Basis verwendet) .
  • Verlagerungsfeld 1062A - sein Inhalt wird als Teil der Speicheradresserzeugung verwendet (beispielsweise zu einer Adresserzeugung, die 2skala * Index + Basis + Verlagerung verwendet).
  • Verlagerungsfaktorfeld 1062B (es ist zu beachten, dass die Anordnung von Verlagerungsfeld 1062A direkt über dem Verlagerungsfaktorfeld 1062B anzeigt, dass eines von beiden verwendet wird) - sein Inhalt wird als Teil der Adresserzeugung verwendet; es spezifiziert einen Verlagerungsfaktor, der mit der Größe eines Speicherzugriffs (N) skaliert wird - wobei N die Anzahl von Bytes in dem Speicherzugriff ist (beispielsweise für eine Adresserzeugung, die 2skala * Index + Basis + skalierte Verlagerung verwendet). Redundante niederwertige Bits werden ignoriert, und somit wird der Inhalt des Verlagerungsfaktorfelds mit der Gesamtgröße (N) der Speicheroperanden multipliziert, um die endgültige Verlagerung zu erzeugen, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N wird durch die Prozessorhardware zur Laufzeit anhand des vollständigen Opcode-Felds 1074 (hier später beschrieben) und des Datenmanipulationsfelds 1054C bestimmt. Das Verlagerungsfeld 1062A und das Verlagerungsfaktorfeld 1062B sind optional in dem Sinne, dass sie nicht für Nichtspeicherzugriffs-Befehlsschablonen 1005 verwendet werden, und/oder andere Ausführungsformen können lediglich eines oder keines von beiden implementieren.
  • Datenelementbreitenfeld 1064 - sein Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen für lediglich einige der Befehle). Dieses Feld ist optional in dem Sinne, dass es nicht benötigt wird, falls lediglich eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1070 - sein Inhalt steuert auf Basis einer jeweiligen Datenelementposition, ob diese Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und Erweiterungsoperation widerspiegelt. Klasse-A-Befehlsschablonen unterstützen Zusammenlegen-Schreibmaskieren, während Klasse-B-Befehlsschablonen sowohl Zusammenlegen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenlegen ermöglichen Vektormasken, dass irgendeine Menge von Elementen im Ziel vor Aktualisierungen während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) geschützt wird; in einer Ausführungsform wird der alte Wert jedes Elements des Ziels, an dem das entsprechende Maskenbit eine 0 aufweist, erhalten. Im Gegensatz dazu wird dann, wenn Nullsetzungs-Vektormasken ermöglichen dass irgendeine Menge von Elementen in dem Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) nullgesetzt werden, in einer Ausführungsform ein Wert des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die ausgeführt wird, zu steuern (das heißt die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); jedoch ist es nicht erforderlich, dass die Elemente, die modifiziert werden, aufeinanderfolgen. Daher ermöglicht das Schreibmaskenfeld 1070 partielle Vektoroperationen, einschließlich Ladeoperationen, Speicheroperationen arithmetische Operationen, logische Operationen etc. Obwohl Ausführungsformen der Erfindung beschrieben sind, bei denen der Inhalt des Schreibmaskenfelds 1070 aus einer Anzahl von Schreibmaskenregistern eines auswählt, das die zu verwendende Schreibmaske enthält (und somit der Inhalt des Schreibmaskenfelds 1070 indirekt angibt, dass Maskieren durchgeführt werden soll), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 1070 direkt spezifiziert, dass das Maskieren durchgeführt werden soll.
  • Direktwert-Feld 1072 - sein Inhalt ermöglicht die Spezifizierung eines Direktwerts. Dieses Feld ist optional in dem Sinne, dass es nicht in einer Implementation des generischen vektorfreundlichen Formats, das Direktwerte nicht unterstützt, und nicht in Befehlen, die keinen Direktwert verwenden, vorliegt.
  • Klassenfeld 1068 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Unter Bezugnahme auf 12A-12B wählt der Inhalt dieses Felds zwischen Befehlen der Klasse A und Klasse B. In 12A-12B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorliegt (beispielsweise Klasse A 1068A bzw. Klasse B 1068B für das Klassenfeld 1068 in 12A-12B).
  • Befehlsschablonen der Klasse A
  • Im Falle der Nichtspeicherzugriffs-Befehlsschablonen 1005 der Klasse A wird das Alphafeld 1052 als ein RS-Feld 1052A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erweiterungsoperationstypen durchgeführt werden soll (beispielsweise werden Rundung 1052A.1 und Datentransformation 1052A.2 jeweils für die Nichtspeicherzugriffs-Rundungs-Typ-Operations-Befehlsschablone 1010 und die Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 1015 spezifiziert), während das Betafeld 1054 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. Bei den Nichtspeicherzugriffs-Befehlsschablonen 1005 kommen das Skalierungsfeld 1060, das Verlagerungsfeld 1062A und das Verlagerungsfaktorskalierungsfeld 1062B nicht vor.
  • Nichtspeicherzugriffs-Befehlsschablonen - Vollrundungssteuerungs-Typ-Operation
  • Bei der Nichtspeicherzugriffs-Vollrundungssteuerungs-Typ-Operations-Befehlsschablone 1010 wird das Betafeld 1054 als ein Rundungssteuerfeld 1054A interpretiert, dessen Inhalt statisches Runden liefert. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 1054A ein Feld 1056 zum Unterdrücken aller Fließkommaausnahmen (SAE-Feld) und ein Rundungsoperationssteuerfeld 1058 enthält, können alternative Ausführungsformen diese beiden Konzepte im gleichen Feld oder lediglich eines der beiden dieser Konzepte/Felder unterstützen/codieren (beispielsweise lediglich das Rundungsoperationssteuerfeld 1058 aufweisen).
  • SAE-Feld 1056 - sein Inhalt unterscheidet, ob das Melden von Ausnahmeereignissen ausgeschaltet werden soll oder nicht; wenn der Inhalt des SAE-Felds 1056 anzeigt, dass eine Unterdrückung eingeschaltet ist, meldet ein gegebener Befehl von keinerlei Fließkommaausnahme-Merker und ruft keinen Fließkommaausnahmebehandler auf.
  • Rundungsoperationssteuerfeld 1058 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (beispielsweise Aufrunden, Abrunden, Runden auf null und Runden auf die nächste Zahl). Somit ermöglicht das Rundungsoperationssteuerfeld 1058 ein Ändern des Rundungsmodus je nach Befehl. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, erhält der Inhalt des Rundungsoperationssteuerfelds 1050 Vorrang vor diesem Registerwert.
  • Nichtspeicherzugriffs-Befehlsschablonen-Datentransformations-Typ-Operation
  • Bei der Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 1015 wird das Betafeld 1054 als ein Datentransformationsfeld 1054B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen durchgeführt werden soll (beispielsweise keine Datentransformation, Swizzle, Broadcast).
  • Im Falle einer Speicherzugriffs-Befehlsschablone 1020 der Klasse A wird das Alphafeld 1052 als ein Räumungshinweisfeld 1052B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 12A werden jeweils Temporal 1052B.1 und Nichttemporal 1052B.2 für die Speicherzugriffs-Temporal-Befehlsschablone 1025 und die Speicherzugriffs-Nichttemporal-Befehlsschablone 1030 spezifiziert), während das Betafeld 1054 als ein Datenmanipulationsfeld 1054C interpretiert wird, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenmanipulationsoperationen (auch als Primitive bekannt) durchgeführt werden soll (beispielsweise keine Manipulation; Broadcast; Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Speicherzugriffs-Befehlsschablonen 1020 enthalten das Skalierungsfeld 1060 und optional das Verlagerungsfeld 1062A oder das Verlagerungsskalierungsfeld 1062B.
  • Vektorspeicherbefehle führen Vektorladevorgänge und Vektorspeichervorgänge aus einem und in einen Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten datenelementweise aus/in Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske vorgegeben sind, die als die Schreibmaske ausgewählt ist.
  • Speicherzugriffs-Befehlsschablonen - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich früh genug wiederverwendet werden, um von Caching zu profitieren. Dies stellt jedoch einen Hinweis dar und unterschiedliche Prozessoren können diesen auf unterschiedliche Arten implementieren, was vollständiges Ignorieren des Hinweises einschließt.
  • Speicherzugriffs-Befehlsschablonen - Nichttemporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht früh genug wiederverwendet werden, um von Caching in dem Cache der 1. Ebene zu profitieren, und sollten bevorzugt geräumt werden. Dies stellt jedoch einen Hinweis dar, und unterschiedliche Prozessoren können diesen auf unterschiedliche Arten implementieren, was vollständiges Ignorieren des Hinweises einschließt.
  • Befehlsschablonen der Klasse B
  • Im Falle der Befehlsmodelle der Klasse B wird das Alphafeld 1052 als ein Schreibmaskensteuer-(Z)-Feld 1052C interpretiert, dessen Inhalt unterscheidet, ob das Schreibmaskieren, das durch das Schreibmaskenfeld 1070 gesteuert wird, ein Zusammenlegen oder ein Nullsetzen sein sollte.
  • Im Falle der Nichtspeicherzugriffs-Befehlsschablonen 1005 der Klasse B wird ein Teil des Betafelds 1054 als ein RL-Feld 1057A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Erweiterungsoperationstypen durchgeführt werden soll (beispielsweise sind Rundung 1057A.1 und Vektorlänge (VSIZE) 1057A.2 jeweils für die Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations-Befehlsschablone 1012 und die Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 1017 spezifiziert), während der Rest des Betafelds 1054 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. Bei den Nichtspeicherzugriffs-Befehlsschablonen 1005 sind das Skalierungsfeld 1060, das Verlagerungsfeld 1062A und das Verlagerungsskalierungsfeld 1062B nicht vorhanden.
  • Bei der Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations-Befehlsschablone 1010 wird der Rest des Betafelds 1054 als ein Rundungsoperationsfeld 1059A interpretiert, und das Melden von Ausnahmeereignissen ist ausgeschaltet (ein gegebener Befehl meldet keinerlei Fließkommaausnahme-Merker und ruft keinen Fließkommaausnahme-Behandler auf).
  • Rundungsoperationssteuerfeld 1059A - genau wie das Rundungsoperationssteuerfeld 1058 unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (beispielsweise Aufrunden, Abrunden, Runden auf null und Runden auf nächste Zahl). Somit ermöglicht das Rundungsoperationssteuerfeld 1059A ein Ändern des Rundungsmodus je nach Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, erhält der Inhalt des Rundungsoperationssteuerfelds 1050 Vorrang vor diesem Registerwert.
  • Bei der Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 1017, wird der Rest des Betafelds 1054 als ein Vektorlängenfeld 1059B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Vektorlängen bearbeitet werden soll (beispielsweise 128, 256 oder 512 Byte).
  • Im Falle einer Speicherzugriffs-Befehlsschablone 1020 der Klasse B wird ein Teil des Betafelds 1054 als ein Broadcast-Feld 1057B interpretiert, dessen Inhalt entscheidet, ob die Broadcast-Typ-Datenmanipulations-Operation durchgeführt werden soll oder nicht, während der Rest des Betafelds 1054 als ein Vektorlängenfeld 1059B interpretiert wird. Die Speicherzugriffs-Befehlsschablonen 1020 enthalten das Skalierungsfeld 1060 und optional das Verlagerungsfeld 1062A oder das Verlagerungsskalierungsfeld 1062B.
  • Unter Bezugnahme auf das generische vektorfreundliche Befehlsformat 1000 ist ein vollständiges Opcode-Feld 1074 gezeigt, das das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreitenfeld 1064 enthält. Während eine Ausführungsform gezeigt ist, bei der das vollständige Opcode-Feld 1074 alle diese Felder enthält, enthält das vollständige Opcode-Feld 1074 weniger als alle dieser Felder in Ausführungsformen, die nicht alle davon unterstützen. Das vollständige Opcode-Feld 1074 liefert den Operationscode (Opcode).
  • Das Erweiterungsoperationsfeld 1050, das Datenelementbreitenfeld 1064 und das Schreibmaskenfeld 1070 ermöglichen, dass diese Strukturen je Befehl in dem generischen vektorfreundlichen Befehlsformat spezifiziert werden.
  • Die Kombination des Schreibmaskenfelds und Datenelementbreitenfelds erzeugt typisierte Befehle, da diese es ermöglichen, dass die Maske basierend auf unterschiedlichen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsschablonen, die innerhalb der Klasse A und der Klasse B vorgefunden werden, sind in verschiedenen Situationen vorteilhaft. In einigen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein hochleistungsfähiger, nicht reihenfolgetreuer Allzweck-Kern, der für allgemeine Berechnungen gedacht ist, nur Klasse B unterstützen, ein Kern, der primär für Graphik und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht ist, nur Klasse A unterstützen, und ein Kern, der für beides gedacht ist, beide unterstützen (natürlich liegt ein Kern, der eine Mischung von Schablonen und Befehlen aus beiden Klassen, aber nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Bereichs der Offenbarung). Außerdem kann ein einzelner Prozessor mehrere Kerne enthalten, die alle die gleiche Klasse unterstützen oder unter denen verschiedene Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Allzweckkernen einer der Grafikkerne, die primär für Grafik und/oder wissenschaftliche Berechnung vorgesehen sind, nur Klasse A unterstützen, während einer oder mehrere der Allzweckkerne Hochleistungskerne für allgemeine Zwecke mit nicht reihenfolgetreuer Ausführung und Registerumbenennung für allgemeine Berechnungen sein können, die nur Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Grafikkern hat, kann einen oder mehrere reihenfolgetreue oder nicht reihenfolgetreue Allzweck-Kerne umfassen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können Merkmale einer Klasse in verschiedenen Ausführungsformen der Erfindung auch in der anderen Klasse implementiert sein. Programme, die in einer Hochsprache geschrieben sind, würden in eine Vielzahl von unterschiedlichen ausführbaren Formen versetzt werden (z. B. bei Bedarf kompiliert oder statisch kompiliert), die umfassen: 1) eine Form, die nur Befehle der Klasse oder Klassen enthält, die von dem Zielprozessor zur Ausführung unterstützt werden; oder 2) eine Form mit alternativen Routinen, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind, und mit einem Steuerflusscode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen, die von dem Prozessor unterstützt werden, der gerade den Code ausführt, auswählt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 13 ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung zeigt. 13A zeigt ein spezifisches vektorfreundliches Befehlsformat 1100, das in dem Sinne spezifisch ist, dass es den Ort, die Größe, Interpretation und Reihenfolge der Felder spezifiziert, ebenso wie Werte für einige dieser Felder. Das spezifische vektorfreundliche Befehlsformat 1100 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und somit sind einige der Felder ähnlich oder identisch mit denjenigen, die in dem existierenden x86-Befehlssatz und der Erweiterung davon (beispielsweise AVX) verwendet werden. Dieses Format bleibt mit dem Präfixcodierfeld, reellen Opcode-Bytefeld, MOD-R/M-Feld, SIB-Feld, Verlagerungsfeld und Direktwertfeldern des bestehenden x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder aus 12, auf die die Felder aus 13 abgebildet sind, sind beispielhaft gezeigt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 1100 im Kontext des generischen vektorfreundlichen Befehlsformats 1000 zu beispielhaften Zwecken beschrieben sind, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1100 beschränkt ist, außer wenn dies beansprucht wird. Beispielsweise sieht das generische vektorfreundliche Befehlsformat 1000 eine Vielzahl möglicher Größen für die verschiedenen Felder vor, während das spezifische vektorfreundliche Befehlsformat 1100 mit Feldern spezifischer Größen gezeigt ist. Durch das spezielle Beispiel ist die Erfindung, obwohl das Datenelementbreitenfeld 1064 als ein Ein-Bit-Feld in dem spezifischen vektorfreundlichen Befehlsformat 1100 gezeigt ist, nicht derart beschränkt (das heißt, das generische vektorfreundliche Befehlsformat 1000 zieht andere Größen des Datenelementbreitenfelds 1064 in Betracht).
  • Das generische vektorfreundliche Befehlsformat 1000 enthält die folgenden Felder, die nachstehend in der in 13A beispielhaft gezeigten Reihenfolge aufgeführt sind.
  • EVEX-Präfix (Bytes 0-3) 1102 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 1040 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 1040 und enthält 0x62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des vektorfreundlichen Befehlsformats verwendet wird).
  • Das zweite bis vierte Byte (EVEX-Bytes 1-3) enthalten eine Anzahl von Bitfeldern, die spezifische Fähigkeiten bereitstellen.
  • REX-Feld 1105 (EVEX-Byte 1, Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7]-R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6]-X) und 1057 BEX-Byte 1, Bit [5]-B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder liefern die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder und werden unter Verwendung einer 1s-Komplementform codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie aus dem Stand der Technik bekannt (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb gebildet werden können, indem EVEX.R, EVEX.X und EVEX.B addiert werden.
  • REX'-Feld 1010 - dies ist der erste Teil des REX'-Felds 1010 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4]-R'), das verwendet wird, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform der Erfindung wird dieses Bit gemeinsam mit anderen, wie es nachstehend angegeben ist, in einem bitinvertierten Format gespeichert, um (in dem wohlbekannten x86-32-Bitmodus) von dem BOUND-Befehl zu unterscheiden, dessen reales Opcode-Byte 62 ist, der jedoch in dem MOD-R/M-Feld (unten beschrieben) nicht den Wert von 11 in dem MOD-Feld akzeptiert; alternative Ausführungsformen der Erfindung speichern dieses und die anderen nachstehend angegebenen Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und dem anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 1115 (EVEX-Byte 1, Bits [3:0]-mmmm) - sein Inhalt codiert ein implizites führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1064 (EVEX-Byte 2, Bit [7]-W) - wird durch die Notation EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 1120 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter (1s-Komplement-) Form spezifiziert ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) EVEX.vvvv codiert den Zielregisteroperanden, der in 1s-Komplement-Form für bestimmte Vektorverschiebungen spezifiziert ist; oder 3) EVEX.vvvv codiert gar keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit codiert das EVEX.vvvv-Feld 1120 die 4 niederwertigen Bits des ersten Quellregisterbezeichners, der in invertierter (1s-Komplement-) Form gespeichert ist. Abhängig von dem Befehl wird ein weiteres unterschiedliches EVEX-Bitfeld verwendet, um die Bezeichnergröße auf 32 Register zu erweitern.
  • EVEX.U-Klassenfeld 1068 (EVEX-Byte 2, Bit [2]-U) - wenn EVEX.U = 0 ist, zeigt es Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, zeigt es Klasse B oder EVEX.U1 an.
  • Präfixcodierfeld 1125 (EVEX-Byte 2, Bits [1:0]-pp) - liefert zusätzliche Bits für das Basisoperationsfeld. Zusätzlich zum Bereitstellen von Unterstützung für veraltete SSE-Befehle in dem EVEX-Präfixformat hat dies außerdem den Vorteil, das SIMD-Präfix kompakt darzustellen (anstatt ein Byte zu benötigen, um das SIMD-Präfix auszudrücken, benötigt das EVEX-Präfix lediglich 2 Bits). In einer Ausführungsform sind diese veralteten SIMD-Präfixe, um veraltete SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im veralteten Format als auch in dem EVEX-Präfixformat verwenden, in das SIMD-Präfixcodierfeld codiert; und werden zur Laufzeit auf das SIMD-Präfix erweitert, bevor sie an die PLA des Decodierers geliefert werden (so dass die PLA sowohl das veraltete als auch das EVEX-Format dieser veralteten Befehle ohne Modifizierung ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierfelds direkt als eine OpcodeErweiterung verwenden könnten, erweitern sich bestimmte Ausführungsformen zur Konsistenz auf ähnliche Weise, ermöglichen jedoch, dass andere Bedeutungen durch diese veralteten SIMD-Präfixcodierungen spezifiziert werden können. Eine alternative Ausführungsform kann die PLA umgestalten, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen und somit die Erweiterung nicht zu benötigen.
  • Alphafeld 1052 (EVEX-Byte 3, Bit [7]-EH; auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; auch als α gezeigt) - wie bereits beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS, auch als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB bekannt; auch als βββ gezeigt) - wie bereits beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1010 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3]-V'), das verwendet werden kann, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. Dieses Bit ist in bitinvertiertem Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird V' VVVV durch Kombinieren von EVEX.V' EVEX.vvvv, gebildet.
  • Schreibmaskenfeld 1070 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie es zuvor beschrieben ist. In einer Ausführungsform der Erfindung weist ein spezifischer Wert von EVEX.kkk = 000 ein spezielles Verhalten auf, das impliziert, dass keine Schreibmaske für den betreffenden Befehl verwendet wird (dies kann auf eine Vielzahl von Arten implementiert werden, einschließlich der Verwendung einer Schreibmaske, die fest auf nur Einsen verdrahtet ist, oder Hardware, die die Maskierungshardware umgeht).
  • Reelles Opcode-Feld 1130 (Byte 4) ist auch bekannt als das Opcode-Byte. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • MOD-R/M-Feld 1140 (Byte 5) umfasst ein MOD-Feld 1142, ein Reg-Feld 1144 und ein R/M-Feld 1146. Wie zuvor beschrieben unterscheidet der Inhalt des MOD-Feldes 1142 zwischen Speicherzugriffs- und NichtspeicherzugriffsOperationen. Die Rolle des Reg-Feldes 1144 kann in zwei Situationen zusammengefasst werden: entweder codiert es den Zielregisteroperanden oder einen Quellregisteroperanden, oder es wird als eine Opcodeerweiterung behandelt und nicht zum Codieren irgendeines Befehlsoperanden verwendet werden. Die Rolle des R/M-Feldes 1146 kann Folgendes umfassen: es codiert den Befehlsoperanden, der auf eine Speicheradresse verweist, oder es codiert entweder den Zielregisteroperanden oder einen Quellregisteroperanden.
  • Skala-Index-Basis-Byte (SIB-Byte) (Byte 6) - wie zuvor beschrieben, wird der Inhalt des Skalierungsfeldes 1050 für die Speicheradressenerzeugung verwendet. SIB.xxx 1154 und SIB.bbb 1156 - auf den Inhalt dieser Felder wurde zuvor unter Bezugnahme auf die Registerindizes Xxxx und Bbbb verwiesen.
  • Verlagerungsfeld 1062A (Bytes 7-10) - wenn das MOD-Feld 1142 10 enthält, sind Bytes 7-10 das Verlagerungsfeld 1062A, und es arbeitet genau wie die veraltete 32-Bit-Verlagerung (disp32) und arbeitet bei Bytegranularität.
  • Verlagerungsfaktorfeld 1062B (Byte 7) - wenn das MOD-Feld 1142 01 enthält, ist Byte 7 das Verlagerungsfaktorfeld 1062B. Der Ort dieses Felds ist der gleiche wie der der 8-Bit-Verlagerung (disp8) des veralteten x86-Befehlssatzes, der bei Bytegranularität arbeitet. Weil disp8 vorzeichenerweitert ist, kann es lediglich zwischen -128 und 127 Byteversätzen adressieren; hinsichtlich 64-Byt-Cachezeilen verwendet disp8 8 Bits, die lediglich auf vier wirklich nützliche Werte -128, -64, 0 und 64 gesetzt werden können; weil oft ein größerer Bereich benötigt wird, wird disp32 verwendet; jedoch benötigt disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verlagerungsfaktorfeld 1062B eine Neuinterpretation von disp8; wenn das Verlagerungsfaktorfeld 1062B verwendet wird, wird die tatsächliche Verlagerung durch den Inhalt des Verlagerungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ von Verlagerung wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verlagerung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verlagerung basiert auf der Annahme, dass die effektive Verlagerung ein Vielfaches der Granularität des Speicherzugriffs ist, und somit brauchen die niedrigwertigen Bits des Adressversatzes nicht codiert zu werden. Mit anderen Worten ersetzt das Verlagerungsfaktorfeld 1062B die 8-Bit-Verlagerung des veralteten x86-Befehlssatzes. Daher wird das Verlagerungsfaktorfeld 1062B auf die gleiche Weise codiert wie eine 8-Bit-Verlagerung des x86-Befehlssatzes (somit keine Änderungen an den ModRM/SIB-Codierregeln) mit der einzigen Ausnahme, dass disp8 zu disp8*N überladen wird. Mit anderen Worten gibt es keine Änderungen an den Codierregeln oder Codierlängen, sondern lediglich an der Interpretation des Verlagerungswerts durch Hardware (die die Verlagerung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressversatz zu erhalten). Das Direktwertfeld 1072 arbeitet wie zuvor beschrieben.
  • Vollständiges Opcode-Feld
  • 13B ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100, die das vollständige Opcode-Feld 1074 bilden, gemäß einer Ausführungsform darstellt. Insbesondere umfasst das vollständige Opcode-Feld 1074 das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreiten-(W)-Feld 1064. Das Basisoperationsfeld 1042 umfasst das Präfixcodierfeld 1125, das Opcode-Abbildungsfeld 1115 und das reelle Opcode-Feld 1130.
  • Registerindexfeld
  • 13C ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100, die das Registerindexfeld 1044 bilden, gemäß einer Ausführungsform darstellt. Insbesondere enthält das Registerindexfeld 1044 das REX-Feld 1105, das REX'-Feld 1110, das MODR/M.reg-Feld 1144, das MODR/M.r/m-Feld 1146, das VVVV-Feld 1120, das xxx-Feld 1154 und das bbb-Feld 1156.
  • Erweiterungsoperationsfeld
  • 13D ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100 veranschaulicht, die das Erweiterungsoperationsfeld 1050 gemäß einer Ausführungsform bilden. Wenn das Klassen-(U)-Feld 1068 0 enthält, gibt dies EVEX.U0 (Klasse A 1068A) an; wenn es 1 enthält, gibt dies EVEX.U1 (Klasse B 1068B) an. Wenn U=0 ist und das MOD-Feld 1142 11 enthält (was eine Nichtspeicherzugriffs-Operation bedeutet), wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7]-EH) als das RS-Feld 1052A interpretiert. Wenn das RS-Feld 1052A eine 1 enthält (Rundung 1052A.1), wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS) als das Rundungssteuerfeld 1054A interpretiert. Das Rundungssteuerfeld 1054A enthält ein Ein-Bit-SAE-Feld 1056 und ein Zwei-Bit-Rundungsoperationsfeld 1058. Wenn das RS-Feld 1052A eine 0 enthält (Datentransformation 1052A.2), wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 1054B interpretiert. Wenn U=0 und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffs-Operation anzeigt), wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7]-EH) als das Räumungshinweis-Feld (EH-Feld) 1052B interpretiert und das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 1054C interpretiert.
  • Wenn U=1 ist, wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7]-EH) als das Schreibmaskensteuer-(Z)-Feld 1052C interpretiert. Wenn U=1 ist und das MOD-Feld 1142 11 enthält (was eine Nichtspeicherzugriffs-Operation anzeigt), wird ein Teil des Betafeldes 1054 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 1057A interpretiert; wenn es 1 (Rundung 1057A.1) enthält, wird der Rest des Betafeldes 1054 (EVEX-Byte 3, Bit [6-5]-S2-1) als das Rundungsoperationsfeld 1059A interpretiert, während dann, wenn das RL-Feld 1057A 0 enthält (VSIZE 1057.A2), der Rest des Betafeldes 1054 (EVEX-Byte 3, Bit [6-5]-S2-1) als das Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5]-L1-0) interpretiert wird. Wenn U=1 ist und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffs-Operation anzeigt), wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS) als das Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5]-L1-0) und das Broadcast-Feld 1057B (EVEX-Byte 3, Bit [4]-B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 14 ist ein Blockdiagramm einer Registerarchitektur 1200 gemäß einer Ausführungsform. In einer gezeigten Ausführungsform gibt es 32 Vektorregister 1210, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederwertigen 256 Bits der unteren 16 zmm-Register werden an Register ymm0-16 überlagert. Die niederwertigen 128 Bits der unteren 16 zmm-Register (die niederwertigen 128 Bits der ymm-Register) werden an Register xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 1100 arbeitet an diesem überlagerten Registersatz wie in den nachstehenden Tabellen beispielhaft gezeigt.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlsschablonen, die das Vektorlängenfeld 1059B nicht enthalten A ( 12A; U=0) 1010, 1015, 1025, 1030 zmm-Register (die Vektorlänge ist 64 Byte)
    B ( 12B; U=1) 1012 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehlsschablonen, die das Vektorlängenfeld 1059B enthalten B ( 12B; U=1) 1017, 1027 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) abhängig von Vektorlängenfel d 1059B
  • Mit anderen Worten wählt das Vektorlängenfeld 1059B zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen, wobei jede solcher kürzeren Längen halb so groß wie die Länge der vorhergehenden Länge ist; und Befehlsschablonen ohne das Vektorlängenfeld 1059B arbeiten auf der maximalen Vektorlänge. Ferner bearbeiten in einer Ausführungsform die Befehlsschablonen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 1100 gepackte oder skalare Fließkommadaten mit einfacher/doppelter Präzision und gepackte oder skalare Ganzzahldaten. Skalare Operationen sind Operationen, die an der niedrigstwertigen Datenelementposition in einem zmm-/ymm-/xmm-Register durchgeführt werden; die höherwertigen Datenelementpositionen werden abhängig von der Ausführungsform entweder belassen, wie sie vor dem Befehl waren, oder nullgesetzt.
  • Schreibmaskenregister 1215 - in der beispielhaft gezeigten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bits groß sind. In einer alternativen Ausführungsform haben die Schreibmaskenregister 1215 eine Größe von 16 Bits. Wie bereits beschrieben kann das Vektormaskenregister k0 in einer Ausführungsform der Erfindung nicht als Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt es eine fest verdrahtete Schreibmaske von 0xFFFF, wobei effektiv Schreibmaskieren für diesen Befehl ausgeschaltet wird.
  • Allzweckregister 1225 - in der gezeigten Ausführungsform gibt es sechzehn 64-Bit-Allzweckregister, die gemeinsam mit den existierenden x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalar-Fließkomma-Stapelregistersatz (x87-Stapel) 1245, mit dem der MMX-gepackte Ganzzahlflachregistersatz 1250 per Alias verbunden ist - in der beispielhaft gezeigten Ausführungsform ist der x87-Stapel ein Stapel aus acht Elementen, der verwendet wird, um skalare Fließkommaoperationen an 32/64/80-Bit-Fließkommadaten unter Verwendung der x86-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen an 64-Bitgepackten Ganzzahldaten durchzuführen und Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Andere Ausführungsformen können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registersätze und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Arten für verschiedene Zwecke und in verschiedenen Prozessoren implementiert sein. Zum Beispiel können Implementierungen solcher Kerne umfassen: 1) einen reihenfolgetreuen Allzweck-Kern, der für allgemeine Berechnungen bestimmt ist; 2) einen nicht reihenfolgetreuen Hochleistungs-Allzweck-Kern, der für die allgemeine Berechnungen bestimmt ist; 3) einen Spezialkern, der hauptsächlich für Graphik und/oder wissenschaftliche (Durchsatz-)Berechnungen bestimmt ist. Implementierungen verschiedener Prozessoren können umfassen: 1) eine CPU, die einen oder mehrere reihenfolgetreue Allzweck-Kerne enthält, die für allgemeine Berechnungen vorgesehen sind, und/oder einen oder mehrere nicht reihenfolgetreue Allzweck-Kerne, die für allgemeine Berechnungen bestimmt sind; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die primär für Grafik und/oder wissenschaftlichen Durchsatz gedacht sind. Solche unterschiedlichen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die umfassen können: 1) der Coprozessor auf einem separaten Chip von der CPU; 2) der Coprozessor auf einem separaten Chip in derselben Baugruppe wie eine CPU; 3) der Coprozessor auf demselben Chip wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als Speziallogik bezeichnet, wie z. B. integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik oder als Spezialkerne); und 4) ein Ein-Chip-System, das auf demselben Chip die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Beispielhafte Kernarchitekturen werden als Nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Blockdiagramm von reihenfolgetreuem und nicht reihenfolgetreuem Kern
  • 15A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue Pipeline als auch eine beispielhafte nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Erfindung darstellt. 15B ist ein Blockdiagramm, das sowohl eine Ausführungsform eines reihenfolgetreuen Architekturkerns als auch eines beispielhaften Architekturkerns mit Registerumbenennung und nicht reihenfolgetreuer Ausgabe/Ausführung, die in einem Prozessor enthalten sein sollen, gemäß Ausführungsformen der Erfindung darstellt. Die durchgezogenen Kästchen in 15A-15B zeigen die reihenfolgetreue Pipeline und den reihenfolgetreuen Kern, während der optionale Zusatz der gestrichelten gezeichneten Kästchen die nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung und den zugehörigen Kern darstellt. Unter der Voraussetzung, dass der reihenfolgetreue Aspekt eine Teilmenge des nicht reihenfolgetreuen Aspekts ist, ist der nicht reihenfolgetreue Aspekt beschrieben.
  • In 15A enthält eine Prozessor-Pipeline 1300 eine Abrufstufe 1302, eine Längendecodierstufe 1304, eine Decodierstufe 1306, eine Zuweisungsstufe 1308, eine Umbenennungsstufe 1310, eine Scheduler-Stufe (auch als Absende- oder Ausgabe-Stufe bekannt) 1312 eine Registerlese-/Speicherlesestufe 1314, eine Ausführungsstufe 1316, eine Rückschreib-/Speicherschreibstufe 1318, eine Ausnahmebehandlungsstufe 1322 und eine Festschreibungsstufe 1324.
  • 15B zeigt einen Prozessorkern 1390, der eine Frontend-Einheit 1330 enthält, die mit einer Ausführungsmaschineneinheit 1350 gekoppelt ist, wobei beide mit einer Speichereinheit 1370 gekoppelt sind. Der Kern 1390 kann ein Kern für Berechnung mit reduziertem Befehlssatz (RISC-Kern), ein Kern für Berechnung mit komplexem Befehlssatz (CISC-Kern), ein Kern mit sehr langem Befehlswort (VLIW-Kern) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 1390 ein Spezialkern wie etwa ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Allzweck-Grafikverarbeitungseinheits-Kern (GPGPU-Kern), ein Grafikkern oder dergleichen sein.
  • Die Frontend-Einheit 1330 enthält eine Verzweigungsvorhersageeinheit 1332, die mit einer Befehlscacheeinheit 1334 gekoppelt ist, die mit einem Befehlsübersetzungsnachschlagepuffer (TLB) 1336 gekoppelt ist, der mit einer Befehlsabrufeinheit 1338 gekoppelt ist, die mit einer Decodiereinheit 1340 gekoppelt ist. Die Decodiereinheit 1340 (bzw. der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert werden oder diese reflektieren oder von diesen abgeleitet sind, erzeugen. Die Decodiereinheit 1340 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind aber nicht beschränkt auf, Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs) usw. In einer Ausführungsform enthält der Kern 1390 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 1340 oder anderweitig in der Frontend-Einheit 1330). Die Decodiereinheit 1340 ist mit einer Umbenennungs-/Zuweisungseinheit 1352 in der Ausführungsmaschineneinheit 1350 gekoppelt.
  • Die Ausführungsmaschineneinheit 1350 enthält die Umbenennungs-/Zuweisungseinheit 1352, die mit einer Stilllegungseinheit 1354 und einem Satz von einer oder mehreren Scheduler-Einheiten 1356 gekoppelt ist. Die eine oder die mehreren Scheduler-Einheiten 1356 repräsentieren eine beliebige Anzahl verschiedener Scheduler, einschließlich Reservierungsstationen (RS), eines zentralen Befehlsfensters usw. Die eine oder die mehreren Scheduler-Einheiten 1356 sind mit der einen oder den mehreren physischen Registersatzeinheiten 1358 gekoppelt. Jede der einen oder der mehreren physischen Registersatzeinheiten 1358 stellt einen oder mehrere physische Registersätze dar, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie z. B. skalare Ganzzahl, skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfassen die eine oder die mehreren physische Registersatzeinheiten 1358 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die eine oder die mehreren physischen Registersatzeinheiten 1358 werden von der Stilllegungseinheit 1354 überlappt, um verschiedene Arten zu veranschaulichen, in denen Registerumbenennung und nicht reihenfolgetreue Ausführung implementiert sein können (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und eines oder mehrerer Stilllegungsregistersätze, unter Verwendung einer oder mehrerer Zukunftsdateien, unter Verwendung eines oder mehrerer Verlaufspuffer und eines oder mehrerer Stilllegungsregisterblöcke; unter Verwendung einer Registerkarte und eines Pools von Registern; etc.). Die Stilllegungseinheit 1354 und die eine oder die mehreren physischen Registerblockeinheiten 1358 sind mit dem einen oder den mehreren Ausführungsclustern 1360 gekoppelt. Der eine oder die mehreren Ausführungscluster 1360 enthalten einen Satz von einer oder mehreren Ausführungseinheiten 1362 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1364. Die Ausführungseinheiten 1362 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) durchführen und arbeiten mit verschiedenen Arten von Daten (z. B. skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkommazahl). Obwohl einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die bestimmten Funktionen oder Mengen von Funktionen zugeordnet sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle jeweils alle Funktionen ausführen. Die eine oder die mehreren Scheduler-Einheiten 1356, die eine oder die mehreren physischen Registersatzeinheiten 1358 und die Ausführungscluster 1360 sind optional mehrfach dargestellt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erzeugen (z. B. eine Pipeline für skalare Ganzzahlen, ein Pipeline für skalare Gleitkommazahl/gepackte Ganzzahl/gepackte Gleitkommazahl/Vektor-Ganzzahl/Vektor Gleitkommazahl und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physische Registerblockeinheit und/oder ihren eigenen Ausführungscluster haben - und im Falle einer separaten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1364 aufweist). Es sollte auch verstanden werden, dass dann, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines nicht reihenfolgetreuer Ausgabe/Ausführung dienen können und der Rest reihenfolgetreu sein kann.
  • Der Satz von Speicherzugriffseinheiten 1364 ist mit der Speichereinheit 1370 gekoppelt, die eine Daten-TLB-Einheit 1372 umfasst, die mit einer Datencacheeinheit 1374 gekoppelt ist, die mit einer Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1376 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1364 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 1372 in der Speichereinheit 1370 gekoppelt sind. Die Befehlscacheeinheit 1334 ist ferner mit einer Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1376 in der Speichereinheit 1370 gekoppelt. Die L2-Cacheeinheit 1376 kann mit einer oder mehreren anderen Cacheebenen und schließlich mit einem Hauptspeicher gekoppelt sein.
  • Beispielsweise kann die Kernarchitektur mit Registerumbenennung und nicht reihenfolgetreuer Ausgabe/Ausführung die Pipeline 1300 wie folgt implementieren: 1) die Befehlsabrufeinheit 1338 führt die Abruf- und Längendecodierstufen 1302 und 1304 durch; 2) die Decodiereinheit 1340 führt die Decodierstufe 1306 durch; 3) die Umbenennungs-/Zuweisungseinheit 1352 führt die Zuweisungsstufe 1308 und die Umbenennungsstufe 1310 durch; 4) die eine oder die mehreren Scheduler-Einheiten 1356 führen die Planungsstufe 1312 durch; 5) die eine oder die mehreren physische Registersatzeinheiten 1358 und die Speichereinheit 1370 führen die Registerlese-/Speicherlesestufe 1314 durch; der Ausführungscluster 1360 führt die Ausführungsstufe 1316 aus; 6) die Speichereinheit 1370 und die eine oder die mehreren physische Registersatzeinheiten 1358 führen die Rückschreib-/Speicherschreibstufe 1318 durch; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 1322 beteiligt sein; und 8) die Stilllegungseinheit 1354 und die eine oder die mehreren physische Registersatzeinheiten 1358 führen die Festschreibungsstufe 1324 durch.
  • Der Kern 1390 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden), den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, Kalifornien), einschließlich der hierin enthaltenen Befehle. In einer Ausführungsform umfasst der Kern 1390 eine Logik zum Unterstützen einer gepackten Datenbefehlssatzerweiterung (z. B. AVX1, AVX2), wodurch ermöglicht wird, dass die von vielen Multimediaanwendungen verwendeten Operationen unter Verwendung von gepackten Daten ausgeführt werden.
  • Es sollte verstanden werden, dass der Kern Mehrsträngigkeit (ein Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Strängen) unterstützen kann und dies auf eine Vielzahl von Arten tun kann, einschließlich zeitlich aufgeteilter Mehrsträngigkeit, simultaner Mehrsträngigkeit (bei der ein einzelner physischer Kern einen logischen Kern für jeden der Stränge liefert, für die der physische Kern simultane Mehrsträngigkeit bietet) oder einer Kombination davon (z. B. zeitlich aufgeteiltes Abrufen und Decodieren und simultane Mehrsträngigkeit danach, wie bei der Intel®-Hyperthreading-Technologie).
  • Obwohl die Registerumbenennung im Zusammenhang mit der nicht reihenfolgetreuen Ausführung beschrieben ist, sollte verstanden werden, dass die Registerumbenennung in einer reihenfolgetreuen Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch eine separate Befehls- und Datencacheeinheit 1334/1374 und eine gemeinsame L2-Cache-Einheit 1376 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch Daten aufweisen, wie etwa einen internen Cache erster Ebene (L1-Cache) oder mehrere Ebenen internen Caches. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, umfassen. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezifische beispielhafte reihenfolgetreue Kernarchitektur
  • 16A-16B zeigen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit einer Logik fester Funktion, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
  • 16A ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem Verbindungsnetz 1402 auf dem Chip und mit seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches) 1404 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1400 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 1406 ermöglicht Zugriffe mit niedriger Latenzzeit, um Speicher in den Skalar- und Vektoreinheiten zwischenzuspeichern. Obwohl in einer Ausführungsform (um das Design zu vereinfachen) eine Skalareinheit 1408 und eine Vektoreinheit 1410 separate Registersätze (bzw. Skalarregister 1412 und Vektorregister 1414) verwenden und Daten, die zwischen ihnen übertragen werden, in den Speicher geschrieben und dann wieder von einem Ebene-1-Cache (L1-Cache) 1406 zurückgelesen werden, können andere Ausführungsformen einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der es ermöglicht, Daten zwischen den beiden Registersätzen zu übertragen, ohne dass sie geschrieben und zurückgelesen zu werden).
  • Die lokale Teilmenge des L2-Caches 1404 ist Teil eines globalen L2-Caches, der in separate lokale Teilmengen aufgeteilt ist, und zwar eine je Prozessorkern. Jeder Prozessorkern hat einen direkten Zugriffsweg zu seiner eigenen lokalen Teilmenge des L2-Cache 1404. Von einem Prozessorkern gelesene Daten werden in seiner L2-Cache-Teilmenge 1404 gespeichert und es kann parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, schnell darauf zugegriffen werden. Daten, die von einem Prozessorkern geschrieben werden, werden in seiner eigenen L2-Cache-Teilmenge 1404 gespeichert und bei Bedarf aus anderen Teilmengen ausgeräumt. Das Ringnetz stellt die Kohärenz für gemeinsame Daten sicher. Das Ringnetz ist bidirektional, damit Agenten wie Prozessorkerne, L2-Caches und andere Logikblöcke innerhalb des Chips miteinander kommunizieren können. Jeder Ringdatenweg ist 1012 Bits pro Richtung breit.
  • 16B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 16A gemäß Ausführungsformen der Erfindung. 16B enthält einen L1-Datencache 1406A, einen Teil des L1-Caches 1404 sowie weitere Details bezüglich der Vektoreinheit 1410 und der Vektorregister 1414. Insbesondere ist die Vektoreinheit 1410 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 1428), die eine oder mehrere Ganzzahl-, Einfachpräzisions-Gleitkomma- und Doppelpräzisions-Gleitkommabefehle ausführt. Die VPU unterstützt das Swizzeln von Registereingaben mit der Swizzle-Einheit 1420, eine numerische Konvertierung mit Einheiten für numerische Konvertierung 1422A-B und eine Replikation mit der Replikationseinheit 1424 an der Speichereingabe. Schreibmaskenregister 1426 ermöglichen das Prädizieren von resultierenden Vektorschreibvorgängen.
  • 17 ist ein Blockdiagramm eines Prozessors 1500, der mehr als einen Kern aufweisen kann, einen integrierten Speichercontroller aufweisen kann und gemäß Ausführungsformen der Erfindung integrierte Grafik aufweisen kann. Die durchgezogenen Kästchen in 17 zeigen einen Prozessor 1500 mit einem einzelnen Kern 1502A, einem Systemagenten 1510, einem Satz von einer oder mehreren Buscontrollereinheiten 1516, während der optionale Zusatz der gestrichelten Kästchen einen alternativen Prozessor 1500 mit mehreren Kernen 1502A-N, einem Satz von einer oder mehreren integrierten Speichersteuereinheiten 1514 in der Systemagenteneinheit 1510, und einer Speziallogik 1508 darstellt.
  • Somit können verschiedene Implementierungen des Prozessors 1500 umfassen: 1) eine CPU mit der Speziallogik 1508, die eine integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne enthalten kann), wobei die Kerne 1502A-N ein oder mehrere Allzweckkerne (z. B. reihenfolgetreue Allzweck-Kerne, nicht reihenfolgetreue Allzweckkerne, eine Kombination aus beiden) sind; 2) einen Coprozessor, wobei die Kerne 1502A-N eine große Anzahl von Spezial-Kernen sind, die hauptsächlich für Grafik und/oder wissenschaftlichen Durchsatz bestimmt sind; und 3) einen Coprozessor, wobei die Kerne 1502A-N eine große Anzahl von reihenfolgetreuen Allzweckkernen sind. Somit kann der Prozessor 1500 ein Allzweck-Prozessor, Coprozessor oder Spezial-Prozessor wie beispielsweise ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU (Allzweck-Grafikverarbeitungseinheit), ein Coprozessor mit vielen Kernen mit hohem Durchsatz (MIC-Coprozessor) (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1500 kann ein Teil von einem oder mehreren Substraten und/oder auf diesen unter Verwendung einer beliebigen Anzahl von Prozesstechnologien implementiert sein, wie z. B. BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst eine oder mehrere Ebenen von Cache 1504A-N innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsam genutzte Cache-Einheiten 1506 und einen externen Speicher (nicht gezeigt), der mit dem Satz von integrierten Speichercontrollereinheiten 1514 gekoppelt ist. Die Cache-Einheiten 1506 können einen oder mehrere Caches mittlerer Ebene umfassen, wie etwa Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, einen Cache letzter Ebene (LLC) und/oder Kombinationen davon. Obwohl in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1512 die integrierte Grafiklogik 1508, den Satz gemeinsamer Cache-Einheiten 1506 und die Systemagenteneinheit 1510/die integrierte(n) Speichersteuereinheit(en) 1514 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl von bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1506 und Kernen 1502A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1502A-N zur Mehrsträngigkeit fähig. Der Systemagent 1510 enthält die Komponenten, die die Kerne 1502A-N koordinieren und betreiben. Die Systemagenteneinheit 1510 kann beispielsweise eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik oder Komponenten darstellen oder enthalten, die zum Regeln des Leistungszustands der Kerne 1502A-N und der integrierten Grafiklogik 1508 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1502A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1502A-N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz ausführen können.
  • Beispielhafte Computerarchitekturen
  • 18-20 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere Systementwürfe und Konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, persönliche digitale Assistenten, technische Arbeitsplatzrechner, Server, Netzvorrichtungen, Netzhubs, Switches, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Beistellgeräte, Mikrocontroller, Mobiltelefone, tragbare Medienabspieler, in der Hand tragbare Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl von Systemen oder elektronischen Vorrichtungen, die einen Prozessor und/oder eine andere Ausführungslogik, wie sie hierin offenbart sind, enthalten können, im Allgemeinen geeignet.
  • Unter Bezugnahme auf 18 ist ein Blockdiagramm eines Systems 1600 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1600 kann einen oder mehrere Prozessoren 1610, 1615 umfassen, die mit einem Controller-Hub 1620 gekoppelt sind. In einer Ausführungsform umfasst der Controller-Hub 1620 einen Grafikspeicher-Controller-Hub (GMCH) 1690 und einen Eingabe/Ausgabe-Hub (IOH) 1650 (die auf getrennten Chips sein können); der GMCH 1690 enthält einen Speicher- und einen Grafik-Controller, mit denen ein Speicher 1640 und ein Coprozessor 1645 gekoppelt sind; der IOH 1650 koppelt Eingabe/Ausgabe-Vorrichtungen (IO-Vorrichtungen) 1660 mit dem GMCH 1690. Alternativ sind der Speicher- und/oder der Grafikcontroller in dem Prozessor integriert (wie hierin beschrieben), der Speicher 1640 und der Coprozessor 1645 sind direkt mit dem Prozessor 1610 gekoppelt und der Controller-Hub 1620 ist auf einem einzelnen Chip mit dem IOH 1650.
  • Die optionale Natur der zusätzlichen Prozessoren 1615 ist in 18 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 1610, 1615 kann einen oder mehrere der hierin beschriebenen Verarbeitungskerne enthalten und kann eine bestimmte Version des Prozessors 1500 sein.
  • Der Speicher 1640 kann beispielsweise ein dynamischer Speicher mit wahlfreiem Zugriff (DRAM), ein Phasenwechselspeicher (PCM) oder eine Kombination aus beiden sein. Bei mindestens einer Ausführungsform kommuniziert der Controller-Hub 1620 mit dem/den Prozessor(en) 1610, 1615 über einen Multidrop-Bus wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle wie Ultra Path Interconnect (UPI) oder eine ähnliche Verbindung 1695.
  • In einer Ausführungsform ist der Coprozessor 1645 ein Spezial-Prozessor wie beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1620 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Betriebsmitteln 1610, 1615 im Hinblick auf ein Spektrum von Leistungsmetriken geben, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Energieverbrauchseigenschaften und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1610 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Coprozessorbefehle sein. Der Prozessor 1610 erkennt diese Coprozessorbefehle als einen Typ, der von dem angeschlossenen Coprozessor 1645 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1610 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 1645 aus. Der eine oder die mehreren Coprozessoren 1645 akzeptieren die empfangenen Coprozessorbefehle und führen sie aus.
  • Unter Bezugnahme auf 19 ist ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems 1700 gezeigt. Wie in 19 gezeigt ist das Mehrprozessorsystem 1700 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1770 und einen zweiten Prozessor 1780, die über eine Punkt-zu-Punkt-Zwischenverbindung 1750 gekoppelt sind. Die Prozessoren 1770 und 1780 können jeweils eine Version des Prozessors 1500 sein. In einer Ausführungsform sind die Prozessoren 1770 und 1780 Prozessoren 1610 bzw. 1615, während der Coprozessor 1738 ein Coprozessor 1645 ist. In einer weiteren Ausführungsform sind die Prozessoren 1770 und 1780 Prozessor 1610 bzw. Coprozessor 1645.
  • Die Prozessoren 1770 und 1780 sind mit integrierten Speichercontrollereinheiten (IMC-Einheiten) 1772 bzw. 1782 gezeigt. Der Prozessor 1770 umfasst zudem als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-Schnittstellen (PP-Schnittstellen) 1776 und 1778; ebenso umfasst der zweite Prozessor 1780 PP-Schnittstellen 1786 und 1788. Die Prozessoren 1770, 1780 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (PP-Schnittstelle) 1750 unter Verwendung von PP-Schnittstellenschaltungen 1778, 1788 austauschen. Wie in 19 gezeigt koppeln die IMCs 1772 und 1782 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1732 und einem Speicher 1734, die Teile des Hauptspeichers sein können, die lokal an die jeweiligen Prozessoren angebunden sind.
  • Die Prozessoren 1770, 1780 können jeweils Informationen mit einem Chipsatz 1790 über einzelne PP-Schnittstellen 1752, 1754 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1776, 1794, 1786, 1798 austauschen. Der Chipsatz 1790 kann optional über eine Hochleistungsschnittstelle 1739 Informationen mit dem Coprozessor 1738 austauschen. In einer Ausführungsform ist der Coprozessor 1738 ein Spezial-Prozessor wie etwa ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in jedem Prozessor enthalten sein oder außerhalb von beiden Prozessoren sein, jedoch über PP-Verbindung mit den Prozessoren verbunden sein, so dass lokale Cache-Informationen eines oder beider der Prozessoren in dem gemeinsamen Cache gespeichert werden können, wenn ein Prozessor in einen Energiesparmodus versetzt wird.
  • Der Chipsatz 1790 kann mit einem ersten Bus 1716 über eine Schnittstelle 1796 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1716 ein Peripheriekomponenten-Zwischenverbindungs-Bus (PCI-Bus) oder ein Bus wie etwa ein PCI-Express-Bus oder ein anderer E/A-Zwischenverbindungsbus dritter Generation sein, auch wenn der Umfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 19 gezeigt können verschiedene E/A-Vorrichtungen 1714 mit dem ersten Bus 1716 gemeinsam mit einer Busbrücke 1718 gekoppelt sein, die den ersten Bus 1716 mit einem zweiten Bus 1720 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1715 wie etwa Coprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-Einheiten (DSP-Einheiten), feldprogrammierbare Gatteranordnungen oder irgendein anderer Prozessor mit dem ersten Bus 1716 gekoppelt sein. In einer Ausführungsform kann der zweite Bus 1720 ein Bus mit geringer Pinanzahl (LPC-Bus) sein. Verschiedene Vorrichtungen können mit dem zweiten Bus 1720 gekoppelt sein, einschließlich beispielsweise einer Tastatur/Maus 1722, Kommunikationsvorrichtungen 1727 und einer Speichereinheit 1728 wie etwa eines Plattenlaufwerks oder einer anderen Massenspeichereinheit, die in einer Ausführungsform Befehle oder Code und Daten 1730 enthalten kann. Ferner kann eine Audio-E/A-Vorrichtung 1724 mit dem zweiten Bus 1720 gekoppelt sein. Es versteht sich, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur von 19 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Unter Bezugnahme auf 20 ist ein Blockdiagramm eines zweiten spezifischeren Beispielsystems 1800 gezeigt. Gleiche Elemente in 17 und 18 tragen gleiche Bezugszeichen und bestimmte Aspekte von 19 wurden in 20 weggelassen, um zu vermeiden, andere Aspekte von 20 zu verunklaren.
  • 20 zeigt, dass die Prozessoren 1770, 1780 einen integrierten Speicher und eine E/A-Steuerlogik („CL“) 1772 bzw. 1782 enthalten können. Somit umfassen die CL 1772, 1782 integrierte Speichersteuereinheiten und enthalten eine E/A-Steuerlogik. 20 zeigt, dass nicht nur die Speicher 1732, 1734 mit den CL 1772, 1782 gekoppelt sind, sondern auch die E/A-Vorrichtungen 1814 ebenfalls mit der Steuerlogik 1772, 1782 gekoppelt sind. Alt-E/A-Vorrichtungen 1815 sind mit dem Chipsatz 1790 gekoppelt.
  • Unter Bezugnahme auf 21 ist ein Blockdiagramm eines SoC 1900 gemäß einer Ausführungsform gezeigt. Ähnliche Elemente in 17 tragen gleiche Bezugszeichen. Gestrichelte Kästchen sind zudem optionale Merkmale von fortgeschritteneren SoCs. In 21 sind eine oder mehrere Zwischenverbindungseinheiten 1902 gekoppelt mit: einem Anwendungsprozessor 1910, der einen Satz von einem oder mehreren Kernen 202A-N und eine oder mehrere gemeinsam genutzte Cache-Einheiten 1506 enthält; einer Systemagenteneinheit 1510; einer oder mehreren Buscontrollereinheiten 1516; einer oder mehreren integrierten Speichercontrollereinheiten 1514; eine Gruppe von einem oder mehreren Coprozessoren 1920, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; einen statische Speichereinheit mit wahlfreiem Zugriff (SRAM) 1930; eine Direktspeicherzugriffs-Einheit (DMA-Einheit) 1932; und eine Anzeigeeinheit 1940 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfassen der eine oder die mehreren Coprozessoren 1920 einen Spezial-Prozessor wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Ansätze implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, der/die auf programmierbaren Systemen ausgeführt werden kann/können, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nichtflüchtigen Speicher und/oder Speicherelemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabeeinrichtung enthalten.
  • Programmcode wie beispielsweise der in 19 dargestellte Code 1730 kann auf Eingangsbefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgangsinformationen zu erzeugen. Die Ausgangsinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für Zwecke dieser Anwendung kann ein Verarbeitungssystem irgendein System enthalten, dass einen Prozessor enthält, wie etwa beispielsweise: einen Digitalsignalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann als eine prozedurale Hochsprache oder objektorientierte Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in Assembler- oder Maschinensprache implementiert sein, falls gewünscht. Tatsächlich sind die hier beschriebenen Mechanismen hinsichtlich eines Schutzbereichs nicht auf irgendeine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Befehle implementiert sein, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, die, wenn sie durch eine Maschine gelesen werden, die Maschine dazu veranlassen, Logik herzustellen, um die hier beschriebenen Techniken durchzuführen. Solche Repräsentationen, bekannt als „IP-Kerne“, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, die die eigentliche Logik oder den Prozessor herstellen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung nichtflüchtige greifbare Anordnungen von Erzeugnissen einschließen, die durch eine Maschine oder Einrichtung hergestellt werden, einschließlich Speichermedien wie etwa Festplatten, irgendwelche anderen Plattentypen einschließlich Floppydisks, optische Platten, CD-ROMs, CD-RWs und magneto-optische Platten, Halbleitereinrichtungen wie etwa Nur-Lese-Speicher (ROM), Speicher mit wahlfreiem Zugriff (RAM) wie etwa dynamische Speicher mit wahlfreiem Zugriff (DRAM), statische Speicher mit wahlfreiem Zugriff (SRAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), Flashspeicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs), Phasenwechselspeicher (PCM), magnetische oder optische Karten oder irgendwelche anderen Medientypen, die zum Speichern elektronischer Befehle geeignet sind.
  • Somit schließen Ausführungsformen der Erfindung auch nichtflüchtige, greifbare maschinenlesbare Medien ein, die Befehle in dem vektorfreundlichen Befehlsformat enthalten oder Designdaten enthalten wie etwa Hardwarebeschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemstrukturen definiert, die hier beschrieben sind. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Code-Morphen etc.)
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl übersetzen (beispielsweise unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischem Kompilieren), morphen, emulieren oder auf andere Weise in einen oder mehrere andere Befehle umwandeln, die durch den Kern verarbeitet werden sollen. Der Befehlumwandler kann in Software, Hardware, Firmware oder in einer Kombination davon implementiert sein. Der Befehlsumwandler kann auf einem Prozessor, außerhalb eines Prozessors oder teilweise auf und teilweise außerhalb eines Prozessors sein.
  • 22 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung vergleicht. In der beispielhaft gezeigten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl alternativ der Befehlsumwandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 22 zeigt ein Programm in einer Hochsprache 2002, das unter Verwendung eines x86-Kompilierers 2004 kompiliert werden kann, um x86-Binärcode 2006 zu erzeugen, der durch einen Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2016 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2016 repräsentiert irgendeinen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatz-Kerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die zum Ablaufen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern gedacht ist, kompatibel ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erzielen. Der x86-Kompilierer 2004 repräsentiert einen Kompilierer, der betreibbar ist, um x86-Binärcode 2006 (beispielsweise Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2016 ausgeführt werden kann. Auf ähnliche Weise zeigt 22, dass das Programm in der Hochsprache 2002 unter Verwendung eines alternativen Befehlssatzkompilierers 2008 kompiliert werden kann, um einen alternativen Befehlssatzbinärcode 2010 zu erzeugen, der durch einen Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 2014 (beispielsweise einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS-Technologies aus Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARM-Holdings aus Sunnyvale, Kalifornien, ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 2012 wird verwendet, um den x86-Binärcode 2006 in Code umzuwandeln, der durch den Prozessor ohne einen x86-Befehlssatz-Kern 2014 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 2010, weil ein Befehlsumwandler, der dazu in der Lage ist, schwierig herzustellen ist; jedoch wird der umgewandelte Code den allgemeinen Betrieb ermöglichen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Somit repräsentiert der Befehlsumwandler 2012 Software, Firmware, Hardware oder eine Kombination derselben, die durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischer Einrichtung, die keinen x86-Befehlssatzprozessor oder - kern aufweist, ermöglicht, den x86-Binärcode 2006 auszuführen.

Claims (25)

  1. Vorrichtung für einen kryptografischen Hardwarebeschleuniger, die Folgendes umfasst: eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem (Verschlüsselungssystem nach dem fortschrittlichen Verschlüsselungsstandard), wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingabevektoren durchführen soll, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Nicht-AES-Affin-Transformationsschaltungsanordnung für Nicht-AES-Verschüsselungssysteme zum Durchführen von affinen Transformationen an 8-Bit-Eingangsvektoren mit variablen Abbildungs- und Translationsfunktionen; und eine Schaltungsanordnung zum Durchführen einer S-Box-Funktion für Nicht-AES-Verschlüsselungssysteme, die eine Schaltungsanordnung für Folgendes umfasst: Leiten von 8-Bit-Eingangsvektoren an die Nicht-AES-Affin-Transformationsschaltungsanordnung mit einer Abbildungsfunktion, die eine Multiplikation mit einer Matrix AS1 umfasst, und einer Translationsfunktion, die eine Addition eines Vektors bS1 umfasst, Leiten des Ergebnisses der affinen Transformation an die AES-S-Box und Umgehen der affinen AES-Transformation, um nur eine Invertierung durchzuführen, und Leiten des Ergebnisses der S-Box-Invertierung an die Nicht-AES-Affin-Transformationsschaltungsanordnung mit der Abbildungsfunktion, die die Multiplikation mit einer Matrix AS2 umfassen soll, und der Translationsfunktion, die die Addition eines Vektors bS2 umfassen soll.
  2. Vorrichtung nach Anspruch 1, wobei: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFs(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführen soll, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GFC(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; und die Abbildungsfunktion der Nicht-AES-Affin-Transformationsschaltungsanordnung eine Multiplikation mit einer Matrix MS, die vor der Invertierung durch die S-Box Vektoren von GFS(28) auf GFc((24)2) abbildet, und eine Multiplikation mit einer Matrix MS -1, die nach der Invertierung durch die S-Box Vektoren von GFc((24)2) auf GFS(28) abbildet, umfasst.
  3. Vorrichtung nach Anspruch 2, wobei: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; die S-Box ferner dazu dient, Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28) -Körper auf den GFC((24)2)-Körper abzubilden und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abzubilden; und die Abbildungsfunktion der Nicht-AES-Affin-Transformationsschaltungsanordnung eine Multiplikation mit der Matrix MA -1 vor der Invertierung durch die S-Box und eine Multiplikation mit der Matrix MA nach der Invertierung durch die S-Box umfasst.
  4. Vorrichtung nach Anspruch 3, die ferner Folgendes umfasst: eine Zeilenverschiebungsschaltung, eine Spaltenmischungsschaltung und eine Schlüsseladditionsschaltung zum Durchführen einer Verschlüsselung/Entschlüsselung gemäß dem AES-Verschlüsselungssystem; und wobei die Schaltungsanordnung zum Durchführen einer S-Box-Funktion für die Nicht-AES-Verschlüsselungsschaltungsanordnung eine Schaltungsanordnung zum Umgehen der Zeilenverschiebungsschaltung, der Spaltenmischungsschaltung und der Schlüsseladditionsschaltung enthält.
  5. Vorrichtung nach Anspruch 3, die ferner Folgendes umfasst: einen AES-Verschlüsselungspfad durch die AES-S-Box, der eine erste Verschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, eine zweite Verschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Verschlüsselungsoperation, die die affine AES-Transformation gefolgt von einer Multiplikation mit der Matrix MA -1 durchführt, umfasst; einen AES-Entschlüsselungspfad durch die S-Box, der eine erste Entschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, worauf eine inverse affine AES-Transformation folgt, eine zweite Entschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Entschlüsselungsoperation, die eine Multiplikation mit der Matrix MA -1 durchführt, umfasst; wobei die Schaltungsanordnung zum Durchführen einer S-Box-Funktion für das Nicht-AES-Verschlüsselungssystem, um die AES-Transformation und die inverse AES-Transformation der AES-S-Box zu umgehen, einen Pfad durch die S-Box enthält, der die erste Verschlüsselungsoperation, die zweite Verschlüsselungs- oder Entschlüsselungsoperation und die dritte Entschlüsselungsoperation umfasst.
  6. Vorrichtung nach Anspruch 3, wobei: vor der Invertierung durch die S-Box die Abbildungsfunktion der Nicht-AES-Affin-Transformationsschaltungsanordnung eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst und ihre Translationsfunktion eine Addition des Vektorprodukts MSMA -1*b1 umfasst; und nach der Invertierung durch die S-Box die Abbildungsfunktion der Nicht-AES-Affin-Transformationsschaltungsanordnung eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst und ihre Translationsfunktion eine Addition des Vektors b2 umfasst.
  7. Vorrichtung nach Anspruch 2, wobei das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 7 + x 6 + x 5 + x 4 + x 2 + 1 ) .
    Figure DE102019100009A1_0004
  8. Vorrichtung nach Anspruch 2, wobei das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 6 + x 5 + x 3 + 1 ) .
    Figure DE102019100009A1_0005
  9. Vorrichtung nach Anspruch 1, wobei die Vorrichtung in eine zentrale Verarbeitungseinheit (CPU) für den Befehlssatz der CPU zugänglich integriert ist.
  10. Vorrichtung nach Anspruch 1, wobei die Vorrichtung in einen Coprozessor oder eine andere Einrichtung integriert ist, um eine Schnittstelle zu einer zentralen Verarbeitungseinheit (CPU) zu bilden.
  11. Verfahren zum Durchführen von Verschlüsselungsoperationen, die nicht dem fortgeschrittenen Verschlüsselungsstandard (AES) entsprechen (Nicht-AES-Verschlüsselungsoperationen), das Folgendes umfasst: Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die eine Addition eines Vektors bS1 umfasst, ist; Leiten des Eingangsvektors nach der ersten affinen Nict-AES-Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Umgehen der affinen AES-Transformation der AES-S-Box; und Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die eine Addition eines Vektors bS2 umfasst, ist.
  12. Verfahren nach Anspruch 11, wobei: affine Nicht-AES-Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFs(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  13. Verfahren nach Anspruch 12, wobei: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; wobei die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  14. Verfahren nach Anspruch 13, wobei die AES-Beschleunigungshardware eine Zeilenverschiebungsschaltung, eine Spaltenmischungsschaltung und eine Schlüsseladditionsschaltung zum Durchführen einer Verschlüsselung/Entschlüsselung gemäß dem AES-Verschlüsselungssystem umfasst, und das Verfahren ferner ein Umgehen der Zeilenverschiebungsschaltung, der Spaltenmischungsschaltung und der Schlüsseladditionsschaltung, wenn Nicht-AES-Verschlüsselungsoperationen ausgeführt werden, umfasst.
  15. Verfahren nach Anspruch 13, wobei: ein AES-Verschlüsselungspfad durch die AES-S-Box eine erste Verschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, eine zweite Verschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Verschlüsselungsoperation, die die affine AES-Transformation gefolgt von einer Multiplikation mit der Matrix MA -1 durchführt, umfasst; ein AES-Entschlüsselungspfad durch die AES-S-Box eine erste Entschlüsselungsoperation, die einen Eingangsvektor mit der Matrix MA multipliziert, worauf eine inverse affine AES-Transformation folgt, eine zweite Entschlüsselungsoperation, die das Ergebnis invertiert, und eine dritte Entschlüsselungsoperation, die eine Multiplikation mit der Matrix MA -1 durchführt, umfasst; und das Verfahren ferner ein Umgehen der affinen AES-Transformation und der inversen AES-Transformation der S-Box umfasst, indem ein Pfad durch die S-Box durchlaufen wird, der die erste Verschlüsselungsoperation, die zweite Verschlüsselungs- oder Entschlüsselungsoperation und die dritte Entschlüsselungsoperation umfasst.
  16. Verfahren nach Anspruch 13, das ferner Folgendes umfasst: Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die eine Addition des Vektorprodukts MSMA -1*b1 umfasst; und Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die eine Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  17. Verfahren nach Anspruch 12, wobei das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 7 + x 6 + x 5 + x 4 + x 2 + 1 ) .
    Figure DE102019100009A1_0006
  18. Verfahren nach Anspruch 12, wobei das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 6 + x 5 + x 3 + 1 ) .
    Figure DE102019100009A1_0007
  19. Computerlesbares Speichermedium, das Befehle enthält, um die Verarbeitungsschaltungsanordnung mit einem Befehlssatz für die kryptografische AES-Hardwarebeschleunigung (Hardwarebeschleunigung nach dem fortschrittlichen Verschlüsselungsstandard) bei Ausführung der Befehle durch die Verarbeitungsschaltungsanordnung zu Folgendem zu veranlassen: Durchführen einer ersten affinen Nicht-AES-Transformation an einem Nicht-AES-Verschlüsselungssystem-Eingangsvektor, wobei die erste affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS1 umfasst, und eine Translation, die eine Addition eines Vektors bS1 umfasst, ist; Leiten des Eingangsvektors nach der ersten affinen Nicht-AES-Transformation an eine AES-Substitutionsbox (S-Box) für ein AES-Verschlüsselungssystem, wobei die AES-S-Box eine Invertierung gefolgt von einer affinen AES-Transformation an Eingangsvektoren durchführt, wobei die affine AES-Transformation eine Abbildungsmatrix und einen Translationsvektor verwendet, wie sie von dem AES spezifiziert sind; Umgehen der affinen AES-Transformation der AES-S-Box; und Durchführen einer zweiten affinen Nicht-AES-Transformation an dem Eingangsvektor nach der Invertierung durch die AES-S-Box, wobei die zweite affine Nicht-AES-Transformation eine Abbildung, die eine Multiplikation mit einer Matrix AS2 umfasst, und eine Translation, die eine Addition eines Vektors bS2 umfasst, ist.
  20. Medium nach Anspruch 19, wobei: affine Transformationen für das Nicht-AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFS(28) bezeichnet wird und aus GF(2) durch ein spezifiziertes Körperpolynom S(x) vom Grad 8 erzeugt wird; die AES-S-Box die Invertierungsoperation in einem Galois-Kompositkörper durchführt, der als GFC((24)2) bezeichnet wird und der durch ein spezifiziertes Körperpolynom P(x) vom Grad 2 aus einem Grundkörper GF(24) erzeugt wird, der durch ein spezifiziertes Körperpolynom R(x) vom Grad 4 aus GF(2) erzeugt wird; die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS umfasst, die Vektoren von GFS(28) auf GFC((24)2) abbildet; und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit einer Matrix MS -1 umfasst, die Vektoren von GFC((24)2) auf GFS(28) abbildet.
  21. Medium nach Anspruch 19, wobei: affine Transformationen für das AES-Verschlüsselungssystem so definiert sind, dass sie in einem Galois-Erweiterungskörper durchgeführt werden, der als GFAE(28) bezeichnet wird, wobei der GFAE(28)-Körper aus einem Galois-Körper GF(2) durch ein spezifiziertes Körperpolynom AE(x) vom Grad 8 erzeugt wird, wobei AE(x) = (x8+x4+x3+x+1) ist; die AES-S-Box Vektoren durch Multiplikation in GF(2) mit einer Matrix MA vor der Invertierung aus dem GFAE(28)-Körper auf den GFC((24)2)-Körper abbildet und die invertierten Vektoren mit einer Matrix MA -1 nach der Invertierung zurück von GFC((24)2) auf GFAE(28) abbildet; die erste affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA -1 umfasst, und die zweite affine Nicht-AES-Transformation eine Abbildung ist, die eine Multiplikation mit der Matrix MA umfasst.
  22. Medium nach Anspruch 19, das ferner Befehle für Folgendes enthält: Durchführen der ersten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MSMA -1AS1 umfasst, und einer Translationsfunktion, die eine Addition des Vektorprodukts MSMA -1*b1 umfasst; und Durchführen der zweiten affinen Nicht-AES-Transformation mit einer Abbildungsfunktion, die eine Multiplikation mit dem Matrixprodukt MAMS -1AS2 umfasst, und einer Translationsfunktion, die die Addition des Vektors b2 umfasst, nach der Invertierung durch die S-Box.
  23. Medium nach Anspruch 20, wobei das Nicht-AES-Verschlüsselungssystem SM4 ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 7 + x 6 + x 5 + x 4 + x 2 + 1 ) .
    Figure DE102019100009A1_0008
  24. Medium nach Anspruch 20, wobei das Nicht-AES-Verschlüsselungssystem Camellia ist, wobei das Körperpolynom S(x) ist: S ( x ) = ( x 8 + x 6 + x 5 + x 3 + 1 ) .
    Figure DE102019100009A1_0009
  25. Medium nach Anspruch 19, wobei die Verarbeitungsschaltungsanordnung eine zentrale Verarbeitungseinheit (CPU) ist, die einen Befehlssatz für AES-Hardwarebeschleunigung und affine Transformationen aufweist.
DE102019100009.2A 2018-02-02 2019-01-02 Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln Withdrawn DE102019100009A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/887,290 US10797858B2 (en) 2018-02-02 2018-02-02 Unified hardware accelerator for symmetric-key ciphers
US15/887,290 2018-02-02

Publications (1)

Publication Number Publication Date
DE102019100009A1 true DE102019100009A1 (de) 2019-08-08

Family

ID=67308893

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019100009.2A Withdrawn DE102019100009A1 (de) 2018-02-02 2019-01-02 Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln

Country Status (3)

Country Link
US (1) US10797858B2 (de)
CN (1) CN110138541A (de)
DE (1) DE102019100009A1 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11032061B2 (en) * 2018-04-27 2021-06-08 Microsoft Technology Licensing, Llc Enabling constant plaintext space in bootstrapping in fully homomorphic encryption
TWI731770B (zh) * 2019-08-16 2021-06-21 熵碼科技股份有限公司 運算系統
US11632231B2 (en) * 2020-03-05 2023-04-18 Novatek Microelectronics Corp. Substitute box, substitute method and apparatus thereof
US11750364B2 (en) * 2020-03-17 2023-09-05 Brainlab Ag Fuzzy datamatching using homomorphic encryption
KR102457166B1 (ko) * 2020-11-23 2022-10-20 부산대학교 산학협력단 ARIA의 암호화 및 복호화를 지원하는 프로세서용 32bit 확장 명령어 체계를 갖는 하드웨어 모듈 및 이의 제어 방법
CN112564890B (zh) * 2020-12-07 2023-03-24 海光信息技术股份有限公司 一种加速sm4算法的方法、装置、处理器及电子设备
EP4248433A1 (de) * 2020-12-08 2023-09-27 Rambus Inc. Hochgeschwindigkeitsschaltung mit kombination von aes- und sm4-verschlüsselung und -entschlüsselung
TWI776474B (zh) * 2021-04-20 2022-09-01 啟碁科技股份有限公司 單回合高階加密標準電路模組
CN114143576B (zh) * 2021-11-26 2024-04-09 广东爱视文化发展有限公司 一种音视频加密保护点播方法、装置及电子设备
CN114244510B (zh) * 2021-12-20 2024-08-06 深圳忆联信息系统有限公司 硬件加速装置、方法、设备及存储介质
CN114710285B (zh) * 2022-05-19 2022-08-23 北京大学 一种面向异构并行架构的高性能sm4比特切片优化方法
CN117978367B (zh) * 2024-03-28 2024-06-28 青岛青软晶尊微电子科技有限公司 一种基于risc-v架构的加密方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8411853B2 (en) * 2008-08-28 2013-04-02 Lsi Corporation Alternate galois field advanced encryption standard round
US9425961B2 (en) * 2014-03-24 2016-08-23 Stmicroelectronics S.R.L. Method for performing an encryption of an AES type, and corresponding system and computer program product
US9800406B2 (en) * 2014-05-21 2017-10-24 Intel Corporation Technologies for modifying a first cryptographic cipher with operations of a second cryptographic cipher

Also Published As

Publication number Publication date
CN110138541A (zh) 2019-08-16
US20190245679A1 (en) 2019-08-08
US10797858B2 (en) 2020-10-06

Similar Documents

Publication Publication Date Title
DE102019100009A1 (de) Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln
DE112012007063B4 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE102018003612A1 (de) Befehle für Dualzieltyp-Umwandlung-, Akkumulation- mit gemischter Präzision und atomare Speicheroperationen mit gemischter Präzision
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE112013004798T5 (de) Befehlssatz zur Nachrichtenplanung des SHA256-Algorithmus
DE112013004796T5 (de) Befehlssatz für die SHA1-Rundenverarbeitung in 128 Bit-Datenwegen
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112013005372T5 (de) Befehl zum Bestimmen von Histogrammen
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018006744A1 (de) Bitmatrixmultiplikation
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung

Legal Events

Date Code Title Description
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee