-
TECHNISCHES GEBIET
-
Die vorliegende Offenbarung betrifft eine Vorrichtung und Verfahren zur Initialisierung von nichtflüchtigem Speicher in einem Computersystem, das einen Prozessor zusammen mit dem Speicher aufweist.
-
HINTERGRUND
-
Ein Prozessor in einem Computersystem ist angeordnet, um verschiedene Vorgänge auszuführen, die einen oder mehr grundlegende arithmetische, logische, Steuer- und Eingabe/Ausgabe(I/O)-Vorgänge umfassen können. Ein Prozessor, der all diese Arten von Vorgängen durchführen kann, wird gemeinhin als zentrale Recheneinheit bzw. Prozessor (CPU) bezeichnet und umfasst eine arithmetisch-logische Einheit (ALU), Register, eine Steuereinheit, und in manchen Fällen Cache-Speicher. Der Prozessor (über die Steuereinheit in Falle einer CPU) ruft Anweisungen von einem Speicher zur Ausführung ab, die für verschiedene Zwecke wie etwa die Initialisierung des Systems oder das Ablaufen eines Programms ausgeführt werden sollen.
-
Ein Bereich zunehmender Aufmerksamkeit ist derjenige der eingebetteten Systeme. Ein eingebettetes System ist ein Computersystem mit einer dedizierten Funktion, das als Teil eines größeren mechanischen oder elektrischen Systems fungieren kann.
-
Eingebettete Systeme sind ein Schlüsselteil zur Ermöglichung des so genannten ”Internet der Dinge” (IoT), das sich auf ein Konzept bezieht, bei dem Objekte, die traditionell nicht als Computer oder Rechenvorrichtungen betrachtet wurden, mit eingebetteten Systemen ausgestattet werden, die es den Objekten erlauben, Daten zu sammeln und auszutauschen. Neben der Inkorporation eingebetteter Systeme in bestehende, alltägliche Objekte umfasst der Begriff ”Internet der Dinge” ebenfalls neue und zukünftige Technologien, wie etwa mikroelektromechanische (MEMS) und nanotechnologische Vorrichtungen, Smartdust oder ähnliche Sensorknoten.
-
Das Internet der Dinge hat den Bedarf für kleine Vorrichtungen und Vorrichtungen mit geringer Leistungsaufnahme geschaffen, die letztendlich alles auf einem Protokoll-Backbone bzw. Hauptnetz oder einer tragbare Rechenvorrichtung (wie etwa ein Smartphone oder Tablet) verbinden können. Protokolle, die für Anwendungen des Internets der Dinge verwendet werden, nutzen die Vorteile der Eignung solcher Vorrichtungen, für lange Zeiträume im Ruhemodus zu verbleiben, während sie nur für ein kurzes Zeitintervall aktiv sind, das gerade ausreicht, die üblicherweise geringen Datenmengen an das Backbone bzw. Hauptnetz oder die tragbare Rechenvorrichtung zu senden.
-
Um äußerst geringe Energie während der aktiven Zeiten zu erreichen, weisen tief eingebettete Systeme einen eingebetteten oder seriellen nicht-flüchtigen Speicher (NVM) auf, üblicherweise FLASH, um Code und wichtige Daten zu erhalten. Jedoch sind FLASH-Prozesse, die weit im Submikrometerbereich liegen, ziemlich teuer, während FLASH-Zellen die Chipgröße deutlich erhöhen, wodurch die Siliziumkosten steigen.
-
Ein alternativer Ansatz besteht darin, einen Prozessor und einen Speicher zu verwenden, der extern zu bzw. außerhalb des Prozessors bereitgestellt ist, üblicherweise als diskrete Komponente. Diese Architektur stellt die gleiche Leistung bereit wie mit einem eingebetteten NVM-Speicher (nichtflüchtiger Speicher), und erlaubt gleichzeitig eine vergrößerbare Speichergröße, da es sich um eine externe, diskrete Komponente handelt.
-
Jedoch muss bei dieser Art von Anordnung der Speicher initialisiert werden, bevor Code durch den Prozessor ausgeführt werden kann. Der Bedarf zur Initialisierung verursacht eine Verzögerung und erhöht das Risiko, dass das System zusammenbricht.
-
Ein solches System wird üblicherweise einen Speicher-Controller aufweisen, der die Speicherung von Daten in dem Speicher-Array verwaltet und Daten zwischen dem Prozessor und dem Speicher austauscht. Genau wie der Speicher selbst muss der Controller ebenfalls initialisiert werden, bevor der Prozessor Code ausführen kann.
-
1 zeigt ein Beispiel eines eingebetteten Systems gemäß dem Stand der Technik, bei dem ein Ein-Chip-System (SoC) 100 mit einem externen FLASH-Speicher 102 versehen ist. Ein FLASH-Controller 106 beherrscht die Kommunikation zwischen einer CPU 104 und dem Speicher 102. Das Ein-Chip-System 100 ist ebenfalls mit einer Stromverwaltungseinheit (PMU) 108 versehen, die ein Weckrufsignal empfangen kann, wenn das System schläft oder ausgeschaltet ist.
-
Während der Ruhezeit des Systems kann der Speicher 102 vollständig von der Stromversorgung getrennt sein, oder in einen tiefen Niederstrommodus mit geringem Leckstromverlust versetzt werden. Wenn das System erwacht, muss der Speicher 102 für den Code-Abruf durch den Prozessor 104 bereit werden. Der Controller 106 muss ebenfalls konfiguriert sein, die Speicherinitialisierung durchzuführen. Ein spezifischer Befehl oder Befehlssequenz kann von Nöten sein, um das System in einen bestimmten Datenübertragungsmodus zu versetzen, oder die Vorrichtung aus einem Niederstrommodus in einen normalen Betriebsmodus freizugeben.
-
Da viele Verkäufer von Speichern ihre eigenen Befehlscodes für verschiedene Befehle verwenden, würde es darüber hinaus einer verbindungsprogrammierten bzw. festverdrahteten Implementierung an Flexibilität mangeln.
-
Der Controller 106 selbst muss vitale Konfigurationen erhalten, falls er während des Schlafs ausgeschaltet bzw. vom Strom getrennt wird. Dies erfordert Retentionregister bzw. Rückhalteregister, die ihre Programmierwerte behalten, so dass der Controller bei einem Weckruf weiß, was zu tun ist.
-
ZUSAMMENFASSUNG DER OFFENBARUNG
-
Gemäß einem ersten Aspekt der Offenbarung ist ein Computersystem bereitgestellt, aufweisend: einen Prozessor; einen externen Speicher, der außerhalb des Prozessors liegt; einen Speicher-Controller für den externen Speicher; und eine Stromverwaltungseinheit, die angeordnet ist, um ein Weckrufsignal zu empfangen, dann erstens den Speicher-Controller zu wecken; und zweitens zu einem späteren Zeitpunkt den Prozessor zu wecken.
-
Optional ist der Controller angeordnet, um den externen Speicher zu initialisieren, bevor der Prozessor von der Stromverwaltungseinheit geweckt wird.
-
Optional umfasst das Computersystem ferner einen Befehlsspeicher, der Speicherinitialisierungsanweisungen für den externen Speicher speichert; und wobei der Speicher-Controller angeordnet ist, die Speicherinitialisierungsanweisungen von dem Befehlsspeicher abzurufen, wenn er von dem Weckrufsignal geweckt wird, das er von der Stromverwaltungseinheit empfängt.
-
Optional weist der Speicher-Controller einen Arbeitsspeicher zum Speichern der Speicherinitialisierungsanweisungen auf.
-
Optional weist der Controller eine Hardwarezustandsmaschine zum Initialisieren des externen Speichers auf.
-
Optional sind der Prozessor, der Befehlsspeicher, die Stromverwaltungseinheit und der Speicher-Controller als Komponenten des gleichen integrierten Schaltkreises vorgesehen.
-
Optional ist der externe Speicher ein FLASH-Speicher oder anderer EEPROM.
-
Gemäß einem zweiten Aspekt der Offenbarung ist ein Verfahren zum Überführen eines Computersystems aus einem Ruhezustand oder ausgeschalteten Zustand in einen eingeschalteten Zustand bereitgestellt, wobei das Computersystem einen Prozessor, einen externen Speicher, der außerhalb des Prozessors liegt, eine Stromverwaltungseinheit und einen Speicher-Controller aufweist, das Verfahren umfassend: Empfangen, an der Stromverwaltungseinheit, einer Weckrufanfrage; Wecken des Speicher-Controllers; dann, zu einem späteren Zeitpunkt, Wecken des Prozessors.
-
Optional umfasst das Verfahren das Initialisieren des externen Speichers nach dem Wecken des Speicher-Controllers und vor dem Wecken des Prozessors.
-
Optional umfasst das Initialisieren des externen Speichers das Abrufen von Speicherinitialisierungsanweisungen von einem Befehlsspeicher und das Laden dieser Anweisungen in den Speicher-Controller.
-
Optional umfasst das Initialisieren des externen Speichers das Senden von Befehlen an den externen Speicher unter Verwendung einer Hardware-Zustandsmaschine.
-
Optional, nachdem der Prozessor geweckt wurde, übernimmt er und tauscht Daten mit dem externen Speicher aus.
-
ZUSAMMENFASSUNG DER ZEICHNUNGEN
-
Die Offenbarung wird nun lediglich beispielhaft anhand der beigefügten Zeichnungen beschrieben, wobei:
-
1 ein Beispiel eines eingebetteten Systems gemäß dem Stand der Technik zeigt, bei dem ein Ein-Chip-System (SoC) mit einem externen FLASH-Speicher bereitgestellt ist;
-
2 eine Ausführungsform eines eingebetteten Systems gemäß der vorliegenden Offenbarung veranschaulicht;
-
3 eine Ausführungsform eines Controllers veranschaulicht, der in dem System aus 2 verwendet werden kann;
-
4 ein eingebettetes System gemäß einer weiteren Ausführungsform der vorliegenden Offenbarung zeigt; und
-
5 ein Verfahren zur Systeminitialisierung gemäß der Offenbarung veranschaulicht.
-
DETAILLIERTE BESCHREIBUNG
-
2 veranschaulicht ein System 200 gemäß einer Ausführungsform der Offenbarung. Ein Prozessor 204 ruft Anweisungen von einem Speicher 202 ab, der in einer bevorzugten Ausführungsform ein nichtflüchtiger Speicher ist (NVM). Ein Speicher-Controller 206 konfiguriert den Speicher 202 und ist über eine Schnittstelle mit dem Prozessor 204 verbunden. Die Komponenten sind durch Datenbusse 210, 212, 214 verbunden und eine Stromverwaltungseinheit (PMU) 208 ist bereitgestellt, die Weckrufsignale 216, 218 jeweils an den Prozessor 204 und den Controller 206 sendet.
-
Die Offenbarung ist nicht auf eine spezifische Architektur beschränkt, in einer beispielhaften Implementierung jedoch sind der Prozessor 204, der Controller 206, die Stromverwaltungseinheit (PMU) 208 und der optionale Befehlsspeicher 210 alle als Teil des gleichen Ein-Chip-Systems (SoC) bereitgestellt, und der Speicher 202 ist als getrennte, diskrete Komponente, außerhalb des Ein-Chip-Systems, bereitgestellt.
-
Der Prozessor 204 und die Stromverwaltungseinheit (PMU) 208 sind als getrennte Komponenten gezeigt, sie können jedoch alternativ als Teil einer kombinierten Komponente bereitgestellt sein, das heißt die Stromverwaltungseinheit PMU könnte im Prozessor 204 integriert sein oder umgekehrt. Auf ähnliche Weise könnte der Controller 206 als Teil des Ein-Chip-Systems (SoC) bereitgestellt sein, oder er könnte zusammen mit dem Speicher 202 integriert sein, wobei in diesem Fall der Speicher 202 und der Controller 206 zusammen als diskrete Komponente, außerhalb des Ein-Chip-Systems (SoC), bereitgestellt sind.
-
Die Stromverwaltungseinheit (PMU) ist angeordnet, um ein Weckrufsignal von einer externen Quelle oder einem externen System zu empfangen. Sie kann ebenfalls komplexere Komponenten bzw. Bauteile umfassen, die eine oder mehr Strom- bzw. Energieverwaltungsfunktionen wie etwa Batterieverwaltung, Spannungsregulierung und Aufladefunktionen bereitstellen.
-
Ein Befehlsspeicher 210 ist bereitgestellt, der Anweisungen zur Verwendung durch den Controller 206 speichern kann, einschließlich Code zum Initialisieren des Controllers 206. Der Befehlsspeicher 210 ist als optionale Komponente dargestellt, weil es ebenfalls möglich ist, dass die benötigten Anweisungen in dem Hauptspeicher 202 gespeichert werden.
-
3 zeigt eine beispielhafte Ausführungsform eines Controllers 206 zur Verwendung mit dem System aus 2. Wie in 2 gezeigt tauscht der Controller 206 Daten mit dem Prozessor 204, der Stromverwaltungseinheit 208 und dem Befehlsspeicher 210 über den Datenbus 212 aus, und tauscht Daten mit dem Speicher 202 über den Datenbus 214 aus. Der Controller 206 umfasst eine Bus-Schnittstelle 300, einen Speicher 302, und einen endlichen Zustandsautomat (FSM) 304. Der Speicher 302 umfasst bevorzugt einen angemessenen Direktzugriffsspeicher (RAM). Der endliche Zustandsautomat (FSM) 304 verändert den Zustand in Abhängigkeit von den Eingaben die er von der Bus-Schnittstelle 300 und dem Direktzugriffsspeicher (RAM) 302 empfängt und ist in bevorzugten Ausführungsformen in Hardware implementiert. Der endliche Zustandsautomat (FSM) umfasst jedwede geeignete Schaltung, die den Zustand in Abhängigkeit der Eingaben ändern kann.
-
Es ist möglich, dass der Speicher 202 entweder vollkommen ausgeschaltet bzw. von der Stromversorgung getrennt ist oder in einen tiefen Niederstrommodus geschaltet ist, wenn das System in einen Schlafmodus (jedweder Art) übergeht, insbesondere falls der Controller 206 als Teil einer Ein-Chip-Systems (SoC) mit äußerst geringem Stromverbrauch verwendet wird. Jedoch erfordert der Speicher 202 beim Einschalten oder Aufwecken eine Reihe von Befehlen, um einen Zustand zu erreichen, in dem der Prozessor 204 tatsächlich Code ausführen kann. Diese Initialisierung sollte vor dem Wecken des Prozessors 204 erfolgen.
-
Wenn die Stromverwaltungseinheit 207 eine Unterbrechung bzw. einen Interrupt 201 oder ein anderes Weckrufsignal empfängt, stellt sie die Stromzufuhr wieder her und sendet einen Weckrufbefehl 218 an den Controller 206. Der Controller 206 erhält dann Initialisierungsbefehle von dem Speicher 210 und lädt diese in seinen Betriebsspeicher 302, der in geeigneter Weise in Gestalt eines FIFO(First in First Out)-Puffers oder eines anderen geeigneten Speichers vorliegen kann. Der Befehlsspeicher 210 kann eine geeignete Art von nicht-flüchtigem Speicher sein, wie etwa ein einmal programmierbarer Nur-Lese-Speicher (OTP ROM), und er kann vorprogrammiert sein, beispielweise während der Prüfung des Produkts.
-
Dann dekodiert der Controller 206 die Befehle im Direktzugriffsspeicher 302 in Speicherbefehle eines angemessenen Formats und initialisiert dann den Speicher 202. Wie in 3 gezeigt kann der Controller 206 eine Hardware-Zustandsmaschine 304 umfassen, welche die Dekodierungs- und Initialisierungsfunktionen ausführen kann.
-
Nach der Initialisierung des Speichers 202 sendet die Stromverwaltungseinheit 208 einen Weckrufbefehl 216 an den Prozessor 204, der aufzeigt, dass der Speicher 202 nun zur Code-Ausführung durch den Prozessor 204 bereit ist. Der Prozessor 204 übernimmt dann und beginnt, Code aus dem Speicher 202 abzurufen.
-
Wie oben erwähnt können die Initialisierungsbefehle in einer alternativen Ausführungsform direkt in dem Speicher 202 anstatt in einem dedizierten Befehlsspeicher 210 gespeichert werden. Anweisungen zum Abrufen der Befehle können im Controller hartkodiert sein.
-
Die Stromverwaltungseinheit informiert sowohl den Controller 206 als auch den Prozessor 204, dass das System geweckt werden soll, jedoch nicht zur gleichen Zeit. Durch das Sicherstellen, dass der Speicher initialisiert ist, bevor der Prozessor 204 erwacht, erscheint es dem Prozessor 204 als ob der Speicher 202 überhaupt nicht schlafen gegangen wäre und Anweisungen können durch den Prozessor 204 abgerufen werden, sobald er gestartet wird. Sekundäre Lader sind nicht erforderlich, um sich um die Initialisierungsprozedur zu kümmern.
-
Ebenfalls muss der Prozessor 204 nicht in die Initialisierung des Speichers 202 eingreifen. Stattdessen ist eine sehr kleine (im Vergleich zum Prozessor) dedizierte Hardware-Zustandsmaschine 304 oder gleichwertig vorgesehen, welche die Initialisierung durchführt, so dass es zu einer Stromeinsparung verglichen mit dem Eingreifen eines Prozessors kommt.
-
Die Offenbarung stellt ebenfalls große Flexibilität bereit, weil alle Befehle einschließlich Bereinigungswartezuständen im Direktzugriffsspeicher 302 des Controllers 206 programmiert werden können.
-
Ferner sind rückhaltende Register oder Direktzugriffsspeicher (RAM) vorgesehen, um den Speicherinitialisierungs-Mikro-Code in dem Controller zu speichern, selbst wenn eine Strominsel, die den Controller versorgt, vollständig ausgeschaltet ist.
-
Er gibt viele Arten von Systemen, Speichern und Kommunikationstechnologien, auf die die vorliegende Offenbarung angewendet werden kann. Um jedoch das Verständnis der Offenbarung weiter zu verbessern, veranschaulicht 4, lediglich beispielhaft, eine spezifische Ausführungsform der Offenbarung, wobei der Speicher ein QSPI (quad serial peripheral interface) FLASH-Speicher ist.
-
Wie in 4 gezeigt weist ein Ein-Chip-System 400 eine CPU 404 auf, die Anweisungen von einem QSPI FLASH-Speicher 402 abruft, der extern bzw. außerhalb zum Ein-Chip-System 400 bereitgestellt ist. Eine QSPI-Schnittstelle weist vier bidirektionale Eingangs- und Ausgangsdatensignale zwischen Master und Slave auf, die üblicherweise als I00 bis I03 gekennzeichnet sind. Der QSPI-Controller 406 weist eine Bus-Schnittstelle 420, Mikro-Code RAM 426 und eine Hardware-Zustandsmaschine (Steuer FSM) 424 auf. Das Ein-Chip-System (SoC) weist ebenfalls einen Nur-Lese-Speicher (ROM) auf, der ausgelegt ist, um mit der CPU 404 zur Ausführung einer bestimmten Funktion zu arbeiten, für die das Ein-Chip-System (SoC) vorgesehen ist.
-
Die Betriebsprinzipien des Systems aus 4 sind denen ähnlich, die obenstehend unter Bezugnahme auf die 2 und 3 beschrieben wurden, abgesehen davon, dass 4 mehr Einzelheiten einer spezifischen optionalen Implementierung bereitstellt. Die Initialisierungs-Mikrocodes werden an dem Ein-Chip-System 400 in einem einmal programmierbaren Speicher 410 (OTP-Speicher) gespeichert. Wenn die Stromverwaltungseinheit 408 eine Unterbrechung bzw. einen Interrupt empfängt oder anderweitig angewiesen wird, einen Weckruf zu initiieren, sendet sie ein Weckrufsignal 418 an den QSPI-Controller 406. Der Controller 406 ruft dann die in dem OTP 410 gespeicherten Mikro-Codes ab und speichert diese in ihrem Mikro-Code Direktzugriffsspeicher (RAM) 426, der in diesem Beispiel ein FIFO-Speicherpuffer ist.
-
Dann dekodiert die Hardware-Zustandsmaschine 424 die Befehle, die in dem FIFO 426 liegen und initialisiert den QSPI FLASH 402 automatisch.
-
Sobald der QSPI FLASH 402 initialisiert ist, sendet die Stromverwaltungseinheit 408 ein Weckrufsignal 416 an die CPU 404, was aufzeigt, dass der QSPI FLASH 402 zur Ausführung des Code verfügbar ist. Dann übernimmt die CPU 404 und beginnt, Code von dem QSPI FLSH-Speicher 402 abzurufen.
-
Eine Ausführungsform des Mikro-Codes könnte wie in der folgenden Tabelle dargestellt aussehen: Tabelle 1: Mikrocode-Ausführungsform
Bit | Name | Beschreibung |
Byte 0 |
7:3 | CMD_BYTES | Die Anzahl an Nutzdaten-Bytes, die gesendet werden sollen |
2:1 | CMD_TX_MD | QSPI-Bus-Modus beim Übertragen des Befehls
0x0: single SPI
0x1: Dual SPI
0x2: Quad SPI
0x3: Reserviert |
0 | CMD_VALID | 1: Befehlssatz gültig
0: Befehlssatz nicht gültig |
Byte 1 |
7:0 | CMD_WT_CNT_LS | Anzahl von Taktzyklen, die abgewartet werden muss, nachdem der Befehl angelegt wurde (am wenigstens wichtiges Byte) |
7:0 | CMD_WT_CNT_MS | Anzahl von Taktzyklen, die abgewartet werden muss, nachdem der Befehl angelegt wurde (wichtigstes Byte) |
Byte 3 bis (CMD_NBYTES + 2) |
| | Die tatsächlichen Datenbytes, die innerhalb eines QSPI-Chip-Select-Envelope-Signals gesendet werden sollen. |
-
Das erste Byte (LSByte) in dem Wort des FIFO enthält das Flag des Befehls, entweder gültig oder nicht gültig, den Bus-Betriebsmodus und die Anzahl von Bytes, die in den zu sendenden Nutzdaten enthalten sind.
-
Das zweite und dritte Byte definieren die Menge an Taktzyklen, um die der QSPI-Controller nach dem Anlegen des Befehls warten muss. In Abhängigkeit der Taktperiode, falls mehr Zeit von dem FLASH benötigt wird, bis er gesettelt ist, könnten mehrere identische Befehle ausgegeben werden.
-
Beispiel:
-
Sei 0xAB der Befehlscode zum Freigeben des FLASH aus dem tiefen Niederstrommodus, würde der FIFO mit der folgenden Sequenz initialisiert: Tabelle 2: Mikro-Code-Beispiel
Byte | Wert | Beschreibung |
0 | 0x11 | Gültiger Befehlssatz, single SPI Mode, 2 Bytes Nutzdaten |
1 | 0x01 | Für 1 Taktzyklus warten, nachdem der Befehl gesendet wurde |
2 | 0x00 |
3 | 0xAB | Tatsächlicher QSPI FLASH Befehlscode. Dieser Befehlscode bedeutet ”Freigeben aus dem tiefen Niederstrommodus” |
-
Es sei angemerkt, dass die Ausführungsform aus 4 zur Veranschaulichung dient und viele Variationen berücksichtigt werden können. Zum Beispiel kann die Schnittstelle eine normale SPI- oder als I2C-Schnittstelle sein und der Speicher kann eine andere Art sein.
-
Die vorliegende Offenbarung betrifft ebenfalls ein Verfahren zum Initialisieren eines Computersystems, das sich mit den Fähigkeiten der oben-beschriebenen Ausführungsformen deckt. Bei dem Verfahren handelt es sich ebenfalls um ein Verfahren zum Übergehen eines Computersystems aus einem Schlafzustand oder ausgeschalteten Zustand in einen eingeschalteten Zustand. Das Verfahren ist in dem Ablaufdiagramm in 5 veranschaulicht. Hier erkennt man, dass bei Schritt 500 die Stromverwaltungseinheit (PMU) eine Unterbrechung bzw. Interrupt empfängt, oder eine gleichwertige Anweisung, um ein Erwachen des Systems zu initiieren. Die Stromverwaltungseinheit (PMU) stellt dann die Stromversorgung wieder her und sendet ein Weckrufsignal an einen Controller (Schritt 502), woraufhin die Speicherinitialisierungs-Mikrocodes in den Direktzugriffsspeicher bzw. RAM (504) des Controllers geladen werden und der Speicher initialisiert (Schritt 506). Die Stromversorgungseinheit (PMU) weckt dann den Prozessor (Schritt 508), der dann übernimmt und Code aus dem Speicher abruft (Schritt 510).
-
Verschiedene Verbesserungen und Modifizierungen können an den obigen Ausführungen vorgenommen werden, ohne den Schutzumfang der Offenbarung zu verlassen.