-
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.
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:
-
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.