DE60305129T2 - Mikroprozessor mit Pseudozufallszahlengenerator und Befehl zur Speicherung von Zufallsdaten - Google Patents

Mikroprozessor mit Pseudozufallszahlengenerator und Befehl zur Speicherung von Zufallsdaten Download PDF

Info

Publication number
DE60305129T2
DE60305129T2 DE60305129T DE60305129T DE60305129T2 DE 60305129 T2 DE60305129 T2 DE 60305129T2 DE 60305129 T DE60305129 T DE 60305129T DE 60305129 T DE60305129 T DE 60305129T DE 60305129 T2 DE60305129 T2 DE 60305129T2
Authority
DE
Germany
Prior art keywords
random
bytes
microprocessor
block
command
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.)
Expired - Lifetime
Application number
DE60305129T
Other languages
English (en)
Other versions
DE60305129D1 (de
Inventor
G. Glenn Austin Henry
Terry Austin Parks
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.)
IP First LLC
Original Assignee
IP First LLC
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 IP First LLC filed Critical IP First LLC
Application granted granted Critical
Publication of DE60305129D1 publication Critical patent/DE60305129D1/de
Publication of DE60305129T2 publication Critical patent/DE60305129T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/27Built-in tests
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions

Description

  • GEBIET DER ERFINDUNG
  • Die Erfindung betrifft allgemein das Gebiet der Zufallszahlenerzeugung und insbesondere einen Zufallszahlengenerator in einem Mikroprozessor.
  • HINTERGRUND DER ERFINDUNG
  • Bereits in der Vergangenheit war für zahlreiche Computerprogrammanwendungen die Versorgung mit Zufallszahlen nötig. Beispielsweise erfordern die Monte-Carlo-Simulation physikalischer Erscheinungen, etwa großräumige Wettersimulationen, die Versorgung mit Zufallszahlen, um physikalische Erscheinungen zu simulieren. Weitere Beispiele für Anwendungen, die Zufallszahlen benötigen, sind: Kasinospiele und Online-Spiele beim Simulieren des Kartenmischens, des Würfelfalls usw.; das Erzeugen von Lotteriezahlen; das Erzeugen von Daten für statistische Untersuchungen, beispielsweise psychologische Untersuchungen; und der Einsatz in Computerspielen.
  • Bei diesen Anwendungen unterscheiden sich die Qualität der benötigten Zufälligkeit und die Leistungsanforderungen beim Erzeugen der Zufallszahlen. Bei zahlreichen Anwendungen, beispielsweise Computerspielen, sind die Anforderungen an die Zufälligkeit trivial. Bei Anwendungen wie psychologische Untersuchungen sind die Qualitätsanforderungen ernsthafter, die Anforderungen an die Leistungsfähigkeit jedoch relativ gering. Großräumige Simulationen auf Monte-Carlo-Basis haben jedoch sehr hohe Leistungsanforderungen und verlangen gute statistische Eigenschaften der Zufallszahlen, wobei jedoch die Nichtvorhersagbarkeit weniger wichtig ist. Andere Anwendungen, beispielsweise Online-Spiele, besitzen sehr strenge Anforderungen an die Zufälligkeit und strenge Anforderungen an die Nichtvorhersagbarkeit.
  • Diese altbekannten Anwendungen sind nach wie vor wichtig, der stärkste Bedarf an hochwertigen Zufallszahlen besteht jedoch bei der Computersicherheit. In den letzten Jahren hat das explosive Wachstum der PC-Vernetzung und des Internet-gestützten Handels den Bedarf an zahlreichen Sicherheitsmechanismen wesentlich verstärkt.
  • Hochwertige Zufallszahlen sind unentbehrlich für alle Hauptkomponenten bei der Computersicherheit, d. h. Vertrauenswürdigkeit, Beglaubigung und Unversehrt heit.
  • Die Datenverschlüsselung ist der Hauptmechanismus zum Bereitstellen von Vertrauenswürdigkeit. Es sind zahlreiche verschiedene Verschlüsselungsalgorithmen bekannt, beispielsweise symmetrische Verschlüsselung, öffentlicher Schlüssel und nur einmal verwendete Schlüssel. Alle gemeinsam weisen die kritische Eigenschaft auf, dass der Verschlüsselung- bzw. Entschlüsselungsschlüssel nicht einfach vorhersagbar sein darf. Die kryptographische Festigkeit eines Verschlüsselungssystems beruht im Wesentlichen auf der Beständigkeit des Schlüssels, d. h., darauf, wie schwer es ist, den Entschlüsselungsschlüssel vorherzusagen, zu schätzen oder zu berechnen. Die besten Schlüssel sind lange echte Zufallszahlen. In allen ernsthaften Sicherheitsanwendungen dienen Zufallszahlengeneratoren als Grundlage für kryptographische Schlüssel.
  • Zahlreiche erfolgreiche Angriffe gegen kryptographische Algorithmen haben sich nicht auf den Verschlüsselungsalgorithmus konzentriert, sondern auf dessen Zufallszahlenquelle. Ein bekanntes Beispiel dafür ist eine frühe Version des Secure Sockets Layers (SSL) von Netscape, der Daten vom Systemtakt und der Prozess-ID-Tabelle gesammelt und sie zum Erzeugen eines Anfangswerts für einen Software-Pseudozufallszahlengenerator verwendet hat. Die entstehende Zufallszahl wurde zum Erzeugen eines symmetrischen Schlüssels zum Verschlüsseln von Sitzungsdaten verwendet. Zwei graduierte Studenten haben diesen Mechanismus dadurch gebrochen, dass sie eine Prozedur zum exakten Schätzen der Zufallszahl entwickelt haben, die den Sitzungsschlüssel in weniger als einer Minute schätzt.
  • Ähnlich wie bei den Verschlüsselungsschlüsseln besteht die Stärke eines Passworts, die zum Beglaubigen von Benutzern für den Zugang zu Informationen dient, in der Tat darin, wie schwer es ist, das Passwort zu schätzen oder vorherzusagen. Die besten Passwörter sind lange echte Zufallszahlen. Zusätzlich ist in Authentifizierungsprotokollen, die ein Challenge-Protokoll verwenden, der kritische Faktor, dass die Challenge nicht durch die Authentifizierungskomponente vorhersagbar ist. Zum Erzeugen der Authentifizierungs-Challenge werden Zufallszahlen verwendet.
  • Zum Garantieren der Integrität von Kommunikation über ein Netz werden digitale Signaturen und Message-Digests eingesetzt. In den meisten digitalen Signaturalgorithmen werden Zufallszahlen dazu verwendet, es einer böswilligen Partei zu erschweren, die Signatur zu fälschen. Die Qualität der Zufallszahl beeinflusst die Stärke der Sig natur direkt. Zusammenfassend kann man sagen, dass eine verlässliche Sicherheit gute Zufallszahlen erfordert.
  • Zahlen selbst sind nicht zufällig. Die Definition der Zufälligkeit muss nicht nur die Eigenschaften der erzeugten Zahlen umfassen, sondern auch die Eigenschaften des Generators, der die Zahlen erzeugt. Software-gestützte Zufallszahlengeneratoren sind weit verbreitet und reichen für viele Anwendungen aus. Für einige Anwendungen reichen Softwaregeneratoren jedoch nicht aus. Diese Anwendungen erfordern Hardwaregeneratoren, die Zahlen erzeugen, die die gleichen Eigenschaften haben wie Zahlen, die durch einen zufälligen physikalischen Vorgang erzeugt werden. Die wichtigen Eigenschaften sind der Grad, bis zudem die erzeugten Zahlen eine gleiche statistische Verteilung haben, nicht vorhersagbar sind und nicht zu reproduzieren sind.
  • Eine statistische Gleichverteilung bedeutet, dass alle Werte die gleiche Auftrittswahrscheinlichkeit haben, und zwar unabhängig von der Größe der Zahlenprobe. Nahezu alle Anwendungen erfordern eine gute statistische Verteilung ihrer Zufallszahlen, und mit hochwertigen Software-Zufallszahlengeneratoren kann man diese Anforderungen in der Regel erfüllen. Ein Generator, der nur die Anforderung der statistischen Gleichverteilung erfüllt, heißt Pseudo-Zufallszahlengenerator.
  • Unvorhersagbarkeit bedeutet, dass die Wahrscheinlichkeit, das nächste Bit einer Bitfolge zu schätzen, exakt 0,5 sein sollte, und zwar unabhängig von den Werten der vorher erzeugten Bits. Für einige Anwendungen ist die Unvorhersagbarkeitseigenschaft nicht erforderlich. Beim Einsatz von Zufallszahlen in Sicherheitsanwendungen ist sie kritisch. Wird ein Software-Generator verwendet, so erfordert das Erfüllen einer Unvorhersagbarkeitsanforderung in der Tat, dass der Softwarealgorithmus und seine Anfangswerte verborgen bleiben. Unter dem Gesichtspunkt der Sicherheit ist ein Ansatz mit verborgenem Algorithmus sehr schwach. Beispiele für gebrochene Sicherheit bei Softwareanwendungen, die einen Zufallszahlengenerator mit einem vorhersagbaren verborgenen Algorithmus verwenden, sind bekannt. Ein Generator, der die ersten beiden Anforderungen erfüllt, heißt kryptographisch sicherer Pseudo-Zufallszahlengenerator.
  • Damit ein Generator nicht reproduzierbar ist, müssen zwei gleiche Generatoren, die die gleichen Anfangsbedingungen erhalten, unterschiedliche Ausgangssignale erzeugen. Softwarealgorithmen erfüllen diese Anforderungen nicht. Die strengen Nichtreproduzierbarkeitsanforderungen zum Erzeugen von Werten für Sicherheitsan wendungen kann nur ein Hardwaregenerator erfüllen, der auf zufälligen physikalischen Prozessen beruht. Ein Generator, der alle drei Anforderungen erfüllt, heißt echter Zufallszahlengenerator.
  • Zum Erzeugen der meisten Zufallszahlen für Computeranwendungen werden Softwarealgorithmen eingesetzt. Dabei handelt es sich um so genannte Pseudo-Zufallszahlengeneratoren, da die Eigenschaften dieser Generatoren die Anforderungen an die Unvorhersagbarkeit und Nichtreproduzierbarkeit nicht erfüllen können. Zudem erfüllen einige Generatoren die Anforderungen an die statistische Gleichverteilung nicht.
  • Normalerweise beginnen Softwaregeneratoren mit einem Anfangswert oder Startwert, den manchmal der Benutzer liefert. Abhängig von diesem ersten Startwert werden arithmetische Operationen ausgeführt, die ein erstes Zufallsergebnis erzeugen, das dann als Anfangswert verwendet wird, aus dem ein zweites Ergebnis erzeugt wird, usw. Softwaregeneratoren sind zwingend zyklisch. Irgendwann wiederholen sie die gleiche Ausgangssignalfolge. Kann man den Anfangswert schätzen, so bedeutet dies, dass man in der Lage ist, die gesamte erzeugte Zahlenfolge vorherzusagen. Die Nichtreproduzierbarkeit ist lediglich so gut wie die Geheimhaltung des Algorithmus und des anfänglichen Startwerts. Dies kann für Sicherheitsanwendungen eine unerwünschte Eigenschaft sein. Zudem sind Softwarealgorithmen reproduzierbar, da sie ausgehend von der gleichen Eingabe die gleichen Ergebnisse erzeugen. Schließlich erzeugen Softwarealgorithmen nicht notwendig jeden möglichen Wert innerhalb des Bereichs des Ausgangsdatenumfangs. Dies kann sich nachteilig auf die Forderung nach statistischer Gleichverteilung auswirken.
  • Eine Form eines Zufallszahlengenerators, der eine Verschmelzung eines Softwaregenerators und eines echten Hardwaregenerators darstellt, ist der Entropiegenerator. Entropie ist ein anderer Begriff für Unvorhersagbarkeit. Je weniger die Zahlen vorhersagbar sind, die ein Generator erzeugt, um so mehr Entropie besitzt er. Entropiegeneratoren wenden Softwarealgorithmen auf einen Anfangswert an, der durch eine physikalische Erscheinung erzeugt wird. Beispielsweise erhält ein häufig verwendetes PC-Verschlüsselungsprogramm seinen Anfangswert durch das Aufzeichnen der Eigenschaften von Mausereignissen und Tastendrücken auf der Tastatur über einige Sekunden. Diese Aktivitäten können Zahlen mit schlechter Entropie erzeugen oder nicht, und sie erfordern in der Regel eine gewisse Beteiligung des Benutzers. Die am wenigsten erwünschte Eigenschaft bei den meisten Entropiegeneratoren besteht darin, dass sie zum Erzielen einer ausreichenden Entropie sehr lange brauchen.
  • Aus den obigen Ausführungen geht hervor, dass gewisse Anwendungen, zu den auch Sicherheitsanwendungen gehören, echte Zufallszahlen erfordern, die man nur mit einem zufälligen physikalischen Vorgang erzeugen kann, beispielsweise dem thermischen Rauschen einer Halbleiterdiode oder eines Widerstands, der Frequenzinstabilität eines frei laufenden Oszillators, oder der Umfang, in dem ein Halbleiterkondensator während einer bestimmten Zeitperiode geladen wird. Diese Quellenarten werden in einigen im Handel erhältlichen nachrüstbaren Zufallszahlengenerator-Vorrichtungen verwendet, beispielsweise PCI-Karten und Geräte für serielle Busse. Keines dieser Geräte hat eine breite kommerzielle Verwendung gefunden, offensichtlich deshalb, weil sie entweder relativ langsam oder relativ teuer sind.
  • Eine kürzlich entwickelte relativ preiswerte Lösung ist der Hardware-Zufallszahlengenerator in dem Teil Intel Firmware Hub 82802, in dem thermisches Rauschen zum Erzeugen von Zufallszahlen verwendet wird. Das Firmware Hub ist ein Chip im Chipsatz eines Computersystems, der einen Flashspeicher zum Speichern von Systemfirmware enthält, beispielsweise eines System-BIOS. Benötigt der Systemprozessor ein Byte Zufallsdaten, so fragt der Prozessor ein Bit in einem Statusregister im Firmware Hub ab. Das Firmware Hub setzt das Bit, um anzuzeigen, dass ein Byte Zufallsdaten verfügbar ist. Ist das Bit gesetzt, so liest der Prozessor ein Zufallsdatenbyte aus einem anderen Register im Firmware Hub. Erfordert eine Anwendung eine große Anzahl Zufallsdatenbytes, so fährt die Anwendung mit dem Abfragen des Bits im Statusregister fort, bis ein weiteres Byte verfügbar ist, und liest anschließend das nächste Byte. Die Anwendung wiederholt diesen Vorgang, bis sie die benötigte Anzahl an Zufallsdatenbytes gesammelt hat.
  • Eine Lösung zum Bereitstellen eines preiswerten Hochleistungs-Hardware-Zufallszahlengenerators wäre, ihn in einen Mikroprozessor aufzunehmen. Ein Beispiel für eine solche Anordnung findet man in US-4,780,814. Der Zufallszahlengenerator könnte wie beschrieben zufällige physikalische Prozesse als Quellen einsetzen, und er wäre relativ preisgünstig, da er in einen bereits vorhandenen Halbleiterchip integriert wäre. Ein derartiger Mikroprozessor benötigt einen Weg, auf dem er einer Anwendung die Zufallsdatenbytes liefern kann. Aus Sicht der Anwendung ist ein wirksames Mittel zum Liefern der Zufallsdatenbytes erwünscht. Zudem ist es erwünscht, dass die Liefervorrichtung der Zufallsdatenbytes in einer Multitasking-Umgebung korrekt funktioniert, so dass sich mehrere auf dem Computersystem laufende Anwendungen den Zufallszahlengenerator teilen können.
  • ZUSAMMENFASSUNG
  • Die Erfindung stellt einen Mikroprozessor bereit, der einen Zufallszahlengenerator enthält und einen Befehl zum Speichern der Zufallszahlen, die der Generator erzeugt, an einem Zielort, den der Befehl festlegt. Um die genannte Aufgabe zu erfüllen ist es ein Merkmal der Erfindung, dass sie einen Makrobefehl bereitstellt, den ein Mikroprozessor ausführen kann, und der Zufallszahlen aus dem Mikroprozessor in einem mit dem Mikroprozessor gekoppelten Speicher ablegt. Der Befehl enthält einen Opcode und ein erstes Feld, in dem ein erster Operand gespeichert ist. Der erste Operand legt eine Adresse im Speicher fest, an der null oder mehr Byte an Zufallszahlen abgelegt werden, die ein im Mikroprozessor enthaltener Zufallszahlengenerator erzeugt. Der Makrobefehl enthält auch ein zweites Feld, in dem ein zweiter Operand gespeichert ist. Der zweite Operand spezifiziert ein im Mikroprozessor enthaltenes Register. Das Register speichert die null oder mehr Byte an Zufallszahlen, die im Speicher abgelegt werden sollen.
  • Gemäß einem weiteren Aspekt ist es ein Merkmal der Erfindung, dass sie einen Mikroprozessor bereitstellt, mit dem ein Speicher verbunden ist. Der Mikroprozessor enthält ein Speicherelement, das eine veränderliche Anzahl Bytes an Zufallsdaten aufnehmen kann. Der Mikroprozessor enthält auch einen Befehlsübersetzer, der mit dem Speicherelement verbunden ist und einen Befehl übersetzt, der eine Adresse im Speicher festlegt. Der Mikroprozessor enthält auch eine Speichereinheit, die mit dem Speicherelement verbunden ist und als Antwort darauf, dass der Befehlsübersetzer den Befehl übersetzt, die veränderliche Anzahl Bytes an Zufallsdaten aus dem Speicherelement im Speicher an der Adresse ablegt.
  • Gemäß einem weiteren Aspekt ist es ein Merkmal der Erfindung, dass sie einen Mikroprozessor bereitstellt, auf dem ein Multitasking-Betriebssystem läuft. Der Mikroprozessorist mit einem Systemspeicher verbunden. Der Mikroprozessor enthält einen Zufallszahlengenerator (RNG), der einen Puffer besitzt, der zwischen null und einschließlich N Bytes an Zufallsdaten aufnehmen kann, wobei N größer als eins ist. Der Mikroprozessor enthält auch einen Zähler, der die Anzahl der Bytes enthält, die im Puffer abgelegt sind. Der Mikroprozessor enthält auch einen Befehlsübersetzer, der mit dem RNG verbunden ist und einen Befehl übersetzt, der den Mikroprozessor anweist, die im Puffer abgelegten Bytes in den Systemspeicher einzutragen.
  • Gemäß einem weiteren Aspekt ist es ein Merkmal der Erfindung, dass sie einen Mikroprozessor bereitstellt, auf dem ein Multitasking-Betriebssystem läuft. Der Mikroprozessor weist mehrere Register auf, die für den Benutzer sichtbar sind. Der Mikroprozessor enthält einen Zufallszahlengenerator (RNG), der einen Puffer besitzt, der zwischen null und einschließlich N Bytes an Zufallsdaten aufnehmen kann, wobei N größer als eins ist. Der Mikroprozessor enthält auch einen Zähler, der die Anzahl der Bytes enthält, die im Puffer abgelegt sind. Der Mikroprozessor enthält auch einen Befehlsübersetzer, der mit dem RNG verbunden ist und einen Befehl übersetzt, der den Mikroprozessor anweist, die im Puffer abgelegten Bytes in einem der zahlreichen Register abzulegen, die für den Benutzer sichtbar sind.
  • Gemäß einem weiteren Aspekt ist es ein Merkmal der Erfindung, dass sie einen Mikroprozessor bereitstellt, der mehrere Register aufweist, die für den Benutzer sichtbar sind. Der Mikroprozessor enthält einen Zufallszahlengenerator (RNG), der Zufallsdatenbytes erzeugt. Der Mikroprozessor enthält auch einen Befehlsübersetzer, der mit dem RNG verbunden ist und einen Befehl des Mikroprozessor-Befehlsatzes übersetzt. Der Befehl enthält einen Opcode und einen Zieloperanden, der zum Festlegen eines Ziels verwendet wird, an dem die Anzahl der Zufallsdatenbytes gespeichert wird, die der RNG erzeugt. Die Anzahl ist in einem der zahlreichen für den Benutzer sichtbaren Register im Mikroprozessor festgelegt.
  • Gemäß einem weiteren Aspekt ist es ein Merkmal der Erfindung, dass sie einen Mikroprozessor bereitstellt, auf dem ein Multitasking-Betriebssystem läuft. Der Mikroprozessor enthält einen Zufallszahlengenerator (RNG), der einen Puffer besitzt, der eine veränderliche Anzahl Zufallsdatenbytes aufnimmt, und einen Zähler, der die veränderliche Anzahl abgelegter Bytes zählt. Der Mikroprozessor enthält auch einen Befehlsübersetzer, der mit dem RNG verbunden ist und einen Befehl des Mikroprozessor-Befehlsatzes übersetzt. Der Befehl speichert einen Zählerstand aus dem Zähler und die abgelegten Bytes aus dem Puffer in einem Speicher, der mit dem Mikroprozessor verbunden ist. Der Mikroprozessor enthält auch eine Interrupteinheit, die mit dem Befehlsübersetzer verbunden ist und Interrupts des Mikroprozessors sperrt, nachdem der Befehlsübersetzer den Befehl übersetzt, und der die Interrupts nach der Befehlsausführung wieder freigibt.
  • Ein Vorteil der Erfindung besteht darin, dass Ausführungsformen der Er findung im Gegensatz zu herkömmlichen Verfahren, die das Abfragen eines Statusbits erfordern, um zu bestimmen, wann die Zufallsdaten verfügbar sind, die verfügbaren Daten unmittelbar bereitstellen. Ein weiterer Vorteil ist, dass in einigen Ausführungsformen der bereitgestellte Befehl untrennbar ist und daher von sich aus Multitasking unterstützt. Ein weiterer Vorteil ist, dass in einigen Ausführungsformen der bereitgestellte Befehl selbsttypisierende Daten hat, da sowohl der Zählerstand als auch die Zufallsdatenbytes gemeinsam in den Speicher geschrieben werden. Dies ist vorteilhaft, da die meisten Ausführungsformen dem Befehl erlauben, eine veränderliche Anzahl Zufallsdatenbytes zu speichern.
  • Weitere Merkmale und Vorteile der Erfindung gehen aus den verbleibenden Teilen der Patentschrift und den Zeichnungen hervor.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein Blockdiagramm eines Mikroprozessors der Erfindung.
  • 2 zeigt ein Blockdiagramm der RNG-Einheit des Mikroprozessors in 1 gemäß der Erfindung.
  • 3 zeigt gemäß der Erfindung ein Blockdiagramm verschiedener Register im Mikroprozessor in 1, die mit der RNG-Einheit in 1 verbunden sind.
  • 4 zeigt gemäß der Erfindung ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen Befehl ausführt, der einen Wert in das XMMO-Register in 3 lädt.
  • 5 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XLOAD-Befehl gemäß der Erfindung ausführt.
  • 6 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XLOAD-Befehl gemäß der Erfindung ausführt.
  • 7 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XSTORE-Befehl gemäß der Erfindung ausführt.
  • 8 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XSTORE-Befehl gemäß der Erfindung ausführt.
  • 9 zeigt ein Flussdiagramm, das gemäß der Erfindung ein Beispiel einer Multitasking-Operation des Mikroprozessors in 1 hinsichtlich der Zufallszahlenerzeugung erläutert.
  • 10 zeigt ein Blockdiagramm, das das Zeichenkettenfilter der RNG-Einheit in 2 des Mikroprozessors in 1 gemäß der Erfindung erläutert.
  • 11 zeigt ein Flussdiagramm, das die Arbeitsweise des Zeichenkettenfilters in 10 gemäß der Erfindung erläutert.
  • 12 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XSTORE-Befehl gemäß einer anderen Ausführungsform der Erfindung ausführt.
  • 13 zeigt ein Flussdiagramm, das dem Mehrfachpufferungsvorgang der RNG-Einheit in 2 gemäß der Erfindung erläutert.
  • 14 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XLOAD-Befehl gemäß einer anderen Ausführungsform der Erfindung ausführt.
  • 15 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors in 1 erläutert, wenn dieser einen XSTORE-Befehl gemäß einer anderen Ausführungsform der Erfindung ausführt.
  • 16 und 17 zeigen Blockdiagramme, die die Arbeitsweise des Mikroprozessors in 1 erläutern, wenn dieser einen XSTORE-Befehl gemäß anderer Ausführungsformen der Erfindung ausführt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 zeigt ein Blockdiagramm, das einen Mikroprozessor 100 der Erfindung darstellt. Der Mikroprozessor 100 in 1 ist ein Pipeline-Mikroprozessor, der zahlreiche Stufen umfasst, wobei jede Stufe einen Teil der Programmbefehle ausführt, siehe die folgende Beschreibung.
  • Der Mikroprozessor 100 enthält eine Zufallszahlengenerator-Einheit 136 (RNG). Der Mikroprozessor 100 führt Betriebssysteme und Anwendungsprogramme aus, die möglicherweise die Lieferung von Zufallszahlen für verschiedene Funktionen benötigen, beispielsweise für die Datenverschlüsselung, die Simulation physikalischer Erscheinungen, statistische Untersuchungen, numerische Analysen usw. Die RNG-Einheit 136 erzeugt Zufallszahlen für diese Anwendungen. Die RNG-Einheit 136 wird im Weiteren ausführlich beschrieben.
  • Der Mikroprozessor 100 enthält auch einen Befehlscache 102. Im Befehlscache 102 werden Programmbefehle abgelegt, die aus einem mit dem Mikroprozessor 100 verbundenen Systemspeicher geholt werden.
  • Der Mikroprozessor 100 umfasst auch einen Befehlsholer 104, der mit dem Befehlscache 102 verbunden ist. Der Befehlsholer 104 steuert das Holen der Befehle aus dem Systemspeicher und/oder dem Befehlscache 102. Der Befehlsholer 104 wählt einen Wert für einen Befehlszeiger, der im Mikroprozessor 100 gehalten wird. Der Befehlszeiger gibt die nächste Speicheradresse an, von der Befehle zu holen sind. Normalerweise wird der Befehlszeiger der Reihe nach auf den folgenden Befehl erhöht. Bei Kontrollflussbefehlen, beispielsweise Verzweigungen, Sprüngen, Unterprogrammaufrufen und Rücksprüngen kann jedoch der Befehlszeiger auf eine nicht nachfolgende Adresse aktualisiert werden, die der Kontrollflussbefehl festlegt. Zudem können Interrupts den Befehlsholer 104 dazu veranlassen, den Befehlszeiger auf eine nicht nachfolgende Adresse zu aktualisieren.
  • Der Mikroprozessor 100 enthält auch eine Interrupteinheit 146, die mit dem Befehlsholer 104 verbunden ist. Die Interrupteinheit 146 empfängt ein Interruptsignal 148 und einen Interruptvektor 152. Eine außerhalb des Mikroprozessors 100 liegende Einheit kann das Interruptsignal 148 anlegen und einen Interruptvektor 152 liefern, damit der Mikroprozessor 100 eine Interrupt-Serviceroutine ausführt. Die Interrupteinheit 146 ermittelt die Speicheradresse einer Interrupt-Serviceroutine abhängig vom Interruptvektor 152 und liefert die Speicheradresse der Interrupt-Serviceroutine an den Befehlsholer 104, der den Befehlszeiger auf die Adresse der Interrupt-Serviceroutine aktualisiert. Die Interrupteinheit 146 sperrt auch gezielt die Interruptbedienung bzw. gibt sie frei, und zwar abhängig von dem jeweiligen Befehl, den der Mikroprozessor 100 aus führt. Sind Interrupts gesperrt, so wird der Befehlszeiger auch dann nicht verändert, wenn die Interruptleitung 148 angelegt wird, und zwar solange, bis die Interrupts freigegeben werden.
  • Der Mikroprozessor 100 umfasst auch einen Befehlsübersetzer 106, der mit dem Befehlsholer 104, der Interrupteinheit 146 und der RNG-Einheit 136 verbunden ist. Der Befehlsübersetzer 106 übersetzt Befehle, die er vom Befehlscache 102 und/oder dem Systemspeicher erhält. Der Befehlsübersetzer 106 übersetzt die Befehle und nimmt abhängig von der Art des übersetzten Befehls geeignete Handlungen vor. Der Befehlsübersetzer 106 übersetzt Befehle, die im Befehlssatz des Mikroprozessors 100 definiert sind. Der Befehlsübersetzer 106 erzeugt einen Abbruch aufgrund eines unerlaubten Befehls, falls er einen Befehl übersetzt, der im Befehlssatz des Mikroprozessors 100 nicht definiert ist.
  • In einer Ausführungsform ist der Befehlssatz des Mikroprozessors 100 im Wesentlichen mit dem Befehlssatz eines Intel® Pentium III® oder Intel® Pentium IV® Mikroprozessors vergleichbar. Der Mikroprozessor 100 der Erfindung enthält jedoch vorteilhafterweise zusätzliche Befehle, die das Erzeugen von Zufallszahlen durch die RNG-Einheit 136 betreffen. Ein zusätzlicher Befehl ist ein XSTORE-Befehl, der Zufallszahlen speichert, die die RNG-Einheit 136 erzeugt. Ein weiterer zusätzlicher Befehl ist ein XLOAD-Befehl, der Steuerwerte aus dem Systemspeicher in ein Steuer- und Statusregister 226 CSR in der RNG-Einheit 136 und in ein Streamimg SIMD Extensions (SSE) Register XMMO 372 lädt, die im Weiteren anhand von 2 und 3 beschrieben werden. Die XSTORE- und XLOAD-Befehle werden unten ausführlicher erläutert.
  • Zusätzlich liefert der Befehlsübersetzer 106 Information bezüglich der übersetzten Befehle an die Interrupteinheit 146, damit die Interrupteinheit 146 in der Lage ist, Interrupts geeignet zu sperren und freizugeben. Weiterhin liefert der Befehlsübersetzer 106 Information bezüglich der übersetzten Befehle an die RNG-Einheit 136. Der Befehlsübersetzer 106 liefert beispielsweise Information über übersetzte XSTORE- und XLOAD-Befehle an die RNG-Einheit 136. Zusätzlich informiert der Befehlsübersetzer 106 die RNG-Einheit 136, falls ein Befehl übersetzt wird, der Werte in das SSE-Register XMMO 372 lädt. Abhängig davon nimmt die RNG-Einheit 136 gewisse Handlungen vor, beispielsweise das Setzen eines Flags, das anzeigt, dass das Betriebssystem möglicherweise den Task wechselt, siehe unten.
  • In einer Ausführungsform übersetzt der Befehlsübersetzer 106 einen Makrobefehl, beispielsweise einen Befehl des Pentium III oder IV, in einen oder mehrere Mikrobefehle, die in der Pipeline des Mikroprozessors 100 ausgeführt werden.
  • Der Mikroprozessor 100 umfasst auch ein Mikrocode-ROM 132, das mit den Befehlsübersetzer 106 verbunden ist. Das Mikrocode-ROM 132 speichert Mikrocodebefehle, die an den Befehlsübersetzer 106 geliefert werden, damit sie der Mikroprozessor 100 ausführt. Einige der Befehle im Befehlssatz des Mikroprozessors 100 sind in Mikrocode implementiert. Übersetzt der Befehlsübersetzer 106 einen dieser Befehle, so veranlasst der Befehlsübersetzer 106, dass eine Routine aus Mikrobefehlen innerhalb des Mikrocode-ROMs 132 ausgeführt wird, damit der übersetzte Makrobefehl abgearbeitet wird. In einer Ausführungsform sind die XSTORE- und/oder XLOAD-Befehle in Mikrocode implementiert. Zusätzlich sind in einer Ausführungsform die XSTORE- und XLOAD-Befehle untrennbar, da sie nicht von Interrupts unterbrochen werden können. D. h., dass während der Ausführung von XSTORE- und XLOAD-Befehlen Interrupts gesperrt sind.
  • Der Mikroprozessor 100 enthält auch eine Registerdatei 108, die mit dem Befehlsübersetzer 106 verbunden ist. Die Registerdatei 108 enthält unter anderem die für den Benutzer sichtbaren Register des Mikroprozessors 100. In einer Ausführungsform umfassen die für den Benutzer sichtbaren Register der Registerdatei 108 den für den Benutzer sichtbaren Registersatz eines Pentium III oder IV. Die SSE-Register 352 in 3 sind in der Registerdatei 108 enthalten. Die SSE-Register 352 werden von einer SSE-Einheit 134, die im Mikroprozessor 100 enthalten ist, und von der RNG-Einheit 136 verwendet, siehe die folgende Beschreibung. Insbesondere enthält die Registerdatei 108 Register, die derzeit gängigen Betriebssystemen geläufig sind. Geht ein Betriebssystem von einem ersten Task zu einem zweiten Task über, so sichert das Betriebssystem für den ersten Task die Register einschließlich der SSE-Register 352 in der Registerdatei 108 im Systemspeicher, und es holt für den zweiten Task die Register in der Registerdatei 108 einschließlich der SSE-Register 352 aus dem Systemspeicher.
  • Der Mikroprozessor 100 enthält auch einen Adressgenerator 112, der mit der Registerdatei 108 verbunden ist. Der Adressgenerator 112 erzeugt Speicheradressen abhängig von Operanden, die in der Registerdatei 108 gespeichert sind, und abhängig von Operanden, die die Befehle liefern, die der Befehlsübersetzer 106 übersetzt. Insbesondere erzeugt der Adressgenerator 112 eine Speicheradresse, die den Ort im Systemspeicher angibt, an dem ein XSTORE-Befehl Zufallsdatenbytes ablegt. Zusätzlich erzeugt der Adressgenerator 112 eine Speicheradresse, die den Ort im Systemspeicher angibt, von dem ein XLOAD-Befehl Steuerwerte für die Speicherung im CSR 226 in 2 über einen Datenbus 142 lädt.
  • Der Mikroprozessor 100 enthält eine Ladeeinheit 114, die mit dem Adressgenerator 112 verbunden ist. Die Ladeeinheit 114 lädt Daten vom Systemspeicher in den Mikroprozessor 100. Die Ladeeinheit 114 enthält einen Datencache, der aus dem Systemspeicher gelesene Daten zwischenpuffert. Die Ladeeinheit 114 lädt Daten und liefert sie an ausführende Einheiten im Mikroprozessor 100, beispielsweise die SSE-Einheit 134, die RNG-Einheit 136 und an ausführende Einheiten, die in der Ausführungsstufe 116 enthalten sind, auf den Datenbus 142. Im Einzelnen lädt die Ladeeinheit 114 Steuerwerte aus dem Systemspeicher für die Ablage im CSR 226 in 2, damit ein XLOAD-Befehl ausgeführt wird.
  • Der Mikroprozessor 100 enthält auch eine Ausführungsstufe 116, die über den Datenbus 142 mit der Ladeeinheit 114 verbunden ist. Die Ausführungsstufe 116 enthält Ausführungseinheiten, beispielsweise Arithmetik-Logik-Einheiten zum Ausführen arithmetischer und logischer Operationen, etwa Additionen, Subtraktionen, Multiplikationen, Divisionen und Boolsche Operationen. In einer Ausführungsform enthält die Ausführungsstufe 116 eine Ganzzahleinheit, die ganzzahlige Operationen ausführt, und eine Fließkommaeinheit, die Fließkommaoperationen ausführt.
  • Der Mikroprozessor 100 enthält auch die SSE-Einheit 134, die mit der Ladeeinheit 114 und dem Befehlsübersetzer 106 verbunden ist. Die SSE-Einheit 134 enthält arithmetische und logische Einheiten zum Ausführen von SSE-Befehlen, wie sie beispielsweise im SSE- oder SSE2-Befehlssatz des Pentium III und IV enthalten sind. In einer Ausführungsform sind die SSE-Register 352 in 3 gedanklich in der Registerdatei 108 enthalten. Physikalisch befinden sie sich in der SSE-Einheit 134 und speichern Operanden, die die SSE-Einheit 134 verwendet.
  • Der Mikroprozessor 100 enthält auch die RNG-Einheit 136, die über den Datenbus 142 mit dem Befehlsübersetzer 106 und der Ladeeinheit 114 verbunden ist. Die RNG-Einheit 136 liefert auf einem Datenbus 144 die Zufallsdatenbytes, die für einen XSTORE-Befehl bereitgestellt werden, und einen Zählerstand, der die Anzahl der Zufallsdatenbytes angibt. Die RNG-Einheit 136 wird anhand der restlichen Abbildungen ausführlicher beschrieben.
  • Der Mikroprozessor 100 enthält auch eine Speichereinheit 118, die mit der Ausführungseinheit 116, der SSE-Einheit 134 und der RNG-Einheit 136 verbunden ist. Die Speichereinheit 118 speichert Daten im Systemspeicher und im Datencache der Ladeeinheit 114. Die Speichereinheit 118 speichert Ergebnisse, die die Ausführungseinheit 116, die SSE-Einheit 134 und die RNG-Einheit 136 erzeugen, im Systemspeicher. Insbesondere speichert die Speichereinheit 118 Zählerstand und Zufallsdatenbytes des XSTORE-Befehls, die die RNG-Einheit 136 auf einem Datenbus 144 liefert, im Systemspeicher.
  • Der Mikroprozessor 100 enthält auch eine Zurückschreibeinheit 122, die mit der Ausführungseinheit 116 und der Registerdatei 108 verbunden ist. Die Zurückschreibeinheit 122 schreibt Befehlsergebnisse zurück in die Registerdatei 108.
  • Der Mikroprozessor 100 umfasst auch Schreibpuffer 124, die mit der Zurückschreibeinheit 122 verbunden sind. Die Schreibpuffer 124 halten Daten, die darauf warten, dass sie in den Systemspeicher geschrieben werden, beispielsweise Zählerstand und Daten des XSTORE-Befehls.
  • Der Mikroprozessor 100 umfasst auch eine Busschnittstelleneinheit 128 (BIU), die mit den Schreibpuffern 124 verbunden ist. Die BIU 128 dient als Schnittstelle zwischen dem Mikroprozessor 100 und einem Prozessorbus 138. Der Prozessorbus 138 verbindet den Mikroprozessor 100 mit dem Systemspeicher. Die BIU 128 führt Bustransaktionen auf dem Prozessorbus 138 aus und überträgt Daten zwischen dem Mikroprozessor 100 und dem Systemspeicher. Insbesondere führt die BIU 128 eine oder mehrere Bustransaktionen auf dem Prozessorbus 138 aus, um den Zählerstand und die Daten des XSTORE-Befehls im Systemspeicher abzulegen. Zusätzlich führt die BIU 128 eine oder mehrere Bustransaktionen auf dem Prozessorbus 138 aus, um Steuerwerte des XLOAD-Befehls aus dem Systemspeicher zu laden.
  • Der Mikroprozessor 100 enthält auch Lesepuffer 126, die mit der BIU 128 und der Registerdatei 108 verbunden sind. Die Lesepuffer 126 halten Daten, die aus dem Systemspeicher über die BIU 128 empfangen wurden und darauf warten, an die Ladeeinheit 114 oder die Registerdatei 108 geliefert zu werden. Insbesondere halten die Lesepuffer 126 Daten des XLOAD-Befehls, die vom Systemspeicher empfangen wurden und darauf warten, an die Ladeeinheit 114 und danach an die RNG-Einheit 136 geliefert zu werden.
  • Anhand von 2 wird nun ein Blockdiagramm erläutert, das die RNG-Einheit 136 des Mikroprozessors 100 in 1 gemäß der Erfindung zeigt.
  • Die RNG-Einheit 136 enthält die Steuerlogik 244. Die Steuerlogik 244 enthält in großem Umfang kombinatorische und sequentielle Logik, die verschiedene Elemente der RNG-Einheit 136 steuert. Die Steuerlogik 244 empfängt ein Xload-Signal 272 bzw. ein Xstore-Signal 268, die anzeigen, dass ein XLOAD- oder XSTORE-Befehl ausgeführt wird. Die Steuerlogik 244 empfängt auch ein Rücksetzsignal 248, das anzeigt, dass die RNG-Einheit 136 zurückgesetzt wird. Die Steuerlogik 244 wird im Weiteren zusammen mit dem verbleibenden Teil der RNG-Einheit 136 ausführlich beschrieben.
  • Die RNG-Einheit 136 enthält eine Selbsttesteinheit 202, die mit der Steuerlogik 244 verbunden ist. Die Selbsttesteinheit 202 empfängt ein Selbsttest-Freigabesignal 292 aus einem Steuer- und Statusregister, das als maschinenspezifisches Register 212 (MSR) bezeichnet wird. Dieses wird im Folgenden anhand von 3 ausführlicher beschrieben. Das MSR 212 ist ebenfalls an die Steuerlogik 244 angeschlossen. Die Selbsttesteinheit 202 liefert der Steuerlogik 244 ein Selbsttest-Negativ-Signal 288. Die Selbsttesteinheit 202 führt, wenn sie vom Selbsttest-Freigabesignal 292 freigegeben wird, verschiedene Selbsttests an der RNG-Einheit 136 durch. Fällt der Selbsttest negativ aus, so erzeugt die Selbsttesteinheit 202 einen Wahr-Wert für das Selbsttest-Negativ-Signal 288, das ebenfalls an das MSR 212 geliefert wird. In einer Ausführungsform führt die Selbsttesteinheit 202 statistische Zufallszahlengenerator-Tests aus, die in der Federal Information Processing Standards (FIPS) Publication 140-2, Seite 35–36, definiert und hiermit durch Bezugnahme eingeschlossen sind.
  • In einer Ausführungsform führt die Selbsttesteinheit 202 den Selbsttest auf Anforderung des Benutzers aus. In einer Ausführungsform führt die Selbsttesteinheit 202 den Selbsttest nach dem Zurücksetzen des Mikroprozessors 100 aus. Ist der Selbsttest negativ, entweder auf Anforderung oder nach dem Zurücksetzen, so erzeugt die Selbsttesteinheit 202 einen Wahr-Wert für das Selbsttest-Negativ-Signal 288, der sich in einem Selbsttest-Negativ-Bit 318 des MSR 212 in 3 widerspiegelt. Die Steuerlogik 244 untersucht das Selbsttest-Negativ-Bit 318 beim Zurücksetzen. Hat das Selbsttest-Negativ-Bit 318 den Wert Wahr, so gibt die Steuerlogik 244 einem RNG-Vorhanden- Signal 286 einen Falsch-Wert, der an das MSR 212 geliefert wird, damit das RNG-Vorhanden-Bit 314 in 3 aktualisiert wird.
  • Das RNG-Vorhanden-Signal 286 wird auch an ein CPUID-Register 204 geliefert, das ein RNG-Vorhanden-Bit 302 in 3 enthält, das ebenfalls vom RNG-Vorhanden-Signal 286 aktualisiert wird. D. h., das RNG-Vorhanden-Bit 302 des CPUID-Registers 204 stellt eine Kopie des RNG-Vorhanden-Bits 314 des MSR 212 dar. In einer Ausführungsform kann ein Anwendungsprogramm das CPUID-Register 204 durch das Ausführen eines CPUID-Befehls im IA-32 Befehlssatz lesen. Hat das RNG-Vorhanden-Bit 302 den Wert Falsch, so zeigt der Mikroprozessor 100 an, dass die RNG-Einheit 136 nicht vorhanden ist und dass die Fähigkeiten des Mikroprozessors 100, Zufallszahlen zu erzeugen, nicht verfügbar sind. Eine Anwendung, die Zufallszahlen benötigt, kann das Fehlen der RNG-Einheit 136 im Mikroprozessor 100 vorteilhaft über das RNG-Vorhanden-Bit 302 erkennen und entscheiden, Zufallszahlen aus einer anderen, möglicherweise weniger leistungsfähigen Quelle zu beziehen, falls die RNG-Einheit 136 nicht vorhanden ist.
  • Die RNG-Einheit 136 enthält auch zwei Zufallsbitgeneratoren, die als Zufallsbitgenerator 0 206 und als Zufallsbitgenerator 1 208 bezeichnet werden, die an die Steuerlogik 244 angeschlossen sind. Jeder der Zufallsbitgeneratoren 206 und 208 erzeugt einen Strom Zufallsbits, die in der RNG-Einheit 136 zu Zufallsdatenbytes vereinigt werden. Jeder der Zufallsbitgeneratoren 206 und 208 empfängt ein Einschaltsteuersignal 231, das angibt, ob die Zufallsbitgeneratoren 206 und 208 stillgelegt werden sollen. In einer Ausführungsform umfasst das Stilllegen der Zufallsbitgeneratoren 206 und 208, dass ihnen kein Taktsignal geliefert wird. Jeder der Zufallsbitgeneratoren 206 und 208 erzeugt eine Folge von Zufallsdatenbits abhängig von zufälligen elektrischen Eigenschaften des Mikroprozessors 100, beispielsweise dem thermischen Rauschen.
  • Der Zufallsbitgenerator 0 206 empfängt vom MSR 212 ein Gleich-Vorspannungs-Signal 296. Das Gleich-Vorspannungs-Signal 296 überträgt einen Wert, der in den Gleich-Vorspannungs-Bits 322 des MSR 212 in 3 gespeichert ist. Der Wert des Gleich-Vorspannungs-Signals 296 legt eine Gleich-Vorspannung fest, die teilweise die Betriebsspannung eines freilaufenden Ringoszillators im Zufallsbitgenerator 0 206 steuert.
  • Der Zufallsbitgenerator 0 206 ist ausführlich in den anhängigen US-Pa tentschriften laufende Nr. 10/046055, 10/046054, und 10/046057 mit den Titeln APPARATUS FOR GENERATING RANDOM NUMBERS bzw. OSCILLATOR BIAS VARIATION MECHANISM bzw. OSCILLATOR FREQUENCY VARIATION MECHANISM, (atty dkt# cntr.2113, cntr.2155, cntr.2156) beschrieben, die hiermit durch Bezugnahme in ihrer Gesamtheit eingeschlossen sind.
  • Die RNG-Einheit 136 enthält auch einen Multiplexer 214 mit zwei Eingängen, dessen Eingänge mit den Ausgängen der Zufallsbitgeneratoren 206 und 208 verbunden sind. Der Multiplexer 214 wählt einen der beiden Eingänge abhängig von einem Generatorauswahl-Steuersignal 252, das das CSR 226 liefert. Das Generatorauswahl-Steuersignal 252 überträgt einen Wert, der in einem Generator-Auswahlbit 336 im CSR 226 in 3 gespeichert ist.
  • Die RNG-Einheit 136 enthält euch ein von-Neumann-Whitener-Filter 216, auch als Komprimierer bezeichnet, das mit dem Ausgang des Multiplexers 214 verbunden ist. Das Whitener-Filter 216 wird durch ein vom MSR 212 empfangenes Roh-Bit-Signal 254 gezielt freigegeben oder gesperrt. Das Roh-Bit-Signal 254 überträgt einen Wert, der im Roh-Bit-Feld 324 des MSR 212 in 3 gespeichert ist. Hat das Roh-Bit-Signal 254 den Wert Wahr, so leitet das Whitener-Filter 216 die vom Multiplexer 214 empfangenen Bits einfach an seinen Ausgang weiter, ohne die Whitener-Funktion auszuführen. Das Whitener-Filter 216 bewirkt, dass der restliche Bias beträchtlich verringert wird, der in den Zufallsbitgeneratoren 206 und 208 vorhanden sein kann, indem er Bitpaare vom Multiplexer 214 empfängt und gemäß einer vorbestimmten Eingabe/Ausgabe-Funktion entweder ein Bit oder kein Bit ausgibt. Die Eingabe/Ausgabe-Funktion des Whitener-Filters 216 ist in Tabelle 1 unten angegeben.
    Figure 00170001
    Tabelle 1
  • Die RNG-Einheit 136 umfasst auch ein Acht-Bit-Schieberegister 218, das an das Whitener-Filter 216 angeschlossen ist. Das Schieberegister 218 puffert Zufallsda tenbits, die vom Whitener-Filter 216 empfangen werden, vereinigt die Zufallsdatenbits zu Acht-Bit-Bytes und gibt die gesammelten Zufallsdatenbytes aus. Das Schieberegister 218 legt ein Byte-Erzeugt-Signal 282 an die Steuerlogik 244 an, um anzuzeigen, dass es ein Zufallsdatenbyte 298 gesammelt und ausgegeben hat.
  • Die RNG-Einheit 136 enthält auch eine Testeinheit 222 für zusammenhängende Zahlen (CNT), die mit dem Ausgang des Schieberegisters 218 verbunden ist. Die CNT-Einheit 222 empfängt Zufallsbytes 298 vom Schieberegister 218 führt eine Prüfung auf fortlaufende Zufallszahlenerzeugung bei den Zufallsbytes 298 aus. Ein vom CSR 226 empfangenes CNT-Freigabesignal 284 gibt die CNT-Einheit 222 gezielt frei bzw. sperrt sie. Das CNT-Freigabesignal 284 überträgt einen Wert, der in einem CNT-Freigabebit 342 des CSR 226 in 3 gespeichert ist. Ist die Prüfung auf fortlaufende Zufallszahlenerzeugung negativ, so legt die CNT-Einheit 222 ein CNT-Negativ-Signal 294 an das CSR 226 an, das im CNT-Negativ-Bit 344 im CSR 226 in 3 gespeichert ist.
  • In einer Ausführungsform entspricht die Prüfung auf fortlaufende Zufallszahlenerzeugung, die die CNT-Einheit 222 ausführt, im Wesentlichen der Prüfung auf fortlaufende Zufallszahlenerzeugung, die auf Seite 37 in FIPS 140-2 beschrieben ist. In einer Ausführungsform führt die CNT-Einheit 222 die Prüfung dadurch aus, dass sie zwei Acht-Byte-Puffer verwendet, die als "Alt" und "Neu" bezeichnet werden. Nach einem Rücksetzvorgang und nachdem der Selbsttest freigegeben ist, werden die ersten acht vom Schieberegister 218 gelieferten Bytes im Puffer Alt gesammelt. Die folgenden acht Byte werden im Puffer Neu gesammelt. Wird ein XSTORE-Befehl ausgeführt, so werden die acht Byte in Puffer Alt mit den acht Byte im Puffer Neu verglichen. Sind die Bytes nicht gleich, so ist die Prüfung bestanden. Die acht Byte im Puffer Neu werden in den Puffer Alt verschoben. Der Puffer Neu wird gelöscht und wartet auf das Sammeln von acht weiteren Bytes. Sind die Bytes jedoch gleich, so legt die CNT-Einheit 222 das CNT-Negativ-Signal 294 an, um deutlich zu machen, dass die Prüfung auf fortlaufende Zufallszahlenerzeugung ein negatives Ergebnis geliefert hat.
  • In einer Ausführungsform liefern die XSTORE-Befehle eine verfügbare Byteanzahl von null zurück, solange die Bits CNT-Freigabe 342 und CNT-Negativ 344 in 3 gesetzt sind. In einer Ausführungsform speichert der Mikroprozessor 100 die verfügbare Byteanzahl und Zufallsdatenbytes im Systemspeicher, und zwar nach dem Ausführen des bestimmten XSTORE-Befehls, der die Prüfung auf kontinuierliche Zufalls zahlenerzeugung angestoßen hat, die ein negatives Resultat ergeben hat.
  • In einer Ausführungsform wird die Prüfung auf kontinuierliche Zufallszahlenerzeugung nicht quer über Tasks ausgeführt, die nicht alle die Prüfung freigegeben haben. D. h., der neue und der alte Puffer werden aktualisiert, und die Prüfung auf kontinuierliche Zufallszahlenerzeugung erfolgt nur für XSTORE-Befehle, die bei gesetztem CNT-Freigabebit 342 ausgeführt werden. Folglich ist für einen gegebenen Task garantiert, dass er nie zwei aufeinander folgende Acht-Byte-Werte empfängt, die gleich sind. Laufen jedoch zwei Tasks, von denen einer das CNT-Freigabebit 342 setzt und der andere nicht, so kann die RNG-Einheit 136 für einen Task acht Byte mit dem XSTORE-Befehl liefern. Nun erfolgt ein Taskwechsel, und die RNG-Einheit 136 kann dem anderen Task acht Byte mit dem XSTORE-Befehl liefern, die gleich den vorhergehenden acht Byte sind. Die Prüfung auf kontinuierliche Zufallszahlenerzeugung liefert in diesem Fall jedoch kein negatives Ergebnis.
  • Die RNG-Einheit 136 enthält ein Zeichenkettenfilter 224, das an den Ausgang des Schieberegisters 218 angeschlossen ist. Das Zeichenkettenfilter 224 empfängt Zufallsbytes 298 aus dem Schieberegister 218, verwirft gezielt einige Zufallsbytes, siehe unten, und gibt die beibehaltenen Zufallsbytes aus. Das Zeichenkettenfilter 224 stellt sicher, dass die RNG-Einheit 136 keine zusammenhängende Kette gleicher Bits, d. h. keine zusammenhängende Kette von Null-Bits oder zusammenhängende Kette von Eins-Bits, die länger ist als ein festgelegter Wert, erzeugt. Dieser Wert ist in einem Höchstanzahl-Signal 258 festgelegt, das vom CSR 226 empfangen wird. Das Höchstanzahl-Signal 258 überträgt einen Wert, der in einem Zeichenkettenfilter-Höchstlängen-Feld 346 im CSR 226 in 3 bestimmt ist. In einer Ausführungsform ist der voreingestellte Wert der Höchstlänge 346 26 Bit. In einer Ausführungsform muss der Wert des Zeichenkettenfilter-Höchstlängen-Felds 346 mindestens 8 betragen. Erkennt das Zeichenkettenfilter 224 eine zusammenhängende Kette von gleichen Bits, die länger ist als die Höchstanzahl 258, so erzeugt das Zeichenkettenfilter 224 ein Filter-Negativ-Signal 256, das im Zeichenkettenfilter-Negativ-Bit 338 im CSR 226 in 3 gespeichert wird. Das Zeichenkettenfilter 224 wird anhand von 10 bis 12 im Weiteren ausführlicher beschrieben.
  • Die RNG-Einheit 136 enthält auch einen zweiten Multiplexer 228 mit zwei Eingängen. Einer der Eingänge ist mit dem Ausgang des Zeichenkettenfilters 224 verbunden. Der andere Eingang ist mit dem Ausgang des Schieberegisters 218 verbunden.
  • Der Multiplexer 228 wählt einen der Eingänge abhängig von einem Filterfreigabesignal 262, das aus dem CSR 226 stammt und den Wert überträgt, der in einem Zeichenkettenfilter-Freigabebit 334 im CSR 226 in 3 gespeichert ist.
  • Die RNG-Einheit 136 enthält auch einen Demultiplexer 232 mit einem Eingang und zwei Ausgängen, dessen Eingang an den Ausgang des Multiplexers 228 angeschlossen ist. Eine Demultiplexerschaltung enthält einen einzigen Dateneingang und mehrere Datenausgänge. Ein Demultiplexer enthält auch einen Steuereingang. Ein Demultiplexer wählt abhängig von dem Steuerungseingang einen der Datenausgänge und liefert die am Dateneingang empfangenen Daten an den gewählten Ausgang. Der Demultiplexer 232 liefert ein an seinem Eingang empfangenes Zufallsdatenbyte gezielt an einen seiner Ausgänge, und zwar abhängig von einem Füll-Auswahl-Signal 264, das von der Steuerlogik 244 kommt.
  • Die RNG-Einheit 136 umfasst auch zwei Datenpuffer, die als Buf0 242 und Buf1 246 bezeichnet werden und an die Ausgänge des Demultiplexers 232 angeschlossen sind. Buf0 242 und Buf1 246 sammeln Zufallsdatenbytes, die mit XSTORE-Befehlen im Systemspeicher abgespeichert werden sollen. In einer Ausführungsform können Buf0 242 und Buf1 246 jeweils bis zu 15 Byte an Zufallsdaten speichern. In einer Ausführungsform können Buf0 242 und Buf1 246 jeweils bis zu 16 Byte an Zufallsdaten speichern.
  • Die RNG-Einheit 136 umfasst auch einen dritten Multiplexer 236 mit zwei Eingängen, dessen Eingänge an die Ausgänge von Buf0 242 und Buf1 246 angeschlossen sind. Der Multiplexer 236 wählt einen der Sätze von Zufallsdatenbytes an seinen Eingängen abhängig von einem Speicher-Auswahl-Signal 266, das die Steuerlogik 244 liefert, für die Ausgabe auf einen Datenbus 278.
  • Die RNG-Einheit 136 enthält auch ein TSPO-Flagregister 274, das an die Steuerlogik 244 angeschlossen ist. Das TSPO-Flagregister 274 speichert ein Flag, das anzeigt, ob möglicherweise eine Taskumschaltung durch das Betriebssystem erfolgt ist. Die Verwendung des TSPO-Flagregisters 274 wird im Folgenden ausführlicher beschrieben.
  • Die RNG-Einheit 136 enthält auch einen zweiten Demultiplexer 215 mit zwei Ausgängen, der an die Steuerlogik 244 angeschlossen ist. Der Eingang des Demul tiplexers 215 ist so angeschlossen, dass er ein von der Steuerlogik 244 erzeugtes Inkrementiersignal 221 empfängt. Die Steuerlogik 244 erzeugt das Inkrementiersignal 221 immer dann, wenn ein Zufallsdatenbyte in Buf0 242 oder Buf1 246 gespeichert wird. Der Demultiplexer 215 liefert gezielt das an seinem Eingang empfangene Inkrementiersignal 221 abhängig vom Füll-Auswahl-Signal 264 an einen seiner Ausgänge.
  • Die RNG-Einheit 136 enthält auch einen dritten Demultiplexer 217 mit zwei Ausgängen, der an die Steuerlogik 244 angeschlossen ist. Der Eingang des Demultiplexers 217 ist so angeschlossen, dass er ein von der Steuerlogik 244 erzeugtes Löschsignal 223 empfängt. Die Steuerlogik 244 erzeugt das Löschsignal 223 immer dann, wenn ein XSTORE-Befehl ausgeführt wird, damit die gültigen Zufallsdatenbytes aus Buf0 242 und Buf1 246 entfernt werden. Der Demultiplexer 217 liefert abhängig vom Speicher-Auswahl-Signal 266 das an seinem Eingang empfangene Löschsignal 223 an einen seiner Ausgänge.
  • Die RNG-Einheit 136 enthält auch zwei Zähler, die mit Cntr0 211 und Cntr1 213 bezeichnet und an den Demultiplexer 215 und den Demultiplexer 217 angeschlossen sind. Cntr0 211 und Cntr1 213 weisen jeweils einen Inkrementier- bzw. Zähleingang auf. Die Zählereingänge sind an die Ausgänge des Demultiplexers 215 angeschlossen. Gibt die Steuerlogik 244 ein Inkrementiersignal 221 aus, so wird entweder Cntr0 211 oder Cntr1 213 inkrementiert; dies legt das Füll-Auswahl-Signal 264 fest. Cntr0 211 und Cntr1 213 weisen jeweils auch einen Löscheingang auf. Die Löscheingänge sind an die Ausgänge des Demultiplexers 217 angeschlossen. Erzeugt die Steuerlogik 244 das Löschsignal 223, so wird entweder Cntr0 211 oder Cntr1 213 – dies legt das Speicher-Auswahl-Signal 266 fest – auf den Wert null zurückgesetzt.
  • Die RNG-Einheit 136 enthält auch zwei Komparatoren 225, die an die Ausgänge von Cntr0 211 und Cntr1 213 angeschlossen sind. Die Komparatoren 225 vergleichen die Zählerstände, die Cntr0 211 und Cntr1 213 ausgeben, mit der Anzahl an Bytes, die Cntr0 211 und Cntr1 213 speichern können, um festzustellen, ob Cntr0 211 und Cntr1 213 gefüllt sind. Sie erzeugen ein Voll0-Signal 229 und ein Voll1-Signal 227, die der Steuerlogik 244 die Vergleichsergebnisse anzeigen.
  • Die RNG-Einheit 136 enthält auch einen vierten Multiplexer 219 mit zwei Eingängen, dessen Eingänge an den Ausgang von Cntr0 211 und Cntr1 213 angeschlossen sind. Der Multiplexer 219 wählt einen der Zählerstände an seinen Eingängen abhängig vom Speicher-Auswahl-Signal 266 aus und gibt einen Verfügbare-Bytes-Zählerstand 234 aus. Der Verfügbare-Bytes-Zählerstand 234 wird auch an das CSR 226 geliefert.
  • Die RNG-Einheit 136 enthält auch ein Register, das mit RNG R5 238 oder R5 238 bezeichnet wird. Ein Eingang von R5 238 ist an den Ausgang des Multiplexers 236 angeschlossen und empfängt Datenbytes 278. Ein weiterer Eingang von R5 238 ist mit dem Ausgang des Multiplexers 219 verbunden und empfängt den Verfügbare-Bytes-Zählerstand 234. Der Ausgang von R5 238 ist mit dem Datenbus 144 in 1 verbunden. R5 238 hält den Zählerstand und die Daten für einen XSTORE-Befehl. In einer Ausführungsform wird der Zählerstand im geringstwertigen Byte von R5 238 gespeichert, und die gültigen Datenbytes werden anschließend an den Zählerstand in den höherwertigen Bytes abgelegt. In einer Ausführungsform kann R5 238 ein Zählerstandsbyte und zusätzlich die Anzahl an Zufallsdatenbytes speichern, die in Buf0 242 und Buf1 246 gespeichert werden können.
  • In einer Ausführungsform enthält die RNG-Einheit 136 vier Puffer anstelle von zwei Puffern. Jeder Puffer kann bis zu acht Byte Zufallsdaten speichern. In dieser Ausführungsform sind die Demultiplexer 215; 217 und 232 Demultiplexer mit vier Ausgängen. Die Multiplexer 219 und 236 sind Multiplexer mit vier Eingängen. Die Komparatoren 225 bestehen aus vier Komparatoren, die vier Voll-Ausgangssignale erzeugen. Das Füll-Auswahl-Signal 264 und das Speicher-Auswahl-Signal 266 umfassen 2 Bit zum Auswählen eines der vier Zähler und Puffer.
  • Anhand von 3 wird nun ein Blockdiagramm dargestellt, das verschiedene Register im Mikroprozessor 100 in 1 erläutert, die gemäß der Erfindung mit der RNG-Einheit 136 in 1 in Verbindung stehen.
  • 3 zeigt die CPUID-Register 204 in 2. Die CPUID-Register 204 enthalten ein RNG-Vorhanden-Bit 302. Das RNG-Vorhanden-Bit 302 ist ein Merkmalsanzeigebit, das nur gelesen werden kann. Hat das RNG-Vorhanden-Bit 302 den Wert 1, so ist eine RNG-Einheit 136 im Mikroprozessor 100 vorhanden und freigegeben. Hat das RNG-Vorhanden-Bit 302 den Wert 0, so ist die RNG-Einheit 136 nicht vorhanden, und die XLOAD- und XSTORE-Befehle sind ungültig. Trifft der Befehlsübersetzer 106 auf diese Befehle, so erfolgt ein Abbruch wegen eines ungültigen Befehls. Zusätzlich sind die Bits im MSR 212 nicht definiert, wenn sie gelesen werden, und sie haben keine Aus wirkung, wenn sie geschrieben werden. Das RNG-Vorhanden-Bit 302 ist eine Kopie des RNG-Vorhanden-Bits 314 im MSR 212.
  • 3 zeigt auch das MSR 212 in 2. Das MSR 212 enthält ein RNG-Freigabe-Bit 312. Das RNG-Freigabe-Bit 312 kann geschrieben werden. Schreibt man eine 1 in das RNG-Freigabe-Bit 312, so ist die RNG-Einheit 136 freigegeben. Schreibt man eine 0 in das RNG-Freigabe-Bit 312, so ist die RNG-Einheit 136 gesperrt. Hat das RNG-Freigabe-Bit 312 den Wert 0, so sind die XLOAD- und XSTORE-Befehle ungültig. Trifft der Befehlsübersetzer 106 auf einen dieser Befehle, so erfolgt ein Abbruch wegen eines ungültigen Befehls. Zusätzlich sind die Bits im MSR 212 nicht definiert, wenn sie gelesen werden, und sie haben keine Auswirkung, wenn sie geschrieben werden. Unmittelbar nach dem Zurücksetzen hat das RNG-Freigabe-Bit 312 den Wert 0.
  • Das MSR 212 enthält auch ein RNG-Vorhanden-Bit 314, das nur gelesen werden kann. Das RNG-Vorhanden-Bit 314 zeigt an, ob im Mikroprozessor 100 eine RNG-Einheit 136 vorhanden ist. Hat das RNG-Vorhanden-Bit 314 den Wert 0, so kann man die RNG-Einheit 136 durch das Setzen des RNG-Freigabe-Bits 312 nicht freigeben, und die Bits im MSR 212 sind nicht definiert, wenn sie gelesen werden, und sie haben keine Auswirkung, wenn sie geschrieben werden. Zusätzlich wird das RNG-Vorhanden-Bit 314 gelöscht, falls der Selbstest der RNG-Einheit 136 negativ ist, siehe die obige Beschreibung bezüglich 2.
  • Das MSR 212 enthält auch ein nur lesbares statistisches Selbstest-Freigabe-Bit 316. Das Selbstest-Freigabe-Bit 316 zeigt an, ob der bereits im Zusammenhang mit 2 beschriebene Zurücksetz-Selbstest derzeit freigegeben ist. Hat das Selbstest-Freigabe-Bit 316 den Wert 0, so wird nach dem Zurücksetzen kein Selbstest ausgeführt. Hat das Selbstest-Freigabe-Bit 316 den Wert 1, so wird nach dem Zurücksetzen ein Selbstest ausgeführt. In einer Ausführungsform erfolgt ein Selbstest nach einem Warmstart und ebenso nach dem Zurücksetzen beim Einschalten des Mikroprozessors 100.
  • Das MSR 212 enthält auch ein nur lesbares statistisches Selbstest-Negativ-Bit 318. Das Selbsttest-Negativ-Bit 318 zeigt an, ob der bereits im Zusammenhang mit 2 beschriebene letzte Zurücksetz-Selbstest negativ war oder nicht. In einer Ausführungsform kann die RNG-Einheit 136 nicht freigegeben werden, falls das Selbsttest-Negativ-Bit 318 den Wert 1 hat.
  • Das MSR 212 enthält auch schreibbare Gleich-Vorspannungs-Bits 322. In einer Ausführungsform umfassen die Gleich-Vorspannungs-Bits 322 drei Bit. Die Gleich-Vorspannungs-Bits 322 steuern die Gleich-Vorspannung, die an den Zufallsbitgenerator 0 206 angelegt wird, die die Geschwindigkeit und möglicherweise die Zufälligkeit des Zufallsbitgenerators 0 206 beeinflusst. Wird in einer Ausführungsform der statistische Selbstest nach einem Zurücksetzvorgang ausgeführt, so ermittelt die Selbsttesteinheit 202 einen korrekten oder bestmöglichen Wert für die Gleich-Vorspannungs-Bits 322 und setzt sie auf diesen Wert. Der Wert der Gleich-Vorspannungs-Bits 322 unmittelbar nach einem Zurücksetzvorgang ist 000.
  • Das MSR 212 enthält auch ein schreibbares Roh-Bits-Bit 324. Setzt man das Roh-Bits-Bit 324 auf den Wert 0, so führt das Whitener-Filter 216 in 2 seine Whitener-Funktion wie im Zusammenhang mit 2 beschrieben aus, und liefert Whitenergefilterte Bits an das Schieberegister 218. Setzt man das Roh-Bits-Bit 324 auf den Wert 1, so führt das Whitener-Filter 216 seine Whitener-Funktion nicht aus und liefert statt dessen die Roh-Bits vom Multiplexer 214 an das Schieberegister 218. Der Wert des Roh-Bits-Bits 324 unmittelbar nach einem Zurücksetzvorgang ist 0.
  • 3 zeigt auch das CSR 226 in 2. In einer Ausführungsform ist das CSR 226 ein 128-Bit-Register. Das CSR 226 enthält ein nur lesbares Zählerstandsfeld 332 der verfügbaren Bytes. Das Zählerstandsfeld 332 der verfügbaren Bytes legt fest, wie viele Bytes an Zufallsdaten momentan in dem mit dem Speicher-Auswahl-Signal 266 gewählten Puffer Buf0 242 oder Buf1 246 zum Speichern über einen XSTORE-Befehl verfügbar sind. Bei Bedarf kann die Software das Zählerstandsfeld 332 der verfügbaren Bytes lesen, um die Anzahl der Zufallsdatenbytes festzustellen, die zum Speichern mit einem XSTORE-Befehl momentan verfügbar sind. Da die RNG-Einheit 136 Bytes synchron in Buf0 242 und Buf1 246 akkumuliert, kann die tatsächliche Anzahl der verfügbaren Bytes, die mit einem XSTORE gespeichert werden können, zum Zeitpunkt der Ausführung des XSTORE größer sein als das Zählerstandsfeld 332 der verfügbaren Bytes, das vorher mit einem XLOAD gelesen wurde. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das Zählerstandsfeld 332 der verfügbaren Bytes den Wert 0.
  • Das CSR 226 enthält auch ein schreibbares Zeichenkettenfilter-Freigabebit 334. Hat das Zeichenkettenfilter-Freigabebit 334 den Wert 1, so ist das Zeichenkettenfilter 224 freigegeben. Andernfalls ist das Zeichenkettenfilter 224 gesperrt. Die Ar beitsweise des Zeichenkettenfilters 224 wird im Weiteren anhand von 10 bis 12 ausführlicher beschrieben. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das Zeichenkettenfilter-Freigabebit 334 den Wert 0.
  • CSR 226 enthält auch ein schreibbares Generator-Auswahlbit 336. Setzt man das Generator-Auswahlbit 336 auf den Wert 0, so wird der Zufallsbitgenerator 0 206 über den Multiplexer 214 in 2 gewählt, damit er einen Zufallsbitstrom für die Akkumulation liefert. Andernfalls wird der Zufallsbitgenerator 1 208 gewählt. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das Generator-Auswahlbit 336 den Wert 0.
  • CSR 226 enthält auch ein Zeichenkettenfilter-Negativ-Bit 338. Das Zeichenkettenfilter-Negativ-Bit 338 wird auf den Wert 1 gesetzt, um anzuzeigen, dass das Zeichenkettenfilter 224 eine zusammenhängende Zeichenkette von gleichen Bits gefunden hat, die länger ist als ein im Zeichenkettenfilter-Höchstlängen-Feld 346 spezifizierter Wert, siehe die obige Beschreibung anhand von 2 und die Beschreibung zu 10 bis 12. Das Zeichenkettenfilter-Negativ-Bit 338 kann nur von der RNG-Einheit 136 auf 1 gesetzt werden. Die Software kann das Zeichenkettenfilter-Negativ-Bit 338 jedoch löschen, indem sie eine 0 einträgt. In einer Ausführungsform wird das Zeichenkettenfilter-Negativ-Bit 338 durch einen Impuls abhängig vom Zeichenkettenfilter-Negativ-Signal 256 auf den Wert 1 gesetzt, und es behält den Wert 1, bis es die Software löscht. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das Zeichenkettenfilter-Negativ-Bit 338 den Wert 0.
  • Das CSR 226 enthält auch ein schreibbares CNT-Freigabebit 342. Hat das CNT-Freigabebit 342 den Wert 1, so führt die CNT-Einheit 222 ihre Prüfungen auf fortlaufende Zufallszahlenerzeugung wie im Zusammenhang mit 2 beschrieben aus. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das CNT-Freigabebit 342 den Wert 0.
  • Das CSR 226 enthält auch ein nur lesbares CNT-Negativ-Bit 344. Die RNG-Einheit 136 setzt das CNT-Negativ-Bit 344 auf den Wert 1, falls das CNT-Freigabebit 342 den Wert 1 hat und die Prüfungen auf fortlaufende Zufallszahlenerzeugung negativ ausfallen. In einer Ausführungsform führt ein XSTORE-Befehl, der ausgeführt wird, wenn sowohl das CNT-Freigabebit 342 als auch das CNT-Negativ-Bit 344 den Wert 1 haben, dazu, dass XSTORE eine verfügbare Byteanzahl von 0 und keine Datenbytes in den Systemspeicher schreibt. Setzt also ein Task das CNT-Freigabebit 342 und tritt wäh rend der Ausführung des Tasks ein Fehler auf, so wird die RNG-Einheit 136 für diesen Task wirksam gesperrt. Die RNG-Einheit 136 wird jedoch nicht für andere Tasks gesperrt, die das CNT-Freigabebit 342 nicht setzen. Unmittelbar nach dem Freigeben der RNG-Einheit 136 hat das CNT-Negativ-Bit 344 den Wert 0.
  • Das CSR 226 enthält auch ein schreibbares Zeichenkettenfilter-Höchstlängen-Feld 346. Die Software schreibt das Zeichenkettenfilter-Höchstlängen-Feld 346, um die größte hinnehmbare Anzahl von zulässigen gleichen zusammenhängenden Bits festzulegen, siehe die folgende Beschreibung bei 10 bis 12. In einer Ausführungsform enthält das Zeichenkettenfilter-Höchstlängen-Feld 346 5 Bit. In einer Ausführungsform ist der voreingestellte Wert des Zeichenkettenfilter-Höchstlängen-Felds 346 26.
  • In einer Ausführungsform sind einige Felder des MSR 212 im CSR 226 enthalten und nicht im MSR 212. Dadurch werden die Werte im MSR 212 mit dem CSR 226 gesichert und zurückgeholt, damit der hier und insbesondere anhand von 4 bis 9 beschriebene Multitaskingbetrieb ermöglicht wird.
  • 3 zeigt auch das RNG R5 Register 238 in 2. R5 238 umfasst zwei Felder, nämlich ein Feld 362 mit der verfügbaren Byteanzahl und ein weiteres Feld 364 zum Speichern von Zufallsdatenbytes, siehe oben. In einer Ausführungsform sind die verfügbaren Zufallsdatenbytes rechts neben dem Feld 362 mit der verfügbaren Byteanzahl angeordnet.
  • 3 zeigt auch die SSE-Register 352. Die SSE-Register 352 umfassen acht 128-Bit-Register, die mit XMM0 bis XMM7 bezeichnet sind. In 3 wird XMM0 als XMM0 372 bezeichnet, XMM3 wird mit 376 bezeichnet, und XMM5 wird mit 374 bezeichnet. In einer Ausführungsform gleichen die SSE-Register 352 im Wesentlichen den SSE-Registern, die in einem Pentium III oder IV enthalten sind. Diese sind auf Seite 10–4 im IA-32® Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture, 2002, beschrieben, das hiermit durch Bezugnahme eingeschlossen ist. RNG CSR 226 ist ein Schattenregister für XMM0 372 und RNG R5 238 ist ein Schattenregister für XMM5 374, siehe unten.
  • In einer Ausführungsform enthält der Mikroprozessor 100 verschiedene Fuse-Bits, die während des Herstellungsvorgangs des Mikroprozessors 100 zeitweilig oder dauerhaft gesetzt werden können, um Werte von diversen Bits im CSR 226 und im MSR 212 beim Zurücksetzen auszuwählen und damit die oben beschriebenen Rücksetzwerte zu überschreiben.
  • 4 zeigt ein Flussdiagramm der Arbeitsweise des Mikroprozessors 100 in 1, wenn dieser gemäß der Erfindung einen Befehl ausführt, der einen Wert in das XMM0-Register 372 in 3 lädt. Ein Befehl, der XMM0 372 lädt, ist ein Befehl, den der Mikroprozessor ausführt und der das XMM0-Register 372 mit einem Wert aus dem Systemspeicher lädt, beispielsweise einem MOVAPS-Befehl. Der MOVAPS-Befehl verschiebt Daten aus dem Systemspeicher in ein angegebenes XXM-Register oder umgekehrt. Er ist auf den Seiten 3–443 bis 3–444 des IA-32® Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference, 2001, beschrieben, die hiermit durch Bezugnahme eingeschlossen sind. Beispiele für weitere Befehle, die XMM0 372 aus dem Systemspeicher laden, sind MOVAPD und MOVDQA. Da XMM0 372 ein Register ist, das das Betriebssystem bei einem Taskwechsel im Speicher sichert bzw. aus dem Speicher wiederherstellt, so führt das Betriebssystem bei einem Taskwechsel einen Befehl wie beispielsweise den MOVAPS-Befehl aus, um die früheren Werte von XMM0 372 des Tasks, auf den umgeschaltet wird, aus dem Speicher wiederherzustellen. Der Ablauf beginnt im Block 402.
  • Im Block 402 führt der Mikroprozessor 100 einen Befehl wie beispielsweise den MOVAPS-Befehl aus, indem er den Wert vom Ort im Systemspeicher holt, den der Befehl spezifiziert und den Wert in XMM0 372 lädt. Jedesmal, wenn XMM0 372 aus dem Speicher geladen wird, ist es also möglich, dass ein Taskwechsel aufgetreten ist. Der Ablauf geht mit dem Block 404 weiter.
  • Im Block 404 meldet der Befehlsübersetzer 106 der RNG-Einheit 136, dass ein MOVAPS-Befehl oder ein ähnlicher Befehl übersetzt worden ist, der XMM0 372 aus dem Speicher lädt. Nach dem Laden des Werts in XMM0 372 setzt die Steuerlogik 244 der RNG-Einheit 136 das TSPO-Flag 274, um anzuzeigen, dass möglicherweise ein Taskwechsel erfolgt ist. Der Ablauf endet mit dem Block 404.
  • 5 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors 100 in 1 erläutert, wenn dieser gemäß der Erfindung einen XLOAD-Befehl ausführt. Der XLOAD-Befehl ist das Mittel, mit dem die Software einen Wert in das CSR 226 in 2 lädt, damit die Steuerwerte festgelegt werden, nach denen die RNG-Einheit 136 arbeitet. Über den Befehlssatz des Pentium III oder IV hinaus ist ein neuer Befehl zum Laden von CSR 226 erforderlich, da das CSR 226 in einem Pentium III oder IV nicht existiert. Vorteilhafterweise lädt der XLOAD-Befehl auch die Steuerwerte in XMM0 372, um das Ausführen des Multitaskingbetriebs mit der RNG-Einheit 136 wie beschrieben zu erleichtern.
  • 5 zeigt das Format eines XLOAD-Befehls, der XMM0 372 spezifiziert, nämlich:
    XLOAD XMM0, memaddr
    wobei memaddr eine Speicheradresse im Systemspeicher 502 festlegt. Der XLOAD-Befehl arbeitet wie der MOVAPS-Befehl, jedoch mit dem Unterschied, dass CSR 226 zusätzlich zu XMM0 372 ebenfalls mit dem Wert aus dem Speicher geladen wird. In einer Ausführungsform verschiebt XLOAD wie dargestellt 16 Byte an Daten 504 von memaddr nach CSR 226 und auch nach XMM0 372. In einer Ausführungsform ist der Opcodewert für den XLOAD-Befehl 0x0F 0x5A gefolgt von den Standard-Mod R/M-Register- und Adressformatbytes, die durch die x86-Befehle festgelegt sind. In einer weiteren Ausführungsform ist der Opcodewert für den XLOAD-Befehl 0x0F 0xA6 0xC0. Spezifiziert ein XLOAD-Befehl ein von XMM0 372 abweichendes SSE-Register 352, so wird das benannte SSE-Register 352 geladen; CSR 226 wird jedoch nicht geladen.
  • 6 zeigt ein Flussdiagramm der Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XLOAD-Befehls auf das XMM0-Register 372 in 3 gemäß der Erfindung. Der Ablauf beginnt im Block 602.
  • Im Block 602 lädt der Mikroprozessor 100 das CSR 226 in 2 und XMM0 372 in 3 mit dem Wert im Systemspeicher 502 an der Speicheradresse, die der XLOAD-Befehl festlegt, siehe 5. Der Ablauf geht mit Block 604 weiter.
  • Im Block 604 verwirft die RNG-Einheit 136 die Inhalte von Buf0 242 und Buf1 246 als Reaktion auf das Laden von CSR 226, da es sein kann, dass die in Buf0 242 und Buf1 246 gesammelten Zufallsdatenbytes nicht mit den Steuerwerten in CSR 226 erzeugt wurden, die der neue Task verlangt, der nun CSR 226 lädt. Der Ablauf geht mit Block 606 weiter.
  • Im Block 606 löscht die RNG-Einheit 136 die Anzahl der verfügbaren Bytes in Cntr0 211 und Cntr1 213 auf den Wert 0, da die Zufallsdatenbytes in Buf0 242 und Buf1 246 im Block 604 verworfen wurden. Der Ablauf geht mit Block 608 weiter.
  • Im Block 608 startet die RNG-Einheit 136 das Sammeln der Zufallszahlen neu. D. h., der mit dem Generatorauswahl-Signal 252 gewählte Zufallsbitgenerator 206 oder 208 erzeugt Zufallsbits abhängig vom Gleich-Vorspannungs-Signal 296, falls der Zufallsbitgenerator 0 206 gewählt wird. Das Whitener-Filter 216 führt abhängig vom Roh-Bit-Signal 254 für die Bits gezielt eine Whitener-Funktion aus. Die CNT-Einheit 222 führt gezielt Prüfungen auf fortlaufende Zufallszahlenerzeugung abhängig vom CNT-Freigabesignal 284 aus. Das Zeichenkettenfilter 224 filtert gezielt die im Schieberegister 128 gesammelten Bytes abhängig vom Filterfreigabesignal 262 und vom Höchstanzahl-Signal 258. Buf0 242 und Buf1 246 sammeln die Zufallsdatenbytes abhängig vom Füll-Auswahl-Signal 264. Cntr0 211 und Cntr1 213 zählen die in Buf0 242 und Buf1 246 abhängig vom Füll-Auswahl-Signal 264 gesammelten Bytes. Der Ablauf geht zum Block 612 über.
  • Im Block 612 löscht die Steuerlogik 244 das TSPO-Flag 274, da das CSR 226 auf die Steuerwerte aktualisiert worden ist, die der momentane Task anfordert. Der Ablauf endet im Block 612.
  • 7 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XSTORE-Befehls gemäß der Erfindung zeigt. Der XSTORE-Befehl ist das Mittel, mit dem die Software die Anzahl verfügbarer Zufallsdatenbytes und die Zufallsdatenbytes selbst aus R5 238 im Systemspeicher abspeichert. Über den Befehlssatz des Pentium III oder IV hinaus ist ein neuer Befehl zum Speichern von RNG R5 238 erforderlich, da dieses Register in einem Pentium III oder IV nicht existiert. Vorteilhafterweise schreibt der XSTORE-Befehl die Anzahl und die Datenbytes untrennbar in den Speicher, damit der Multitaskingbetrieb mit der RNG-Einheit 136 wie beschrieben vereinfacht wird. D. h., der XSTORE-Befehl kann nicht durch einen Interrupt unterbrochen werden. Führt also ein Task einen XSTORE-Befehl aus, so kann ein anderer Task den XSTORE-Befehl nicht unterbrechen, um die Anzahl der verfügbaren Bytes oder die Zufallsdatenbytes zu modifizieren, die der XSTORE-Befehl in den Systemspeicher schreibt. Damit erleichtert der XSTORE-Befehl durch diese Eigenschaft vorteilhaft das Multitasking hinsichtlich der Lieferung einer veränderlichen Anzahl Zufallsdatenbytes, indem er sowohl die Daten als auch die Anzahl untrennbar schreibt.
  • 7 zeigt das Format eines XSTORE-Befehls, der die Form hat:
    XSTORE memaddr, XMM5
    wobei memaddr eine Adresse im Systemspeicher 502 angibt. Der XSTORE-Befehl arbeitet ähnlich wie der MOVAPS-Befehl, jedoch mit dem Unterschied, dass das spezifi beitet ähnlich wie der MOVAPS-Befehl, jedoch mit dem Unterschied, dass das spezifizierte XMM-Register nicht im Systemspeicher abgelegt wird. Statt dessen wird R5 238 im Systemspeicher hinterlegt, falls XMM5 374 angegeben ist. D. h., R5 238 ist ein Schattenregister für XMM5 374. XSTORE verschiebt wie dargestellt die Anzahl, die die verfügbaren gültigen Zufallsdatenbytes 362 in 3 spezifiziert, aus R5 238 an einen Ort 702 an memaddr im Systemspeicher 502. Zusätzlich verschiebt XSTORE wie dargestellt die gültigen Zufallsbytes der Daten 364, die die Anzahl 362 angibt, an einen Ort 704 im Systemspeicher 502 unmittelbar benachbart zur Anzahl 702 der verfügbaren Bytes.
  • In einer Ausführungsform ist der Opcodewert für den XSTORE-Befehl 0x0F 0x5B gefolgt von den Standard-Mod R/M-Register- und Adressformatbytes, die durch die x86-Befehle festgelegt sind. In einer weiteren Ausführungsform ist der Opcodewert für den XSTORE-Befehl 0x0F 0xA7 0xC0. In einer Ausführungsform erfordert der XSTORE-Befehl, dass die ES:EDI-Register in der Registerdatei 108 memaddr festlegen, d. h. auf die Anfangsspeicheradresse zeigen, an der die Anzahl und die Zufallsdatenbytes zu speichern sind. In einer Ausführungsform erlaubt XSTORE keine Segmentüberschreibung. Legt ein XSTORE-Befehl eines der SSE-Register 352 fest, das nicht XMM5 374 ist, so sind die Ergebnisse undefiniert.
  • In einer Ausführungsform ist die Anzahl 704 der Zufallsdatenbytes, die der Mikroprozessor 100 im Systemspeicher ablegt, gleich der Anzahl 702 der verfügbaren Bytes, die ebenfalls in den Systemspeicher geschrieben wird.
  • In einer anderen Ausführungsform ist die Anzahl 704 der Zufallsdatenbytes, die der Mikroprozessor 100 im Systemspeicher ablegt, gleich der Anzahl der Bytes des RNG R5 238 vermindert um eins. Ist also RNG R5 238 ein 16-Byte-Register, das bis zu 15 Zufallsdatenbytes 364 und ein Byte mit der Anzahl 362 der verfügbaren Bytes halten kann, so speichert der Mikroprozessor 100 16 Byte im Systemspeicher 502, nämlich 15 Byte Zufallsdaten am Ort 704 der Zufallsdatenbytes und ein Byte am Ort 702, der die Anzahl der verfügbaren Bytes enthält, im Systemspeicher 502. Es können jedoch einige der 15 in den Systemspeicher 502 geschriebenen Bytes ungültig sein. In einer Ausführungsform ist die Anzahl der in den Speicher geschriebenen Bytes stets eine Potenz von 2. Es sind nur die ersten N Byte gültig, wobei N die Anzahl 702 der verfügbaren Bytes ist.
  • In dieser Ausführungsform löscht die RNG-Einheit 136 den Puffer, d. h. Buf0 242 oder Buf1 246 in 2 angestoßen durch einen XSTORE-Vorgang. Durch das Löschen des Puffers verbessert der Mikroprozessor 100 die Sicherheit, da das Problem vermieden wird, dass Tasks gegenseitig ihre Zufallsdaten einsehen können. Sei beispielsweise angenommen, dass ein erster Task ein erstes XSTORE ausführt, das 15 Byte Zufallsdaten aus Buf0 242 im Systemspeicher speichert, und ein zweites XSTORE, das 15 Byte Zufallsdaten aus Buf1 246 im Systemspeicher speichert. Nun wechselt das Betriebssystem zu einem zweiten Task, der augenblicklich ein XSTORE ausführt, bevor die RNG-Einheit 136 irgendwelche weiteren Bytes an Zufallsdaten in Buf0 242 eingegeben hat. Hat die RNG-Einheit 136 Buf0 242 nach dem ersten XSTORE nicht gelöscht, so werden die Zufallsdaten, die der erste Task empfangen hat, auch am Speicherplatz des zweiten Tasks gespeichert. Damit ist der zweite Task in der Lage, die Zufallsdaten des ersten Tasks einzusehen.
  • In einer Ausführungsform legt der XSTORE-Befehl eine Höchstzahl von Zufallsdatenbytes fest, die im Systemspeicher abgelegt werden. In einer Ausführungsform wird die Höchstzahl von Bytes in einem der Allzweckregister der Registerdatei 108 angegeben, beispielsweise ECX. Sind in dieser Ausführungsform mehr Bytes im mit dem Speicher-Auswahl-Signal 266 ausgewählten Puffer Buf0 242 oder Buf1 246 verfügbar als die in ECX angegebene Höchstzahl, so speichert der Mikroprozessor 100 nur die in ECX angegebene Höchstzahl an Bytes. Andernfalls speichert der XSTORE-Befehl die verfügbare Anzahl gültiger Bytes. In beiden Fällen speichert der XSTORE-Befehl am Ort 702 der verfügbaren Byteanzahl die Anzahl der gültigen Zufallsdatenbytes, die am Ort 704 der Datenbytes im Systemspeicher 502 abgelegt werden.
  • In einer Ausführungsform gibt der XSTORE-Befehl eine geforderte Anzahl Zufallsdatenbytes an, die im Systemspeicher zu speichern sind. In dieser Ausführungsform wird die geforderte Byteanzahl in einem der Allzweckregister der Registerdatei 108 angegeben, beispielsweise ECX. In dieser Ausführungsform wird dem XSTORE-Befehl ein x86 REP Präfix vorangestellt. In dieser Ausführungsform ist der REP XSTORE-Befehl nicht untrennbar. D. h. REP XSTORE kann von einem Interrupt unterbrochen werden, da die Anzahl der geforderten Zufallsbytes groß sein kann. Da die Anzahl der zu speichernden Zufallsdatenbytes jedoch nicht variabel ist, die Software also die Anzahl der im Speicher abzulegenden Zufallsdatenbytes kennt, ist es nicht erforderlich, dass der Befehl untrennbar ist.
  • 8 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors 100 in 1 erläutert, wenn dieser einen XSTORE-Befehl aus dem XMM5-Register in 3 gemäß der Erfindung ausführt. Der Ablauf beginnt im Block 802.
  • Im Block 802 sperrt die Interrupteinheit 146 in 1 Interrupts abhängig vom Befehlsübersetzer 106 in 1, der der Interrupteinheit 146 meldet, dass er einen XSTORE-Befehl übersetzt hat. Der Ablauf geht zum Entscheidungsblock 804 über.
  • Im Entscheidungsblock 804 untersucht die Steuerlogik 244 in 2 das TSPO-Flag 274, um festzustellen, ob das Flag gesetzt ist. Trifft dies zu, so geht der Ablauf zum Block 806 über. Andernfalls geht der Ablauf im Block 816 weiter.
  • Im Block 806 kopiert die RNG-Einheit 136 den Inhalt des XMM0 372 in das CSR 226 und setzt das TSPO-Flag 274 zurück. Da das TSPO-Flag 274 anzeigt, dass seit dem letzten XSTORE oder XLOAD möglicherweise ein Taskwechsel aufgetreten ist, der durch einen Ladevorgang von XMM0 372 aus dem Systemspeicher gemäß dem Schritt 402 in 4 gekennzeichnet wird, ist es möglich, dass das CSR 226 nicht die korrekten Steuerwerte für den Task enthält, der momentan den XSTORE-Befehl ausführt. Daher muss der XSTORE-Befehl das CSR 226 mit den korrekten Steuerwerten aktualisieren. Die korrekten Steuerwerte sind in XMM0 372 gespeichert, da die korrekten Steuerwerte ursprünglich in XMM0 372 und auch in das CSR 226 geladen wurden, und zwar von einem XLOAD, das bei Initialisierung des Tasks ausgeführt wurde. Das Betriebssystem hat sie in XMM0 372 zurückgeholt, als es zurück zum momentanen Task gewechselt hat. Der Ablauf geht mit dem Block 808 weiter.
  • Im Block 808 verwirft die RNG-Einheit 136 die Inhalte von Buf0 242 und Buf1 246 als Reaktion auf das Laden des CSR 226, da es möglich ist, dass die in Buf0 242 und Buf1 246 gesammelten Zufallsdatenbytes nicht mit den Steuerwerten im CSR 226 erzeugt wurden, die der neue Task fordert, für den die neuen Steuerwerte im Block 806 in das CSR 226 kopiert wurden. Der Ablauf geht zum Block 812 über.
  • Im Block 812, setzt die RNG-Einheit 136 die Anzahl der verfügbaren Bytes in Cntr0 211 und Cntr1 213 auf 0 zurück, da die Zufallsdatenbytes in Buf0 242 und Buf1 246 in Block 808 verworfen wurden. Der Ablauf geht im Block 814 weiter.
  • Im Block 814 startet die RNG-Einheit 136 die Zufallszahlensammlung neu, siehe die Beschreibung zu Block 608 in 6. Der Ablauf geht zum Block 816 über.
  • Im Block 816 speichert die RNG-Einheit 136 R5 238 untrennbar in den Systemspeicher 502, und zwar an der Speicheradresse, die der XSTORE-Befehl angibt. R5 238 enthält den vom Speicher-Auswahl-Signal 266 bestimmten Wert von Cntr0 211 oder Cntr1 213 zusammen mit den gültigen Zufallsdatenbytes aus dem vom Speicher-Auswahl-Signal 266 bestimmten Puffer Buf0 242 oder Buf1 246, siehe 7. Der Ablauf geht zum Block 818 über.
  • Im Block 818 erzeugt die Steuerlogik 244 ein Löschsignal 223, damit Cntr0 211 oder Cntr1 213 festgelegt durch das Speicher-Auswahl-Signal 266 gelöscht werden, da die gültigen Zufallsdatenbytes durch das Speichern in den Speicher im Block 816 verbraucht sind. Der Ablauf geht zum Block 822 über.
  • Im Block 822 aktualisiert die Steuerlogik 244 das Speicher-Auswahl-Signal 266. Hatte das Speicher-Auswahl-Signal 266 den Wert 0, so setzt die Steuerlogik 244 das Speicher-Auswahl-Signal 266 auf den neuen Wert 1. Hatte dagegen das Speicher-Auswahl-Signal 266 den Wert 1, so setzt die Steuerlogik 244 das Speicher-Auswahl-Signal 266 auf den neuen Wert 0. Der Ablauf geht zum Block 824 über.
  • Im Block 824 gibt die Interrupteinheit 146 die Interrupts frei, da die Ausführung des XSTORE-Befehls abgeschlossen ist. Der Ablauf endet im Block 824.
  • 9 zeigt ein Flussdiagramm, das ein Beispiel für den Multitaskingbetrieb des Mikroprozessors 100 in 1 erläutert, und zwar hinsichtlich der Zufallszahlenerzeugung gemäß der Erfindung. Das Flussdiagramm in 9 erläutert ein gängiges Szenario, in dem zwei Tasks jeweils die RNG-Einheit 136 initialisieren und XSTORE-Befehle ausführen, damit Zufallsdatenbytes im Speicher abgelegt werden. 9 erläutert, wie die Erfindung vorteilhaft das Multitasking zwischen den beiden Tasks Task A und Task B unterstützt, obwohl das Betriebssystem keine Unterstützung zum Speichern und Wiederherstellen des Status der RNG-Einheit 136, d. h. des CSR 226, enthält. Der Ablauf beginnt im Block 902.
  • Im Block 902 erfolgt ein Rücksetzvorgang, der die Steuerlogik 244 veranlasst, das TSPO-Flag 274 zu löschen. Der Ablauf schreitet zum Block 904 fort.
  • Im Block 904 startet das Betriebssystem den Task A, und der Initialisie rungscode des Tasks A führt einen XLOAD-Befehl auf XMM0 372 aus, damit das CSR 226 und XMM0 372 mit den gewünschten Steuerwerten initialisiert werden, die mit Wert A bezeichnet werden. Der Ablauf geht auf den Block 906 über.
  • Im Block 906 verwirft die RNG-Einheit 136 als Antwort auf den XLOAD den Inhalt von Buf0 242 und Buf1 246, sie löscht Cntr0 211 und Cntr1 213, startet das Erzeugen und Sammeln von Zufallszahlen neu und löscht das TSPO-Flag 274, und zwar in den Blöcken 604, 606, 608 und 612 in 6. Der Ablauf geht zum Block 908 über.
  • Im Block 908 führt der Task A einen XSTORE-Befehl aus, damit Zufallsdaten, die abhängig vom Steuerwert A erzeugt werden, der im Block 904 in das CSR 226 geladen wurde, gespeichert werden. Der Ablauf geht zum Block 912 über.
  • Im Block 912 speichert die RNG-Einheit 136 zum Ausführen des XSTORE aus dem vorhergehenden Block den Zählerstand und die seit dem Neustart im Block 906 akkumulierten Daten untrennbar in den Systemspeicher, siehe 7 und die Beschreibung in 8. Der Ablauf geht zum Block 914 weiter.
  • Im Block 914 führt das Betriebssystem einen Taskwechsel vom Task A auf den Task B aus. Unter anderem speichert das Betriebssystem den Wert von XMM0 372, das den Steuerwert A enthält, im Systemspeicher, um den Status des Tasks A zu sichern. Das Betriebssystem speichert jedoch das CSR 226 nicht im Speicher, um dessen Status zu sichern, da das Betriebssystem nichts vom CSR 226 weiß. Der Ablauf geht zum Block 916 über.
  • Im Block 916 setzt die RNG-Einheit 136 das TSPO-Flag 274 aufgrund des Ladevorgangs von XMM0 372 im Block 914 gemäß dem Schritt 404 in 4. Der Ablauf geht zum Block 918 über.
  • Im Block 918 startet das Betriebssystem den Task B. Der Initialisierungscode des Tasks B führt einen XLOAD-Befehl auf XMM0 372 aus, damit das CSR 226 und XMM0 372 mit den gewünschten Steuerwerten initialisiert werden, die mit Wert B bezeichnet werden. Der Ablauf geht auf den Block 922 über.
  • Im Block 922 verwirft die RNG-Einheit 136 als Antwort auf den XLOAD den Inhalt von Buf0 242 und Buf1 246, sie löscht Cntr0 211 und Cntr1 213, startet das Erzeugen und Sammeln von Zufallszahlen neu und löscht das TSPO-Flag 274, und zwar in den Blöcken 604, 606, 608 und 612 in 6. Der Ablauf geht zum Block 924 über.
  • Im Block 924 führt der Task B einen XSTORE-Befehl aus, damit Zufallsdaten gespeichert werden, die abhängig vom Steuerwert B erzeugt werden, der im Block 918 in das CSR 226 geladen wurde. Der Ablauf geht zum Block 926 über.
  • Im Block 926 speichert die RNG-Einheit 136 zum Ausführen des XSTORE aus dem vorhergehenden Block den Zählerstand und die seit dem Neustart im Block 922 akkumulierten Daten untrennbar in den Systemspeicher, siehe 7 und die Beschreibung in 8. Der Ablauf geht zum Block 928 weiter.
  • Im Block 928 führt das Betriebssystem einen Taskwechsel vom Task B auf den Task A aus. Unter anderem speichert das Betriebssystem den Wert von XMM0 372, das den Steuerwert B enthält, im Systemspeicher, um den Status des Tasks B zu sichern. Das Betriebssystem speichert jedoch das CSR 226 nicht im Speicher, um dessen Status zu sichern, da das Betriebssystem nichts vom CSR 226 weiß. Zusätzlich stellt das Betriebssystem den Status des Tasks A wieder her. Hierzu gehört das Laden des vorher im Block 914 gesicherten Werts A aus dem Systemspeicher in das XMM0 372. Der Ablauf geht zum Block 932 weiter.
  • Im Block 932 setzt die RNG-Einheit 136 das TSPO-Flag 274 aufgrund des Ladevorgangs von XMM0 372 im Block 928 gemäß dem Schritt 404 in 4. Der Ablauf geht zum Block 934 über.
  • Im Block 934 führt der Task A einen XSTORE-Befehl aus, damit Zufallsdaten gespeichert werden, die abhängig vom Steuerwert A erzeugt werden, der im Block 904 in das CSR 226 geladen wurde. Der Wert A wurde jedoch im CSR 226 im Block 918 überschrieben. Damit wurden die derzeit in Buf0 242 und Buf1 246 gesammelten Zufallsdatenbytes nicht abhängig vom Wert A erzeugt, sondern sie wurden statt dessen abhängig vom Wert B erzeugt. Der Ablauf geht zum Block 936 über.
  • Im Block 9 936 stellt die RNG-Einheit 136 gemäß dem Block 804 in 8 fest, dass das TSPO-Flag 274 gesetzt ist. Folglich kopiert sie den Inhalt von XMM0 372 in das CSR 226 und stellt damit den Wert A im CSR 226 gemäß dem Block 806 in 8 wieder her. Zusätzlich löscht die RNG-Einheit 136 das TSPO-Flag 274 gemäß dem Block 806, da das CSR 226 wiederhergestellt ist. Der Ablauf geht zum Block 938 über.
  • Im Block 938 verwirft die RNG-Einheit 136 als Reaktion auf das Kopieren in das CSR 226 im Block 936 den Inhalt von Buf0 242 und Buf1 246, sie löscht Cntr0 211 und Cntr1 213 und startet das Erzeugen und Sammeln von Zufallszahlen neu, und zwar gemäß den Blöcken 808, 812 und 814 in 8. Der Ablauf geht zum Block 942 über.
  • Im Block 942 speichert die RNG-Einheit 136 zum Ausführen des XSTORE aus Block 934 den Zählerstand und die seit dem Neustart im vorhergehenden Block akkumulierten Daten untrennbar in den Systemspeicher, siehe 7 und die Beschreibung in 8. In diesem Fall ist der Zählerstand 0 und es werden keine gültigen Zufallsdatenbytes im Systemspeicher abgelegt, da Cntr0 211 und Cntr1 213 gelöscht wurden und die Inhalte von Buf0 242 und Buf1 246 im vorhergehenden Block verworfen wurden. Der Ablauf geht zum Block 944 über.
  • Im Block 944 führt der Task A einen XSTORE-Befehl aus, damit Zufallsdaten gespeichert werden, die abhängig vom Steuerwert A erzeugt werden, der im Block 904 in das CSR 226 geladen wurde, das im Block 936 wieder mit dem Wert A überschrieben wurde. Der Ablauf geht zum Block 946 über.
  • Im Block 946 speichert die RNG-Einheit 136 zum Ausführen des XSTORE aus dem vorhergehenden Block den Zählerstand und die seit dem Neustart im Block 938 akkumulierten Daten untrennbar in den Systemspeicher, siehe 7 und die Beschreibung in 8. Der Ablauf geht im Block 948 weiter.
  • Im Block 948 führt der Task A einen XSTORE-Befehl aus, damit Zufallsdaten gespeichert werden, die abhängig vom Steuerwert A erzeugt werden, der im Block 904 in das CSR 226 geladen wurde, das im Block 936 wieder mit dem Wert A überschrieben wurde. Der Ablauf geht zum Block 952 über.
  • Im Block 952 speichert die RNG-Einheit 136 zum Ausführen des XSTORE aus dem vorhergehenden Block den Zählerstand und die seit dem Neustart im Block 938 akkumulierten Daten untrennbar in den Systemspeicher, jedoch vermindert um die mit dem letzten XSTORE im Block 946 gespeicherten Bytes, siehe 7 und die Beschreibung in 8. Der Ablauf endet im Block 952.
  • 10 zeigt gemäß der Erfindung ein Blockdiagramm, das das Zeichenkettenfilter 224 der RNG-Einheit 136 in 2 des Mikroprozessors 100 in 1 erläutert.
  • Für diese Offenbarung werden führende Bits mit dem Wert 1 als zusammenhängende Bits mit dem Wert 1 am Beginn eines Bytes definiert. Ein Byte kann null bis acht (einschließlich) führende Bits mit dem Wert 1 enthalten. Das Byte 00011111 hat beispielsweise fünf führende Bits mit dem Wert 1. Das Byte 11111110 hat null führende Bits mit dem Wert 1. Das Byte 11111111 hat acht führende Bits mit dem Wert 1.
  • Für diese Offenbarung werden führende Bits mit dem Wert 0 als zusammenhängende Bits mit dem Wert 0 am Beginn eines Bytes definiert. Ein Byte kann null bis acht (einschließlich) führende Bits mit dem Wert 0 enthalten. Das Byte 11100000 hat beispielsweise fünf führende Bits mit dem Wert 0. Das Byte 00000001 hat keine führenden Bits mit dem Wert 0. Das Byte 00000000 hat acht führende Bits mit dem Wert 0.
  • Für diese Offenbarung werden endständige Bits mit dem Wert 1 als zusammenhängende Bits mit dem Wert 1 am Ende eines Bytes definiert. Für ein Byte, das nur aus Einsen besteht, wird definiert, dass es keine endständigen Bits mit dem Wert 1 hat. Ein Byte kann null bis sieben (einschließlich) endständige Bits mit dem Wert 1 enthalten. Das Byte 11110000 hat beispielsweise vier endständige Bits mit dem Wert 1. Das Byte 11111110 hat sieben endständige Bits mit dem Wert 1. Das Byte 01111111 hat keine endständigen Bits mit dem Wert 1. Das Byte 11111111 hat keine endständigen Bits mit dem Wert 1.
  • Für diese Offenbarung werden endständige Bits mit dem Wert 0 als zusammenhängende Bits mit dem Wert 0 am Ende eines Bytes definiert. Für ein Byte, das nur aus Nullen besteht, wird definiert, dass es keine endständigen Bits mit dem Wert 0 hat. Ein Byte kann null bis sieben (einschließlich) endständige Bits mit dem Wert 0 enthalten. Das Byte 00001111 hat beispielsweise vier endständige Bits mit dem Wert 0. Das Byte 00000001 hat sieben endständige Bits mit dem Wert 0. Das Byte 11111110 hat keine endständigen Bits mit dem Wert 0. Das Byte 00000000 hat keine endständigen Bits mit dem Wert 0.
  • Das Zeichenkettenfilter 224 enthält eine Vergleichslogik 1002. Die Ver gleichslogik 1002 empfängt ein Zufallsdatenbyte 298 vom Schieberegister 218 in 2. Die Vergleichslogik 1002 untersucht die Bits im Zufallsdatenbyte 298 und erzeugt verschiedene Signale, die wie im Folgenden beschrieben dazu dienen, zusammenhängende Ketten von Einsen und Nullen zu erkennen.
  • Die Vergleichslogik 1002 erzeugt ein Signal 1022A mit der Anzahl der führenden Einsen, das die Anzahl der führenden Bits mit dem Wert 1 im Zufallsdatenbyte 298 angibt.
  • Die Vergleichslogik 1002 erzeugt ein Signal 1028A mit der Anzahl der endständigen Einsen, das die Anzahl der endständigen Bits mit dem Wert 1 im Zufallsdatenbyte 298 angibt.
  • Die Vergleichslogik 1002 erzeugt ein Nur-Einsen-Signal 1048A, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 nur Bits mit dem Wert 1 enthält.
  • Die Vergleichslogik 1002 erzeugt ein Führende-Einsen-Signal 1036A, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 führende Bits mit dem Wert 1 enthält.
  • Die Vergleichslogik 1002 erzeugt auch ein Endständige-Einsen-Signal 1038A, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 endständige Bits mit dem Wert 1 enthält.
  • Das Zeichenkettenfilter 224 enthält auch einen ersten Zähler 1016A zum Speichern des momentanen Zählerstands der zusammenhängenden Bits mit dem Wert 1. In einer Ausführungsform umfasst der Zähler 1016A ein Sechs-Bit-Register. Das Ausgangssignal des Zählers 1016A ist ein Anzahl-der-Einsen-Signal 1024A.
  • Das Zeichenkettenfilter 224 enthält auch einen ersten Addierer 1012A, der die Anzahl-der-führenden-Einsen 1022A und das Anzahl-der-Einsen-Signal 1024A addiert und ein Anzahl-der-neuen-Einsen-Signal 1026A erzeugt.
  • Das Zeichenkettenfilter 224 enthält auch einen ersten Multiplexer 1014A mit vier Eingängen. Der Multiplexer 1014A empfängt an seinen Eingängen das Anzahl-der-Einsen-Signal 1024A, das Anzahl-der-neuen-Einsen-Signal 1026A, das Signal 1028A mit der Anzahl der endständigen Einsen und einen hart codierten Wert 1032A von Null. Der Multiplexer 1014A wählt abhängig von einem Einsen-Auswahl-Signal 1042A einen der Eingänge für die Ausgabe an den Zähler 1016A.
  • Die Vergleichslogik 1002 erzeugt ein Anzahl-der-führenden-Nullen-Signal 1022B, das die Anzahl der führenden Bits mit dem Wert 0 im Zufallsdatenbyte 298 angibt.
  • Die Vergleichslogik 1002 erzeugt ein Anzahl-der-endständigen-Nullen-Signal 1028B, das die Anzahl der endständigen Bits mit dem Wert 0 im Zufallsdatenbyte 298 angibt.
  • Die Vergleichslogik 1002 erzeugt auch ein Alles-Nullen-Signal 1048B, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 ausschließlich Bits mit dem Wert 0 enthält.
  • Die Vergleichslogik 1002 erzeugt auch ein Führende-Nullen-Signal 1036B, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 führende Bits mit dem Wert 0 enthält.
  • Die Vergleichslogik 1002 erzeugt auch ein Endständige-Nullen-Signal 1038B, das den Wert Wahr hat, wenn das Zufallsdatenbyte 298 endständige Bits mit dem Wert 0 enthält.
  • Das Zeichenkettenfilter 224 enthält auch einen zweiten Zähler 1016B, der den aktuellen Zählerstand der zusammenhängenden Bits mit dem Wert 0 speichert. In einer Ausführungsform umfasst der Zähler 1016B ein Sechs-Bit-Register. Das Ausgangssignal des Zählers 1016B ist ein Anzahl-der-Nullen-Signal 1024B.
  • Das Zeichenkettenfilter 224 enthält auch einen zweiten Addierer 1012B, der das Anzahl-der-führenden-Nullen-Signal 1022B und das Anzahl-der-Nullen-Signal 1024B addiert und ein Anzahl-der-neuen-Nullen-Signal 1026B erzeugt.
  • Das Zeichenkettenfilter enthält auch einen zweiten Multiplexer 1014B mit vier Eingängen. Der Multiplexer 1014B empfängt an seinen Eingängen das Anzahl-der-Nullen-Signal 1024B, das Anzahl-der-neuen-Nullen-Signal 1026B, das Anzahl-der-end ständigen-Nullen-Signal 1028B und einen hart codierten Wert 1032B von Null. Der Multiplexer 1014B wählt abhängig von einem Nullen-Auswahl-Signal 1042B einen der Eingänge für die Ausgabe an den Zähler 1016B.
  • Das Zeichenkettenfilter 224 enthält auch einen ersten Komparator 1046A, der das Anzahl-der-neuen-Einsen-Signal 1026A mit dem Höchstanzahl-Signal 258 in 2 vergleicht. Ist das Anzahl-der-neuen-Einsen-Signal 1026A größer als das Höchstanzahl-Signal 258, so erzeugt der Komparator 1046A einen Wert Wahr für das Einsen-überschritten-Signal 1034A. Andernfalls erzeugt der Komparator 1046A einen Wert Falsch für das Einsen-überschritten-Signal 1034A.
  • Das Zeichenkettenfilter 224 enthält auch einen zweiten Komparator 1046B, der das Anzahl-der-neuen-Nullen-Signal 1026B mit dem Höchstanzahl-Signal 258 in 2 vergleicht. Ist das Anzahl-der-neuen-Nullen-Signal 1026B größer als das Höchstanzahl-Signal 258, so erzeugt der Komparator 1046B einen Wert Wahr für das Nullen-überschritten-Signal 1034B. Andernfalls erzeugt der Komparator 1046B einen Wert Falsch für das Nullen-überschritten-Signal 1034B.
  • Das Zeichenkettenfilter 224 enthält auch ein ODER-Gatter 1004 mit zwei Eingängen, dessen Eingänge mit den Ausgängen des Komparators 1046A und des Komparators 1046B verbunden sind. Das ODER-Gatter 1004 empfängt das Einsen-überschritten-Signal 1034A und das Nullen-überschritten-Signal 1034B an seinen Eingängen. Das ODER-Gatter 1004 erzeugt ein Höchstanzahl-überschritten-Signal 1044, das als Eingangssignal an die Auswahllogik 1006 geliefert wird.
  • Das Zeichenkettenfilter 224 enthält auch ein UND-Gatter 1008 mit zwei Eingängen, das mit dem ODER-Gatter 1004 verbunden ist. Das UND-Gatter 1008 erhält das Höchstanzahl-überschritten-Signal 1044 vom ODER-Gatter 1004 an einem Eingang und das Filterfreigabesignal 262 in 2 an seinem anderen Eingang. Das Ausgangssignal des UND-Gatters 1008 ist das Zeichenkettenfilter-Negativ-Signal 256 in 2.
  • Das Zeichenkettenfilter 224 enthält auch eine Auswahllogik 1006, die mit dem Nur-Einsen-Signal 1048A, dem Führende-Einsen-Signal 1036A, dem Endständige-Einsen-Signal 1038A, dem Höchstanzahl-überschritten-Signal 1044, dem Führende-Nullen-Signal 1036B, dem Endständige-Nullen-Signal 1038B und dem Alles-Nullen-Signal 1048B verbunden ist. Die Auswahllogik 1006 erzeugt das Einsen-Auswahl-Signal 1042A und das Nullen-Auswahl-Signal 1042B gemäß dem folgenden Code:
    Figure 00410001
  • 11 zeigt ein Flussdiagramm, das die Arbeitsweise des Zeichenkettenfilters 224 in 10 gemäß der Erfindung erläutert. Der Ablauf beginnt im Block 1102.
  • Im Block 1102 werden die Zähler 1016A und 1016B mit dem Wert null initialisiert. Der Ablauf geht zum Block 1104 über.
  • Im Block 1104 erzeugt die RNG-Einheit 136 in 1 ein Byte Zufallsdaten auf dem Zufallsbytesignal 298 in 2, und die Vergleichslogik 1002 erzeugt ihre Signale abhängig von der Untersuchung des Zufallsdatenbytes 298. Der Ablauf geht zum Block 1106 über.
  • Im Block 1106 addiert der Addierer 1012A die Anzahl 1022A der führenden Einsen und das Anzahl-der-Einsen-Signal 1024A und erzeugt das Anzahl-der-neuen-Einsen-Signal 1026A. Der Addierer 1012B addiert das Anzahl-der-führenden-Nullen-Signal 1022B und das Anzahl-der-Nullen-Signal 1024B und erzeugt das Anzahl-der-neuen-Nullen-Signal 1026B. Der Ablauf geht zum Block 1112 über.
  • Im Block 1112 untersucht die Auswahllogik 1006 das Höchstanzahl-überschritten-Signal 1044, um festzustellen, ob die Anzahl der zusammenhängenden Nullen oder Einsen die Höchstanzahl 258 überschritten hat. Trifft dies zu, so geht der Ablauf zum Entscheidungsblock 1114. Andernfalls geht der Ablauf zum Entscheidungsblock 1124.
  • Im Entscheidungsblock 1114 untersucht das UND-Gatter 1008 das Filterfreigabesignal 262, um festzustellen, ob das Zeichenkettenfilter 224 freigegeben ist. Trifft dies zu, so erzeugt das UND-Gatter 1008 einen Wert Wahr auf dem Zeichenkettenfilter-Negativ-Signal 256 in 2. Der Ablauf geht zum Block 1118 über.
  • Im Block 1118 legt die Steuerlogik 244, weil das Zeichenkettenfilter-Negativ-Signal 256 den Wert Wahr hat, das Inkrementiersignal 221 in 2 nicht an, und es bewirkt nicht, dass das Zufallsbyte 298 in Buf0 242 oder Buf1 246 geladen wird, obwohl das Schieberegister 218 einen Wahr-Wert auf dem Byte-Erzeugt-Signal 282 bewirkt hat. Dadurch verwirft die RNG-Einheit 136 das Zufallsbyte 298, da das Zufallsbyte 298 bewirkt hat, dass die Anzahl zusammenhängender Einsen oder Nullen die Höchstanzahl 258 überschreitet. Der Ablauf geht zum Block 1122 über.
  • Im Block 1122 erzeugt die Auswahllogik 1006 einen Wert von 3 auf dem Einsen-Auswahl-Signal 1042A und dem Nullen-Auswahl-Signal 1042B, damit die Multiplexer 1014A bzw. 1014B angewiesen werden, die momentane Anzahl-der-Einsen 1024A bzw. Anzahl-der-Nullen 1024B zu halten. Der Ablauf kehrt zum Block 1104 zurück.
  • Im Entscheidungsblock 1124 untersucht die Auswahllogik 1006 das Alles- Nullen-Signal 1048B, um festzustellen, ob das Zufallsdatenbyte 298 nur Nullen enthält. Trifft dies zu, so geht der Ablauf zum Block 1126 über. Andernfalls geht der Ablauf zum Entscheidungsblock 1128 über.
  • Im Block 1126 erzeugt die Auswahllogik 1006 einen Wert von 2 auf dem Nullen-Auswahl-Signal 1042B und weist damit den Multiplexer 1014B an, die Anzahl-der-neuen-Nullen 1026B zu wählen, und sie erzeugt einen Wert von 0 auf dem Einsen-Auswahl-Signal 1042A und weist damit den Multiplexer 1014A an, die hart codierte Nullen-Eingabe 1032A zu wählen. Der Ablauf geht zum Block 1148 über.
  • Im Entscheidungsblock 1128 untersucht die Auswahllogik 1006 das Endständige-Nullen-Signal 1038B, um festzustellen, ob das Zufallsdatenbyte 298 irgendwelche endständigen Nullen enthält. Trifft dies zu, so geht der Ablauf zum Block 1132. Andernfalls geht der Ablauf zum Block 1134.
  • Im Block 1132 erzeugt die Auswahllogik 1006 einen Wert von 1 auf dem Nullen-Auswahl-Signal 1042B und weist damit den Multiplexer 1014B an, die Anzahl-der-endständigen-Nullen 1028B zu wählen, und sie erzeugt einen Wert von 0 auf dem Einsen-Auswahl-Signal 1042A und weist damit den Multiplexer 1014A an, die hart codierte Nullen-Eingabe 1032A zu wählen. Der Ablauf geht zum Block 1148 über.
  • Im Block 1134 erzeugt die Auswahllogik 1006 einen Wert von 0 auf dem Nullen-Auswahl-Signal 1042B und weist damit den Multiplexer 1014B an, die hart codierte Nullen-Eingabe 1032B zu wählen. Der Ablauf geht zum Entscheidungsblock 1136 über.
  • Im Entscheidungsblock 1136 untersucht die Auswahllogik 1006 das Nur-Einsen-Signal 1048A, um festzustellen, ob das Zufallsdatenbyte 298 nur Einsen enthält. Trifft dies zu, so geht der Ablauf zum Block 1138. Andernfalls geht der Ablauf zum Entscheidungsblock 1142 über.
  • Im Block 1138 erzeugt die Auswahllogik 1006 einen Wert von 2 auf dem Einsen-Auswahl-Signal 1042A und weist damit den Multiplexer 1014A an, die Anzahl-der-neuen-Einsen 1026A zu wählen. Der Ablauf geht zum Block 1148 über.
  • Im Entscheidungsblock 1142 untersucht die Auswahllogik 1006 das End ständige-Einsen-Signal 1038A, um festzustellen, ob das Zufallsdatenbyte 298 irgendwelche nachlaufenden Einsen enthält. Trifft dies zu, so geht der Ablauf zum Block 1144 über. Andernfalls geht der Ablauf zum Block 1146 über.
  • Im Block 1144 erzeugt die Auswahllogik 1006 einen Wert von 1 auf dem Einsen-Auswahl-Signal 1042A und weist damit den Multiplexer 1014A an, die Anzahl der endständigen Einsen 1028A zu wählen. Der Ablauf geht zum Block 1148 über.
  • Im Block 1146 erzeugt die Auswahllogik 1006 einen Wert von 0 auf dem Einsen-Auswahl-Signal 1042A und weist damit den Multiplexer 1014A an, die hart codierte Nullen-Eingabe 1032A zu wählen. Der Ablauf geht zum Block 1148 über.
  • Im Block 1148 veranlasst die Steuerlogik 244, dass das Zufallsdatenbyte 298 gewählt durch das Füll-Auswahl-Signal 264 in Buf0 242 oder Buf1 246 geladen wird. Sie legt auch gewählt durch das Füll-Auswahl-Signal 264 das Inkrementiersignal 221 an, damit Cntr0 211 oder Cntr1 213 inkrementiert wird. Der Ablauf kehrt zum Block 1104 zurück.
  • 12 zeigt ein Blockdiagramm der Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XSTORE-Befehls gemäß einer anderen Ausführungsform der Erfindung. Der XSTORE-Befehl in 12 gleicht dem XSTORE-Befehl in 7; in der anderen Ausführungsform wird jedoch die Anzahl der gültigen Zufallsdatenbytes in eines der Allzweckregister in der Registerdatei 108 geladen, beispielsweise das Register EAX 1202, und nicht im Systemspeicher abgelegt. Der XSTORE-Befehl in 12 lädt wie der XSTORE-Befehl in 7 vorteilhafterweise den Zählerstand untrennbar in das EAX-Register und speichert zugleich die Zufallsdatenbytes im Speicher, damit der Multitaskingbetrieb mit der RNG-Einheit 136 erleichtert wird. D. h., der XSTORE-Befehl in 12 kann ebenfalls nicht durch einen Interrupt unterbrochen werden.
  • 13 zeigt ein Flussdiagramm, das den Mehrfachpufferbetrieb der RNG-Einheit 136 in 2 gemäß der Erfindung erläutert. Der Ablauf beginnt im Block 1302.
  • Im Block 1302 wird das Rücksetzsignal 248 angelegt. Der Ablauf geht zum Block 1304 über.
  • Im Block 1304 initialisiert die Steuerlogik 244 in 2 das Füll-Auswahl-Signal 264 und das Speicher-Auswahl-Signal 266 mit 0, und es löscht Cntr0 211 und Cntr1 213 aufgrund des Rücksetzsignals im Block 1302. Der Ablauf geht zum Entscheidungsblock 1306 über.
  • Im Entscheidungsblock 1306 stellt die Steuerlogik 244 fest, ob ein XSTORE-Befehl ausgeführt wird, indem sie das XSTORE-Signal 268 untersucht. Trifft dies zu, so geht der Ablauf zum Entscheidungsblock 1308 über. Andernfalls geht der Ablauf zum Entscheidungsblock 1322 über.
  • Im Entscheidungsblock 1308 stellt die Steuerlogik 244 fest, ob der Zufallsbitgenerator 0 206 oder der Zufallsbitgenerator 1 208 ausgewählt durch das Generatorauswahl-Signal 252 stillgelegt wird. Trifft dies zu, so geht der Ablauf zum Block 1312 über. Andernfalls geht der Ablauf zum Block 1314 über.
  • Im Block 1312 schaltet die Steuerlogik 244 den gewählten Zufallsbitgenerator über das Einschaltsteuersignal 231 ein. Der Ablauf geht auf den Block 1314 über.
  • Im Block 1314 speichert der Mikroprozessor 100 den mit dem Speicher-Auswahl-Signal 266 gewählten Wert in Cntr0 211 oder Cntr1 213 und die mit dem Speicher-Auswahl-Signal 266 gewählten gültigen Datenbytes in Buf0 242 oder Buf1 246 untrennbar im Systemspeicher, und zwar gemäß dem Block 816 in 8, siehe auch 7. Der Ablauf geht auf den Block 1316 über.
  • Im Block 1316 legt die Steuerlogik 244 ein Löschsignal 223 an, damit Cntr0 211 oder Cntr1 213 gewählt durch das Speicher-Auswahl-Signal 266 gelöscht wird. Der Ablauf geht zum Block 1318.
  • Im Block 1318 aktualisiert die Steuerlogik 244 das Speicher-Auswahl-Signal 266, damit der andere Puffer und Zähler gewählt werden. In Ausführungsformen, in denen die RNG-Einheit 136 mehr als zwei Puffer enthält, umfasst das Speicher-Auswahl-Signal 266 mehr als ein Bit, und das Aktualisieren des Speicher-Auswahl-Signals 266 umfasst das Inkrementieren des Speicher-Auswahl-Signals 266 und die Rückkehr zum Wert null, wenn über die Anzahl der Puffer hinaus inkrementiert wird. Der Ablauf geht zum Entscheidungsblock 1322.
  • Im Entscheidungsblock 1322 stellt die Steuerlogik 244 fest, ob ein korrektes Zufallsdatenbyte erzeugt wurde, indem sie prüft, ob das Byte-Erzeugt-Signal 282 den Wert Wahr hat und ob das Zeichenkettenfilter-Negativ-Signal 256 den Wert Falsch hat. Trifft dies zu, so erfolgt der weitere Ablauf im Block 1324. Andernfalls kehrt der Ablauf zum Entscheidungsblock 1306 zurück.
  • Im Block 1324 lädt die Steuerlogik 244 das korrekte Zufallsdatenbyte ausgewählt durch das Füll-Auswahl-Signal 264 in Buf0 242 oder Buf1 246 und inkrementiert ausgewählt durch das Füll-Auswahl-Signal 264 Cntr0 211 oder Cntr1 213. Der Ablauf geht zum Entscheidungsblock 1326.
  • Im Entscheidungsblock 1326 untersucht die Steuerlogik 244 festgelegt durch das Füll-Auswahl-Signal 264 das Voll0-Signal 229 oder das Voll1-Signal 227 und stellt damit gewählt durch das Füll-Auswahl-Signal 264 fest, ob Buf0 242 oder Buf1 246 voll ist. Trifft dies zu, so erfolgt der weitere Ablauf im Block 1328. Andernfalls kehrt der Ablauf zum Block 1306 zurück.
  • Im Block 1328 aktualisiert die Steuerlogik 244 das Füll-Auswahl-Signal 264. In einer Ausführungsform, in der die RNG-Einheit 136 zwei Puffer enthält, entspricht das Aktualisieren des Füll-Auswahl-Signals 264 dem Umschalten des Füll-Auswahl-Signals 264. In Ausführungsformen, in denen die RNG-Einheit 136 mehr als zwei Puffer enthält, umfasst das Füll-Auswahl-Signal 264 mehr als 1 Bit, und das Aktualisieren des Füll-Auswahl-Signals 264 umfasst das Inkrementieren des Füll-Auswahl-Signals 264 und die Rückkehr zum Wert null, wenn über die Anzahl der Puffer hinaus inkrementiert wird. Der Ablauf geht zum Entscheidungsblock 1332.
  • Im Entscheidungsblock 1332 untersucht die Steuerlogik 244 festgelegt durch das im Block 1328 aktualisierte Füll-Auswahl-Signal 264 das Voll0-Signal 229 oder das Voll1-Signal 227, um festzustellen, ob der mit dem Füll-Auswahl-Signal 264 gewählte Puffer Buf0 242 oder Buf1 246 voll ist, d. h. um festzustellen, ob alle Puffer voll sind. Trifft dies zu, so erfolgt der weitere Ablauf im Block 1334. Andernfalls kehrt der Ablauf zum Block 1306 zurück.
  • Im Block 1334 schaltet die Steuerlogik 244 den Zufallsbitgenerator 0 206 und den Zufallsbitgenerator 1 208 über das Einschaltsteuersignal 231 ab, da alle Puffer voll sind. Der Ablauf kehrt zum Entscheidungsblock 1306 zurück.
  • 14 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XLOAD-Befehls in 3 gemäß einer anderen Ausführungsform der Erfindung erläutert. Das Flussdiagramm in 14 ist nahezu identisch mit dem Flussdiagramm in 6. Mit den gleichen Bezugszeichen numerierte Blöcke sind identisch. 14 enthält jedoch einen zusätzlichen Entscheidungsblock 1403. Der Ablauf geht vom Block 602 zum Entscheidungsblock 1403 über. Im Entscheidungsblock 1403 stellt die Steuerlogik 244 in 2 fest, ob einschlägige Bits im CSR 226 beim Laden des CSR 226 im Block 602 verändert worden sind. Trifft dies zu, so erfolgt der weitere Ablauf im Block 604 wie in 6. Andernfalls geht der Ablauf wie dargestellt zum Block 612 über. Die andere Ausführungsform hat den Vorteil, dass sie nicht überflüssigerweise bereits angesammelte Zufallsbytes verwirft und die Ansammlung von Zufallsbytes neu startet. Hat der Ladevorgang des CSR 226 also keinen der Werte verändert, die das Erzeugen von Zufallszahlen durch die RNG-Einheit 136 beeinflussen, so braucht man die bereits angesammelten Zufallsbytes nicht zu verwerten und die Ansammlung von Zufallsbytes neu zu starten, da die Zufallsbytes mit Hilfe der gewünschten Steuerwerte erzeugt wurden. In einer Ausführungsform sind die einschlägigen Bits des CSR 226 das Zeichenkettenfilter-Freigabebit 334, das Generator-Auswahlbit 336, das CNT-Freigabebit 342 und das Zeichenkettenfilter-Höchstlängen-Feld 346.
  • 15 zeigt ein Flussdiagramm der Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XSTORE-Befehls in 3 gemäß einer anderen Ausführungsform der Erfindung. Das Flussdiagramm in 15 ist nahezu identisch mit dem Flussdiagramm in 8. Mit den gleichen Bezugszeichen numerierte Blöcke sind identisch. 15 enthält jedoch einen zusätzlichen Entscheidungsblock 1507. Der Ablauf geht vom Block 806 zum Entscheidungsblock 1507 über. Im Entscheidungsblock 1507 stellt die Steuerlogik 244 in 2 fest, ob einschlägige Bits im CSR 226 beim Kopieren in das CSR 226 im Block 608 verändert worden sind. Trifft dies zu, so erfolgt der weitere Ablauf im Block 808 wie in 8. Andernfalls geht der Ablauf wie dargestellt zum Block 816 über. Die andere Ausführungsform hat den Vorteil, dass sie nicht überflüssigerweise bereits angesammelte Zufallsbytes verwirft und die Ansammlung von Zufallsbytes neu startet. Hat der Kopiervorgang in das CSR 226 also keinen der Werte verändert, die das Erzeugen von Zufallszahlen durch die RNG-Einheit 136 beeinflussen, so braucht man die bereits angesammelten Zufallsbytes nicht zu verwerfen und die Ansammlung von Zufallsbytes neu zu starten, da die Zufallsbytes mit Hilfe der gewünschten Steuerwerte erzeugt wurden. In einer Ausführungsform sind die einschlägigen Bits des CSR 226 das Zeichenkettenfilter-Freigabebit 334, das Generator-Auswahlbit 336, das CNT-Freigabebit 342 und die Zeichenkettenfilter-Höchstlänge 346.
  • 16 zeigt ein Blockdiagramm der Arbeitsweise des Mikroprozessors 100 in 1 beim Ausführen eines XSTORE-Befehls gemäß einer anderen Ausführungsform der Erfindung. Der XSTORE-Befehl in 16 ist dem XSTORE-Befehl in 12 ähnlich. In der anderen Ausführungsform in 16 legt jedoch der Zieloperand des XSTORE-Befehls in 16 ein Register des Mikroprozessors 100 fest, beispielsweise ein XMM-Register oder ein Fließkommaregister oder ein MMX-Register oder eines der Ganzzahleinheit-Register, beispielsweise EBX, und es wird keine Adresse im Systemspeicher angegeben. D. h., die gültigen Zufallsdatenbytes werden untrennbar in eines der für den Benutzer sichtbaren Register in der Registerdatei 108 geschrieben und nicht im Systemspeicher abgelegt. Im Beispiel in 16 bestimmt der XSTORE-Befehl, dass die gültigen Zufallsdatenbytes wie dargestellt in das XMM3-Register 376 der SSE-Register 352 in 3 geschrieben werden. Der XSTORE-Befehl in 16 schreibt wie der XSTORE-Befehl in 12 vorteilhafterweise die Zufallsdatenbytes untrennbar in das für den Benutzer sichtbare Register und lädt gleichzeitig den Zählerstand nach EAX 1202, damit der Multitaskingbetrieb mit der RNG-Einheit 136 erleichtert wird. D. h., der XSTORE-Befehl in 16 ist ebenfalls nicht durch einen Interrupt unterbrechbar.
  • 17 zeigt ein Blockdiagramm, das die Arbeitsweise des Mikroprozessors 100 in 1 darstellt, wenn dieser einen XSTORE-Befehl gemäß einer anderen Ausführungsform der Erfindung ausführt. Der XSTORE-Befehl in 17 gleicht im Wesentlichen dem XSTORE-Befehl in 12. In der anderen Ausführungsform in 17 enthält der XSTORE-Befehl jedoch ein REP-Präfix der x86-Architektur. Mit dem REP XSTORE-Befehl wird der Zählerstand der Bytes an Zufallsdaten, die im Systemspeicher abzulegen sind, wie dargestellt als Eingabeparameter im ECX-Register 1702 der Registerdatei 108 spezifiziert. Die Software lädt vor dem Ausführen des REP XSTORE-Befehls in ECX 1702 die gewünschte Anzahl an Zufallsdatenbytes, die im Systemspeicher abgelegt werden sollen.
  • In einer Ausführungsform ist das REP XSTORE zwischen Speichervorgängen von Zufallsdatenbytes in den Systemspeicher durch einen Interrupt unterbrechbar. Die Speicheradresse wird anfänglich in Allzweckregistern der Registerdatei 108 festgelegt. Im Beispiel in 17 ist die Speicheradresse wie dargestellt in ES:EDI 1704 der Registerdatei 108 spezifiziert. Bei jedem Schreiben eines oder mehrerer Zufallsdatenbytes in den Systemspeicher wird ES:EDI 1702 auf den folgenden Ort im Systemspeicher aktualisiert, an dem die Zufallsdatenbytes zu speichern sind. Zusätzlich wird bei jedem Speichern eines oder mehrerer Zufallsdatenbytes in den Systemspeicher ECX 1702 aktualisiert, damit es die Anzahl der noch zu speichernden Zufallsbytes angibt. Sei beispielsweise angenommen, dass ein REP XSTORE-Befehl im ECX 1702 eine Byteanzahl von 28 und eine Speicheradresse von 0x12345678 angibt. Die RNG-Einheit 136 soll 8 Byte in einem der Puffer Buf0 242 und Buf1 246 verfügbar haben und schreibt die 8 Byte in den Systemspeicher, während weitere Zufallsdatenbytes gesammelt werden. Beim Schreiben der 8 Byte in den Speicher wird ECX 1702 auf den Wert 20 aktualisiert, um anzuzeigen, dass noch weitere 20 Zufallsdatenbytes in den Systemspeicher geschrieben werden müssen. Zusätzlich wird die Adresse auf 0x12345680 als den folgenden Ort im Systemspeicher aktualisiert, an dem der nächste Block von Zufallsdatenbytes geschrieben wird. An dieser Stelle darf ein Interrupt auftreten, und die Software kann die aktualisierten Werte untersuchen. Ist der Interrupt bedient worden und die Steuerung an den REP XSTORE-Befehl zurückgeben worden, so fährt das REP XSTORE mit der Ausführung fort und verwendet die aktualisierten Werte in ECX 1702 und ES:EDI 1704. Zusätzlich wird nach dem Abschluss des REP XSTORE-Befehls der aktuelle Wert des CSR 226 in 2 in das EAX-Register 1202 in der Registerdatei 108 kopiert.
  • Obwohl die Erfindung und ihre Aufgaben, Merkmale und Vorteile ausführlich beschrieben worden sind, schließt die Erfindung weitere Ausführungsformen ein. Beispielsweise ist die Erfindung unter Bezug auf die SSE-Register beschrieben worden, die vom Betriebssystem gesichert und wiederhergestellt werden. Man kann die Erfindung jedoch an die Verwendung anderer Register anpassen, die vom Betriebssystem gesichert und wiederhergestellt werden, um festzustellen, ob möglicherweise ein Taskwechsel erfolgt ist und um die Steuerregister im Zufallszahlengenerator wiederherzustellen, beispielsweise an Fließkommaregister. Die Erfindung ist anhand von Prozessoren mit x86-Architekturen beschrieben worden; man kann die Erfindung jedoch an verschiedene Prozessor-Architekturen anpassen.
  • Für Fachleute ist erkennbar, dass sie die offenbarte Konzeption und bestimmte Ausführungsformen leicht als Grundlage zum Entwerten oder Abwandeln anderer Strukturen verwenden können, die den gleichen Zwecken der Erfindung dienen, ohne den Bereich der Erfindung zu verlassen, der durch die beigefügten Ansprüche bestimmt ist.

Claims (8)

  1. Mikroprozessor, dafür ausgelegt, dass ein Speicher mit ihm verbunden ist, wobei der Mikroprozessor umfasst: ein Speicherelement, das so konfiguriert ist, dass es eine veränderliche Anzahl Bytes an Zufallsdaten aufnehmen kann; einen Befehlsübersetzer, der mit dem Speicherelement verbunden ist und einen Befehl übersetzt, der eine Adresse im Speicher festlegt; und eine Speichereinheit, die mit dem Speicherelement verbunden ist und so konfiguriert ist, dass sie im Speicher an der Adresse die veränderliche Anzahl Bytes an Zufallsdaten aus dem Speicherelement ablegt, und zwar dann, wenn der Befehlsübersetzer den Befehl übersetzt.
  2. Mikroprozessor nach Anspruch 1, zudem umfassend: einen Zähler, der mit dem Speicherelement verbunden ist und einen Zählerstand der veränderlichen Anzahl Bytes hält, die im Speicherelement abgelegt sind.
  3. Mikroprozessor nach Anspruch 2, wobei die Speichereinheit zudem so konfiguriert ist, dass sie im Speicher an der Adresse den Zählerstand aus dem Zähler zusammen mit der veränderlichen Anzahl Bytes an Zufallsdaten aus dem Speicherelement ablegt.
  4. Mikroprozessor nach Anspruch 2, zudem umfassend: ein zweites Speicherelement, das so konfiguriert ist, dass es eine zweite veränderliche Anzahl Bytes an Zufallsdaten aufnimmt; und einen zweiten Zähler, der mit dem zweiten Speicherelement verbunden ist und einen Zählerstand der zweiten veränderlichen Anzahl Bytes hält, die im zweiten Speicherelement abgelegt sind.
  5. Mikroprozessor nach Anspruch 4, worin das zweite Speicherelement so konfiguriert ist, dass es die zweite veränderliche Anzahl Bytes an Zufallsdaten zeitgleich mit der Speichereinheit aufnimmt, die im Speicher an der Adresse die veränderli che Anzahl Bytes an Zufallsdaten aus dem ersten Speicherelement ablegt.
  6. Mikroprozessor nach Anspruch 2, wobei die Speichereinheit zudem so konfiguriert ist, dass sie in einem für den Benutzer sichtbaren Register im Mikroprozessor den Zählerstand aus dem Zähler speichert, und zwar dann, wenn der Befehlsübersetzer den Befehl übersetzt.
  7. Mikroprozessor nach Anspruch 1, ferner umfassend: einen Zufallsbitgenerator, der mit dem Speicherelement verbunden ist und Zufallsbits erzeugt, aus denen Zufallsdatenbytes gebildet werden, die im Speicherelement abgelegt werden.
  8. Mikroprozessor nach Anspruch 1, ferner umfassend: ein Schieberegister, das zwischen den Zufallsbitgenerator und das Speicherelement geschaltet ist und die Zufallsdatenbytes aus den Zufallsbits bildet, die der Zufallsbitgenerator erzeugt.
DE60305129T 2002-11-20 2003-02-21 Mikroprozessor mit Pseudozufallszahlengenerator und Befehl zur Speicherung von Zufallsdaten Expired - Lifetime DE60305129T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US300922 2002-11-20
US10/300,922 US7219112B2 (en) 2001-11-20 2002-11-20 Microprocessor with instruction translator for translating an instruction for storing random data bytes

Publications (2)

Publication Number Publication Date
DE60305129D1 DE60305129D1 (de) 2006-06-14
DE60305129T2 true DE60305129T2 (de) 2006-12-07

Family

ID=32229879

Family Applications (2)

Application Number Title Priority Date Filing Date
DE60305129T Expired - Lifetime DE60305129T2 (de) 2002-11-20 2003-02-21 Mikroprozessor mit Pseudozufallszahlengenerator und Befehl zur Speicherung von Zufallsdaten
DE60335927T Expired - Lifetime DE60335927D1 (de) 2002-11-20 2003-04-14 Mikroprozessor mit Zufallszahlengenerator, dessen Verfügbarkeit vom Ergebnis eines Selbsttests abhängig ist

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE60335927T Expired - Lifetime DE60335927D1 (de) 2002-11-20 2003-04-14 Mikroprozessor mit Zufallszahlengenerator, dessen Verfügbarkeit vom Ergebnis eines Selbsttests abhängig ist

Country Status (5)

Country Link
US (7) US7219112B2 (de)
EP (2) EP1422611B1 (de)
CN (1) CN1236380C (de)
DE (2) DE60305129T2 (de)
TW (1) TWI270004B (de)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060064448A1 (en) * 2001-11-20 2006-03-23 Ip-First, Llc. Continuous multi-buffering random number generator
US7136991B2 (en) * 2001-11-20 2006-11-14 Henry G Glenn Microprocessor including random number generator supporting operating system-independent multitasking operation
US7149764B2 (en) * 2002-11-21 2006-12-12 Ip-First, Llc Random number generator bit string filter
US7219112B2 (en) * 2001-11-20 2007-05-15 Ip-First, Llc Microprocessor with instruction translator for translating an instruction for storing random data bytes
US7139785B2 (en) * 2003-02-11 2006-11-21 Ip-First, Llc Apparatus and method for reducing sequential bit correlation in a random number generator
US7925891B2 (en) * 2003-04-18 2011-04-12 Via Technologies, Inc. Apparatus and method for employing cryptographic functions to generate a message digest
TWI243993B (en) * 2003-08-29 2005-11-21 Ali Corp Protection method for DVD player/recorder against copy
US7502468B2 (en) * 2003-09-02 2009-03-10 Ncipher Corporation Ltd. Method and system for generating a cryptographically random number stream
US7426666B2 (en) * 2004-05-18 2008-09-16 Lucent Technologies Inc. Noisy channel emulator for high speed data
FR2872357A1 (fr) * 2004-06-24 2005-12-30 St Microelectronics Sa Verification d'un flux de bits
EP1610462B1 (de) * 2004-06-24 2012-07-11 St Microelectronics S.A. Schaltungsanordnung und Verfahren zur Überprüfung der Konstanz des Bitversatzes eines Bitstroms
US7246213B2 (en) * 2004-07-28 2007-07-17 Hewlett-Packard Development Company, L.P. Data address security device and method
US8619981B2 (en) * 2005-05-12 2013-12-31 Jds Uniphase Corporation Systems and methods for producing pseudo-random number distributions in devices having limited processing and storage capabilities
JP2007156926A (ja) * 2005-12-06 2007-06-21 Matsushita Electric Ind Co Ltd 割込制御装置
US7613757B1 (en) * 2006-01-20 2009-11-03 L-3 Communications, Corp. System and method for parallel PN generation
US8036379B2 (en) * 2006-03-15 2011-10-11 Microsoft Corporation Cryptographic processing
US7827390B2 (en) * 2007-04-10 2010-11-02 Via Technologies, Inc. Microprocessor with private microcode RAM
KR20090012528A (ko) * 2007-07-30 2009-02-04 삼성전자주식회사 난수 발생 장치의 자발적인 온라인 테스트 장치 및 방법
US8676870B2 (en) * 2007-09-18 2014-03-18 Seagate Technology Llc Active test and alteration of sample times for a ring based random number generator
US7774399B2 (en) * 2007-09-24 2010-08-10 Vns Portfolio Llc Shift-add based parallel multiplication
JP2009098973A (ja) * 2007-10-17 2009-05-07 Toshiba Corp 乱数生成回路搭載集積回路の検査方法および乱数生成回路搭載集積回路
US20090161246A1 (en) * 2007-12-23 2009-06-25 Hitachi Global Storage Technologies Netherlands, B.V. Random Number Generation Using Hard Disk Drive Information
US8019935B2 (en) * 2007-12-23 2011-09-13 Hitachi Global Storage Technologies Netherlands, B.V. Random number generation for a host system using a hard disk drive
US7996663B2 (en) * 2007-12-27 2011-08-09 Intel Corporation Saving and restoring architectural state for processor cores
US8069340B2 (en) * 2008-02-08 2011-11-29 Via Technologies, Inc. Microprocessor with microarchitecture for efficiently executing read/modify/write memory operand instructions
US8595277B2 (en) * 2008-02-13 2013-11-26 Infineon Technologies Ag Hybrid random number generator
US8255443B2 (en) 2008-06-03 2012-08-28 International Business Machines Corporation Execution unit with inline pseudorandom number generator
US8539009B2 (en) * 2008-12-16 2013-09-17 Lsi Corporation Parallel true random number generator architecture
US20100180104A1 (en) * 2009-01-15 2010-07-15 Via Technologies, Inc. Apparatus and method for patching microcode in a microprocessor using private ram of the microprocessor
US8286042B2 (en) * 2009-02-20 2012-10-09 Texas Instruments Incorporated On-chip seed generation using boolean functions for LFSR re-seeding based logic BIST techniques for low cost field testability
KR101625857B1 (ko) * 2009-03-30 2016-05-31 시게이트 테크놀로지 엘엘씨 난수 생성 장치 및 그 방법
EP2551837B1 (de) * 2010-03-26 2015-12-16 Fujitsu Limited Zufallszahlengenerator, verschlüsselungsvorrichtung und erkennungsvorrichtung
US8682948B2 (en) * 2011-01-06 2014-03-25 Microsoft Corporation Scalable random number generation
JP5542778B2 (ja) * 2011-10-28 2014-07-09 京セラドキュメントソリューションズ株式会社 操作装置及び操作方法
TWI462009B (zh) * 2011-11-25 2014-11-21 Univ Kaohsiung Medical 亂數產生方法
GB2502541A (en) 2012-05-30 2013-12-04 Ibm Balancing consumption of random data using multiple sources with different levels of entropy
US8995659B2 (en) * 2012-06-11 2015-03-31 Prem Sobel Parameterized random data generator providing a sequence of bytes with uniform statistical distribution
US9037624B1 (en) 2012-08-03 2015-05-19 Seagate Technology Llc Using memory access times for random number generation
JP2014123284A (ja) * 2012-12-21 2014-07-03 Makita Corp 乱数発生装置
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9335969B2 (en) 2013-02-06 2016-05-10 International Business Machines Corporation Method of entropy randomization on a parallel computer
US9152380B2 (en) 2013-03-12 2015-10-06 Qualcomm Incorporated Interrupt driven hardware random number generator
US8873750B2 (en) 2013-03-14 2014-10-28 International Business Machines Corporation Instruction for performing a pseudorandom number generate operation
US9201629B2 (en) 2013-03-14 2015-12-01 International Business Machines Corporation Instruction for performing a pseudorandom number seed operation
US10594687B2 (en) 2013-05-14 2020-03-17 Kara Partners Llc Technologies for enhancing computer security
US10057250B2 (en) 2013-05-14 2018-08-21 Kara Partners Llc Technologies for enhancing computer security
US9454653B1 (en) 2014-05-14 2016-09-27 Brian Penny Technologies for enhancing computer security
DE102014206992A1 (de) * 2014-04-11 2015-10-15 Siemens Aktiengesellschaft Zufallszahlengenerator und Verfahren zum Erzeugen von Zufallszahlen
CN104615407B (zh) * 2015-01-19 2017-10-10 中国科学院信息工程研究所 一种基于闪存产生满熵随机数的方法和装置
US10140197B2 (en) * 2015-10-23 2018-11-27 Oberthur Technologies Of America Corp Method performed by an electronic device capable of communicating with a reader with improved self-testing
AT517983B1 (de) * 2015-11-18 2018-11-15 Siemens Ag Oesterreich Schutz eines Computersystems vor Seitenkanalattacken
US10467402B2 (en) * 2016-08-23 2019-11-05 Lenovo (Singapore) Pte. Ltd. Systems and methods for authentication based on electrical characteristic information
US10114572B2 (en) 2016-12-06 2018-10-30 Oracle International Corporation Acceleration and dynamic allocation of random data bandwidth in multi-core processors
WO2019005165A1 (en) 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
CN109656514B (zh) * 2017-10-11 2023-08-15 华邦电子股份有限公司 随机数产生系统及其随机数产生方法
US11709656B2 (en) 2018-07-13 2023-07-25 Ememory Technology Inc. Short channel effect based random bit generator
GB2580352B (en) * 2019-01-03 2021-03-03 Cisco Tech Inc Random noise generation
CN111949317B (zh) * 2019-05-17 2023-04-07 上海寒武纪信息科技有限公司 指令处理方法、装置及相关产品
US20230205531A1 (en) * 2021-12-23 2023-06-29 Intel Corporation Random data usage

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3706941A (en) * 1970-10-28 1972-12-19 Atomic Energy Commission Random number generator
US4063220A (en) * 1975-03-31 1977-12-13 Xerox Corporation Multipoint data communication system with collision detection
US4375620A (en) * 1980-12-15 1983-03-01 The United States Of America As Represented By The Secretary Of The Navy Pseudo-atmospheric noise generator with control of temporal characteristics
US4513386A (en) * 1982-11-18 1985-04-23 Ncr Corporation Random binary bit signal generator
US5257282A (en) * 1984-06-28 1993-10-26 Unisys Corporation High speed code sequence generator
DE3569414D1 (en) 1984-07-26 1989-05-18 Miles Inc Circuitry for a portable test strip reading instrument
US4780814A (en) * 1987-02-09 1988-10-25 Intel Corporation Global serial channel for microcontroller
JPS63245529A (ja) 1987-03-31 1988-10-12 Toshiba Corp レジスタ退避復元装置
US5163132A (en) * 1987-09-24 1992-11-10 Ncr Corporation Integrated controller using alternately filled and emptied buffers for controlling bi-directional data transfer between a processor and a data storage device
US5179662A (en) 1989-08-31 1993-01-12 International Business Machines Corporation Optimized i/o buffers having the ability to increase or decrease in size to meet system requirements
JP2982974B2 (ja) 1990-10-02 1999-11-29 株式会社セガ・エンタープライゼス 乱数発生装置
US5251165A (en) * 1992-04-09 1993-10-05 James Iii J Colin Two phase random number generator
US5528526A (en) * 1993-02-02 1996-06-18 Motorola, Inc. Arbitrary repeating pattern detector
EP0620518B1 (de) * 1993-04-06 1999-10-06 Hewlett-Packard Company Verfahren und Apparat zum Erzeugen von linearen Rückführungsschieberegistersequenzen
KR970002951B1 (ko) 1994-04-13 1997-03-13 양승택 2^n길이 의사 난수 계열 발생 장치
US5532896A (en) * 1994-04-26 1996-07-02 Coussens; Eugene Distributed silicon controlled rectifiers for ESD protection
US5707286A (en) 1994-12-19 1998-01-13 Mikohn Gaming Corporation Universal gaming engine
US5757923A (en) * 1995-09-22 1998-05-26 Ut Automotive Dearborn, Inc. Method of generating secret identification numbers
US5956289A (en) * 1997-06-17 1999-09-21 Micron Technology, Inc. Clock signal from an adjustable oscillator for an integrated circuit
US6704871B1 (en) 1997-09-16 2004-03-09 Safenet, Inc. Cryptographic co-processor
WO1999014881A2 (en) 1997-09-16 1999-03-25 Information Resource Engineering, Inc. Cryptographic co-processor
SE512009C2 (sv) * 1998-05-18 2000-01-10 Ericsson Telefon Ab L M Linjärt återkopplade skiftregister med låg effekt
US6247082B1 (en) * 1998-11-03 2001-06-12 3Com Corporation Method and circuit for providing handshaking to transact information across multiple clock domains
US6199156B1 (en) * 1998-12-16 2001-03-06 Bull Hn Information Systems Inc. System for explicitly referencing a register for its current content when performing processor context switch
SE515897C2 (sv) 1999-04-12 2001-10-22 Ericsson Telefon Ab L M Anordning och förfarande för en avdelad buffert
FR2802661B1 (fr) 1999-12-21 2003-10-31 Bull Sa Generateur de nombres aleatoires haut debit
TW486733B (en) * 1999-12-28 2002-05-11 Toshiba Corp Dry etching method and manufacturing method of semiconductor device for realizing high selective etching
US6594680B1 (en) * 1999-12-30 2003-07-15 Texas Instruments Incorporated Psuedo-random noise sequence generating system
WO2001055837A1 (en) * 2000-01-28 2001-08-02 Morphics Technology Inc. Apparatus and method for modifying an m-sequence with arbitrary phase shift
GB2361567B (en) 2000-04-18 2004-02-11 Mitel Corp Hardware authentication system and method
US6775776B1 (en) 2000-06-27 2004-08-10 Intel Corporation Biometric-based authentication in a nonvolatile memory device
US6732127B2 (en) * 2001-01-10 2004-05-04 Hewlett-Packard Development Company, L.P. Verifiable random number generator using chaos
EP1339002A1 (de) * 2001-02-28 2003-08-27 Sap Ag Computersystem für Geschäftsanwendungen mit Alarmmeldung
US7007050B2 (en) * 2001-05-17 2006-02-28 Nokia Corporation Method and apparatus for improved pseudo-random number generation
US7478266B2 (en) 2001-05-21 2009-01-13 Mudalla Technology, Inc. Method and apparatus for fast transaction commit over unreliable networks
US8315383B2 (en) * 2001-07-27 2012-11-20 Hewlett-Packard Development Company, L.P. Method and apparatus for random bit-string generation utilizing environment sensors
US6643740B1 (en) * 2001-07-30 2003-11-04 Lsi Logic Corporation Random replacement generator for a cache circuit
US6625972B1 (en) * 2001-08-30 2003-09-30 The Boeing Company Thrust reverser sleeve lock
JP2003108365A (ja) 2001-09-28 2003-04-11 Sanyo Electric Co Ltd 乱数発生回路
US7149764B2 (en) * 2002-11-21 2006-12-12 Ip-First, Llc Random number generator bit string filter
US6871206B2 (en) * 2001-11-20 2005-03-22 Ip-First, Llc Continuous multi-buffering random number generator
US20060064448A1 (en) 2001-11-20 2006-03-23 Ip-First, Llc. Continuous multi-buffering random number generator
US7136991B2 (en) * 2001-11-20 2006-11-14 Henry G Glenn Microprocessor including random number generator supporting operating system-independent multitasking operation
US7219112B2 (en) * 2001-11-20 2007-05-15 Ip-First, Llc Microprocessor with instruction translator for translating an instruction for storing random data bytes
US6886023B2 (en) 2002-01-14 2005-04-26 Ip-First, Llc Apparatus for generating random numbers
US6707345B2 (en) 2002-01-14 2004-03-16 Ip-First, Llc Oscillator frequency variation mechanism
US6512405B1 (en) 2002-01-14 2003-01-28 Ip-First Llc Oscillator bias variation mechanism
US6947960B2 (en) * 2002-02-21 2005-09-20 Koninklijke Philips Electronics N.V. Randomness test utilizing auto-correlation
US20030158876A1 (en) * 2002-02-21 2003-08-21 Koninklijke Philips Electronics N.V. On-line randomness test through overlapping word counts
JP2003296410A (ja) 2002-04-05 2003-10-17 Hitachi Ltd 提供サービス評価方法およびシステム
US7788479B2 (en) * 2002-07-25 2010-08-31 International Business Machines Corporation Apparatus, system and method of ensuring that only randomly-generated numbers that have passed a test are used for cryptographic purposes
US7822797B2 (en) * 2002-07-29 2010-10-26 Broadcom Corporation System and method for generating initial vectors
US7139785B2 (en) * 2003-02-11 2006-11-21 Ip-First, Llc Apparatus and method for reducing sequential bit correlation in a random number generator
US7302457B2 (en) 2003-11-12 2007-11-27 Hewlett-Packard Development Company, L.P. Method and apparatus for providing random bits

Also Published As

Publication number Publication date
DE60335927D1 (de) 2011-03-10
US7165084B2 (en) 2007-01-16
CN1503121A (zh) 2004-06-09
EP2068239B1 (de) 2011-01-26
US7174355B2 (en) 2007-02-06
US7219112B2 (en) 2007-05-15
US20030149863A1 (en) 2003-08-07
EP1422611A2 (de) 2004-05-26
US7334009B2 (en) 2008-02-19
EP2068239A1 (de) 2009-06-10
US20040096060A1 (en) 2004-05-20
US20060253688A1 (en) 2006-11-09
EP1422611A3 (de) 2004-10-27
US8296345B2 (en) 2012-10-23
TW200409016A (en) 2004-06-01
US7818358B2 (en) 2010-10-19
US20070078920A1 (en) 2007-04-05
DE60305129D1 (de) 2006-06-14
EP1422611B1 (de) 2006-05-10
US20070118582A1 (en) 2007-05-24
US7849120B2 (en) 2010-12-07
US20040098429A1 (en) 2004-05-20
US20070118581A1 (en) 2007-05-24
CN1236380C (zh) 2006-01-11
TWI270004B (en) 2007-01-01

Similar Documents

Publication Publication Date Title
DE60305129T2 (de) Mikroprozessor mit Pseudozufallszahlengenerator und Befehl zur Speicherung von Zufallsdaten
DE60306306T2 (de) Kontinuierliche Mehrfachpufferung in einem Zufallszahlengenerator
DE60306478T2 (de) Bitfolgenfilter eines Zufallszahlengenerators
DE60304971T2 (de) Mikroprozessor mit Betriebssystem-unabhängigen Multitaskingbetrieb unterstützendem Zufallszahlengenerator
DE60309282T2 (de) Vorrichtung und Verfahren zur Reduzierung von Korrelation zwischen sequentiellen bits in einem Zufallszahlengenerator
DE112013001941T9 (de) Eingeschränkte Anweisungen in Transaktionsgebundener Ausführung
DE60307780T2 (de) Zufallszahlengenerator mit auswählbaren dualen Zufallsbitfolgemaschinen
DE112004002259B4 (de) Zugriff auf private Daten zum Status einer datenverarbeitenden Maschine von einem öffentlich zugänglichen Speicher
DE112013003079T5 (de) Anweisungen für Transaktionsbeginn/-ende
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE112013002040T5 (de) Transaktionsabbruchverarbeitung
DE112014000845T5 (de) Anweisung zum Ausführen einer Seed-Operation für eine pseudozufällige Zahl
DE112018004364B4 (de) Vereinfachung einer verarbeitung in einer datenverarbeitungsumgebung durch gruppierung eines konfigurationsstatusregisters auf grundlage von funktionaler affinität
DE112016004359T5 (de) Systeme, Verfahren und Vorrichtungen für eine Dekompression unter Verwendung von Hardware und Software
DE112012006946T5 (de) Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung
CN100468316C (zh) 自我测试结果决定可用性随机数产生器的微处理器及方法
DE202013103358U1 (de) Selektive Einschätzung der Schädlichkeit von im Adressraum eines vertrauenswürdigen Prozesses ausgeführtem Software-Code
DE102013210160A1 (de) Erleichtern der Ausführung einer Transaktion nach wiederholten Abbrüchen der Transaktion
DE4405845C2 (de) Verfahren zum Umsetzen einer virtuellen Speicheradresse eines virtuellen Speichers in eine Realadresse eines Realspeichers
DE112004002877T5 (de) TLB-korrelierter Verzweigungsvorhersager und Verfahren zu seiner Verwendung
DE102013210839A1 (de) Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion
EP3146520A1 (de) Programmierbares logikbauelement, schlüsselbildungsschaltung und verfahren zur bereitstellung einer sicherheitsinformation

Legal Events

Date Code Title Description
8364 No opposition during term of opposition