-
TECHNISCHES
GEBIET
-
Die vorliegende Erfindung betrifft
generell das Gebiet elektronischer digitaler Computer und insbesondere
ein Computersystem, bei dem ein Boot-Code in einem Sequentiellzugriffs-Speicher
gespeichert ist.
-
TECHNISCHER
HINTERGRUND DER ERFINDUNG
-
In US-A-5 951 685 ist ein Computersystem
mit einem Prozessor und einem programmierbaren Seriellzugriffs-Festwertspeicher
(PROM) beschrieben, der direkt mit einem Speicherkontrollen gekoppelt
ist. Beim Einschalten stoppt der Speicherkontrollen den Prozessor
und sendet einen Ladebefehl zu dem seriellen PROM. Der selbstkonfigurierende
Speicherkontrollen liest sequentiell den BIOS-Code aus dem Seriellzugriffs-PROM
aus und lädt
den gesamten Inhalt des seriellen PROM während des Einschaltens und
vor dem Betrieb der CPU und kopiert ihn in einen Teil des Basis-DRAM-Speichers.
Wenn der gesamte BIOS-Code übertragen
ist, wird der Prozessor freigegeben, um den Prozessor-Wartezustand zu beenden.
-
Ein herkömmliches digitales Computersystem
weist einen nicht flüchtigen
Festwertspeicher (ROM) auf, der Boot-Code-Befehle enthält. Dieser
Boot-Programmcode wird zum Aufbauen der untergeordneten Hardware-Funktionen
des System verwendet, bevor das Betriebssystem oder die Anwendungsprogramme
die Steuerung des Systems erhalten.
-
Die zentrale Verarbeitungseinheit
(CPU) des Systems, die typischerweise ein Mikrokontrollen oder ein Mikroprozessor
ist, ist zum Springen auf eine vorbe stimmte Speicheradresse in dem
ROM und Beginnen der Ausführung
des Boot-Codes bei Initialisierung (einschließlich Einschaltung oder Rücksetzung)
des Systems vorgesehen. Der Boot-Code bewirkt das Laden oder Ausführen eines
Betriebssystem oder Hochfahr-Anwendungsprogramms.
-
Ein einen Boot-Code aufweisender
ROM ist typischerweise ein Direktzugriffsspeicher, bei dem direkt und
unabhängig
auf einen Befehl oder auf Daten bei einer beliebigen Adresse zugegriffen
werden kann. Dies unterstützt
das Verzweigungsverhalten der meisten Programme, bei denen ein einer
Verzweigung folgender Befehl von einer beliebigen Stelle in dem
Speicher gelesen werden kann. Diese Speicher sind ferner zum Lesen
unmittelbar nach Energiezufuhr bereit.
-
Es sind Sequentiellzugriffs-Speicher
entwickelt worden, die gegenüber
Direktzugriffsspeichern Vorteile und Nachteile bieten. Bei einem
Sequentiellzugriffs-Speicher
kann auf einzelne Adressen nicht direkt zugegriffen werden. Der
Speicher ist in Form von Seiten mit beispielsweise jeweils 512 Bytes
organisiert, und es ist erforderlich, eine ganze Seite oder eine
halbe Seite zu lesen, um den an einer bestimmten Adresse auf der Seite
gespeicherten Code zu erhalten.
-
Ein Sequentiellzugriffs-Speicher,
der in vorteilhafter Weise zum Durchführen der vorliegenden Erfindung
verwendet werden kann, ist der Am30LV0064D UltraNANDTM von
Advanced Micro Devices, Inc. (AMD), Sunnyvale, CA, USA. Dieser Speicher
ist eine auf der NAND-Architektur basierende Flash-ROM-Vorrichtung.
-
Im Vergleich zu nicht flüchtigen
Sequentiellzugriffs-Speichern benötigen ROMs mehr physische Anschlussstifte
und Verbindungen, hauptsächlich
für Adressenleitungen,
kosten bei der gleichen Bitdichte beträchtlich mehr und sind nicht
in so großer
Dichte verfügbar
wie Sequentiellzugriffs-Speicher.
-
Sequentiellzugriffs-Speicher erfordern
andererseits generell das Schreiben einer Befehlssequenz in die
Vorrichtung zum Auswählen
und Lesbarmachen eines Informationssatzes und sind somit nicht zum
Lesen unmittelbar nach Energiezufuhr bereit. Sie können nur
Informationen von sequentiellen Stellen in dem Speicher lesen, bis
eine neue Befehlssequenz geschrieben ist und unterstützen somit
nur eine lineare Programmausführung.
-
Bei Computersystemen, bei denen die
höhere
Dichte und die niedrigeren Kosten, die von dem Sequentiellspeicher
geboten werden, gewünscht
werden, war es bisher erforderlich, auch einen nicht flüchtigen Direktzugriffspeicher
zumindest zum Unterstützen
der anfänglichen
Programmausführung,
das auch als Booten des Systems bekannt ist, vorzusehen. Die anfängliche
Programmausführung
muss in dem nicht flüchtigen ROM
erfolgen, und zwar zumindest bis der Sequentiellzugriffs-Speicher
für das
Lesen aufgebaut ist und in dem Sequentiellzugriffs-Speicher enthaltene
Programme zu Ausführungszwecken
zu einem flüchtigen
Direktzugriffsspeicher (RAM) übertragen
werden können.
-
Wie oben beschrieben, ist ein Sequentiellzugriffs-Speicher
kostengünstiger
und weist eine höher
Speicherdichte auf als ein Direktzugriffsspeicher. Bei einem System,
bei dem ein Sequentiellzugriffs-Speicher der bevorzugte Speichertyp
ist, ist es wünschenswert,
dass kein separater nicht flüchtiger
Direktzugriffsspeicher zum Unterstützen der anfänglichen
Programmausführung
erforderlich ist, um die Kosten und die Größe des Systems zu reduzieren.
Es ist jedoch in der Vergangenheit nicht gelungen, diese Funktionalität zu bieten.
-
BESCHREIBUNG
DER ERFINDUNG
-
Angesichts des oben Gesagten stellt
die vorliegende Erfindung ein Computersystem bereit, bei dem die
anfängliche
Programmausführung
nur mit einem Sequentiellzugriffs-Speicher durchgeführt wird,
so dass kein separater nicht flüchtiger
Direktzugriffsspeicher erforderlich ist.
-
Dies wird mit einem erfindungsgemäßen Computersystem
realisiert, das einen Prozessor, einen Sequentiellzugriffs-Speicher
mit einem darin gespeicherten Boot-Programm und einen Boot-Lader
aufweist. Der Boot-Lader weist eine Zustandsmaschine auf, die in
Reaktion auf das Initialisieren des Computersystems den Sequentiellzugriffs-Speicher
derart steuert, dass dieser die erste Seite des Sequentiellspeichers,
die einen ersten Teil des Boot-Programms enthält, ausliest. Der erste Teil
des Boot-Codes wird unter der Maßgabe erstellt, dass der Sequentiellspeicher
nur sequentielle Wörter
des Speichers an den Prozessor liefern kann. Der erste Teil des
Boot-Codes befiehlt dem Prozessor, einen zweiten Teil des Boot-Codes
in einen flüchtigen
RAM zu kopieren. Wenn der zweite Teil des Boot-Codes in den RAM
kopiert ist, führt
der erste Teil des Boot-Codes einen Verzweigungs- (Sprung-) Befehl
aus, mit den die Steuerung auf den zweiten Teils des Boot-Codes,
der sich in dem RAM befindet, übertragen
wird. Der zweite Teil des Boot-Codes ist dann in der Lage, die von
dem RAM gebotene Möglichkeit
des direkten Zugriffs wahrzunehmen, durch den eine normale Code-Ausführung ermöglicht wird,
einschließlich
Sprüngen
innerhalb des Boot-Codes in dem RAM. Der zweite Teil des Boot-Codes kann bewirken,
dass die entsprechenden Befehle an den Sequentiellspeicher gesandt
werden, um einen beliebigen anderen Code, der benötigt wird,
in den RAM zu übertragen.
-
Diese und weitere Merkmale und Vorteile
der vorliegenden Erfindung werden für Fachleute auf dem Sachgebiet
anhand der folgenden detaillierten Beschreibung in Zusammenhang
mit den beiliegenden Zeichnungen offensichtlich, in denen gleiche
Bezugszeichen gleiche Teile bezeichnen.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
1 zeigt
ein vereinfachtes Blockschaltbild eines erfindungsgemäßen Computersystems;
-
2 zeigt
ein Schaltschema eines Boot-Laders und Sequentiellzugriffs-Speichers des in 1 gezeigten Computersystems;
-
3 zeigt
ein Anschlussstiftbelegungsplan des Boot-Laders;
-
4 zeigt
ein Ablaufdiagramm des erfindungsgemäßen Verfahrens;
-
5 zeigt
ein Zustandsdiagramm einer Zustandsmaschine des Boot-Laders;
-
6 zeigt
ein Zeitdiagramm des erfindungsgemäßen Systems;
-
7 zeigt
ein detaillierteres Schaltschema des Boot-Laders und des Sequentiellzugriffsspeichers; und
-
8 zeigt
ein vereinfachtes Blockschaltbild eines Boot-Laders und Sequentiellzugriffsspeichers,
die in einer einzelnen integrierten Schaltung implementiert sind.
-
ART DER AUSFÜHRUNG DER
ERFINDUNG
-
1 zeigt
ein endungsgemäßes Computersystem 10,
das ein Motherboard 12 aufweist. Ein Prozessor oder eine
zentrale Verarbeitungseinheit (CPU) 14, auch als Mikrokontrollen
oder Mikroprozessor bekannt, ein flüchtiger Direktzugriffsspeicher 16 und
eine Energieversorgung 18 sind auf herkömmliche Weise auf dem Motherboard 12 vorgesehen.
Eine Eingangs-/Ausgangs- (I/O-) Einheit 20 sorgt für eine Verbindung
zwischen dem Motherboard 12 und typischen I/O-Vorrichtungen,
wie z. B. einem Anzeigemonitor 22, einer Tastatur 24 und
einem oder mehreren Diskettenlaufwerken 26. Diese Komponenten sind über Signalbusse,
Energieleitungen, Anschlussteile etc., die kollektiv mit 28 bezeichnet
sind, miteinander verbunden.
-
Erfindungsgemäß weist das System 10 ferner
einen Power-Good- oder Rücksetz-Signalgenerator 30 auf,
der ein PWRGOOD- (oder RESET-) Signal erzeugt, nachdem die Energieversorgung 18 eingeschaltet worden
ist und die Betriebsspannungen ihre korrekten Pegel erreicht haben.
Das System 10 weist ferner einen Sequentiellzugriffs-Speicher 32 und
einen Boot-Lader 34 auf.
-
Der Speicher 32 ist vorzugsweise
ein UltraNANDTM-Speicher von Advanced Micro
Devices (AMD), Sunnyvale, CA. Der in diesem Beispiel dargestellte
Speicher 32 ist eine auf der NAND-Architektur basierende elektrisch
löschbare
programmierbare Flash-Festwertsspeicher- (EEPROM-) Vorrichtung Am30LV
0064D UltraNANDTM und ist in der Lage, eine Datenmenge von 64 Megabits
zu speichern. Die Daten werden auf 16.384 Speicherseiten gespeichert,
von denen jede 512 Bytes an regulären Daten und 16 Bytes an Ersatzdaten
enthält.
Erfindungsgemäß speichert
der Speicher 32 Boot-Code-Befehle, und zwar beginnend mit
der niedrigsten Speicherseite, die anfangs beim Initialisieren (Einschalten)
des Computersystems 10 ausgeführt werden. Ein ist kein nicht
flüchtiger
RAM zu diesem Zweck vorgesehen.
-
Der Boot-Lader 34 und der
Speicher 32 sind in 2 dargestellt,
und ein Anschlussstiftbelegungsplan des Boot-Laders 34 ist
in 3 gezeigt. Der Boot-Lader 34 ist
vorzugsweise eine programmierbare Logikvorrichtung (PLD) Am-PALLV16V8-105C von
Vantis Corporation, Sunnyvale, CA. Konfiguration und Operation des
Speichers 32 und des Boot-Laders 34 werden nachstehend
detailliert beschrieben.
-
4 zeigt
ein Ablaufdiagramm eines erfindungsgemäßen Bootstrap-Ladeverfahrens,
das von dem System 10 durchgeführt wird. Bei Initialisierung
sperrt der Boot-Lader 34 den Prozessor 14 und
verhindert dadurch den Versuch sei tens des Prozessors, Befehle auszuführen. Der
Boot-Lader 34 erfasst den Status des PWRGOOD-Signals und
wird freigegeben, wenn das PWRGOOD-Signal anzeigt, dass die Energieversorgung 18 die
korrekten Betriebsspannungen erzeugt.
-
Der Boot-Lader 34 weist
eine interne Zustandmaschine auf, die von der programmierten Logik
implementiert worden ist. Der Speicher 32 fordert an, dass
Aufbaubefehle in den Speicher geschrieben werden, bevor er in der
Lage ist, Daten zu lesen. Die Zustandsmaschine in dem Boot-Lader 34 erzeugt
diese Aufbaubefehle und schreibt diese in den Speicher 32.
Zuerst schreibt die Einheit 34 einen Lesebefehl in einen
Befehls-Latchspeicher des Speichers 32. Der Boot-Lader 34 schreibt
dann eine Adresse in den Adressen-Latchspeicher des Speichers 32.
-
Bei diesem Beispiel wird ein Lückenlos-Lesebefehl
verwendet. Der Lückenlos-Lesebefehl ist ein übergeordneter
Befehl des UltraNAND-Speichers 32, der es diesem ermöglicht,
mehrere Speicherseiten sequentiell auszugeben. Ein normaler Lesebefehl
steht ebenfalls zu Verfügung,
der immer eine einzelne Seite liest und eine Latenzzeit von 7 Ts
hat, in der jede Seite in ein 528-Bit-Ausgangsdatenregister geladen
wird. Der Lückelos-Lesebefehl
eliminiert die zwischen den Seiten auftretende Latenzzeit, und es
gibt nur eine einzige Latenzzeit von 7 Ts beim Laden der ersten
Seite. Dies ermöglicht
es dem Boot-Code, mehrere Speicherseiten zu überbrücken, ohne dass weitere Lesebefehle
an den Speicher ausgegeben werden müssen. Die Adresse, die der
Boot-Lader 34 in den Adressen-Latchspeicher des Speichers 32 lädt, ist
die Adresse der ersten Seite in dem Speicher 32. Der normale
Lesebefehl kann jedoch innerhalb des Umfangs der Erfindung alternativ
verwendet werden.
-
Beim nächsten Schritt liest der UltraNAND-Speicher 32 die
erste Seite des Boot-Codes aus seiner internen Struktur in sein
Datenregister und zeigt die Beendigung der Seitenleseoperation durch
Setzen seines Ready/Busy- (RY/ BY#-) Signals in den Bereit-Zustand
an. Die Zustandsmaschine des Boot-La ders 34 gibt dann den
Prozessor 14 frei, damit dieser durch Deaktivieren von
INIT# die Befehlsausführung
fortsetzt. Eine herkömmliche
Zustandsmaschine oder ein fester Mikrocode ist in dem Prozessor 14 vorgesehen,
der bewirkt, dass der Prozessor zu einer vorbestimmten Adresse springt,
an der der Prozessor den Boot-Code in dem System zu finden glaubt.
Das System dekodiert diese Adresse, um den Speicher 32 auszuwählen. Der
Prozessor beginnt mit dem Lesen und Ausführen der Boot-Code-Befehle
von der Speicherseite in dem Ausgangsdatenregister des Speichers 32.
Es sei darauf hingewiesen, dass der Prozessor sämtliche von dem Speicher als Boot-Code-Befehle
gelieferten Daten akzeptiert. Die von dem Prozessor präsentierte
Boot-Code-Adresse
wird von dem Speicher ignoriert. Das heißt, dass die gleiche erste
Speicherseite für
einen beliebigen Prozessor verwendet wird, und zwar unabhängig davon,
ob der Prozessor zum Auswählen
des Boot-Codes eine niederwertige oder eine hochwertige Adresse
benutzt. Der Boot-Code muss jedoch die von dem Prozessor zum Auswählen des
Boot-Codes verwendete Adresse kennen. Wenn ein Prozessor eine hohe
Speicheradresse für
die ersten Wörter
des Boot-Codes verwendet, muss der Code einen Sprungbefehl enthalten,
der die Prozessoradresse in eine niedrigere Adresse ändert. Diese
Adresse muss noch innerhalb des Adressenbereichs liegen, der von
dem System zum Auswählen
des Speichers 32 dekodiert wird. Ohne den Sprungbefehl
kann ein solcher Prozessor seine Adresse bis zu dem Punkt inkrementieren,
an dem er zyklisch zu einer niedrigen Speicheradresse gelangt, die
den Boot-Speicher 32 nicht mehr auswählt. Die verwendete tatsächliche
Adresse ist nicht kritisch, da die UltraNAND-Vorrichtung einfach
einen sequentiellen Strom von Befehlen liefert, der von dem Adressenbus
unabhängig
ist. Die Sprung-Zieladresse muss jedoch ausreichend weit unterhalb
des oberen Teils des Speichers liegen, um die Adresse in dem Adressenplatz
des Speichers 32 zu halten, bis dieser erste Teil des Boot-Codes
auf den zweiten Teil des Boot-Codes, der in den RAM kopiert worden
ist, springt.
-
Der Boot-Code muss ferner wissen,
wie der Prozessor Befehle abruft. Viele Prozessoren weisen eine Befehlsabruf-Zustandsmaschine
auf, die vor der tat sächlichen
Verwendung von Befehlen durch die Befehlsausführungs-Zustandsmaschine des
Prozessors Befehle in einen Puffer liest. Dies wird häufig als
Vorabrufen von Befehlen bezeichnet. Wenn ein Sprungbefehl ausgeführt wird,
werden Vorabrufbefehle ignoriert. Befehle, die vorabgerufen und
in den Vorabrufpuffer platziert worden sind, werden nicht ausgeführt, wenn
der Sprungbefehl die Adresse ändert,
von der aus der nächste
Befehl auszuführen
ist. Dies ist wichtig, da der Sequentiellzugriffs-Speicher die Prozessoradresse
ignoriert. Der Sequentiellzugriffs-Speicher liefert jedes Mal nach dem
Lesen des Speichers einfach das nächste Wort von dem Speicher.
Da eine Befehlsvorabruf-Zustandsmaschine mehrere Wörter von
dem Speicher übernehmen
kann, bevor ein Sprungbefehl ausgeführt wird und den Vorabrufpuffer
löscht,
muss der Boot-Code wissen, wie viele Wörter des Speichers von dem
Sprungbefehl gelöscht
werden können.
Der nächste
Befehl, der nach dem Sprung ausgeführt werden muss, muss nicht
im Bereich der dem Sprungbefehl folgenden Stellen liegen, welcher
aus dem Vorabrufpuffer gelöscht
werden kann. Wenn die genaue Anzahl von Wörtern, die übersprungen werden müssen, nicht
vorhergesagt werden kann, muss der Code genügend dem Sprungbefehl folgende
Nulloperations- (NOP-) Befehle enthalten, um sicherzustellen, dass
der dem Sprung folgende Befehl nicht gelöscht werden kann. Ein beliebiger
Teil der dem Sprung folgenden NOP-Befehle kann sicher ausgeführt werden,
bis der nächste
gültige
Befehl den Code erreicht hat. Die genaue Anzahl von abgerufenen
und später
aus dem Vorabrufpuffer gelöschten
NOP-Befehlen ist nicht wichtig oder wirkt sich nicht störend auf
die restliche Befehlausführung
aus.
-
Nach der Einstellung der Befehlsabrufadressen,
wie oben beschrieben, besteht die nächste Aufgabe in dem Kopieren
des zweiten Teils des Boot-Codes in den RAM. Die nächsten Befehle
des Boot-Codes bewirken vorzugsweise eine "Zeichenfolge-Kopier-" Operation, die dazu führt, dass
eine sequentielle Gruppe von unverzüglich folgenden Wörtern in
dem Speicher 32 in einen flüchtigen Execute-in-Place- (XIP-)
Direktzugriffsspeicher kopiert wird. Bei dieser Gruppe von Wörtern handelt
es sich um den zweiten Teil des Boot-Codes, der in den ersten Teil
des Boot-Codes eingebettet ist. Der XIP-Speicher kann der RAM 16 oder
alternativ ein Cachespeicher oder ein anderer Speicher in dem Prozessor 14 sein.
-
Da einige Prozessoren einen Befehlsvorabruf
durchführen,
kann es auch hier erforderlich sein, NOP-Befehle zwischen dem Zeichenfolge-Lesebefehl
und dem Beginn des zweiten Teils des Boot-Codes einzusetzen. Dadurch
soll sichergestellt werden, dass kein Bereich des zweiten Teils
des Boot-Codes in den Vorabrufpuffer übernommen wird, bevor der Zeichenfolge-Kopiervorgang
mit dem Lesen von Wörtern
aus dem Speicher beginnt. Es ist vielleicht nicht möglich, die
beginnende Grenze zwischen Wörtern,
die sich bereits in dem Vorabrufspeicher befinden, und Wörtern, die
zuerst von dem Zeichenfolge-Kopierbefehl kopiert werden, vorherzusagen.
Daher müssen
dem Ende der zu kopierenden Zeichenfolge zusätzliche NOP-Befehle folgen und
muss durch die Länge
der Kopie sichergestellt sein, dass der gesamte zweite Teil des
Boot-Codes kopiert wird.
Die kopierte Zeichenfolge kann somit einige am Anfang oder am Ende
stehende NOP-Befehle enthalten. Die NOP-Befehle beeinflussen nicht
die von dem ersten oder dem zweiten Teil des Boot-Codes ausgeführten Operationen.
Sie machen jedoch die Grenze zwischen den ausgeführten Befehlen und der kopierten
Zeichenfolge flexibel.
-
Da die genaue Ausrichtung des Codes
innerhalb der Zeichenfolge-Kopie möglicherweise nicht bekannt
ist, ist es erforderlich, relative Verzweigungen innerhalb desjenigen
Teils des Bootstrap-Programms zu verwenden, der in den XIP-Speicher
geladen ist.
-
Es ist ferner möglich, eine Folge von Sofortbewegungs-Befehlen
anzuwenden, um den zweiten Teil des Boot-Codes in den XIP-Speicher
einzusetzen. Dies führt
zu einer besseren Steuerung der Code-Ausrichtung. Dadurch wird jedoch
der Boot-Code größer und
schwerer zu erzeugen, da der zweite Teil des Boot-Codes von einem Befehlsstrom
in einen Strom von Sofortbewegungs-Befehlen konvertiert werden muss,
wobei es sich bei den Daten, die bewegt werden, um das Bild des
zweiten Teils des Boot-Codes handelt.
-
Nach dem Speichern des zweiten Teils
des Boot-Codes in dem XIP-Speicher bewirkt der letzte Befehl des
ersten Teils des Boot-Codes, der von dem Speicher 32 ausgeführt wird,
dass der Prozessor 14 zu einer Adresse in dem XIP-Speicher springt.
Der Prozessor beginnt dann mit der Ausführung des zweiten Teils des Boot-Codes,
der aus dem Speicher 32 kopiert worden ist. Dabei handelt
es sich um einen Bootstrap-Prozess, der in mehreren Stufen fortgesetzt
werden kann. Die erste Stufe ist der Boot-Code, der von dem Sequentiellzugriffs-Speicher 32 ausgeführt wird.
Die nächste
und jede folgende Stufe betrifft zusätzliche Blöcke des Initialisierungs-Codes,
die von dem Speicher 32 in den XIP-Speicher kopiert werden
und auf die dann zu Ausführungszwecken
gesprungen wird. Obwohl dies nicht ausdrücklich dargestellt ist, werden
bei dem Bootstrap-Prozess typischerweise ein Betriebssystem und
möglicherweise
ein oder mehr Anwendungsprogramme von einem Festplattenlaufwerk
geladen und eingekoppelt.
-
Vorzugsweise können die Zustandsmaschine und
eine dieser zugeordnete Funktionalität des Boot-Laders 34 zusammen
mit dem Sequentiellzugriffs-Speicher
in eine einzelne integrierte Schaltung 40 implementiert
werden, wie unter 32' und 34' in 8 gezeigt. Dies kann beispielsweise
durch Hinzufügen
einer adäquaten
Logikschaltungsanordnung zu dem Sequentiellzugriffs-Speicher erfolgen,
um die erforderliche Boot-Lade-Funktion auszuführen. Diese Ausführungsform
ist einfacher und erfordert einen geringeren Umfang an Modifikation
der Vorrichtung als das Integrieren eines kleinen Bereichs des Direktzugriffsspeichers
in den Sequentiellspeicher. Der Grund dafür ist, dass die Zustandsmaschine
keine zusätzlichen
Prozessschritte oder zusätzliche
Adressenanschlussstifte benötigt.
Der UltraNAND- oder ein anderer Sequentiellzugriffs-Speicher kann mit
anderen Speichern des im wesentlichen gleichen Typs anschlussstiftkompatibel
bleiben.
-
Die nachfolgende Beschreibung erläutert detailliert
die Funktionalität
der vorliegenden Erfindung.
-
ÜBERBLICK
-
Die UltraNAND-Produktlinie ist von
Advanced Micro Devices, Inc. (AMD) entwickelt worden, um den Bedarf
an nicht flüchtigen
Speichern mit hoher Dichte zu befriedigen. Die angestrebten Anwendungen
umfassen Code- und Datenspeicherung in eingebetteten oder herausnehmbaren
Mediensystemen. Die folgende detaillierte Beschreibung präsentiert
eine Boot-Lade-PLD für
einen UltraNAND-Speicher.
-
Auf Mikrokontrollern basierende Systeme
weisen generell programmierbare Eingangs-/Ausgangs- (PIO-) Anschlusstifte
auf, die zum direkten Liefern von UltraNAND-Steuersignalen verwendet
werden können. Wenn
diese PIO-Anschlussstifte nicht zur Verfügung stehen, kann eine zusätzliche
Interface-Logik für
eine geeignete Verbindung zwischen dem Prozessor, dem Boot-Lader
und dem Sequentiellspeicher erforderlich sein. Die Boot-Lade-PLD
kann als einzelner AmPALLV16V8-10SC-Chip ausgeführt sein und ist zum Unterstützen von
Code-Speicheranwendungen vorgesehen, bei denen ein direktes Booten
von der UltraNAND-Vorrichtung nach dem Einschalten erforderlich
ist.
-
MIT DER CODE-SPEICHERUNG
IN ZUSAMMENHANG STEHENDE VORTEILE VON ULTRANAND
-
UltraNAND ist derart ausgeführt, dass
es vollständig
mit der Hardware und der Software von bereits auf dem Markt erhältlichen
auf der NAND-Architektur basierenden Flash-Speichern kompatibel
ist. UltraNAND ist jedoch als verbessertes Produkt mit einer Lebensdauer
von 100.000 Programmier-/Löschzyklen
ausgeführt, ohne
dass Fehlerkorrekturschaltungen (ECC) erforderlich sind.
-
UltraNAND ist ferner mit 100 % guten
Blöcken
verfügbar,
wodurch das Erfordernis des Mapping schlechter Blöcke eliminiert
wird.
-
Durch die niedrigen Kosten pro Bit
(im Gegensatz zum NOR-Flash), die Lebensdauer mit einer größeren Anzahl
von Programmier-/Löschzyklen
ohne ECC und die Verfügbarkeit
von 100 % guten Vorrichtungen ist UltraNAND in idealer Weise für Code-Speicheranwendungen
geeignet. Dies gilt insbesondere, wenn ein System-Code in dem UItraNAND-Flash-Speicher
gespeichert und zwecks schnellen Direktzugriffs oder schneller Ausführung auf
eine Hochgeschwindigkeits-Speichereinrichtung, wie z. B. einen Synchron-DRAM, übertragen
wird oder eine Schattenabbildung auf diese erfolgt.
-
BOOT-LADER-PLD
-
Für
Code-Speicheranwendungen, bei denen ein direktes Booten von Ultra-NAND erforderlich
ist, ist ein Boot-Lader eines bestimmten Typs für die Initialisierung von UltraNAND
erforderlich. Der Grund dafür
ist, dass nach dem Einschalten die UltraNAND-Datenregister keine
gültigen
Informationen enthalten. Die hier beschriebene Boot-Lade-PLD 34 sperrt
den Prozessor gegen den Bus und liefert die zum Initialisieren von
bis zu zwei UltraNAND-Flash-Vorrichtungen benötigten Steuersignalsequenzen.
-
Der Initialisierungsprozess gibt
den übergeordneten
AMD-Lückenlos-Lesebefehl
(02h) zum Vorladen der ersten Flash-Speicherseite, die den Boot-Code
enthält,
in die internen UltraNAND-Datenregister an jede UltraNAND-Vorrichtung
aus. Dies ermöglicht
es dem Mikrokontrollen oder Prozessor 14 des Systems, nach dem
Einschalten den Boot-Code des Sequentiellsystems von dem Speicher 32 zu
lesen und auszuführen.
Bei Code-Speicheranwendungen kann der Mikrokontrollen des Systems
aus der UltraNAND-Vorrichtung 32 booten und überträgt dann
den restlichen in UltraNAND gespeicherten Code zur Aus führung des
Codes an den RAM. Da der Code vom RAM aus ausgeführt werden kann, wird dieser
auch als Execute-in-Place- (XIP-) Speicher bezeichnet.
-
ULTRANAND-INTERFACE-ERFORDERNISSE
HINSICHTLICH BOOT-ZUGANGS
-
Der UltraNAND-Speicher 32 verwendet
einen gemultiplexten Adressen-/Datenbus. Sämtliche Befehls-, Adressen-
und Dateninformationen werden über
I/O[0..7] (den Achtbit-I/O-Port) zu und von der Vorrichtung geführt. Steuersignale
werden für
CE# (Chip Enable), CLE (Command Latch Enable), ALE (Address Latch
Enable), WE# (Write Enable), SE# (Spare Area Enable) und WP# (Write
Protect) in der Vorrichtung erzeugt. Es gibt ferner einen RY/BY#q
(Ready/Busy-) Anschlussstift eines offenen Drains, der anzeigt,
wann die Vorrichtung mit einer internen Operation beschäftigt ist.
-
Bei Systemanwendungen unter Verwendung
von UltraNAND müssen
die korrekten Steuersignale für die
Vorrichtung erzeugt werden, die in vielen Fällen nicht von anderen Systemeinrichtungen
verwendet werden. Die hier beschriebene Boot-Lade-PLD 34 erzeugt
sämtliche
eindeutigen Signale, die von dem UltraNAND-Speicher 32 zum
Initialisieren der Vorrichtung benötigt werden.
-
Zum Übertragen einer in der UltraNAND-Vorrichtung
enthaltenen Seite mit Informationen an die internen Datenregister
muss eine Befehls- und Adressensequenz ausgeführt werden. Im Anschluss an
die Befehls- und Adresseneingabe überträgt die UltraNAND-Vorrichtung
Informationen innerhalb einer Lese-Latenzzeit von 7 Ts (im ungünstigsten
Fall), in der die Vorrichtung aktiv zu sein scheint, von der entsprechenden
Flash-Seite zu den Datenregistern. Wenn die nicht flüchtige Seite
mit Informationen erfolgreich zu den Datenregistern übertragen
worden ist, geht UltraNAND in den Bereit-Zustand und kann das System
sequentiell gültige
Informationen mit einer maximalen Rate von 50 nS pro Byte aus der
Flash-Vorrichtung 32 lesen.
-
BESCHREIBUNG DES SYSTEM-INTERFACE
-
Die Boot-Lade-PLD 34 unterstützt bei
diesem Beispiel eine einzelne Ultra-NAND-Vorrichtung 32. Die Boot-Lade-PLD
wird temporär
zur Quelle der normalen Systemsteuersignale, die während des
Boot-Lade-Prozesses von dem UltraNAND-Flash benötigt werden. Die Boot-Lade-PLD
ist dann in der Lage, die für
die Initialisierung von UltraNAND benötigte Signalsequenz zu erzeugen.
-
Der Power-Good-Signalgenerator 30 liefert
ein PWRGOOD-Eingangssignal an die Boot-Lade-PLD 34, die
im Low-Zustand bleibt, bis Vcc gültig ist.
Wenn PWRGOOD von einem ungültigen
(Low-) zu einem gültigen
(High-) Zustand übergeht,
detektiert die Boot-Lade-PLD 34 diesen Übergang und initialisiert die
UltraNAND-Vorrichtung 32.
-
Bei einigen Anwendungen, bei denen
kein PWRGOOD-Signal zur Verfügung
steht, kann stattdessen ein System-RESET#-Signal verwendet werden.
Das von der Boot-Lade-PLD erzeugte INIT#- (Initialisierungs-) Signal
zeigt an, dass der Boot-Lader 34 mit der Initialisierung
der UltraNAND-Vorrichtung 32 beschäftigt ist. Das System 10 muss
das INIT#-Signal überwachen
und den System-Mikrokontrollen 14 gegen den Bus sperren,
bis INIT# ungültig
(high) wird. Wenn INIT# anzeigt, dass der UltraNAND-Boot-Prozess
abgeschlossen ist, kann das System 10 es dem Mikrokontrollen 14 ermöglichen,
Informationen von der UltraNAND-Vorrichtung zu lesen.
-
In vielen Fällen kann das INIT#-Signal
als Rücksetzsignal
für das
restliche System 10 verwendet werden. Das normale System-RESET#-Signal
geht nur zu dem Boot-Lader 34, und der Boot-Lader verwendet
das INIT#-Signal zum Halten des restlichen Systems 10 im
Rücksetzzustand,
bis die UltraNAND-Vorrichtung 32 ausgelesen werden kann.
-
Während
der Adressphase des Boot-Ladeprozesses werden Adressen-Bytes in
UltraNAND geschrieben, bis die Vorrichtung aktiv wird. Dies ermöglicht es
dem Boot-Lader 34, Vorrichtungen zu unterstützen, die drei
oder mehr Adressenimpulse benötigen.
Im Anschluss an den Boot-Lader-Initialisierungsprozess versetzt der
Boot-Lader WE#, CLE, ALE und I/O1 in drei Zustände und führt CEO# und CE1# von dem Systembus 28 zu
der (den) UltraNAND-Vorrichtung(en).
-
BESCHREIBUNG
DER BOOT-LADESIGNALE
-
Der UltraNAND-Boot-Lader 34 erzeugt
sämtliche
Signale, die zum Initialisieren von einem oder zwei UItraNAND-Vorrichtungen
mit einer Lückenlos-Lesebefehlssequenz
benötigt
werden. Eine einfache Zustandsmaschine in der PLD 34 steuert
INIT#, WE#, CLE, ALE und I/O1 zum Steuern der UltraNAND-Initialisierung. Zum
Starten der Boot-Lade-PLD muss das System SYSCLK (Systemtakt) und
PWRGOOD (Power-Good-Anzeige) erzeugen. Die Definition sämtlicher
dazugehöriger
Signale und der zum Erzeugen der Signale benötigten Quelle sind in der nachstehenden
Tabelle aufgeführt.
Ein Zeitdiagramm der Boot-Lader-Initialisierungssequenz ist in 6 gezeigt.
-
-
-
BOOT-LADE-PLD-BETRIEBSTHEORIE
-
In diesem Abschnitt werden die Konfiguration
und der Betrieb der Boot-Lade-PLD 34 beschrieben.
Die Boot-Lade-PLD 34 verwendet Flip-Flops für die Zustandsmaschine
und I_O1. Eine kombinatorische Logik wird zum Erzeugen sämtlicher
anderer Signale zum Steuern von bis zu zwei UltraNAND-Vorrichtungen 32 verwendet.
Die in diesem Abschnitt verwendeten Bezugszeichen für die Vorrichtungen
sind aus 7 ersichtlich,
das eine beispielhafte schematische Darstellung einer "typischen Boot-Lader-Anwendung
zur Unterstützung
zweier UltraNAND-Vorrichtungen" zeigt.
-
Ausgangssignalerzeugung
-
INIT# ist ein kombinatorisches Ausgangssignal,
das das System darüber
informiert, dass die Boot-Lade-PLD 34 gerade das UltraNAND
32-Array initialisiert. Während
INIT# aktiv ist, muss das System 10 die Systemsignale (wie
z. B. Adressenleitungen oder PIO-Anschlussstifte) in drei Zuständen halten,
welche bei Normalbetrieb des Systems zum Anregen der UltraNAND-CLE-,
-ALE-, WE#- und -I/O[0..7]-Signale verwendet werden. In vielen Fällen kann
das INIT#-Signal als Rücksetzsignal
für die
anderen Systemkomponenten ver wendet werden, da der Rücksetzzustand
die Prozessorausgänge
häufig
in drei Zuständen
hält.
-
Während
der INIT#-Periode treibt die PLD 34 die Befehls- und Adresseninformationen
auf den UltraNAND 32-Datenbus und steuert CLE, ALE und WE#, wie
für die
Initialisierung von UltraNAND erforderlich. In der Befehlsphase,
in der CLE aktiv ist, wird I_O1 zum Treiben eines Werts 02h auf
den UltraNAND 32-Datenbus verwendet, um den Lückenlos-Lesebefehl in UltraNAND 32 zu
schreiben. In der Adressenphase, in der CLE inaktiv und ALE aktiv
ist, wird ein Wert OOh auf den UltraNAND 32-Datenbus getrieben.
-
Dies ermöglicht es der Boot-Lade-PLD 34,
die Adresse für
Block 0, Seite 0, Byte O in die UltraNAND 32-Vorrichtung zu laden,
damit das System nach der Initialisierung aus dem ersten Byte lesen
kann. Während INIT#
aktiviert die PLD 34 die Ausgangschip-Freigaben unabhängig von
dem Zustand der Chip-Freigabe-Eingänge. Dies
ermöglicht
es der Boot-Lade-PLD 34, während der Operation des Boot-Laders
bis zu zwei UltraNAND 32-Vorrichtungen parallel zu initialisieren.
-
I_O1 ist ein in drei Zuständen registrierter
Ausgang, der zum Schreiben des Lückenlos-Lesebefehls (02h)
während
der Boot-Lade-PLD 34-Initialisierungsphase in die UltraNAND 32-Vorrichtungen
verwendet wird. Während
INIT# aktiv ist, muss das System den UltraNAND 32-Datenbus I/O[0..7]
in drei Zuständen
halten. Wenn der Pull-down-Registersatz R4 sämtliche anderen Datenbits im
Low-Zustand hält,
kann I_O1 in der Befehlsphase dann in den High-Zustand gehen, um
einen 02h-Operationscode in UltraNAND 32 zu schreiben. In
der Adressenphase wird I_O1 in den Low-Zustand getrieben, so dass
sämtliche
Adressenzyklen einen Wert OOh in die UltraNAND 32-Adressenregister
schreiben.
-
Die Chip-Freigaben werden während der
INIT#-Periode für
die Boot-Lader-Aktivität
in den Aktiv-Zustand gezwungen. Wenn INIT# in den inaktiven (High-) Zustand
geht, werden die Chip-Freigabe-Ausgänge von den Chip-Freigabe-Eingängen bestimmt.
ST [0..3] sind vier in drei Zuständen
registrierte Zustandsbits zum Definieren von bis zu sechzehn Zuständen der
Zustandsmaschine, von denen 9 Zustände tatsächlich verwendet werden. Dies
Bits werden in der Periode, in der INIT# aktiv ist, aktiv angeregt
und in drei Zustände
versetzt, wenn INIT# in den inaktiven Zustand geht.
-
Drei der Zustandsbits werden zum
Definieren von WE# (STO), CLE (ST1) und ALE (ST2) verwendet. Die
Zustandsmaschine in der Boot-Lade-PLD 34 ist eine typische
Mealy-Maschine, wobei die PLD-Ausgänge von den aktuellen Zustands-
und Eingangsbedingungen abhängig
sind. Die AmPALLV16V8-10SC-Vorrichung 34 wird
eingeschaltet, wenn sämtliche
registrierten Ausgängen
im High-Zustand sind. Daher definiert die Zustandsmaschine den IDLE-Zustand
als eine durchgehend mit Eins belegte Ausgangsbedingung.
-
Zustand 01 bis Zustand 09 sind
Gray-Code-Variationen zum Eliminieren von Rauschimpulsen in kombinatorischen
Ausgängen
und Verhindern von Wettlaufbedingungen aufgrund von asynchronen
Eingängen. Das
Ablaufdiagramm der Zustandsmaschine ist in 5 gezeigt.
-
ST0 wird wie WE# zum Schreiben von
Informationen während
des Initialisierens in UltraNAND 32-Flash verwendet. Das System
muss den System-WE#-Eingang
zu UltraNAND 32 während
der Initialisierungsperiode in drei Zuständen halten. Wenn die Initialisierung
abgeschlossen ist, versetzt die Boot-Lade-PLD 34 ihren WE#-Ausgang in
drei Zustände
und kann das System 10 WE# so anregen, wie es erforderlich
ist.
-
ST1 wird wie CLE verwendet, um das
Schreiben von Befehlen in UltraNAND-Flash 32 während der Initialisierung freizugeben.
Das System muss den System-CLE-Eingang zu UltraNAND 32 während der
Initialisierungsperiode in drei Zuständen halten. Wenn die Initialisierung
abgeschlossen ist, versetzt die Boot-Lade-PLD 34 ihren
CLE-Ausgang in drei Zustände
und kann das System 10 CLE dann so anregen, wie es erforderlich
ist.
-
ST2 wird wie ALE verwendet, um das
Schreiben von Adressen in UltraNAND-Flash 32 während der Initialisierung freizugeben.
Das System muss den System-ALE-Eingang zu UltraNAND 32 während der
Initialisierungsperiode in drei Zuständen halten. Wenn die Initialisierung
abgeschlossen ist, versetzt die Boot-Lade-PLD 34 ihren
ALE-Ausgang in drei Zustände
und kann das System 10 ALE dann so anregen, wie es erforderlich
ist.
-
Andere Signale
-
CE[O..1]# sind die beiden Chip-Freigabe-Eingangssignale,
die von dem System 10 erzeugt worden sind, um die UltraNAND
32-Vorrichtungen auszuwählen.
Während
des Initialisierungsprozesses werden die CE[0..1]#-Eingänge von
der Boot-Lade-PLD 34 ignoriert und OUTCE[0..1]# in den
Aktivzustand getrieben, um die verwendete UltraNAND 32-Vorrichtungen
auszuwählen.
Wenn die Initialisierung abgeschlossen ist, leitet die Boot-Lade-PLD 34 die
CE[0..1]#-Signale des Systems 10 einfach über die
OUTCE[0..1]#-Ausgänge
an die UltraNAND 32-Vorrichtungen weiter.
-
PWRGOOD ist ein von dem System erzeugtes
Signal, das anzeigt, wann die Boot-Lade-PLD 34 die UltraNAND
32-Flash-Vorrichtungen initialisieren sollte. PWRGOOD wird während des
Einschaltens im deaktivierten (Low-) Zustand gehalten, bis V« gültig ist.
Wenn Energie an die Boot-Lade-PLD 34 angelegt wird, geht die
Zustandsmaschine in den IDLE-Zustand, in dem sie bleibt, bis PWRGOOD
in den aktiven (High-) Zustand geht. Wenn ein Übergang vom Low- zum High-Zustand
von der Boot-Lade-PLD 34 auf PWRGOOD detektiert wird, geht
die PLD 34 zum Initialisieren des UltraNAND-Flash-Speichers 32 über.
-
Bei Systemen, bei denen kein PWRGOOD-Signal
zur Verfügung
steht, führt
das RESET#-Signal des Systems generell die gleiche Funktion aus.
Wenn RESET# in den aktiven (Low-) Zustand geht, um das System zurückzusetzen,
tritt die Boot-Lader-Zustandsmaschine in den IDLE-Zustand ein. Wenn
RESET# in den inaktiven (High-) Zustand geht, initialisiert der
Boot-Lader die UltraNAND-Vorrichtungen 32.
-
RY/BY# wird von der UltraNAND-Vorrichtung 32 erzeugt,
um anzuzeigen, wann die Vorrichtung mit einer internen Operation
beschäftigt
ist. Das System 10 kann das RY/BY#-Hardware-Signal verwenden
oder das RY/BY#-Zustandsbit in dem Statusregister abfragen, um festzustellen,
wann eine Operation gerade durchgeführt wird oder abgeschlossen
ist. Die Boot-Lade-PLD 34 überwacht das RY/BY#-Signal über den
READY-Eingang, um festzustellen, wann UltraNAND-Flash 32 die Übertragung
von Informationen von dem internen Flash-Array zu den internen Datenregistern
abgeschlossen hat. Zu diesem Zeitpunkt wird der Speicher 32 initialisiert
und kann die Steuerung auf das System 10 umgeschaltet werden.
-
SYSCLK wird von der Boot-Lade-PLD 34 genötigt, um
die Zustandsmaschine der Vorrichtung anzutreiben. Da UltraNAND 32 eine
Mindest-Schreibimpulsbreiten-Spezifikation von 25 nS aufweist, beträgt die maximale
Frequenz für
SYSCLK 40 MHz.
-
Boot-Lader-Zustandsmaschine
-
In der Boot-Lade-PLD 34 wird
eine einfache Zustandsmaschine zum Durchführen der Initialisierung von
UltraNAND von verwendet. Die Boot-Lader-Zustandsmaschine regt die
Ausgänge
der Bocit-Lade-PLD 34 an, um die geeigneten Signale zu
erzeugen, die zum Initialisieren von einer oder zwei Ultra-NAND-Vorrichtungen 32 benötigt werden.
Ein Ablaufdiagramm der Zustandsmaschine der Boot-Lade-PLD ist in 5 gezeigt.
-
DETAILS BEZÜGLICH DER
IMPLEMENTIERUNG
-
Mit der hier beschriebenen Boot-Lade-PLD
ist die PLD in der Lage, bei Einschaltung bis zu zwei UltraNAND-Vorrichtungen
zu initialisieren. Es gibt einige wenige grundlegende Überlegungen
hinsichtlich des System-Interface, die bei Verwendung der Boot-Lade-PLD
berücksichtigt
werden müssen.
-
Dreizustandssteuerung von CLE, ALE,
WE# und I/O[0..7] Während
des auf das Einschalten folgenden Zeitraums, in dem die Boot-Lade-PLD UltraNAND-Flash
initialisiert, muss der Boot-Lade-Prozess die Steuerung von I/O[0..7],
CLE, ALE und des System-WE#-Signals übernehmen. Es ist daher erforderlich,
dass das System diese Signale in drei Zuständen hält, während INIT# im aktivierten
(Low-) Zustand ist. Wenn INIT# in den High-Zustand geht, wodurch angezeigt wird,
dass die Initialisierung des Boot-Laders abgeschlossen ist, kann
das System diese Signale so anregen, wie es geeignet ist.
-
BEISPIEL FÜR EINEN
SEQUENTIELLE BOOT-CODE
-
Da der Adressenbus des Systems die
UltraNAND-Flash-Leseadresse nicht direkt bestimmt, sind unterschiedliche
PLD-Lösungen
für Top-Boot
vs. Bottom-Boot-Mikrokontrollen
nicht erforderlich. Die Systemadressen-Dekodierlogik muss einfach
nur gewährleisten,
dass UltraNAND für
den Mikrokontroller-Codeabruf nach
der Einschaltung und Flash-Initialisierung freigegeben ist. Nachstehend
ist ein Beispiel dafür
aufgeführt, wie
der System-Boot-Code in dem UltraNAND-Flash-Boot-Bereich für einen
x86-Mikrokontrollen gespeichert werden kann.
-
Wenn UltraNAND initialisiert ist,
kann der System-Mikrokontrollen mit dem direkten sequentiellen Abruf
des Codes aus den UltraNAND-Datenregistern beginnen.
-
Wenn der Prozessor in dem System
eine niedrige Speicheradresse für
den Beginn des Boot-Codes verwendet, bewirkt der in der Flash-Vorrichtung
gespeicherte Boot-Code keinen Vorwärts- oder Rückwärts-Verzweigungs- oder -Sprungversuch
seitens des Mikrokontrollers. Dadurch wird gewährleistet, dass es keine Diskontinuitäten zwischen
dem Lesen von Befehlen aus Ultra-NAND
durch eine beliebige Prozessor-Befehlsabruflogik und der tatsächlichen
Befehlsausführungssequenz
gibt.
-
Wenn der Prozessor eine hohe Speicheradresse
für die
ersten Wörter
des Boot-Codes verwendet, muss der Code einen Sprungbefehl enthalten,
der die Prozessoradresse in eine niedrigere Adresse ändert, die immer
noch innerhalb des Adressenbereichs liegt, der von dem System dekodiert
wird, um den Speicher 32 auszuwählen. Ohne den Sprungbefehl
kann ein solcher Prozessor seine Adresse bis zu dem Punkt inkrementieren,
an dem er zyklisch zu einer niedrigen Speicheradresse gelangt, die
den Boot-Speicher 32 nicht mehr auswählt.
-
Ein Sprung bewirkt, dass eine bestimmte
Anzahl von Bytes aus einem vorabgerufenen Befehlsstrom gelöscht wird,
wenn der Vorabrufpuffer durch den Sprung gelöscht wird. Da es schwierig
sein kann, die genaue Anzahl von Bytes in dem Vorabrufpuffer, die
durch den Sprung gelöscht
werden, zu erfahren, müssen
genügend
dem Sprung folgende NOP-Befehl vorhanden sein, um den gesamten Vorabrufpuffer
aufzufüllen.
-
Durch den zuerst direkt aus der UltraNAND-Vorrichtung
heraus ausgeführten
Boot-Code wird einfach ein umfassenderes Bootstrap-Programm aus
der UltraNAND-Vorrichtung in eine XIP-Speichereinrichtung, wie z.
B. einen SRAM oder DRAM, geladen. Dieses Laden des Bootstrap-Codes
kann über
eine Zei chenfolgen-Bewegung oder durch aufeinanderfolgende Sofortbewegungsbefehle
erfolgen.
-
Wenn eine Zeichenfolge-Bewegung angewandt
wird, muss der dem Zeichenfolge-Befehl folgende Befehlsstrom mit
genügend
NOP-Befehlen zum Auffüllen
des Vorabrufpuffers des verwendeten Prozessors beginnen und enden.
Dadurch wird sichergestellt, dass der von der Zeichenfolge-Bewegungs-Leseoperation
aufgenommene Code-Strom hinter einem Punkt beginnt, an dem sich
der Vorabrufpuffer gefüllt.
Da der genaue Punkt, an dem der Vorabrufpuffer aufhört, Bytes
aus UltraNAND zu lesen und die Zeichenfolge-Bewegungs-Operation
mit dem Lesen von Bytes beginnt, nicht vorhergesagt werden kann,
kann der in die XIP-Speichereinrichtung geladene Code mit einigen
der verbliebenen NOP-Befehlen beginnen.
-
Da die genaue Ausrichtung des Codes
nicht gesteuert werden kann, ist es wichtig, relative Verzweigungen
innerhalb desjenigen Teils des Bootstrap-Programms, der in den XIP-Speicher
geladen ist, zu verwenden. Bei Prozessoren, bei denen die Byte-Ausrichtung
des Codes genau gesteuert werden muss, kann ein Strom von Sofortbewegungs-Befehlen
eine bessere Vorgehensweise zum Laden des Bootstrap-Codes in den XIP-Speicher
sein.
-
Wenn der Boot-Code in den XIP-Speicher
eingesetzt ist, bewirkt der letzte Befehl, dass der Mikrokontrollen
zu Ausführungszwecken
in den Boot-Code springt. Das nachstehende Beispiel betrifft eine x86-Boot-Code-Sequenz
im Assemblier-Code-Format, die nach der Initialisierung sequentiell
aus Ultra-NAND heraus
ausführt.
-
-
Beispiel für einen
Code
-
-
Zusammenfassend kann gesagt werden,
dass die vorliegende Erfindung ein Computersystem bereitstellt,
bei dem die anfängliche
Programmausführung
nur unter Verwendung eines Sequentiellzugriffs-Speichers durchgeführt wird,
wodurch kein separater nicht flüchtiger
Direktzugriffsspeicher benötigt
wird. Verschiedene Modifikationen sind für Fachleute auf dem Sachgebiet
anhand der Lehre der vorliegenden Offenbarung offensichtlich, ohne
dass dadurch vom Umfang der Erfindung abgewichen wird.