DE69821738T2 - Vorrichtung und Verfahren zur Ausführung verschlüsselter Befehle - Google Patents

Vorrichtung und Verfahren zur Ausführung verschlüsselter Befehle Download PDF

Info

Publication number
DE69821738T2
DE69821738T2 DE69821738T DE69821738T DE69821738T2 DE 69821738 T2 DE69821738 T2 DE 69821738T2 DE 69821738 T DE69821738 T DE 69821738T DE 69821738 T DE69821738 T DE 69821738T DE 69821738 T2 DE69821738 T2 DE 69821738T2
Authority
DE
Germany
Prior art keywords
command
decoded
memory
instruction
decoder
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69821738T
Other languages
English (en)
Other versions
DE69821738D1 (de
Inventor
Vitaly Sukonik
Alexander Grobman
Neri Baron
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
Motorola Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Motorola Inc filed Critical Motorola Inc
Publication of DE69821738D1 publication Critical patent/DE69821738D1/de
Application granted granted Critical
Publication of DE69821738T2 publication Critical patent/DE69821738T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Description

  • Gebiet der Erfindung
  • Die Erfindung betrifft eine Vorrichtung und ein Verfahren für verschlüsselte Befehle, insbesondere während Refetch-Operationen.
  • Hintergrund der Erfindung
  • Zentrale Verarbeitungseinheiten (CPU's: central processing units) von Computersystemen weisen im Allgemeinen Adressregister auf, um die Adressen der letzten von der CPU gelesenen A Befehle zu speichern. Wenn eine Notwendigkeit besteht, einen der letzten A Befehle erneut abzurufen ("refetch"), wird die Adresse dieses Befehls an den Speicher gesendet, was veranlasst, dass der Befehl erneut zu der CPU abgerufen wird. Oft wird ein Befehl erneut abgerufen, wenn er eine Ausnahme verursacht; die Ausnahme kann ein Fehler, ein ungewöhnlicher Zustand oder ein externes Signal sein, das ein CPU-Statusbit setzt und dadurch einen Interrupt verursacht.
  • Es besteht eine Notwendigkeit, Information, d. h. Daten und Befehle, in codierter oder chiffrierter oder verschlüsselter Form zu speichern. Diese kann aufgrund eines Wunsches auftreten, die Information für ungewollte Benutzer undurchsichtig zu machen oder um durch irgendwelche Mittel der Redundanzelimination oder Kompressionscodierung Speicherplatz zu sparen oder aus anderen Gründen.
  • Das Speichern von Informationen in codierter oder verschlüsselter Form verursacht mehrere Probleme unter denen sich die Notwendigkeit befindet, die Information zu decodieren, wenn sie aus dem Speicher abgerufen wird, wenn sie von Peripheriegeräten oder anderen Einheiten bearbeitet werden soll, die nur Klartextinformation (d. h. decodiert) behandeln können. Wenn codierte Information erneut abgerufen werden muss, besteht eine Notwendigkeit, sie erneut zu decodieren, wodurch eine Zeitverschwendung und eine Verschlechterung der Systemleistungen verursacht werden.
  • Ein weiteres Problem tritt auf, wenn ein Peripheriegerät, welches nicht mit dem Ausgang des Decodierers verbunden ist, Information benötigt, die in codierter Form im Speicher gehalten wird. Dieses Peripheriegerät kann die codierte Information nicht direkt lesen oder bearbeiten.
  • Diese Probleme sind insbesondere aktuell, wenn Information erneut abgerufen wird, da bei Refetch-Operationen, z. B. wenn ein Interrupt aufgetreten ist, die Bearbeitungszeit üblicherweise kritischer ist. Wenn beispielsweise ein Befehl eine Ausnahme verursacht, so dass eine Adresse eines Befehls aus einem CPU-Adressregister erneut abgerufen wird, wird der erneut abgerufene Befehl noch immer in codierter Form vorliegen, wenn er erneut direkt aus dem Speicher abgerufen und beispielsweise an eine Lade-/Speichereinheit innerhalb der CPU gesendet wird.
  • Entsprechend besteht ein fortgesetzter Bedarf nach verbesserten Verfahren und Vorrichtungen zur Behandlung von Refetch-Operationen und anderen Operationen, bei denen codierte oder verschlüsselte Information mehrmals benutzt werden muss.
  • Aus Patents Abstracts of Japan Band 018, Nr. 153 (P-1709) und der japanischen Patentanmeldung Nr. 05 324314 A ist ein Datenverarbeitungssystem bekannt, dessen Betrieb durch Verkürzung von Befehlsauslesezeit beschleunigt wird, indem ein Prozessor mit einer Funktion zum Einlesen einer komprimierten Befehlssequenz und zum Entwickeln dieser in eine Originalbefehlssequenz bereitgestellt wird.
  • Aus dem US Patent Nr. 5,012,403 sind eine Anordnung und ein Verfahren zum Decodieren codierter Befehle und zum Abspielen und erneuten Spielen decodierter Befehle an eine einen Speicher für decodierte Befehle verwendende Maschine bekannt.
  • Das Wort "Information", wie es hier verwendet wird, soll jegliche Art von Daten oder Befehlen oder von beiden einschließen. Die Worte codieren, verschlüsseln, chiffrieren und die Worte decodieren, entschlüsseln und dechiffrieren und verwandte Formen sollen jegliche Art von Codierung für jeglichen Zweck, einschließlich jedoch nicht beschränkt auf Bedeutungsverschleierung, Komprimierung, um weniger Raum oder Sendezeit zu besetzen oder jegliche andere Informationsverarbeitungstechnik, einschließen. Die Worte codieren, chiffrieren und verschlüsseln sollen dieselbe Bedeu tung haben, ebenso wie ihre inversen Formen z. B. decodieren, dechiffrieren und entschlüsseln.
  • Zusammenfassung der Erfindung
  • Das der Erfindung zugrundeliegende Problem wird grundsätzlich durch Anwendung der in den unabhängigen Ansprüchen niedergelegten Merkmale gelöst. Bevorzugte Ausführungsbeispiele sind in den abhängigen Ansprüchen angegeben.
  • Ein Vorteil der vorliegenden Erfindung ist, dass sie eine effiziente Vorrichtung und ein effizientes Verfahren zum Speichern von und Zugreifen auf codierte Information, insbesondere Befehle und andere in einem Speicher Bespeicherte Information, die erneut abgerufen werden muss, zur Verfügung stellt.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist ein schematisches Diagramm einer Vorrichtung zum Speichern und Abrufen codierter Information gemäß einer ersten Ausführungsform der Erfindung;
  • 2 ist ein schematisches Diagramm einer Vorrichtung zum Speichern und Abrufen codierter Information gemäß einer bevorzugten Ausführungsform der Erfindung.
  • 3 ist ein vereinfachtes schematisches Diagramm eines Teils der Vorrichtung der 1 und 2, welches weitere Details zeigt; und
  • 4 ist ein vereinfachtes Flussdiagramm eines Verfahrens gemäß der vorliegenden Erfindung, bei dem Befehle normalerweise in codierter Form gespeichert und in decodierter Form erneut abgerufen werden.
  • Beschreibung einer bevorzugten Ausführungsform
  • 1 ist ein schematisches Diagramm einer Vorrichtung 19 zum Speichern, Abrufen und Verarbeiten chiffrierter oder codierter Information, insbesondere chiffrierter oder codierter Befehle, gemäß einer ersten Ausführungsform der Erfindung. Die Vorrichtung 19 umfasst einen Hauptspeicher 40 mit Ein-/Ausgängen (d. h. I/O's) 42, 44; eine Codiereinheit (z. B. Decodierer) 50 mit I/O 52, Ausgang 54 und I/O 56; einem temporären Speicher (d. h. TSM: temporary storage memory) 60 mit Eingang 62, I/O's 64, 66; und Peripheriegeräte 10, 20, 30 mit I/O's 1216, 2226 bzw. 32, 36; und einen Controller 70 mit I/O's 7176. Der Hauptspeicher 40 enthält M Worte und TSM 60 enthält N Worte, wobei N < M und M und N günstigerweise ganzzahlig sind. TSM 60 enthält optional einen Sortierer 61.
  • Die in TSM 60 gespeicherten Worte sind günstigerweise (jedoch nicht notwendigerweise) mittels des Sortierers 61 sortiert, so dass aus dem Hauptspeicher 40 ausgelesene und decodierte N Worte in TSM 60 in decodierter Form gespeichert sind. Der Inhalt von TSM 60 wird vorzugsweise konstant aktualisiert, sobald Information aus dem Hauptspeicher 40 ausgelesen wird. In diesem Kontext sind "decodiert" und "Klartext" ("plain language") als eine Form zu verstehen, wobei das Peripheriegerät oder ein Befehlsprozessor, an welches/n der Befehl adressiert ist, den Befehl interpretieren kann.
  • Die Funktion des Sortierers 61 ist es, aus dem Strom von M Befehlen, der aus dem Hauptspeicher 40 abgerufen und von dem Decodierer 50 decodiert wird, eine Teilmenge von N Befehlen auszuwählen, für die eine signifikante Wahrscheinlichkeit besteht, erneut abgerufen zu werden. Beispielsweise kann der Sortierer 61 durch Vergleichen von Folgebefehlen mit einer vorbestimmten Liste von Befehlen für die es wahrscheinlich ist, dass sie Interrupts verursachen, Befehle auswählen, die eine hohe Wahrscheinlichkeit haben, einen Refetch zu verursachen. Alternativ kann der Sortierer 61 einfach die N jüngst decodierten Befehle auswählen, indem er beispielsweise einen einfachen, N Elemente hohen Stapelspeicher (FIFO) verwendet. Die genaue Form des Sortierers 61 wird von den besonderen Befehlen abhängen, die auszuführen erwünscht sind und von der Natur der Befehle, die am wahrscheinlichsten erneut abgerufen werden. Basierend auf der hiesigen Offenbarung liegt die Auswahl der geeigneten Implementation des Sortierers 61 innerhalb der fachmännischen Kompetenz.
  • Obgleich die Chiffriereinheit 50 hier als ein "Decodierer" bezeichnet wird, geschieht dies lediglich zur Bequemlichkeit der Erläuterung, und der Fachmann wird verstehen, dass sie sowohl ein Codieren als auch ein Decodieren durchführen kann, um die Information in codierter Form in den Hauptspeicher 40 zu platzieren und codierte Information im Hauptspeicher 40 in decodierte Form zur Speicherung im TSM 60 und zur Verwendung in anderen Teilen der Vorrichtung 90 konvertieren kann.
  • Bei Echtzeitanwendungen ist es oft der Fall, dass die Befehle im Hauptspeicher 40 fixierte Programmbefehle sind und dass der Hauptspeicher 40 ein PROM- oder EPROM-artiger Speicher ist. Unter diesen Umständen ist der Hauptspeicher 40 bereits mit Befehlen in codierter Form beladen, und der Decodierer 50 kann auf Decodierungsgeschwindigkeit optimiert werden.
  • Die Vorrichtung 19 umfasst einen ersten Bus 80, einen zweiten Bus 90 und einen dritten Bus 100, die mit Peripheriegeräten 10, 20, 30, dem Hauptspeicher 40, dem Decodierer 50, dem TSM 60 und dem Controller 70 verbunden sind. Der Controller 70 weist einen mit dem I/O 16 des ersten Peripheriegerätes 10 verbundenen I/O 71 auf, einen mit dem I/O 26 des zweiten Peripheriegerätes 20 verbundenen I/O 72, einen mit dem I/O 36 des dritten Peripheriegerätes 30 verbundenen I/O 73, einen mit dem I/O 44 des Hauptspeichers 40 verbundenen I/O 74, einen mit dem I/O 56 des Decodierers 50 verbundenen I/O 75 und einen mit dem I/O 66 des TSM 60 verbundenen I/O 76 auf. Der I/O 42 des Hauptspeichers 40 ist mit dem dritten Bus 100, dem Eingang 52 des Decodierers 50 und dem I/O 12 des ersten Peripheriegerätes 10 verbunden. Der Ausgang 54 des Decodierers 50 ist mit dem I/O 62 des TSM 60, dem zweiten Bus 90 und dem I/O 22 des zweiten Peripheriegerätes 20 verbunden. Der I/O 64 des TSM 60 ist mit dem ersten Bus 80, dem I/O 32 des dritten Peripheriegerätes 30, dem I/O 22 des zweiten Peripheriegerätes 20 und dem I/O 12 des ersten Peripheriegerätes 10 verbunden.
  • Das erste Peripheriegerät 10 kann von dem Ausgang 42 des Hauptspeichers 40 (beispielsweise über den Bus 100) gesendete, codierte Information oder von dem Ausgang 64 des TSM 60 gesendete, decodierte Information lesen und verarbeiten. Das zweite Peripheriegerät 20 kann von dem Ausgang 54 des Decodierers 50 oder dem Ausgang 64 des TSM gesendete, entschlüsselte Information lesen und verarbeiten. Das dritte Peripheriegerät kann von dem Ausgang 64 des TSM gesendete Information lesen und verarbeiten. Die Peripherie geräte 10, 20, 30 repräsentieren jegliche erwünschte elektronische Vorrichtungen (einschließlich einer CPU), die mit dem Speicher 40 kommunizieren muss.
  • Der Controller 70 steuert das Lesen und Schreiben in den Hauptspeicher 40 und in den TSM 60. Der Controller 70 steuert günstigerweise den Datentransfer zwischen dem ersten Peripheriegerät 10, dem zweiten Peripheriegerät 20, dem dritten Peripheriegerät 30, dem Decodierer 50, dem TSM 60 und dem Hauptspeicher 40. Der Controller 70 arbeitet gemäß wohlbekannten Kommunikationsprotokollen und kann von einem der Geräte unterbrochen werden, wenn eine Notwendigkeit besteht, zu lesen oder an das Gerät zu schreiben. Er kann auch in einer vorbestimmten Weise die Einheiten 1060 scannen, um zu entscheiden, ob sie Information lesen oder an Speicher 40 oder 60 schreiben müssen.
  • Es sei beispielsweise angenommen, dass das erste Peripheriegerät 10 in dem TSM 60 gespeicherte, decodierte Information lesen möchte. Die Adresse dieser Information erscheint am I/O 14 des ersten Peripheriegerätes 10. Das erste Peripheriegerät 10 zeigt über I/O 16 an, dass es die Information lesen möchte, und der Controller 70 befähigt das erste Peripheriegerät 10 dazu, die Adresse über I/O 14 an den ersten Bus 80 auszugeben. Der Controller 70 benachrichtigt den TSM 60, dass diese Adresse auf dem ersten Bus 80 vorliegt. Der TSM 60 liest dann diese Adresse über I/O 64 und benachrichtigt den Controller über I/O 66, dass er bereit ist, die gewünschte Information über I/O 64 auszugeben. Der Controller 70 befähigt TSM 60, die Information über I/O 64 an den ersten Bus 80 zu senden und benachrichtigt das erste Peripheriegerät 10 darüber, dass die Information auf dem ersten Bus 80 vorliegt. Das erste Periphe riegerät liest die Information auf dem ersten Bus 80 über I/O 14 und benachrichtigt den Controller 70, wenn die Leseoperation vollendet ist.
  • Der Fachmann wird verstehen, dass der Controller 70 einfach mit einigen oder allen Einheiten 1060 verbunden sein kann, um den Informationsfluss zwischen diesen Einheiten zu steuern. Es kann auch weitere Einheiten oder Peripheriegeräte (nicht dargestellt) geben, die nicht mit dem Controller 70 verbunden sind, die jedoch ihre eigenen Steuerausgänge- und Eingänge haben und das Information an sie geschrieben oder von ihnen gelesen werden kann.
  • Wenn ein Informationswort am Ausgang 54 des Decodierers 50 erscheint, wird es gemäß von dem Controller 70 gesendeten Steuersignalen an den TSM 60 geschrieben. Bei der bevorzugten Ausführungsform werden die letzten N Informationsworte aus dem Hauptspeicher 40 abgerufen und von dem Decodierer 50 dechiffriert und in N Speicherworten in dem TSM 60 gespeichert.
  • Falls eines der Peripheriegeräte 10, 20, 30 eines der letzten N dechiffrierten Informationsworte lesen möchte, sendet der Controller über I/O 64 ein Steuersignal an den TSM 60, das anzeigt, welches der N gespeicherten Informationsworte von dem TSM 60 ausgegeben werden soll. Der TSM 60 sendet das ausgewählte Informationswort über den I/O 64 an die anfragende Einheit 10, 20 oder 30. Der TSM 60 erlaubt ein schnelles Lesen eines in dem Hauptspeicher 40 in codierter Form gespeicherten Informationswortes ohne die Notwendigkeit es mehr als einmal zu decodieren, vorausgesetzt, dass es sich unter den in dem TSM 60 gespeicherten N Worten befindet.
  • Der TSM 60 ermöglicht daher in Kombination mit dem Controller 50 und dem Speicher 40 ein schnelles erneutes Abrufen in decodierter Form von zuvor bereits abgerufenen Befehlen, die sich z. B. unter den letzten N abgerufenen Informationen befinden. Es besteht keine Notwendigkeit, sie direkt aus dem Hauptspeicher 40 abzurufen und sie für die Refetch-Operation ein weiteres Mal zu decodieren.
  • In den 13 werden doppelköpfige Pfeile auf den Kommunikationsleitungen und Bussen zwischen den verschiedenen Elementen verwendet, um anzuzeigen, dass, selbst wenn es die primäre Funktion eines Anschlusses ist, ein Eingang oder ein Ausgang zu sein, eine bidirektionale Kommunikation zum Zwecke des Handshake ("hand-shake"), der Bestätigung oder zu anderen Zwecken auftreten kann.
  • 2 ist ein vereinfachtes schematisches Diagramm einer Vorrichtung 21 zum Speichern und Abrufen chiffrierter Information gemäß einer bevorzugten Ausführungsform der Erfindung. Die Vorrichtung 21 umfasst eine CPU 300 mit einem CPU-Datenbus (d. h. DBUS) 370, einem CPU-Befehlsbus (d. h. IBUS) 360, einem CPU-Datenadressbus (d. h. DABUS) 380, einem CPU-Befehlsadressbus (d. h. IABUS) 390, einer Interrupt-Steuerleitung oder -Bus (d. h. INT) 365 und einem Adress-I/O-Anschluss 306, einem Interrupt-I/O-Anschluss 304 und einem Informations-I/O-Anschluss 302.
  • Ein Adressspeicher (d. h. ASM) 330 weist einen I/O 332 und einen Eingang 334 auf. Ein Controller 350 weist I/O's 352, 356, 358 auf. Ein Decodierer 310 weist einen Eingang 312 und Ausgänge 314, 318 auf. Ein Hauptspeicher 320 weist einen Eingang 322 und einen Ausgang 328 auf. Ein Speicher für dechiffrierte Befehle (d. h. DISM: Decrypted Instruction Storage Memory) 340 weist I/O's 342, 344 und einen Eingang 346 auf. DISM 340, ASM 330, Controller 350, Decodierer 310 und Speicher 320 können jeweils separat oder innerhalb der CPU 300 oder auf demselben Chip wie die CPU 300 implementiert sein, wie dies mittels der gestrichelten Linie 364 angedeutet ist; dies ist jedoch für die vorliegende Erfindung nicht essentiell.
  • Der Ausgang 328 des Befehlshauptspeichers 320 ist mit dem Eingang 312 des Decodierers 310 verbunden. Der Ausgang 318 des Decodierers 310 ist mit dem IBUS 360 verbunden. Der Ausgang 413 des Decodierers 310 ist mit dem Eingang 346 des DISM 340 verbunden. Der I/O-Anschluss 342 des DISM 340 ist mit dem IBUS 360 verbunden. Der IBUS 360 ist günstigerweise über den Informations-I/O-Anschluss 302 der CPU 300 mit diesen Einheiten verbunden. Der I/O 332 des ASM 330 ist, beispielsweise über den Adress-I/O-Anschluss 306 der CPU 300 mit dem IABUS 390 verbunden. Der I/O-Anschluss 358 des Controllers 350 ist mit dem Eingang 334 des ASM 330 verbunden. Der Ausgang 356 des Controllers 350 ist mit Eingang 344 des DISM 340 verbunden. Der I/O 352 des Controllers 350 ist über den CPU-Anschluss 304 mit dem INT-BUS oder der -Leitung 365 der CPU 300 verbunden. Der Eingang 322 der Speicherbank 320 ist mit dem IABUS 390 verbunden.
  • Die Adresse jedes Befehls, der von der CPU 300 gelesen werden soll, wird an den ASM 330 geschrieben. Der ASM 330 speichert die Adressen der letzten B Befehle, die von der CPU 300 gelesen wurden. Jeder Befehl, der von der CPU 300 gelesen wird, wird an den CPU-Anschluss 302 und den DISM 340 geschrieben. Die Befehle können den DISM 340 beispielsweise direkt über den DISM-Eingang 346 oder über die CPU 300 von dem CPU-Anschluss 302 und der DISM-I/O 342 erreichen. Jede der dieser Anordnungen ist nützlich.
  • Der DISM 340 speichert die letzten C Befehle (oder andere Daten), die von der CPU 300 gelesen wurden, wobei C kleiner oder gleich B ist und B und C vorzugsweise ganze Zahlen sind. Der Controller 350 sendet über die Ausgänge 356 bzw. 358 Steuersignale an den DISM 340 bzw. den ASM 330. Vorzugsweise, jedoch nicht erforderlicherweise werden aufeinanderfolgende Befehle in aufeinanderfolgender Reihenfolge in dem DISM 340 gespeichert.
  • Wenn eine Notwendigkeit besteht, einen Befehl erneut abzurufen, wird der Befehl von dem DISM 340 abgerufen. Vorzugsweise wird ein Befehl erneut abgerufen, falls er von der CPU 300 ausgeführt wurde und eine Ausnahme (z. B. einen Interrupt) verursacht hat. Der Controller 350 empfängt günstigerweise von der CPU-Interruptleitung oder dem -BUS 365 über den CPU-Anschluss 302 und den Controller-I/O-Anschluss 352 eine Eingabe, die anzeigt, dass ein Befehl erneut abgerufen werden muss. Der Controller 340 sendet dann über die I/O's 356, 344 ein Steuersignal an DISM 340, welches veranlasst, dass der erneut abgerufene Befehl (aus den C in dem DISM 340 gespeicherten Befehlen) von dem DISM 340 über die I/O's 342, 302 an den IBUS 360 gesendet wird. Die Adresse des Refetch-Befehls wird günstigerweise von dem ASM 330 geliefert, wobei jedoch, wie der Fachmann verstehen wird, auch andere günstige Mittel zur Identifizierung des Refetch-Befehls verwendet werden können. Beispielsweise kann die Adresse des Refetch-Befehls von der CPU 300 über die Anschlüsse 304 oder 306 an den Controller 350 gesendet werden.
  • Der Controller 350 kann auch ein Steuersignal an den ASM 330 senden, welches veranlasst, dass eine Befehlsadresse an den IABUS 390 ausgegeben wird. Diese Adresse kann die Adresse eines Befehls sein, der ausgeführt wird, nachdem die CPU 300 die Verarbeitung desjenigen Befehls, der von dem DISM 340 erneut abgerufen wurde, beendet. Der I/O 342 des DISM 340 ist mit dem IBUS 360 verbunden und kann mit dem DBUS 340 ausgangsgekoppelt sein, was es mit dem DBUS 370 verbundenen Einheiten, wie etwa einer Lade-Speichereinheit erlaubt, Befehle in decodierter Form zu lesen.
  • 3 ist ein vereinfachtes schematisches Diagramm eines Teils 800 der Vorrichtung von 2, welches weitere Details zeigt. Der Teil 800 weist einen Speicher für dechiffrierte Befehle (d. h. DISM) 840, einen Befehlsadressenspeicher (d. h. ASM) 830 und einen Controller 790 auf, die zu dem DISM 340, dem ASM 330 bzw. dem Controller 350 von 2 analog sind. Ein Befehlsbus (IBUS) 730, ein Befehlsadressbus (IABUS) 740 und ein Interruptbus oder eine -Leitung (INT) 735 sind analog zu IBUS 360, IABUS 380 bzw. INT 365 von 2. Der Teil 800 kann optional einen Hilfsbus (AUXBUS) 710 aufweisen.
  • Der Controller 790 weist I/O's 794, 796, 798 auf. Der DISM 840 weist einen Befehlspuffer (d. h. IBUFF) 700 mit I/O 701 und C I/O's 704709 auf, die mit C Speicherworten 7010 verbunden sind, wobei C vorzugsweise eine ganze Zahl ist. Der DISM 840 weist einen Befehlsmultiplexer (d. h. IMUX) 720 mit C I/O's 724729, einem I/O 722 und einem optionalen I/O 723 auf. Der ASM 830 weist einen Befehlsadresspuffer (d. h. ABUFF) 760 mit einem I/O 761 und B I/O's 764769 auf, die mit B Speicherworten 7610 verbunden sind, wobei B ein ganze Zahl ist. Der ASM 830 weist einen Befehlsadressmultiplexer (d. h. AMUX) 750 mit B I/O's 754759 und I/O's 751, 752 auf.
  • Der I/O 721 des IMUX 720 ist vorzugsweise über den I-BUS 730 mit dem I/O 782 eines Befehlsregisters (d. h. IREG) 780 verbunden. Der Ausgang 751 des AMUX 750 ist vorzugsweise mit dem I/O 772 eines Befehlsadressregisters (d. h. A-REG) 770 verbunden.
  • C I/O's 704709 des IBUFF 700 sind mit C I/O's 724729 des IMUX 720 verbunden. Der I/O 721 des IMUX 720 ist mit dem IBUS 730 verbunden. Der I/O 723 ist optional mit dem AUXBUS 710 verbunden. Der I/O 722 des IMUX 720 und der I/O 701 des IBUFF 700 sind mit dem I/O 796 des Controllers 790 verbunden. Der I/O 752 des AMUX 750 und der I/O 761 des A-BUFF 760 sind mit dem I/O 798 des Controllers 790 verbunden. Der I/O 794 des Controllers 790 ist günstigerweise mit der INT-Leitung oder dem -BUS 735 verbunden.
  • B I/O's 763769 des ABUFF 760 sind mit B I/O's 754759 des AMUX 750 verbunden. Der I/O 751 des AMUX 750 ist mit dem IABUS 740 verbunden und ist wünschenswerterweise mit dem I/O 772 des AREG 770 verbunden.
  • Wenn die Notwendigkeit besteht, einen Befehl erneut abzurufen, empfängt der Controller 790 günstigerweise von der INT-Leitung oder dem -Bus 735 über den Eingang 794 ein Interrupt-Zustandssignal oder ein Flag und gibt über den I/O 796 an den I/O 701 des IBUFF 700 ein Signal aus, welches anzeigt, dass ein Befehl gelesen wurde und welches dem IMUX 720 mitteilt, welcher I/O von den C Ein-/Ausgängen 704709 auszuwählen ist. Der in einem der C Speicherworte 7010 des IBUFF 700, welches mit dem ausgewählten I/O des IMUX 720 verbunden ist, gespeicherte Befehl wird über den I/O 721 an den IBUS 730 ausgegeben und wird optional über den I/O 723 an AUXBUS 710 und günstigerweise, an das IREG 780 ausgegeben. Der Controller 790 kann auch über den Aus gang 798 an den Eingang 761 des ABUFF 760 ein Signal ausgeben, welches anzeigt, dass eine Befehlsadresse gelesen werden muss und welches dem AMUX 750 über den I/O 752 mitteilt, welcher I/O von den B Ein-/Ausgängen 754759 auszuwählen ist. Die Adresse eines in einem der B Speicherworte des ABUFF 760, welches mit dem ausgewählten I/O des AMUX 750 verbunden ist, gespeicherten Befehls wird über den I/O 751 des IMUX 750 an den IABUS und optional an den AREG 770 ausgegeben.
  • Die oben beschriebene Ausführungsform der Erfindung wird mittels des nachfolgenden Beispiels besser verstanden:
  • Ein Mikroprozessorbereich, analog dem Teil 800 von 3 umfasst: einem dem IBUFF 700 analogen Befehlspuffer mit 6 Speicherworten; einem dem IMUX 720 analogen 6-zu-1-Multiplexer; einem dem IBUS 730 analogen Befehlsbus, einen dem IBUS 740 analogen Befehlsadressbus; ein dem IREG 780 analoges Befehlsregister; einen dem ABUFF 760 analogen Adressbefehlsbus mit 6 Speicherworten. Einen dem AMUX 750 analogen 6-zu-1-Multiplexer; ein dem AREG 770 analoges Befehlsadressregister, das mit dem IBUS verbunden ist und eine dem Controller 790 analoge Steuerlogik.
  • Der Befehlspuffer kann die letzten 6 Befehle, die von dem Sequenzierer des Mikroprozessorkerns abgerufen wurden, speichern. Wenn einer der Befehle erneut abgerufen werden muss, wenn er beispielsweise von der CPU ausgeführt wurde und eine Ausnahme oder z. B. einen Interrupt verursacht hat, sendet die Steuerlogik ein Signal, das anzeigt, welches der 6 Speicherworte des Befehls denjenigen Befehl enthält, der die Ausnahme verursacht hat. Wenn beispielsweise der dritte Befehl abgerufen werden muss, wird der dritte Eingang des Befehlsmultiplexers (IMUX) aktiviert, so dass der Inhalt des dritten Speicherwortes (d. h. Befehl [3] in dem IMUX 700 von 3) des Befehlspuffers (z. B. IBUFF 700) über den Befehlsmultiplexer an den Befehlsbus (z. B. IBUS 730) ausgegeben wird und an den Hilfsbus und/oder an das Befehlsregister ausgegeben werden kann.
  • Wenn die Ausführung des Befehls eine Änderung des Mikroprozessorflusses mit sich bringt, kann der Adresspuffer die Adresse eines Befehls ausgeben, der nach der Behandlung der Ausnahme ausgeführt werden muss, wobei die Adresse günstigerweise in dem Programmzählerregister des Mikroprozessors gespeichert wird.
  • Wenn beispielsweise der Mikroprozessor nach der Behandlung der von dem dritten Befehl verursachten Ausnahme den vierten Befehl ausführen muss, wird der vierte Eingang des Befehlsadressmultiplexers aktiviert, so dass der Inhalt des vierten Speicherwortes des Befehlsadresspuffers über den Befehlsadressmultiplexer an den Befehlsadressbus ausgegeben wird.
  • 4 ist ein vereinfachtes Flussdiagramm eines Verfahrens 900 zum Speicher und erneuten Abrufen codierter Befehle in decodierter Form gemäß der vorliegenden Erfindung. Das Verfahren 900 bezieht sich auf Situationen, in denen Befehle normalerweise in codierter Form in einem Speicher gespeichert werden und decodiert werden müssen, bevor sie ausgeführt werden können. Die Codierung wird aus einer Vielzahl von Gründen angewendet, einschließlich Kompression, wie beispielsweise das Verwenden eines Hoffman-Codes.
  • Das Verfahren 900 beginnt bei "START" 901, und bei Schritt 902 wird ein codierter Befehl aus den in dem Hauptspeicher, beispielsweise Speicher 40, 320, gespeicherten M codierten Befehlen abgerufen. Der abgerufene Befehl wird im Schritt 904 decodiert. Der decodierte Befehl wird in Schritt 906 an den temporären Speicher, z. B. Speicher 60, 340, 700, weitergeleitet, wo eine Teilmenge N von abgerufenen und decodierten Befehlen gespeichert wird. Diese Teilmenge kann beispielsweise aus den letzten N abgerufenen und decodierten Befehlen oder denjenigen N Befehlen, die am wahrscheinlichsten Interrupts verursachen oder denjenigen N Befehlen, die wahrscheinlich einen Refetch-Zyklus anstoßen werden, oder irgendeiner anderen Teilmenge von N Befehlen bestehen, für die es wahrscheinlich ist, dass sie während einer bestimmten Operation des Computersystems mehr als einmal verwendet werden. Die N Befehle werden in decodierter Form gespeichert. Bei der bevorzugten Ausführungsform werden die letzten N decodierten Befehle gespeichert; dies ist jedoch nicht essentiell.
  • Der Unterschritt 905 ist günstigerweise ein Auswahl- oder Sortierschritt vor einem Speicherschritt 906 (z. B. durchgeführt von dem Sortierer 61), in welchem die erwünschte Teilmenge von in dem temporären Speicher 60, 340, 700 zu speichernden Befehlen aus dem Strom der aus dem Speicher 40, 320 abgerufenen Befehle ausgewählt und in den Schritten 902 bzw. 904 in dem Decodierer 50, 310, decodiert wird. Die Teilmenge von N decodierten Befehlen, die in Schritt 906 gespeichert werden sollen, besteht vorzugsweise aus denjenigen Befehlen, die eine signifikante Wahrscheinlichkeit aufweisen, erneut abgerufen zu werden. Wie der Fachmann verstehen wird, können viele verschiedene Sortier- oder Auswahlverfahren verwendet werden, um die N decodierten Befehle, die in Schritt 906 gespeichert werden sollen, auszuwählen, abhängig von den von dem Computersystem 19, 21 ausgeführten Funktionen und von der Natur der verwendeten Befehle. Basierend auf der hiesigen Beschreibung liegen die Details der Durchführung solch eines Sortier- oder Auswahlschrittes im Rahmen der fachmännischen Kompetenz.
  • In Schritt 908 wird der abgerufene, decodierte Befehl ausgeführt. Ein Abfrageschritt 910 bestimmt, ob es notwendig ist, einen Befehl erneut abzurufen, entweder denselben Befehl, der ausgeführt wurde oder einen anderen Befehl. Falls das Ergebnis des Abfrageschrittes 910 JA ist, bestimmt ein Abfrageschritt 912, ob sich der Refetch-Befehl unter den N in dem temporären Speicher in Schritt 906 gespeicherten, decodierten Befehlen befindet. Wenn das Ergebnis des Abfrageschrittes 912 JA ist, wird in Schritt 914 der gewünschte Befehl aus dem temporären Speicher 60, 340, 700 erneut abgerufen und zur erneuten Ausführung in Schritt 908 zurückgegeben.
  • Der Abfrageschritt 912 ist nicht in allen Situationen notwendig. Wo beispielsweise eine Befehls-Pipeline verwendet wird, die N Befehle enthält und ein Speicher 60, 340 die letzten N Befehle, in decodierter Form umspeichert, befindet sich ein erneut abgerufener Befehl stets unter den letzten N Befehlen und es wird kein Abfrageschritt 912 benötigt. Dies ist äquivalent zu einem JA-Ergebnis von 912, und kein anderes Ergebnis ist möglich.
  • Falls das Ergebnis des Abfrageschrittes 910 NEIN ist, wird in Abfrageschritt 916 bestimmt, ob oder ob nicht der Befehl der letzte Befehl ist und, falls das Ergebnis des Abfrageschrittes 916 NEIN ist, geht der Prozess schleifenartig über 917 zurück, um den nächsten Befehl abzurufen, d. h. Schritt 902 wird für den nächsten Befehl wiederholt, der dann in Schritt 904 decodiert und in Schritt 908 ausgeführt wird etc. Der Prozess wiederholt sich bis alle Befeh le ausgeführt wurden, wobei die möglichen Ergebnisse des Abfrageschrittes 910 wie oben beschrieben berücksichtigt werden. Jedes Mal, wenn ein Befehl in Schritt 904 decodiert wird, aktualisiert der Speicherschritt 906 den temporären Speicher 60, 340, 700, abhängig von den durch den Designer oder Benutzer ausgewählten Speicherkriterien, z. B. die letzten N Befehle oder Befehle die am wahrscheinlichsten Interrupts verursachen etc.
  • Es sei angenommen, dass der Abfrageschritt 912 benötigt wird, d. h. dass es möglich ist, dass ein erwünschter Refetch-Befehl außerhalb der Teilmenge von in dem temporären Speicher 60, 340, 700 N gespeicherten Befehlen liegt. Das Ergebnis des Abfrageschritts 912 ist dann NEIN, und der Prozess geht schleifenartig über 919 zurück, um den verschlüsselten Befehl in Schritt 902 abzurufen und ihn in Schritt 904 zu decodieren bevor er in Schritt 908 erneut ausgeführt wird.
  • Der Prozess fährt fort bis der letzte Befehl erreicht ist (Ergebnis des Abfrageschrittes 916 ist JA), worauf der Prozess bei 918 endet.

Claims (10)

  1. Computersystem, das codierte Befehle verwendet, umfassend: einen Hauptspeicher (40), der Befehle in codierter Form speichert; einen mit dem Hauptspeicher verbundenen Decodierer (50), wobei der Decodierer aus dem Hauptspeicher abgerufene, codierte Befehle decodiert; einen mit dem Decodierer verbundenen temporären Speicher (60) der N decodierte Befehle speichert; einen Befehlsprozessor (10; 20; 30), der abgerufene, decodierte Befehle verwendet; und einen mit dem Hauptspeicher und dem temporären Speicher verbundenen Controller (70), dadurch gekennzeichnet, dass der Controller veranlasst, dass dem Befehlsprozessor ein erneut abzurufender Befehl aus den N in dem temporären Speicher gespeicherten decodierten Befehlen in decodierter Form geliefert wird.
  2. Computersystem nach Anspruch 1, wobei der temporäre Speicher (60) die von dem Decodierer zuletzt decodierten N Befehle speichert.
  3. Computersystem nach Anspruch 1, wobei der Controller (70) bestimmt, ob sich ein bestimmter, von dem Befehlsprozessor benötigter Befehl unter den in dem temporären Speicher gespeicherten N Befehlen befindet und, falls JA, veranlasst, dass eine Abrufanweisung an den temporären Speicher (60) gesendet wird, um den erwünschten Befehl für den Befehlsprozessor in decodierter Form abzurufen und, falls NEIN, veranlasst, dass eine Abrufanweisung an den Hauptspeicher (40) gesendet wird, um den erwünschten Befehl in codierter Form abzurufen und ihn durch den Decodierer (50) zu schicken, um ihn in decodierter Form für den Befehlsprozessor zur Verfügung zu stellen.
  4. Computersystem nach Anspruch 1, wobei der temporäre Speicher (60) und der Befehlsprozessor mittels eines Befehlsbusses (80) verbunden sind und wobei der temporäre Speicher umfasst: einen Befehlspuffer (7010), der mit dem Controller verbunden ist und N Speicherworte aufweist, wobei jedes Speicherwort einen der N Befehle speichert; einen Multiplexer (720), der mit dem Befehlspuffer und dem Controller verbunden ist, um eines der N Speicherworte auszuwählen; wobei, wenn ein decodierter Befehl von dem Decodierer geliefert wird, dieser über den Multiplexer in den Puffer eingegeben wird, um in eines der N Speicherworte geschrieben zu werden; und wenn ein decodierter Befehl erneut abgerufen werden muss, der Multiplexer ein Speicherwort, welches den Befehl enthält, der erneut abgerufen werden muss, zur Lieferung des erneut abgerufenen Befehls an den Befehlsprozessor an den Befehlsbus koppelt.
  5. Computersystem nach Anspruch 4, umfassend einen Signalpfad (796), um eine Anweisung, welche den erneut abzurufenden Befehl identifiziert, mit dem Multiplexer zu verbinden.
  6. Computersystem nach Anspruch 1, wobei ein mit dem temporären Speicher verbundener Sortierer (62) N Befehle, die wahrscheinlich erneut abgerufen werden, zur Speicherung auswählt.
  7. Verfahren (900) zum Verarbeiten codierter Befehle, umfassend: Abrufen (902) eines codierten Befehls aus in einem Hauptspeicher gespeicherten M Befehlen; Decodieren (904) des abgerufenen Befehls; Speichern (906) des codierten Befehls unter N < M Befehlen in einem temporären Speicher; Ausführen (908) des decodierten Befehls; gekennzeichnet durch Bestimmen (910), ob eine Notwendigkeit besteht, den Befehl erneut abzurufen und, falls „JA" , erneutes Abrufen (914) des in dem temporären Speicher gespeicherten, decodierten Befehls.
  8. Verfahren nach Anspruch 7, wobei, falls das Ergebnis des Bestimmungsschrittes (910) „NEIN" ist, der Befehl aus dem Hauptspeicher erneut abgerufen (902) und decodiert (904) wird.
  9. Verfahren nach Anspruch 8, wobei die Abruf-, Decodier- und Speicherschritte wiederholt werden, so dass die in dem temporären Speicher gespeicherten (906) N decodierten Befehle die N zuletzt decodierten Befehle sind.
  10. Verfahren nach Anspruch 7 zum Betreiben eines Computersystems, umfassend: einen Hauptspeicher (40) der Informationsworte in verschlüsselter Form speichert; einen mit dem Hauptspeicher verbundenen Decodierer (50), wobei der Decodierer verschlüsselte Informationsworte aus dem Hauptspeicher decodiert, um abgerufene decodierte Informationsworte zu bilden; einen mit dem Decodierer verbundenen temporären Speicher (60) der N abgerufene decodierte Informationsworte speichert; wenigstens ein mit dem temporären Speicher verbundenes Peripheriegerät (10; 20; 30) zum Verarbeiten abgerufener decodierter Informationsworte; und einen mit dem temporären Speicher und dem Peripheriegerät verbundenen Controller (70); wobei, wenn gewünscht wird, ein zuvor abgerufenes Informationswort unter den N Informationsworten erneut abzurufen, der Controller (70) das erwünschte, zuvor abgerufene, decodierte Informationswort aus dem temporären Speicher (60) abruft und es dem Peripheriegerät zur Verarbeitung zur Verfügung stellt, ohne den Befehl durch den Decodierer zu schicken, und wobei, wenn gewünscht wird, dass eine zuvor abgerufene, außerhalb der N Informationsworte liegende Information erneut abgerufen wird, die Information, von der gewünscht wird, dass sie erneut abgerufen wird, aus dem Hauptspeicher (40) abgerufen wird und durch den Decodierer geschickt wird, bevor sie dem Peripheriegerät zur Verarbeitung zur Verfügung gestellt wird.
DE69821738T 1998-03-27 1998-03-27 Vorrichtung und Verfahren zur Ausführung verschlüsselter Befehle Expired - Fee Related DE69821738T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP98105602A EP0945786B1 (de) 1998-03-27 1998-03-27 Vorrichtung und Verfahren zur Ausführung verschlüsselter Befehle

Publications (2)

Publication Number Publication Date
DE69821738D1 DE69821738D1 (de) 2004-03-25
DE69821738T2 true DE69821738T2 (de) 2004-08-05

Family

ID=8231658

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69821738T Expired - Fee Related DE69821738T2 (de) 1998-03-27 1998-03-27 Vorrichtung und Verfahren zur Ausführung verschlüsselter Befehle

Country Status (3)

Country Link
US (1) US6243802B1 (de)
EP (1) EP0945786B1 (de)
DE (1) DE69821738T2 (de)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1980002755A1 (en) * 1979-06-05 1980-12-11 Burroughs Corp General purpose data buffer
US4620275A (en) * 1984-06-20 1986-10-28 Wallach Steven J Computer system
US5012403A (en) * 1988-04-01 1991-04-30 Digital Equipment Corporation Apparatus and method for replaying decoded instructions
JPH05324314A (ja) * 1992-05-20 1993-12-07 Hitachi Ltd データ処理装置

Also Published As

Publication number Publication date
DE69821738D1 (de) 2004-03-25
EP0945786A1 (de) 1999-09-29
US6243802B1 (en) 2001-06-05
EP0945786B1 (de) 2004-02-18

Similar Documents

Publication Publication Date Title
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE3210816C2 (de)
DE3689595T2 (de) Datenverarbeitungssystem.
DE3685876T2 (de) Meister-sklave-mikroprozessorsystem mit einem virtuellen speicher.
DE2714805C2 (de)
DE3486399T2 (de) Zentrale Verarbeitungseinheit mit der Fähigkeit, Befehle mit variablen Längen zu unterstützen.
DE60224774T2 (de) Datenverarbeitungssystem mit Lese-, Änderungs- und Schreibeinheit
DE69530292T2 (de) Effiziente adressierung von grossen speichern
DE60006021T2 (de) VLIW-Prozessor und Programmkomprimierungsgerät and -verfahren
DE69714244T2 (de) Schnelles laden von prüfvektoren für eine automatische testeinrichtung
CH656729A5 (de) Schnittstellenschaltungsanordnung zur verbindung eines prozessors mit einem nachrichtenkanal.
DE2722099A1 (de) Abfangeinrichtung fuer ein dv-system
DE69027806T2 (de) Multifunktionskoppler zwischen einer zentralen Verarbeitungseinheit eines Rechners und verschiedenen Peripheriegeräten dieses Rechners
DE3131341A1 (de) &#34;pufferspeicherorganisation&#34;
DE2750721A1 (de) Ein/ausgabe-system
DE2612139A1 (de) Ein/ausgang-steuerungssystem
DE2715073A1 (de) Mikroprogrammierte rechner-steuervorrichtung
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern
DE3856139T2 (de) Mikroprozessor
DE602004010399T2 (de) Neuadressierbare virtuelle dma-steuer und statusregister
DE69500748T2 (de) Elektronischer Schaltkreis und Verfahren für die Verwendung mit einem Koprozessor
DE3043653A1 (de) Datenverarbeitungsanlage
EP1347599B1 (de) Verfahren und Protokolltester zum Dekodieren gemäss einer Protokollbeschreibung kodierter Daten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: FREESCALE SEMICONDUCTOR, INC., AUSTIN, TEX., US

8339 Ceased/non-payment of the annual fee