DE112006000514T5 - CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme - Google Patents

CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme Download PDF

Info

Publication number
DE112006000514T5
DE112006000514T5 DE112006000514T DE112006000514T DE112006000514T5 DE 112006000514 T5 DE112006000514 T5 DE 112006000514T5 DE 112006000514 T DE112006000514 T DE 112006000514T DE 112006000514 T DE112006000514 T DE 112006000514T DE 112006000514 T5 DE112006000514 T5 DE 112006000514T5
Authority
DE
Germany
Prior art keywords
address
register
ram
data
architecture
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.)
Withdrawn
Application number
DE112006000514T
Other languages
English (en)
Inventor
Benjamin F. San Jose Froemming
Emil Campbell Lambrache
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.)
Atmel Corp
Original Assignee
Atmel Corp
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 Atmel Corp filed Critical Atmel Corp
Publication of DE112006000514T5 publication Critical patent/DE112006000514T5/de
Withdrawn 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/30098Register arrangements
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3824Operand accessing
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

Architektur zum Implementieren einer Befehlspipeline zum Ausführen von Befehlen innerhalb einer Zentraleinheit (CPU), wobei die Architektur aufweist:
ein Adressenrechenwerk (AAU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang;
ein Rechen- und Leitwerk (ALU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang;
ein Programmzähler- (PC) Register, das mit dem Datenausgang des Adressenrechenwerks (AAU) gekoppelt ist;
einen Festwertspeicher (ROM), der mit dem Programmzähler gekoppelt ist, wobei der Festwertspeicher ferner mit einem Befehlsregister und mit einem Befehlsdecodierer gekoppelt ist, wobei der Befehlsdecodierer ferner mit dem ersten Dateneingang des Rechen- und Leitwerks gekoppelt ist; und
einen Direktzugriffsspeicher (RAM), der mit dem Befehlsdecodierer gekoppelt ist, wobei der Direktzugriffsspeicher ferner mit dem Ausgang des Rechen- und Leitwerks (ALU) und mit einem RAM-Adressenregister gekoppelt ist.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Erfindung betrifft integrierte Schaltungen. Insbesondere betrifft die vorliegende Erfindung eine Vorrichtung und ein Verfahren für eine Mikrocontrollerarchitektur, die eine Befehlspipeline implementiert, um die Programmausführung zu beschleunigen und den Leistungsverbrauch zu verringern.
  • STAND DER TECHNIK
  • Das Erhöhen der Systemtaktfrequenz ist ein häufig verwendetes Verfahren zum Verbessern der Rechenleistung einer Zentraleinheit (CPU) innerhalb eines Mikroprozessors oder Mikrocontrollers. Von Fachleuten wird anerkannt, dass die typische Leistung (P), die von einer CPU verbraucht wird, von der gesamten CPU-Gatterkapazität (C), von der Versorgungsspannung (V) und von der Systemtaktfrequenz (f) gemäß der Formel: P ∝ CV2 fabhängt.
  • Der Leistungsverbrauch kann durch Senken von C, V oder f verringert werden. Die Kapazität (C) auf dem Chip wird durch die Menge an Gattern, die zum Implementieren eines Entwurfs erforderlich ist, festgelegt. Festgelegte Entwürfe werden gewöhnlich hinsichtlich der Minimierung der Gatteranzahl, die zum Verwirklichen der erforderlichen Logik nötig ist, optimiert und bieten typischerweise wenig Möglichkeiten für eine Verbesserung. Die Betriebsspannung (V) ist durch die Prozesstechnologie und die zugehörigen Betriebseigenschaften von Transistoren, die auf dieser Technologie aufgebaut sind, begrenzt. Die Systemtaktfrequenz (f) stellt häufig die beste Gelegenheit für eine Verbesserung dar.
  • Durch Verringern der Anzahl von Taktzyklen, die erforderlich sind, um einen Befehl zu vollenden, kann die Systemtaktfrequenz gesenkt werden, um die Leistung zu verringern, während der Rechendurchsatz aufrechterhalten wird. Alternativ kann die Systemtaktfrequenz aufrechterhalten werden und eine höhere Rechenrate kann für einen gegebenen Leistungsaufwand durchgeführt werden. In beiden Fällen wird die pro Berechnung erforderliche Energie verringert. Folglich ist die Verringerung der Anzahl von Taktzyklen, die erforderlich sind, um einen Befehl auszuführen, ein signifikantes Verfahren zum Verbessern der Leistung einer CPU. Was daher erforderlich ist, ist ein Verfahren zum Verwirklichen einer CPU mit hoher Leistung; das heißt mit hoher Geschwindigkeit und niedrigem Leistungsverbrauch, mittels einer Verringerung der Anzahl von Taktzyklen, die zum Ausführen eines Befehls erforderlich sind. Ein System und ein Verfahren zum parallelen Ausführen von Befehlen kann mit dieser Anforderung durch Erhöhen der Anzahl von Befehlen, die mit einer gegebenen Menge an Systemtaktzyklen ausgeführt werden, fertig werden.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung betrifft eine Vorrichtung und ein Verfahren für eine Befehlspipeline in einer CPU. Bei einem beispielhaften Ausführungsbeispiel ist die vorliegende Erfindung in einen Mikrocontroller integriert, der den MCS-51-Befehlssatz mit 16-Bit-Adressen und 8-Bit-Daten verarbeitet. Mikrocontroller, die den MCS-51-Befehlssatz verwenden, sind Fachleuten als 8051-Mikrocontroller bekannt. Mit Bezug auf 1 weist ein Blockdiagramm eines 8051-Mikrocontrollers, wie im Stand der Technik bekannt, einen internen Bus auf, der einen gemeinsamen Pfad für eine Kommunikation zwischen einem Festwertspeicher (ROM), einem Direktzugriffsspeicher (RAM) und einem Rechen- und Leitwerk (ALU) bereitstellt. Ein Adressenregister (AR), ein Akkumulatorregister (ACC), ein temporäres Register (TMP), ein Datenzeigerregister (DPTR) und ein Stapelzeigerregister (SP) sind jeweils am internen Datenbus angegliedert.
  • Der im Stand der Technik bekannte typische 8051-Mikrocontroller erfordert drei Systemtaktzyklen, um einen Ein-Byte-Befehl aus dem Festwertspeicher (ROM) in ein Befehlsregister (IR) abzurufen. Die vorliegende Erfindung verringert den Abruf des Ein-Byte-Befehls auf einen einzelnen Systemtaktzyklus. Die Befehle im MCS-51-Befehlssatz weisen eine Länge von ein, zwei oder drei Bytes auf. In 8051-Mikrocontrollern des Standes der Technik können daher die Befehlsabrufoperationen bis zu neun Systemtaktzyklen erfordern:
    Befehlslänge (Bytes) Abruf (Systemtakte)
    Ein Zwei Drei Drei Sechs Neun
  • Bei 8051-Mikrocontrollern des Standes der Technik übersteigt die zum Vollenden der Ausführung eines Befehls erforderliche Zeit die Abrufzeit, da die für den Befehl erforderlichen Mikrooperationen erst nach der Vollendung der Befehlsabrufoperation durchgeführt werden können und die Mikrooperationen sich einen einzelnen internen Bus zeitlich teilen müssen. Typischerweise erfordern Befehle sechs oder zwölf Systemtaktzyklen zur Ausführung. Folglich wird ein Ein-Byte-Befehl oder ein Zwei-Byte-Befehl in sechs Systemtaktzyklen ausgeführt, wobei effektiv drei Systemtaktzyklen bei der Ausführung eines Ein-Byte-Befehls verschwendet werden. Ein Drei-Byte-Befehl erfordert zwölf Systemtaktzyklen zur Ausführung, wobei effektiv drei Systemtaktzyklen verschwendet werden.
  • Bei dem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung wird ein einzelner Zyklus pro Byteabruf mittels eines 16-Bit-Adressenrechenwerks (AAU) ermöglicht, das mit einem Programmzähler (PC) und einer zweckgebundenen Inkrementierungs/Dekrementierungs-Einheit gekoppelt ist, die mit einem Stapelzeiger (SP) gekoppelt ist. Der Programmzähler (PC) wird kontinuierlich um einen Wert von "1" inkrementiert, wobei jedes Befehlsbyte abgerufen wird, um die Befehlspipeline aufrechtzuerhalten, aber der Stapelzeiger (SP) kann unabhängig eingespeichert oder entnommen werden, um Abarbeitungsunterbrechungen zu ermöglichen. Ein Direktzugriffsspeicher (RAM) wird verwendet, um den Wert des Programmzählers (PC) während einer Unterbrechungsabarbeitung zu bewahren und den Wert des Programmzählers (PC) bei der Rückkehr von der Unterbrechungssubroutine wiederherzustellen. Ein zweckgebundener Puffer bewahrt die korrekte Rückkehradresse während der Unterbrechung oder Softwareaufrufen zum Einspeichern in den RAM auf.
  • Eine weitere Verbesserung gegenüber dem Stand der Technik wird unter Verwendung von separaten Registern implementiert, um eine Leseadressenspeicherung und Schreibadressenspeicherung des Direktzugriffsspeichers (RAM) bereitzustellen. Das zweckgebundene RAM-Schreibadressenregister macht es möglich, eine einem Befehl zugeordnete Schreiboperation zu verzögern. Die verzögerte Schreiboperation ermöglicht, dass Befehle effektiv die Operation während eines gegebenen Systemtaktzyklus vollenden können, wobei die zugehörige Schreiboperation im folgenden Systemtaktzyklus geschieht. Die verzögerte RAM-Schreibfähigkeit macht es möglich, einen Stillstand der Befehlspipeline durch eine anhängige Schreiboperation zu vermeiden. Die separaten RAM-Leseadressenspeicher- und RAM-Schreibadressenspeicher-Register ermöglichen auch eine Datendurchgangsfähigkeit im RAM: Wenn beide Register mit derselben RAM-Adresse versehen werden, werden Daten, die im RAM-Datenspeicherregister vorhanden sind, unmittelbar am RAM-Ausgang zur Verfügung gestellt, während sie gleichzeitig in den adressierten Speicherbereich geschrieben werden. Das Durchgangsmerkmal macht es möglich, dass die Ergebnisse einer Berechnung zur weiteren Verarbeitung mit minimaler Zeitverzögerung zur Verfügung stehen, was weiter die Fähigkeiten der Befehlspipeline aktiviert.
  • Ein Befehlsvordecodierungspfad wird vom Festwertspeicher (ROM) zum Direktzugriffsspeicher (RAM) bereitgestellt, der verwendet wird, um die Ausführung von Registeroperationen zu beschleunigen, wobei der normale Decodierprozess umgangen wird. Außerdem verhindert ein Registerbank-Weiterleitungspfad, dass die Pipeline stehen bleibt, wenn eine Registeroperation einer Änderung der aktiven Registerbank bei einem Programmstatuswort (PSW) folgt.
  • Ein zweckgebundener Datenpfad ist vom RAM-Datenausgang direkt zu einem 8-Bit-Datenrechen- und -leitwerk (ALU) ohne zwischenliegendes temporäres Speicherregister vorgesehen. Ein zweckgebundener Datenpfad ist auch vom Rechen- und Leitwerk (ALU) zum RAM-Dateneingangsregister vorgesehen. Die Merkmale des zweckgebundenen Datenpfades sehen einen Pfad mit hohem Durchatz vor, der ermöglicht, dass Daten vom RAM gelesen, verarbeitet und anschließend wieder in den RAM geschrieben werden können. Dies ist eine Verbesserung gegenüber den 8051-Mikrocontrollern des Standes der Technik dar, die einen einzelnen internen Bus verwenden.
  • Die kombinierten Verbesserungen, die durch die zweckgebundenen Datenpfade, die Befehlsvordecodierung und die Bankweiterleitung und die separaten RAM-Lese- und -Schreibadressenregister verkörpert werden, ermöglichen die Vollendung eines Registerinkrementierungsbefehls in einem einzelnen Systemtaktzyklus und eine indirekte Registerinkrementierung in zwei Systemtaktzyklen.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockdiagramm eines 8051-Mikrocontrollers, wie im Stand der Technik bekannt.
  • 2 ist ein Architekturblockdiagramm eines Pipelineteils einer CPU gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • 3 ist ein Ablaufdiagramm zur Befehlspipelineverarbeitung mit Ein-Byte-Befehlen gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • 4 ist ein Ablaufdiagramm zur Befehlspipelineverarbeitung mit Ein-Byte- und Zwei-Byte-Befehlen gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • 5 ist ein Diagramm einer Aktivität innerhalb eines Rechen- und Leitwerks (ALU), wenn Ein-Zyklus-Befehle ausgeführt werden, gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • 6 ist ein Diagramm einer Aktivität innerhalb eines Rechen- und Leitwerks (ALU), wenn Befehle mit zwei Zyklen ausgeführt werden, gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • 7 ist ein beispielhaftes Architekturblockdiagramm eines Adressenberechnungsteils einer CPU gemäß der vorliegenden Erfindung.
  • 8A ist eine Darstellung einer Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer regulären Befehlsausführung.
  • 8B ist eine Darstellung einer Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer Hardwareunterbrechungsausführung.
  • 8C ist eine Darstellung einer Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer Softwareunterbrechungsausführung.
  • 9 ist ein beispielhaftes Architekturblockdiagramm eines Befehlsvordecodierungs- und RAM-Zugriffsteils einer CPU gemäß der vorliegenden Erfindung.
  • 10 ist ein Ablaufdiagramm für einen Registerinkrementierungsbefehl gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung.
  • AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
  • Mit Bezug auf 2 weist ein Zentraleinheits- (CPU) Pipelinearchitekturteil 200 gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung ein Rechen- und Leitwerk (ALU) 210 mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang auf. Bei dem beispielhaften Ausführungsbeispiel ist das Rechen- und Leitwerk (ALU) 210 dazu ausgelegt, Acht-Bit-Binärzahlen zu verarbeiten. Der Datenausgang des Rechen- und Leitwerks (ALU) 210 ist mit einem Akkumulatorregister (ACC) 290 und mit einem Direktzugriffsspeicher (RAM) 270 gekoppelt. Außerdem enthält das beispielhafte Ausführungsbeispiel ein Adressenrechenwerk (AAU) 215 mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang. Beim beispielhaften Ausführungsbeispiel ist das Adressenrechenwerk (AAU) 215 dazu ausgelegt, Sechzehn-Bit-Binärzahlen zu verarbeiten. Der Datenausgang des Adressenrechenwerks (AAU) 215 ist mit einem Programmzähler (PC) 220 gekoppelt.
  • Der Direktzugriffsspeicher (RAM) 270 ist als 256×8 Bits für eine gesamte Speicherkapazität von 256 Bytes organisiert. Der Programmzähler (PC) 220 ist ferner mit einem Festwertspeicher (ROM) 230 und mit dem ersten Dateneingang des Adressenrechenwerks (215) gekoppelt. Der Festwertspeicher (ROM) 230 wird verwendet, um das CPU-Programm (d.h. die Folge von Befehlen, die von der CPU ausgeführt werden sollen) zu speichern. Bei einem speziellen beispielhaften Ausführungsbeispiel befindet sich ein Programm auf der Basis des MCS-51-Befehlssatzes im Festwertspeicher (ROM) 230. Ein im Programmzähler (PC) 220 gespeicherter Adressenwert wird verwendet, um einen speziellen Befehl im Festwertspeicher (ROM) 230 auszuwählen, der zu einem Befehlsregister (IR) 240 geleitet werden soll. Das Befehlsregister (IR) 240 stellt eine vorübergehende Speicherung für einen Befehl vor dem Leiten des Befehls zu einem Befehlsdecodierer 250 bereit. Der Befehlsdecodierer 250 ist mit dem zweiten Dateneingang des Adressenrechenwerks (AAU) 215 und mit dem Direktzugriffsspeicher (RAM) 270 gekoppelt. Eine Funktion des Befehlsdecodierers 250 besteht darin, die arithmetischen/logischen Operationen, die für einen Befehl erforderlich sind, zu erkennen und die erforderlichen Daten zum Rechen- und Leitwerk (ALU) zu leiten. Eine zusätzliche Funktion des Befehlsdecodierers 250 besteht darin, zu bewirken, dass das Adressenrechenwerk (AAU) 215 den Programmzähler (PC) 220 bei Bedarf inkrementiert.
  • Der Direktzugriffsspeicher (RAM) 270 ist ferner mit einem RAM-Adressenregister (AR) 260 gekoppelt. Eine RAM/ALU-Verbindung 280 koppelt den Direktzugriffsspeicher (RAM) 270 mit dem zweiten Dateneingang des Rechen- und Leitwerks (ALU) 210. Der erste Dateneingang des Rechen- und Leitwerks (ALU) 210 ist mit dem Akkumulatorregister (ACC) 290 gekoppelt. Bei einem speziellen beispielhaften Ausführungsbeispiel der vorliegenden Erfindung stellt die RAM/ALU-Verbindung 280 einen zweckgebundenen Acht-Bit-Datenpfad bereit, um Daten vom Direktzugriffsspeicher (RAM) 270, das heißt Daten von einer Leseoperation, zum Rechen- und Leitwerk (ALU) 210 zu befördern. Mikrocontroller, die im Stand der Technik bekannt sind und die den MCS-51-Befehlssatz verwenden, verwenden typischerweise einen gemeinsam genutzten internen Bus, den der RAM braucht, um Daten auf den Bus zu treiben, mit anschließender Speicherung in einem temporären Register. Die Implementierung der RAM/ALU-Verbindung 280 als zweckgebundenen Datenpfad schafft eine signifikante Verbesserung der Leistung des Zentraleinheits- (CPU) Pipelinearchitekturteils 200.
  • Fachleute werden erkennen, dass Datensignalpfad-Richtungen in 2 durch Pfeile angegeben sind. Ferner ist zu erkennen, dass zusätzliche Logikblöcke, die in 2 und den Figuren unten nicht gezeigt sind, existieren können und mit den dargestellten Blöcken gekoppelt sein können, um die volle Fähigkeit zur Ausführung des MCS-51-Befehlssatzes bereitzustellen. Fachleute werden erkennen, dass nur diejenigen Blöcke, die für die Ausführung der vorliegenden Erfindung erforderlich sind, gezeigt sind, um zu vermeiden, dass die relevanten Elemente verdeckt werden.
  • Die Aufmerksamkeit wird nun auf 3 gelenkt, nämlich auf ein erstes beispielhaftes Ablaufdiagramm 300 für die Befehlspipelineverarbeitung mit Ein-Byte-Befehlen gemäß der vorliegenden Erfindung. Das erste beispielhafte Ablaufdiagramm 300 umfasst eine erste Beispiel-Systemtaktwellenform 310, ein Aktivitätsdiagramm 320 für den n-ten Befehl, ein Aktivitätsdiagramm 330 für den (n + 1)-ten Befehl und ein Aktivitätsdiagramm 340 für den (n + 2)-ten Befehl. Vertikale gestrichelte Linien in 3 und in den unten angeführten Figuren, die Ablaufdiagramme enthalten, trennen Intervalle des Systemtakts. Die vertikalen gestrichelten Linien fallen mit positiven Flankenübergängen des Systemtakts zusammen.
  • Bei fortgesetztem Bezug auf 3 ist ersichtlich, dass während eines Systemtaktintervalls Tn der n-te Befehl einer Abrufoperation unterzogen wird. Im anschließenden Systemtaktintervall Tn+1 wird der n-te Befehl ausgeführt. Gleichzeitig wird während des Systemtaktintervalls Tn+1 der (n + 1)-te Befehl einer Abrufoperation unterzogen. Während des anschließenden Systemtaktintervalls Tn+2 hat der n-te Befehl die Ausführung vollendet. Der (n + 1)-te Befehl wird ausgeführt und der (n + 2)-te Befehl wird einer Abrufoperation unterzogen. Die Gleichzeitigkeit zwischen dem Befehlsabruf und der Befehlsausführung verbessert dir Gesamtrechenleistung der CPU und ist Fachleuten als zweistufige Pipeline bekannt. Die Operationseigenschaften der zweistufigen Pipeline, wenn eine Kombination von Ein-Byte- und Zwei-Byte-Befehlen ausgeführt wird, werden mit Bezug auf 4, nämlich auf ein zweites beispielhaftes Ablaufdiagramm 400 zur Befehlspipelineverarbeitung mit Ein-Byte- und Zwei-Byte-Befehlen gemäß der vorliegenden Erfindung, vorgestellt. Das zweite beispielhafte Ablaufdiagramm 400 umfasst eine zweite Beispiel-Systemtaktwellenform 410, ein Aktivitätsdiagramm 420 für den n-ten Befehl, ein Aktivitätsdiagramm 430 für den (n + 1)-ten Zwei-Byte-Befehl, ein Aktivitätsdiagramm 440 für den (n + 2)-ten Zwei-Byte-Befehl und ein Aktivitätsdiagramm 450 für den (n + 3)-ten Befehl. Der Bezug auf die Figur zeigt, dass während eines Systemtaktintervalls Tn der n-te Befehl einer Abrufoperation unterzogen wird. Im anschließenden Systemtaktintervall Tn+1 wird der n-te Befehl ausgeführt. Gleichzeitig wird während des Systemtaktintervalls Tn+1 ein erstes Befehlsbyte des (n + 1)-ten Zwei-Byte-Befehls einer Abrufoperation unterzogen. Während des anschließenden Systemtaktintervalls Tn+2 hat der n-te Befehl die Ausführung vollendet und das zweite Befehlsbyte des (n + 1)-ten Zwei-Byte-Befehls wird einer Abrufoperation unterzogen. Während des Systemtaktintervalls Tn+3 wird der (n + 1)-te Zwei-Byte-Befehl ausgeführt und das erste Befehlsbyte des (n + 2)-ten Zwei-Byte-Befehls wird einer Abrufoperation unterzogen. Während des Systemtaktintervalls Tn+4 wird das zweite Befehlsbyte des (n + 2)-ten Zwei-Byte-Befehls einer Abrufoperation unterzogen. Während des Systemtaktintervalls Tn+5 wird der (n + 2)-te Zwei-Byte-Befehl ausgeführt und der (n + 3)-te Befehl wird einer Abrufoperation unterzogen.
  • Nun wird die Aufmerksamkeit auf 5, nämlich auf ein Diagramm der Aktivität innerhalb des Rechen- und Leitwerks (ALU) 210 (2) gerichtet, wenn ein Ein-Zyklus-Befehl gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung ausgeführt wird. Das Ein-Zyklus-ALU-Operationsdiagramm 500 umfasst eine Ein-Zyklus-Beispiel-Systemtaktwellenform 510, ein Ein-Zyklus-Gesamtausführungszeit-Aktivitätsdiagramm 520, ein Ein-Zyklus-Registeroperandenabruf-Aktivitätsdiagramm 530, ein Ein-Zyklus-ALU-Operationsausführungs-Aktivitätsdiagramm 540, ein Ein-Zyklus-Ergebnisrückschreib-Aktivitätsdiagramm 550 und ein Ein-Zyklus-Nächsten-Befehl-Abruf-Aktivitätsdiagramm 560. Mehrere Ereignisse geschehen innerhalb eines Systemtaktintervalls T1, das der Gesamtausführungszeit für einen Ein-Zyklus-Befehl entspricht. Insbesondere überspannt eine Abrufoperation für de nächsten Befehl das gesamte Systemtaktintervall T1. Eine Registeroperandenabruf- und eine ALU-Operation werden ausgeführt; sie sind jeweils für nur einen Teil des Systemtaktintervalls T1 aktiv. Eine weitere Untersuchung der Figur zeigt an, dass ein Teil der ALU-Operationsausführung gleichzeitig mit der Registeroperandenabruf-Operation stattfindet. Außerdem geschieht die Ergebnisrückschreib-Operation am Beginn des nächsten Systemtaktintervalls T2. Die Verzögerung der Ergebnisrückschreib-Operation wird nachstehend erläutert.
  • Nun wird die Aufmerksamkeit auf 6, ein Diagramm der Aktivität innerhalb des Rechen- und Leitwerks (ALU) 210, wenn ein Zwei-Zyklus-Befehl gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung ausgeführt wird, gelenkt. Das Zwei-Zyklus-ALU-Operationsdiagramm 600 umfasst eine Zwei-Zyklus-Beispiel-Systemtaktwellenform 610, ein Zwei-Zyklus-Gesamtausführungszeit-Aktivitätsdiagramm 620, ein Zwei-Zyklus-Abrufdiagramm 630 für den unmittelbaren Operanden, ein Zwei-Zyklus-ALU-Operationsausführungs-Aktivitätsdiagramm 640, ein Zwei-Zyklus-Ergebnisrückschreib-Aktivitätsdiagramm 650 und ein Zwei-Zyklus-Nächsten-Befehl-Abruf-Aktivitätsdiagramm 660. Ereignisse geschehen innerhalb der Zeitspanne eines Systemtaktintervalls T1 und eines Systemtaktintervalls T2, die in Kombination der Gesamtausführungszeit für einen Zwei-Zyklus-Befehl entsprechen. Ein Abrufbefehl für den unmittelbaren Operanden wird während des Systemtaktintervalls T1 ausgeführt und schließt bei der steigenden Taktflanke der Zwei-Zyklus-Beispiel- Systemtaktwellenform 610 ab, die das Systemtaktintervall T1 und das Systemtaktintervall T2 trennt. Eine ALU-Operationsausführung und eine Abruf-Operation für den nächsten Befehl starten am Beginn des Systemtaktintervalls T2. Eine ALU-Operationsausführung schließt an einer fallenden Flanke der Zwei-Zyklus-Beispiel-Systemtaktwellenform 610, in der ungefähren Mitte des Systemtaktintervalls T2, ab. Eine Ergebnisrückschreib-Operation beginnt an der steigenden Flanke der Zwei-Zyklus-Beispiel-Systemtaktwellenform 610, zu Beginn des Systemtaktintervalls T3. Die Abrufoperation für den nächsten Befehl schließt an der steigenden Taktflanke der Zwei-Zyklus-Beispiel-Systemtaktwellenform 610 ab, die das Systemtaktintervall T2 und das Systemtaktintervall T3 trennt.
  • Die Aufmerksamkeit wird nun auf 7, nämlich auf ein CPU-Adressenarchitektur-Blockdiagramm 700 mit dem Adressenrechenwerk (AAU) 215, dem Programmzähler 220, einem Adressenpuffer 730, einem ersten Multiplexer 735, einem Datenzeigerregister 740, einem zweiten Multiplexer 750, einem dritten Multiplexer 755, einem Stapelzeiger 770, einer Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit 780 und einem Versatzregister 790, gelenkt. Datenpfade innerhalb des CPU-Adressenarchitektur-Blockdiagramms 700 sind durch Linien angegeben und die Datenflussrichtungen sind ferner durch Pfeilköpfe angegeben.
  • Der zweite Multiplexer 750 ist mit dem Programmzähler (PC) 220, mit dem Datenzeigerregister 740 und mit dem ersten Dateneingang des Adressenrechenwerks (AAU) 215 gekoppelt. Der Multiplexer 750 wählt einen Adressenwert, der im Programmzähler 220 enthalten ist, oder einen Adressenwert, der im Datenzeigerregister 740 enthalten ist, für die Operation durch das Adressenrechenwerk (AAU) 215 aus. Der dritte Multiplexer 755 ist mit dem Akkumulatorregister (AAC) 290, mit einem konstanten Versatzwert 760, mit dem Versatzregister 790 und mit dem zweiten Dateneingang des Adressenrechenwerks (AAU) 215 gekoppelt. Der dritte Multiplexer 755 wählt einen von einem Adressenversatzwert, der im Versatzregister 790 enthalten ist, einem Adressenversatzwert, der im Akkumulatorregister (ACC) 290 enthalten ist, und dem konstanten Versatzwert 760 zur Operation durch das Adressenrechenwerk (AAU) 215 aus. Bei einem speziellen beispielhaften Ausführungsbeispiel wird der konstante Versatzwert 760 auf einem Wert von Eins ("1") gehalten, so dass das Adressenrechenwerk (AAU) 215 zum Inkrementieren eines Befehlsadressenwerts so, dass er auf einen nachfolgenden Adressenwert zeigt, veranlasst wird.
  • Das Adressenrechenwerk (AAU) 215 verarbeitet 16-Bit-Binärzahlen mit einer Fähigkeit eines Volladdierers. Der Programmzähler (PC) 220, der Adressenpuffer 730 und das Datenzeigerregister 740 sind jeweils Sechzehn-Bit-Register. Mikrocontroller, die im Stand der Technik bekannt sind und die den MCS-51-Befehlssatz benutzen, verwenden typischerweise ein 8-Bit-ALU, um ein Datenzeigerregister zu inkrementieren. Das Datenzeigerregister des Standes der Technik ist typischerweise ein 16-Bit-Register. Folglich sind mehrere Operationen im Stand der Technik erforderlich, um die Inkrementierungsoperation durchzuführen: erstens wird ein Teil eines niedrigen Bytes einer vom Datenzeiger gehaltenen Adresse in das ALU geladen. Ein Inkrement von Eins wird zur Adresse addiert und das Ergebnis wird wieder in das niedrige Byte des Datenzeigers geschrieben. Als nächstes wird ein Teil eines hohen Bytes der vom Datenzeiger gehaltenen Adresse in das ALU geladen und ein Übertragwert aus der Inkrementierungsoperation des niedrigen Bytes wird addiert. Das Ergebnis wird wieder in das hohe Byte des Datenzeigers geschrieben. Die 16-Bit-Arithmetikfähigkeit des Adressenrechenwerks (AAU) 215 der vorliegenden Erfindung ermöglicht, dass das Datenzeigerregister 740 mit einer einzelnen Operation aktualisiert wird. Die Einzel-Operations-Aktualisierungsfähigkeit verbessert die Systembetriebsgeschwindigkeit und unterstützt die oben erläuterten Befehlspipelineoperationen.
  • Der Programmzähler (PC) 220 wird mit jeder Befehlsausführung aktualisiert. Der Befehl, auf den durch den Programmzähler (PC) 220 gezeigt wird, ist um einen Befehl dem ausgeführten Befehl voraus. Das Halten der Adresse im Programmzähler (PC) 220 um einen Befehl dem ausgeführten Befehl voraus stellt ein Mittel zum Aufrechterhalten der Befehlspipeline bereit. Für Fachleute ist zu erkennen, dass die Aktualisierung des Programmzählers (PC) 220 mit ausreichender Schnelligkeit geschieht, um dem aktuellen Befehl voraus zu bleiben. Da die vorliegende Erfindung die Ausführung von Befehlen so schnell wie einen einzelnen Systemtaktzyklus bereitstellt, sollte der Programmzähler (PC) 220 ebenso in einem einzelnen Systemtaktzyklus aktualisiert werden können. Mikrocontroller, die im Stand der Technik bekannt sind und die den MCS-51-Befehlssatz verwenden, weisen typischerweise einen zweckgebundenen Inkrementierer für den Programmzähler (PC) 220 auf, verwenden jedoch ein 8-Bit-ALU, um relative Verzweigungsadressen durch Addieren eines Versatzes zum Programmzähler (PC) 220 zu berechnen. Die Verwendung eines 8-Bit-ALU zum Berechnen des nächsten Programmzählerwerts für Programmverzweigungen erfordert aus Gründen, die oben in Zusammenhang mit der Erörterung des Datenzeigerregisters 740 erläutert sind, mehrere Taktzyklen. Die 16-Bit-Arithmetikfähigkeit des Adressenrechenwerks (AAU) 215 und die Verbindung mit dem Versatzregister 790 und dem Akkumulatorregister (ACC) 290 durch den dritten Multiplexer 755 bildet Verbesserungen gegenüber dem Stand der Technik und ermöglicht, dass der Programmzähler (PC) 220 Aktualisierungen vornehmen kann, um mit der Befehlsausführungspipeline Schritt zu halten.
  • Der Adressenpuffer 730 stellt ein Mittel zum Handhaben von Unterbrechungen und Subroutinenaufrufen ohne Unterbrechen von Inkrementierungsoperationen des Programmzählers (PC) 220 bereit. Der Adressenpuffer 730 ist mit dem ersten Multiplexer 735 gekoppelt, der wiederum mit dem Programmzähler (PC) 220 und dem Datenausgang des Adressenrechenwerks (AAU) 215 gekoppelt ist. Die Operation und die Beziehung des Programmzählers (PC) 220 und des Adressenpuffers 730 werden nachstehend genauer erläutert.
  • Der Stapelzeiger 770 nimmt auf einen Teil des Direktzugriffsspeichers (RAM) 270 (2) Bezug, der als Speicherstapel verwendet wird, der einen Zugriff auf Variablen bereitstellt, auf die häufig oder mit hoher Geschwindigkeit zugegriffen werden muss. Ein Eingang der Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit 780 ist mit einem Ausgang des Stapelzeigers 770 gekoppelt. Ein Ausgang der Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit 780 ist mit einem Eingang des Stapelzeigers 770 gekoppelt. Bei einem speziellen beispielhaften Ausführungsbeispiel ist der Stapelzeiger 770 ein 8-Bit-Register. Mikrocontroller, die im Stand der Technik bekannt sind und die mit dem MCS-51-Befehlssatz arbeiten, verwenden ein einzelnes 8-Bit-ALU zum Ausführen von arithmetischen und logischen Befehlen und zum Inkrementieren/Dekrementieren eines Stapelzeigerregisters. Die Pipelinearchitektur der vorliegenden Erfindung gestattet keine ausreichende Zeit, damit das Rechen- und Leitwerk (ALU) 210 einen Stapelzeiger inkrementiert/dekrementiert. Um Inkrementierungs- und Dekrementierungsoperationen für den Stapelzeiger 770 bereitzustellen, stellt die Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit 780 ein zweckgebundenes Mittel zum Modifizieren der Adresse, auf die durch den Stapelzeiger 770 gezeigt wird, ohne unnötiges Verlassen auf die Fähigkeit des Rechen- und Leitwerks (ALU) 210 bereit, was eine weitere Verbesserung gegenüber dem Stand der Technik schafft.
  • Die Verwendung des Programmzählers (PC) 220 und des Adressenpuffers 730 wird nun mit Bezug auf 8A, 8B und 8C erläutert. Mit Bezug auf 8A umfasst eine Darstellung einer Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer regulären Befehlsausführung eine Pufferverwendungs-Beispiel-Systemtaktwellenform 810A, eine Liste 820A aktueller Befehle, eine Inhaltsliste 830A des Programmzählers (PC) 220 und eine Inhaltsliste 840A des Adressenpuffers 730. In einem Systemtaktzyklusintervall Tn zeigt ein Bezug auf die Liste 820A aktueller Befehle, dass ein Befehl I1 ausgeführt wird. Während des Systemtaktintervalls Tn ist ein Adressenwert A + 1, der die Adresse des nächsten Befehls I2 darstellt, im Programmzähler (PC) 220 vorhanden. Ebenso ist während des Systemtaktintervalls Tn der Adressenwert A, der die Adresse des aktuellen Befehls I1 darstellt, im Adressenpuffer 730 vorhanden.
  • In einem Systemtaktzyklus Tn+1 verdeutlicht ein Bezug auf die Liste 820A aktueller Befehle, dass der Befehl I2, auf den durch den Programmzähler (PC) 220 während des vorherigen Systemtaktintervalls Tn gezeigt wird, nun ausgeführt wird. Während des Systemtaktintervalls Tn +1 ist der Adressenwert A + 2, der die Adresse des nächsten Befehls I3 darstellt, im Programmzähler (PC) 220 vorhanden, und der vorherige Adressenwert A + 1 ist im Adressenpuffer 730 vorhanden. Der Fortschritt der Befehlsausführung und der Adresseninkrementierungsoperation fährt in derselben Weise, wie oben beschrieben, während der regulären Befehlsausführung, das heißt der Ausführung von Befehlen ohne Software- oder Hardwareunterbrechung (Fachleuten auch als Hardcall bekannt), fort. Während der regulären Befehlsausführung stellt der Programmzähler (PC) 220 die Befehlsadresse bereit und der Adressenpuffer 730 wird nicht verwendet, um die Befehlspipeline aufrechtzuerhalten.
  • Mit Bezug auf 8B umfasst eine Darstellung einer Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer Unterbrechungsausführung eine Pufferverwendungs-Beispiel-Systemtaktwellenform 810B, eine Liste 820B aktueller Befehle, eine Inhaltsliste 830B des Programmzählers (PC) 220, eine Inhaltsliste 840B des Adressenpuffers 730, ein Unterbrechungserfassungsereignis 850 und eine Aktionszusammenfassung 860B. In einem Systemtaktintervall Tn zeigt eine Bezugnahme auf die Liste 820B aktueller Befehle, dass ein Befehl I1 ausgeführt wird. Während des Systemtaktintervalls Tn ist ein Adressenwert A + 1, der die Adresse eines I2-Befehls darstellt, im Programmzähler (PC) 220 vorhanden. Ebenso ist während des Systemtaktintervalls Tn der Adressenwert A, der die Adresse des aktuellen Befehls I1 darstellt, im Adressenpuffer 730 vorhanden. Der I2-Befehl stellt den bei Abwesenheit eines Unterbrechungsereignisses, d.h. während der normalen Programmausführung, nächsten auszuführenden Befehl in der Reihe dar.
  • Bei einer steigenden Flanke der Pufferverwendungs-Beispiel-Systemtaktwellenform 810B, die dem Ende des Systemtaktintervalls Tn entspricht, tritt das Unterbrechungserfassungsereignis 850 auf, das den Beginn einer Hardware- (Hardcall) Unterbrechung angibt. Bei derselben steigenden Flanke wird der vorherige Wert des Programmzählers (PC) 220 zum Adressenpuffer 730 übertragen, so dass während eines Systemtaktintervalls Tn+1 der Adressenpuffer 730 den Adressenwert A + 1 enthält, der die Adresse des Befehls I2 darstellt. Während eines Systemtaktintervalls Tn+1 wird ein Befehl H1, der den ersten Zyklus des Hardcall-Befehls darstellt, ausgeführt, wie durch die Liste 820B aktueller Befehle gezeigt. Der erste Hardcall-Befehl unterscheidet sich vom Befehl I2, der ansonsten bei Abwesenheit des Unterbrechungserfassungsereignisses 850 ausgeführt wird. Die Aktionszusammenfassung 860B stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+1 stattfinden: ein erstes Adressenbyte der Unterbrechungssubroutine wird geladen.
  • Zusätzliche Aspekte des Systemtaktintervalls Tn+1 werden nun hervorgehoben: der Programmzähler (PC) 220 enthält eine Adresse A + 2, die die Adresse eines Befehls I3 darstellt, der normalerweise dem Befehl I2 folgt. Der Adressenpuffer 730 enthält die Adresse A + 1, wie durch die Inhaltsliste 840B des Adressenpuffers 730 gezeigt. Folglich hält der Adressenpuffer 730 die Adresse des Befehls I2, die erforderlich ist, um die normale Programmausführung beim Abschluss des Unterbrechungsereignisses wieder aufzunehmen.
  • Während eines Systemtaktintervalls Tn+2 im Anschluss an das Systemtaktintervall Tn+1 wird ein Befehl H2, der den zweiten Zyklus des Hardcall-Befehls darstellt, ausgeführt, wie durch die Liste 820B aktueller Befehle gezeigt. Der Programmzähler (PC) 220 wird weiterhin durch das Adressenrechenwerk (AAU) 215 während jedes Systemtaktzyklus inkrementiert; er enthält daher eine Adresse A + 3 während des Systemtaktintervalls Tn+2. Der Adressenpuffer 730 hält jedoch die Adresse A + 1, die erforderlich ist, um die normale Programmausführung beim Abschluss des Unterbrechungsereignisses wieder aufzunehmen. Die Aktionszusammenfassung 860B stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+2 stattfinden: ein zweites Adressenbyte der Unterbrechungsroutine wird geladen und der Stapelzeiger 770 wird inkrementiert: SP ← SP + 1
  • Während eines Systemtaktintervalls Tn+3 im Anschluss an das Systemtaktintervall Tn+2 wird ein Befehl H3, der den dritten Zyklus des Hardcall-Befehls darstellt, ausgeführt, wie durch die Liste 820B aktueller Befehle gezeigt. Der Programmzähler (PC) 220 wird weiterhin durch das Adressenrechenwerk (AAU) 215 während jedes Systemtaktzyklus inkrementiert; er enthält daher eine Adresse A + 4 während des Systemtaktintervalls Tn+3. Der Adressenpuffer 730 hält jedoch die Adresse A + 1, die erforderlich ist, um die normale Programmausführung beim Abschluss des Unterbrechungsereignisses wieder aufzunehmen. Die Aktionszusammenfassung 860B stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+3 stattfinden: insbesondere wird der Stapelzeiger 770 inkrementiert: SP ← SP + 1und ein Teil eines niedrigen Bytes des Adressenpuffers wird in die aktuelle RAM-Stelle geladen, auf die durch den Stapelzeiger (bevor er inkrementiert wird) verwiesen (gezeigt) wird: (SP) ← PUFFER: 7 – 0wobei die Schreibweise (SP) die RAM-Adresse angibt, auf die durch den Stapelzeiger 770 verwiesen wird, und PUFFER: 7 – 0 die acht niedrigstwertigen Bits (Teil des niedrigen Bytes) des Adressenpuffers 730 darstellt, die die Adresse A + 1 enthalten. Man beachte, dass während des Systemtaktintervalls Tn+3 sowohl die Stapelzeigerinkrementierung als auch das Einspeichern des Puffers in den RAM parallel stattfinden, d.h. das Inkrementieren von SP beeinflusst die für das Einspeichern verwendete Adresse nicht.
  • Während eines Systemtaktintervalls Tn+4 im Anschluss an das Systemtaktintervall Tn+3 wird ein Befehl H4, der den vierten Zyklus des Hardcall-Befehls darstellt, ausgeführt, wie durch die Liste 820B aktueller Befehle gezeigt. Der Programmzähler (PC) 220 enthält nun eine Adresse B, die eine erste Befehlsadresse der Unterbrechungsdienstroutine darstellt. Der Adressenpuffer 730 hält die Adresse A + 1, die erforderlich ist, um die normale Programmausführung beim Abschluss des Unterbrechungsereignisses wieder aufzunehmen. Die Aktionszusammenfassung 860B stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+4 stattfinden: ein Sprung zu einer neuen Programmstelle (der Adresse B zugeordnet) findet statt und ein Teil eines hohen Bytes des Adressenpuffers wird in die aktuelle RAM-Stelle geladen, auf die durch den Stapelzeiger 770 verwiesen (gezeigt) wird: (SP) ← PUFFER: 15 – 8wobei die Schreibweise (SP) die RAM-Adresse angibt, auf die durch den Stapelzeiger 770 verwiesen wird, und PUFFER: 15 – 8 die acht höchstwertigen Bits (Teil des hohen Bytes) des Adressenpuffers 730 darstellt, die die Adresse A + 1 enthalten. Nach der Ladeoperation des hohen Bytes werden sowohl der Teil des niedrigen Bytes als auch der Teil des hohen Bytes der Adresse A + 1 in den Stapelspeicher geladen und stehen zur Verfügung, um die CPU mit der Adresse A + 1 zu versehen, wenn sie bei der Rückkehr von der Ausführung der Unterbrechung erforderlich ist.
  • Mit Bezug auf 8C umfasst eine Darstellung der Adressenpufferverwendung gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung während einer Software-Subroutinenaufrufausführung eine Pufferverwendungs-Beispiel-Systemtaktwellenform 810C, eine Liste 820C aktueller Befehle, eine Inhaltsliste 830C des Programmzählers (PC) 220, eine Inhaltsliste 840C des Adressenpuffers 730 und eine Aktionszusammenfassung 860C. In einem Systemtaktintervall Tn zeigt die Bezugnahme auf die Liste 820C aktueller Befehle, dass ein Befehl I1 ausgeführt wird. Während des Systemtaktintervalls Tn ist ein Adressenwert A + 1, der die Adresse eines Aufrufbefehls C1 darstellt, im Programmzähler (PC) 220 vorhanden. Ebenso ist während des Systemtaktintervalls Tn der Adressenwert A, der die Adresse des aktuellen Befehls I1 darstellt, im Adressenpuffer 730 vorhanden.
  • Bei einer steigenden Flanke der Pufferverwendungs-Beispiel-Systemtaktwellenform 810C, die dem Ende des Systemtaktintervalls Tn entspricht, wird der vorherige Wert des Programmzählers (PC) 220 zum Adressenpuffer 730 übertragen, so dass während eines Systemtaktintervalls Tn+1 der Adressenpuffer 730 den Adressenwert A + 1 enthält, der die Adresse eines Befehls C1 darstellt. Während eines Systemtaktintervalls Tn+1 wird ein Befehl C1, der den ersten Zyklus des Aufrufbefehls darstellt, ausgeführt, wie durch die Liste 820C aktueller Befehle gezeigt. Die Aktionszusammenfassung 860C stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+1 stattfinden: ein erstes Adressenbyte der Softwaresubroutine wird geladen.
  • Zusätzliche Aspekte des Systemtaktintervalls Tn+1 werden nun hervorgehoben: der Programmzähler (PC) 220 enthält eine Adresse A + 2, die die Adresse des ersten Adressenbytes der aufgerufenen Subroutine darstellt, die normalerweise dem Befehl C1 folgt. Der Adressenpuffer 730 enthält die Adresse A + 1, wie durch die Pufferadressen-Inhaltsliste 840C gezeigt. Folglich hält der Adressenpuffer 730 die Adresse des aktuellen Befehls C1.
  • Während eines Systemtaktintervalls Tn+2 im Anschluss an das Systemtaktintervall Tn+1 wird ein Befehl C2, der den zweiten Zyklus des Aufrufbefehls darstellt, ausgeführt, wie durch die Liste 820C aktueller Befehle gezeigt. Der Programmzähler (PC) 220 wird weiterhin durch das Adressenrechenwerk (AAU) 215 während jedes Systemtaktzyklus inkrementiert; er enthält daher eine Adresse A + 3 während des Systemtaktintervalls Tn+2. Der Adressenpuffer 730 hält jedoch die Adresse A + 1. Die Aktionszusammenfassung 860C stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+2 stattfinden: ein zweites Adressenbyte der Softwaresubroutine wird geladen und der Stapelzeiger 770 wird inkrementiert: SP ← SP +1
  • Bei einer steigenden Flanke der Systemtaktwellenform 810C, die dem Ende des Systemtaktintervalls Tn+2 entspricht, wird der Inkrementwert des Programmzählers (PC) 220, der vom Adressenrechenwerk (AAU) 215 stammt, zum Adressenpuffer 730 übertragen, so dass während eines Systemtaktintervalls Tn+3 der Adressenpuffer 730 den Adressenwert A + 4 enthält, der die Adresse eines Befehls I2 darstellt. I2 ist der Befehl nach C1, der bei einer Rückkehr von der Subroutine ausgeführt werden sollte. Während eines Systemtaktintervalls Tn+3 im Anschluss an das Systemtaktintervall Tn+2 wird ein Befehl C3, der den dritten Zyklus des Aufrufbefehls darstellt, ausgeführt, wie durch die Liste 820C aktueller Befehle gezeigt. Der Programmzähler (PC) 220 wird weiterhin durch das Adressenrechenwerk (AAU) 215 während jedes Systemtaktzyklus inkrementiert; daher enthält er eine Adresse A + 4 während des Systemtaktintervalls Tn+3. Der Adressenpuffer 730 enthält auch die Adresse A + 4, die erforderlich ist, um die normale Programmausführung beim Abschluss der Subroutine wieder aufzunehmen. Die Aktionszusammenfassung 860C stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+3 stattfinden: insbesondere wird der Stapelzeiger 770 inkrementiert: SP ← SP +1und ein Teil des niedrigen Bytes des Adressenpuffers wird in die aktuelle RAM-Stelle geladen, auf die vom Stapelzeiger (vor der Inkrementierung) verwiesen (gezeigt) wird: (SP) ← PUFFER: 7 – 0wobei die Schreibweise (SP) die RAM-Adresse angibt, auf die durch den Stapelzeiger 770 verwiesen wird, und PUFFER: 7 – 0 die acht niedrigstwertigen Bits (Teil des niedrigen Bytes) des Adressenpuffers 730 darstellt, die die Adresse A + 4 enthalten. Man beachte, dass während des Systemtaktintervalls Tn+3 sowohl die Stapelzeigerinkrementierung als auch das Einspeichern des Puffers in den RAM parallel stattfinden, d.h. das Inkrementieren von SP wirkt sich nicht auf die für das Einspeichern verwendete Adresse aus.
  • Während eines Systemtaktintervalls Tn+4 im Anschluss an das Systemtaktintervall Tn+3 wird ein Befehl C4, der den vierten Zyklus des Hardcall-Befehls darstellt, ausgeführt, wie durch die Liste 820C aktueller Befehle gezeigt. Der Programmzähler (PC) 220 enthält nun eine Adresse B, die eine erste Befehlsadresse der Softwaresubroutine darstellt. Der Adressenpuffer 730 hält die Adresse A + 4, die erforderlich ist, um die normale Programmausführung am Abschluss der Subroutine wieder aufzunehmen. Die Aktionszusammenfassung 860C stellt ein zusätzliches Detail von Ereignissen bereit, die in der CPU während des Systemtaktintervalls Tn+4 stattfinden: ein Sprung zu einer neuen Programmstelle (der Adresse B zugeordnet) findet statt und ein Teil des hohen Bytes des Adressenpuffers wird in die aktuelle RAM-Stelle geladen, auf die vom Stapelzeiger 770 verwiesen (gezeigt) wird: (SP) ← PUFFER: 15 – 8wobei die Schreibweise (SP) die RAM-Adresse angibt, auf die vom Stapelzeiger 770 verwiesen wird, und PUFFER: 15 – 8 die acht höchstwertigen Bits (Teil des hohen Bytes) des Adressenpuffers 730 darstellt, die die Adresse A + 4 enthalten. Nach der Ladeoperation des hohen Bytes werden sowohl der Teil des niedrigen Bytes als auch der Teil des hohen Bytes der Adresse A + 4 in den Stapelspeicher geladen und stehen zur Verfügung, um die CPU mit der Adresse A + 4 zu versehen, wenn sie bei der Rückkehr von der Ausführung der Subroutine erforderlich ist.
  • Durch Bezugnahme auf die Erläuterung von 8A, 8B und 8C oben wird die Beziehung zwischen dem Programmzähler (PC) 220 und dem Adressenpuffer 730 ersichtlich: insbesondere zeigt während der normalen Programmausführung der Programmzähler (PC) 220 auf die nächste Befehlsadresse und der Adressenpuffer 730 zeigt auf den aktuellen Adressenwert, wobei der Programmzähler (PC) 220 während eines Systemtaktzyklus inkrementiert wird. Der Adressenpuffer 730 wird nur beim Abschluss einer Befehlsausführung aktualisiert, wenn er den aktuellen Wert des Programmzählers (PC) 220 über den ersten Multiplexer 735 empfängt. Der Programmzähler (PC) 220 wird kontinuierlich aktualisiertund die Aktualisierung kann während eines Befehls stattfinden. Folglich kann der Programmzähler (PC) 220 auf eine andere Adresse als die Adresse zeigen, auf die vom Adressenpuffer 730 während eines Teils eines Befehlsausführungszyklus gezeigt wird. Auf diese Weise kann der Inkrementierungsprozess für den Programmzähler (PC) 220 mit einer Rate fortfahren, die ermöglicht, dass er sich der Ausführungsgeschwindigkeit der Befehlspipeline anpasst. Wenn eine Unterbrechung auftritt, wird der Programmzähler (PC) 220 weiterhin aktualisiert, aber die Rückkehradresse von der Unterbrechung kann vom Adressenpuffer 730 abgefangen werden. Eine Entscheidung zur Ausführung einer Unterbrechung wird daher parallel mit dem Inkrementierungsprozess des Programmzählers (PC) 220 getroffen. Dies stellt eine Verbesserung gegenüber dem Stand der Technik dar, der typischerweise eine zusätzliche Logik erfordert, um den Inkrementierungsprozess für einen Programmzähler zu stoppen und den Programmzähler zu dekrementieren, um die für die Unterbrechungssequenz erforderliche Rückkehradresse wiederherzustellen.
  • Nun wird die Aufmerksamkeit auf 9, ein beispielhaftes Befehlsvordecodierungs- und RAM-Adressierungsblockdiagramm 900 mit dem Akkumulatorregister (ACC) 290, das mit dem ersten Eingang des Rechen- und Leitwerks (ALU) 210 gekoppelt ist, gelenkt. Ein Multiplexer 930 wählt einen RAM-Ausgangspfad 940A oder einen alternativen Multiplexereingang 940B zum Koppeln mit dem zweiten Eingang des Rechen- und Leitwerks (ALU) 210 aus. Ein Ausgang des Rechen- und Leitwerks (ALU) 210 ist mit einem Datenregister 950 gekoppelt. Das Datenregister 950 ist ferner mit dem Direktzugriffsspeicher (RAM) 270 gekoppelt. Ein Ausgang aus dem Direktzugriffsspeicher (RAM) 270 ist mit dem RAM-Ausgangspfad 940A, mit einem RAM-Leseadressenregister (RAR) 960A und mit einem RAM-Schreibadressenregister (WAR) 960B gekoppelt. Das RAM-Leseadressenregister (RAR) 960A ist mit dem Direktzugriffsspeicher (RAM) 270 und mit dem RAM-Schreibadressenregister (WAR) 960B gekoppelt, das ferner mit dem Direktzugriffsspeicher (RAM) 270 gekoppelt ist. Ein Programmstatuswort- (PSW) Register 970 und sein Eingang 990 sind mit einem RAR-Multiplexer 935 gekoppelt, der wiederum mit dem RAM-Leseadressenregister (RAR) 960A gekoppelt ist. Ein Ausgang aus dem Festwertspeicher (ROM) 230 ist mit dem Befehlsregister (IR) 240 gekoppelt. Das Befehlsregister (IR) 240 ist ferner mit einem Befehlsdecodierer 250 gekoppelt. Ein Adressenvordecodierungspfad 980 koppelt den Ausgang des Festwertspeichers (ROM) 230 mit dem RAM-Leseadressenregister (RAR) 960A.
  • Die Kombination des RAM-Ausgangspfades 940A, des Multiplexers 930 und des Rechen- und Leitwerks (ALU) 210 stellen eine Verbesserung gegenüber dem Stand der Technik dar. Fachleute werden erkennen, dass ein temporäres Speicherregister typischerweise zwischen dem Multiplexer 930 und dem Rechen- und Leitwerk (ALU) 210 implementiert wird, um eine Architektur mit internem Bus zu unterstützen.
  • Folglich erfordert der Prozess des Standes der Technik zum Übertragen von Daten vom Direktzugriffsspeicher zu einem ALU einen Zwischenschritt des Speicherns der Daten im temporären Speicherregister, bevor die Daten zum ALU geleitet werden. Der Zwischenschritt des Speicherns von Daten im temporären Register erfordert ein Minimum von einem Systemtaktzyklus, der als Overhead zur Verarbeitungszeit addiert wird. Der RAM-Ausgangspfad 940A der vorliegenden Erfindung stellt ein Mittel zum Leiten von Daten direkt vom Direktzugriffsspeicher (RAM) 270 zum Rechen- und Leitwerk (ALU) 210 bereit, was ermöglicht, dass die Verarbeitung in einem einzelnen Systemtaktzyklus stattfindet, wobei ein Ergebnis durch das Datenregister 950 in demselben einzelnen Systemtaktzyklus erfasst wird.
  • Eine zusätzliche Verbesserung gegenüber dem Stand der Technik wird durch den Adressenvordecodierungspfad 980 bereitgestellt, der nun erläutert wird. Bestimmte Befehle, insbesondere Registeroperationen, erfordern eine schnelle Ausführung mit minimalen Taktzyklen, um die Geschwindigkeits- und Leistungsziele zu ermöglichen, die oben beschrieben wurden. Die vorliegende Erfindung verwendet beispielsweise den Adressenvordecodierungspfad 980, um eine schnelle Ausführung der MCS-51-Befehle zu ermöglichen:
    Befehl Operation Operationscode
    INC Rn INC @Ri MOV @Ri, ACC Rn ← Rn + 1 (Ri) ← (Ri) + 1 (Ri) ← ACC 0000 1rrr 0000 011i 1111 011i
    wobei der Befehl INC Rn eine Registerinkrementierung ist und die Variable n Werten von 0-7 entsprechen kann. Der Teil des mit rrr bezeichneten Operationscodes stellt die binäre Codierung dar, die der Variable n entspricht. Der Befehl INC @Ri ist eine indirekte Registerinkrementierung, wobei die Variable i mögliche Werte von 0 und 1 annimmt. Der Befehl NOV @Ri, ACC bewegt den Akkumulatorinhalt zur Adresse, auf die vom Register Ri gezeigt wird, wobei die Variable i mögliche Werte von 0 und 1 annimmt.
  • Alle aus dem Festwertspeicher (ROM) 230 gelesenen Befehle werden vom Adressenvordecodierungspfad 980 zum RAM-Leseadressenregister (RAR) 960A geleitet, das eine spekulative Decodierung des Befehls auf der Basis der niedrigstwertigen 4 Bits des Befehls beginnt. Das RAM-Leseadressenregister (RAR) 960A enthält eine kleine Menge einer Decodierungslogik, die durch Verfahren erzeugt wird, die Fachleuten gut bekannt sind, um die Bits 3:0 des Operationscodes zu untersuchen. Wenn das Bit 3 eine Eins ist, geht die Decodierungslogik eine Inkrementierungsoperation mit dem Register Rn ein, wobei die Bits 2:0 den Wert des Registers festlegen. Wenn die Bits 3:1 des Operationscodes gleich dem binären Wert 011 sind, wird eine indirekte Registerinkrementierung angenommen, wobei das Bit 0 das Register festlegt.
  • Jeder Operationscode wird gemäß dem oben beschriebenen Verfahren spekulativ ausgewertet und das RAM-Leseadressenregister (RAR) 960A wird folglich geladen. Einige Operationscodes erfordern jedoch kein unmittelbares Lesen aus einem Register. Um Leistung zu sparen, ist ein Mittel erforderlich, um zu ermöglichen, dass nur erforderliche Registeroperationen den RAM unter Verwendung der vordecodierten Adresse lesen. Die Feststellung hinsichtlich dessen, ob ein Operationscode tatsächlich eine Registerleseoperation beinhaltet, wird durch Vorsehen einer zusätzlichen Vordecodierungsoperation im Befehlsregister (IR) 240 durchgeführt. Das Befehlsregister (IR) 240 enthält eine zusätzliche Logik zum Unterscheiden einer RAM-Leseoperation von einer RAM-Schreiboperation. Die zusätzliche Logik verhindert, dass das RAM-Leseadressenregister (RAR) 960A eine Leseoperation des Direktzugriffsspeichers (RAM) 270 einleitet, wenn nicht der Operationscode tatsächlich die Leseoperation erfordert. Das Vermeiden der Einleitung einer unnötigen Leseoperation verhindert einen Energieverschwendungsschritt zum Einschalten von Leseverstärkern und zugehörigen Schaltungen (nicht dargestellt) im Direktzugriffsspeicher (RAM) 270.
  • Als zusätzliche Erwägung sieht die 8051-Mikrocontrollerarchitektur vier Registerbänke mit jeweils acht Registern vor. Ein Mittel ist erforderlich, um das RAM-Adressenregister (AR) 260 (2) mit einer Kenntnis hinsichtlich dessen zu versehen, welche von vier möglichen Registerbänken das Registerziel eines Befehls enthält. Die Registerbankinformation wird durch das Programmstatuswort-(PSW) Register 970 zum RAM-Leseadressenregister (RAR) 960A geliefert. Insbesondere werden die Bits 4:3 eines Programmstatusworts, die im Programmstatuswort- (PSW) Register 970 gespeichert sind, mit den Bits 3:0 vom Operationscode verkettet, um das RAM-Leseadressenregister (RAR) 960A mit einem Adressenziel im Direktzugriffsspeicher (RAM) 270 zu versehen. Um Pipelinestillstände in dem Fall zu verhindern, in dem einem Schreiben in das Programmstatuswort- (PSW) Register 970 ein Registerlesen folgt, das den Adressenvordecodierungspfad 980 verwendet, ist der RAR-Multiplexer 935 vorgesehen, um den neuen Wert des PSW vom PSW-Eingang 990 zum Adressenvordecodierungspfad 980 weiterzuleiten, wobei der alte Wert im Programmstatuswort- (PSW) Register 970 umgangen wird.
  • Beim beispielhaften Ausführungsbeispiel der vorliegenden Erfindung sind die in 9 gezeigten Register, insbesondere das Befehlsregister 240, der Befehlsdecodierer 250, das Akkumulatorregister (ACC) 290, das Datenregister 950, das RAN-Leseadressenregister (RAR) 960A, das RAM-Schreibadressenregister (WAR) 960B und das Programmstatuswort- (PSW) Register 970, mit Master-Slave-Flip-Flops mit Trigger bei positiver Flanke implementiert. Fachleute werden erkennen, dass dieses Verfahren zur Registerimplementierung in anderen Schaltungsblöcken, die in der Figur nicht gezeigt sind, verwendet werden kann.
  • Nun wird auf 10, nämlich auf ein Registerinkrementierungs-Ablaufdiagramm 1000 gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung, Bezug genommen, das eine Registerinkrementierungs-Beispiel-Systemtaktwellenform 1010, eine Liste 1020 von aktuellen Registerinkrementierungs-Beispielbefehlen (INSTR), eine Inhaltliste 1030 des Registerinkrementierungs-Beispielprogrammzählers (PC) 220, ein Inhaltsdiagramm 1040 des RAM-Leseadressenregisters (RAR) 960A, ein Inhaltsdiagramm 1050 des RAM-Schreibadressenregisters (WAR) 960B, ein Inhaltsdiagramm 1060 des RAM-Datenausgangs (DOUT), ein Inhaltsdiagramm 1070 des RAM-Dateneingangs (DIN), eine Inhaltsliste 1080 des Rechen- und Leitwerks (ALU) 210 und eine Befehlsbeispielzusammenfassung 1090 umfasst. In einem Systemtaktintervall Tn führt das System einen allgemeinen Befehl (durch einen Stern in der Befehlsbeispielzusammenfassung 1090 angegeben) aus; der allgemeine Befehl ist einer Adresse A – 1 zugeordnet und wird durch die Liste 1020 des aktuellen Registerinkrementierungs-Beispielbefehls (INSTR) als I – 1 bezeichnet. Der Bezug auf die Inhaltsliste 1030 des Registerinkrementierungs-Beispielprogrammzählers (PC) 220 zeigt, dass eine Adresse A0, die einem ersten Registerdirektinkrementierungsbefehl (INC RO) zugeordnet ist, im Programmzähler (PC) 220 während des Systemtaktintervalls Tn gemäß der Operation der oben beschriebenen Befehlspipeline zugeordnet ist. Für den Zweck des Beispiels wird der Anfangswert des Registers R0 als Zwei angenommen.
  • In einem Systemtaktintervall Tn+1 wird der erste Registerinkrementierungsbefehl I0 ausgeführt. Der Programmzähler (PC) 220 enthält eine Adresse A1 des nächsten Befehls (auch INC R0 für dieses Beispiel). Das RAM-Leseadressenregister (RAR) 960A enthält Null, was durch das Inhaltsdiagramm 1040 des RAM-Leseadressenregisters (RAR) 960A gezeigt ist. Der Wert Null ist die Zielregisteradresse und wird in das RAM-Leseadressenregister (RAR) 960A mittels des Adressenvordecodierungspfades 980 geladen, wobei die Verzögerung der Verarbeitung durch den Befehlsdecodierer 250 vermieden wird. Innerhalb desselben Systemtaktintervalls Tn+1 stehen die Daten an der Registerzieladresse (der Wert 2) am Ausgang des Direktzugriffsspeichers (RAM) 270 zur Verfügung, was durch das Inhaltsdiagramm 1060 des RAM-Datenausgangs (DOUT) angegeben ist. Der Wert wird durch das Rechen- und Leitwerk (ALU) 210 vor dem Abschluss des Systemtaktintervalls Tn+1 inkrementiert, was einen Wert von Drei ergibt, wie durch die Inhaltsliste 1080 des Rechen- und Leitwerks (ALU) 210 angegeben. Während eines Systemtaktintervalls Tn+2 wird die ALU-Ausgabe (der Wert Drei) zum Datenregister 950 geleitet, wie durch das Inhaltsdiagramm 1070 des RAM-Dateneingangs (DIN) angegeben. Das RAM-Schreibadressenregister (WAR) 960B enthält einen Adressenwert von Null, der geladen wird, um ein Rückschreiben des Ergebnisses von der Ausführung des ersten Registerdirektinkrementierungsbefehls (INC R0) zu ermöglichen. Ein zweiter Registerdirektinkrementierungsbefehl I + 1 wird ausgeführt, wie durch die Liste 1020 aktueller Registerinkrementierungs-Beispielbefehle (INSTR) gezeigt.
  • Das RAM-Leseadressenregister (RAR) 960A enthält Null, was durch das Inhaltsdiagramm 1040 des RAM-Leseadressenregisters (RAR) 960A gezeigt ist. Da das RAM-Leseadressenregister (RAR) 960A und das RAM-Schreibadressenregister (WAR) 960B auf dieselbe Adresse (0) zeigen, geschieht ein Datendurchgang im Direktzugriffsspeicher (RAM) 270, was bewirkt, dass der Wert Drei zum RAM-Ausgang mit minimaler Verzögerung geleitet wird, wie durch das Inhaltsdiagramm 1060 des RAM-Datenausgangs (DOUT) gezeigt. Der Wert Drei wird durch das Rechen- und Leitwerk (ALU) 210 auf einen Wert Vier inkrementiert, wie durch die Inhaltsliste 1080 des Rechen- und Leitwerks (ALU) 210 gezeigt, wobei das Ergebnis vor dem Abschluss des Systemtaktintervalls Tn+2 zur Verfügung steht. Folglich werden zwei direkte Registerinkrementierungsoperationen in der Spanne von zwei Systemtaktzyklen vollendet. Wie oben erörtert, wird das Zurückschreiben des Werts Vier in einem anschließenden Systemtaktintervall Tn+3 (nicht dargestellt) vollendet.
  • Bei der vorangehenden Patentbeschreibung wurde die Erfindung mit Bezug auf spezielle Ausführungsbeispiele derselben beschrieben. Es ist jedoch für einen Fachmann ersichtlich, dass verschiedene Modifikationen und Änderungen an dieser vorgenommen werden können, ohne vom breiteren Gedanken und Schutzbereich der Erfindung, wie in den beigefügten Ansprüchen dargelegt, abzuweichen. Verbesserungen, die aus der Pipelineimplementierung, der zweckgebundenen Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit und der Anwendung einer einzelnen 16-Bit-ALU zum Unterstützen eines Adressenpuffers, eines Programmzählers und eines Datenzeigers in Kombination bestehen, sind beispielsweise auf eine Vielzahl von Mikroprozessoren und Mikrocontrollern, einschließlich jener, die andere Befehlssätze als den MCS-5l-Befehlssatz verwenden, anwendbar. Die Patentbeschreibung und die Zeichnungen sollen folglich vielmehr in einer erläuternden als einschränkenden Hinsicht betrachtet werden.
  • Zusammenfassung:
  • CPU-ARCHITEKTUR MIT EINZELNEM ZYKLUS UND GERINGER LEISTUNGSAUFNAHME
  • Eine Architektur zum Implementieren einer Befehlspipeline innerhalb einer CPU umfasst ein Rechen- und Leitwerk (ALU) (210), ein Adressenrechenwerk (AAU) (215), einen Programmzähler (PC) (220), einen Festwertspeicher (ROM) (230), der mit dem Programmzähler (220), mit einem Befehlsregister (240) und mit einem Befehlsdecodierer (250) gekoppelt ist, der mit dem Rechen- und Leitwerk (210) gekoppelt ist. Ein Direktzugriffsspeicher (RAM) (270) ist mit dem Befehlsdecodierer (250), mit dem Rechen- und Leitwerk (210) und mit einem RAM-Adressenregister (260) gekoppelt.

Claims (29)

  1. Architektur zum Implementieren einer Befehlspipeline zum Ausführen von Befehlen innerhalb einer Zentraleinheit (CPU), wobei die Architektur aufweist: ein Adressenrechenwerk (AAU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang; ein Rechen- und Leitwerk (ALU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang; ein Programmzähler- (PC) Register, das mit dem Datenausgang des Adressenrechenwerks (AAU) gekoppelt ist; einen Festwertspeicher (ROM), der mit dem Programmzähler gekoppelt ist, wobei der Festwertspeicher ferner mit einem Befehlsregister und mit einem Befehlsdecodierer gekoppelt ist, wobei der Befehlsdecodierer ferner mit dem ersten Dateneingang des Rechen- und Leitwerks gekoppelt ist; und einen Direktzugriffsspeicher (RAM), der mit dem Befehlsdecodierer gekoppelt ist, wobei der Direktzugriffsspeicher ferner mit dem Ausgang des Rechen- und Leitwerks (ALU) und mit einem RAM-Adressenregister gekoppelt ist.
  2. Architektur nach Anspruch 1, wobei die Befehlspipeline eine zweistufige Pipeline ist.
  3. Architektur nach Anspruch 2, wobei das Adressenrechenwerk (AAU) in der Lage ist, Operationen an Sechzehn-Bit-Zahlen durchzuführen.
  4. Architektur nach Anspruch 3, wobei die CPU dazu ausgelegt ist, einen MCS-51-Mikrocontroller-Befehlssatz auszuführen.
  5. Architektur zum Implementieren einer Befehlspipeline zum Ausführen von Befehlen innerhalb einer Zentraleinheit (CPU), wobei die Architektur aufweist: ein Adressenrechenwerk (AAU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang; ein Programmzähler- (PC) Register, das mit dem Datenausgang des Adressenrechenwerks (AAU) gekoppelt ist; ein Datenzeigerregister, das mit dem Datenausgang des Adressenrechenwerks (AAU) gekoppelt ist; ein Adressenpufferregister, das mit dem Datenausgang des Adressenrechenwerks (AAU) gekoppelt ist; einen Multiplexer, der mit dem ersten Dateneingang des Adressenrechenwerks gekoppelt ist, wobei der Multiplexer dazu ausgelegt ist, einen von einem Ausgang des Programmzähler- (PC) Registers und einem Ausgang des Datenzeigerregisters mit dem ersten Dateneingang des Adressenrechenwerks (AAU) zu koppeln; ein Stapelzeigerregister mit einem Eingang und einem Ausgang; und eine Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit mit einem Eingang, der mit dem Ausgang des Stapelzeigerregisters gekoppelt ist, wobei die Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit ferner einen Ausgang aufweist, der mit dem Eingang des Stapelzeigerregisters gekoppelt ist, wobei die Stapelzeiger-Inkrementierungs/Dekrementierungs-Einheit ferner dazu ausgelegt ist, das Stapelzeigerregister in Reaktion auf eine Einspeicheroperation bzw. eine Entnahmeoperation zu inkrementieren und zu dekrementieren.
  6. Architektur nach Anspruch 5, wobei die Befehlspipeline eine zweistufige Pipeline ist.
  7. Architektur nach Anspruch 5, wobei das Adressenrechenwerk (AAU) in der Lage ist, Operationen an Sechzehn-Bit-Zahlen durchzuführen.
  8. Architektur nach Anspruch 7, wobei das Programmzähler-(PC) Register, das Datenzeigerregister und das Adressenpufferregister jeweils Sechzehn-Bit-Register sind.
  9. Architektur nach Anspruch 5, wobei das Stapelzeigerregister ein Acht-Bit-Register ist.
  10. Architektur nach Anspruch 5, wobei die CPU dazu ausgelegt ist, einen MCS-51-Mikrocontroller-Befehlssatz auszuführen.
  11. Verfahren zum Implementieren einer Befehlspipeline innerhalb einer Zentraleinheit (CPU), wobei das Verfahren aufweist: Verwenden einer zweckgebundenen Inkrementierungs/Dekrementierungs-Einheit, um einen Wert eines Stapelzeigers während der Ausführung von Programmbefehlen zu ändern; Inkrementieren eines Programmzählerregisters, um auf eine nächste Befehlsadresse während einer Ausführung eines aktuellen Befehls zu zeigen; Speichern einer aktuellen Befehlsadresse in einem Adressenpuffer an einem Ende einer Nicht-Unterbrechungs-Befehlsausführung; und Ermöglichen, dass das Programmzählerregister während einer Unterbrechungsausführung inkrementiert, während eine Unterbrechungsrückkehradresse im Adressenpuffer während der Unterbrechungsausführung beibehalten wird.
  12. Verfahren nach Anspruch 11, welches ferner das Durchführen eines Abrufs eines Ein-Byte-Befehls oder eines Abrufs eines ersten Bytes eines Mehr-Byte-Befehls während der Ausführung eines Nicht-Unterbrechungs-Befehls aufweist.
  13. Verfahren nach Anspruch 11, welches ferner das gemeinsame Nutzen eines Sechzehn-Bit-Adressenrechenwerks (AAU) zwischen dem Programmzähler, dem Adressenpuffer und einem Datenzeiger aufweist.
  14. Verfahren nach Anspruch 11, welches ferner das Bereitstellen einer Vorgriffvordecodierung einer direkten Register- oder indirekten Register-Direktzugriffsspeicher-(RAM) Adresse, während ein Operationscode abgerufen wird, aufweist.
  15. Verfahren nach Anspruch 11, welches ferner das gleichzeitige Durchführen einer Leseoperation von einem und einer Schreiboperation in einen Direktzugriffsspeicher (RAM) während eines Befehlszyklus aufweist.
  16. Verfahren nach Anspruch 11, welches ferner das Durchführen einer Leseoperation von einem Direktzugriffsspeicher (RAM) während eines Befehlszyklus und das Verzögern einer Schreiboperation in den Direktzugriffsspeicher (RAM) bis zu einem folgenden Befehlszyklus aufweist.
  17. Verfahren nach Anspruch 11, welches ferner das Weiterleiten von Daten durch einen Direktzugriffsspeicher (RAM), wenn eine Leseoperation von dem und eine Schreiboperation in den Direktzugriffsspeicher (RAM) auf eine gleiche Adressenstelle im Direktzugriffsspeicher (RAM) abzielen, aufweist.
  18. Verfahren nach Anspruch 11, welches ferner das Vorsehen eines Pfades von einem Ausgang eines Direktzugriffsspeichers (RAM) zu einem Datenrechen- und -leitwerk (ALU) aufweist, wobei der Datenpfad Daten vom Direktzugriffsspeicher (RAM) zum Rechen- und Leitwerk (ALU) innerhalb eines einzelnen Systemtaktintervalls befördert.
  19. Architektur zum Implementieren einer Befehlspipeline zur Ausführung von Befehlen innerhalb einer Zentraleinheit (CPU), wobei die Architektur aufweist: ein Datenrechen- und -leitwerk (ALU) mit einem ersten Dateneingang, einem zweiten Dateneingang und einem Datenausgang; ein Datenregister, das mit dem Datenausgang des Rechen- und Leitwerks und mit einem Direktzugriffsspeicher (RAM) gekoppelt ist; einen Akkumulator, der mit dem ersten Dateneingang des Datenrechen- und -leitwerks (ALU) gekoppelt ist; einen RAM-Ausgangspfad, der einen Ausgang des Direktzugriffsspeichers mit dem zweiten Dateneingang des Datenrechen- und -leitwerks (ALU) koppelt; ein RAM-Schreibadressenregister, das mit dem Ausgang des Direktzugriffsspeichers (RAM) und mit einem Schreibadresseneingang des Direktzugriffsspeichers (RAM) gekoppelt ist; ein RAM-Leseadressenregister, das mit einem Leseadresseneingang des Direktzugriffsspeichers (RAM) gekoppelt ist, wobei das RAM-Leseadressenregister ferner mit dem Ausgang des Direktzugriffsspeichers (RAM) und mit dem RAM-Schreibadressenregister gekoppelt ist; einen Festwertspeicher, der mit einem Befehlsregister gekoppelt ist, wobei das Befehlsregister ferner mit einem Befehlsdecodierer gekoppelt ist; einen Adressenvordecodierungspfad, der den Festwertspeicher mit dem RAM-Leseadressenregister koppelt; und ein Programmstatuswort- (PSW) Register, das mit dem RAM-Leseadressenregister gekoppelt ist.
  20. Architektur nach Anspruch 19, welche ferner einen PSW-Weiterleitungspfad aufweist, der den Eingang des Programmstatuswort- (PSW) Registers mit dem RAM-Leseadressenregister koppelt.
  21. Architektur nach Anspruch 20, wobei das Datenrechen- und -leitwerk in der Lage ist, Operationen an Acht-Bit-Daten durchzuführen.
  22. Architektur nach Anspruch 21, wobei die CPU dazu ausgelegt ist, einen MCS-51-Mikrocontroller-Befehlssatz auszuführen.
  23. Architektur nach Anspruch 22, wobei die Befehlspipeline eine zweistufige Pipeline ist.
  24. Architektur zum Implementieren einer Befehlspipeline zum Ausführen von Befehlen innerhalb einer Zentraleinheit (CPU), wobei die Architektur aufweist: ein Adressenrechenwerk- (AAU) Mittel zum Durchführen von arithmetischen Operationen an einem ersten Dateneingang und einem zweiten Dateneingang; ein Programmzähler- (PC) Mittel zum Speichern einer Programmzähler- (PC) Adresse; ein Datenzeigermittel zum Speichern einer Datenadresse; ein Adressenpuffermittel zum Puffern einer Befehlsadresse; ein Multiplexermittel zum Koppeln des Programmzähler-(PC) Mittels oder des Datenzeigerregistermittels mit dem ALU-Mittel; ein Stapelzeigermittel zum Speichern einer Stapeladresse; und ein Stapelzeiger-Inkrementierungs/Dekrementierungs-Mittel zum Inkrementieren und Dekrementieren des Stapelzeigerregisters in Reaktion auf eine Einspeicheroperation bzw. eine Entnahmeoperation.
  25. Architektur nach Anspruch 24, wobei das Adressenrechenwerk- (AAU) Mittel in der Lage ist, Operationen an Sechzehn-Bit-Zahlen durchzuführen.
  26. Architektur nach Anspruch 24, wobei das Programmzähler- (PC) Mittel, das Datenzeigermittel und das Adressenpuffermittel jeweils zum Speichern von Sechzehn-Bit-Binärzahlen dienen.
  27. Architektur nach Anspruch 24, wobei das Stapelzeigermittel eine Acht-Bit-Binärzahl speichert.
  28. Architektur nach Anspruch 24, wobei die CPU dazu ausgelegt ist, einen MCS-51-Mikrocontroller-Befehlssatz auszuführen.
  29. Verfahren zum Implementieren einer Befehlspipeline innerhalb einer Zentraleinheit (CPU), wobei das Verfahren aufweist: Ersetzen eines internen Busses durch eine Vielzahl von zweckgebundenen Datenpfadkopplungen, wobei das Verfahren zum Ersetzen des internen Busses ferner besteht im: Verwenden einer zweckgebundenen Inkrementierungs/Dekrementierungs-Einheit, um einen Wert eines Stapelzeigers während der Ausführung von Programmbefehlen zu ändern; Speichern einer aktuellen Befehlsadresse in einem Adressenpuffer an einem Ende einer Nicht-Unterbrechungs-Befehlsauführung; und Ermöglichen, dass das Programmzählerregister während einer Unterbrechungsausführung inkrementiert, während eine Unerbrechungsrückkehradresse im Adressenpuffer während der Unterbrechungsausführung beibehalten wird; gemeinsamen Nutzen eines Sechzehn-Bit-Adressenrechenwerks (AAU) zwischen dem Programmzähler, dem Adressenpuffer und einem Datenzeiger; Weiterleiten von Daten durch einen Direktzugriffsspeicher (RAM), wenn eine Leseoperation von dem und eine Schreiboperation in den Direktzugriffsspeicher (RAM) auf dieselbe Adressenstelle im Direktzugriffsspeicher (RAM) abzielen; und Vorsehen eines Pfades von einem Ausgang eines Direktzugriffsspeichers (RAM) zu einem Datenrechen- und -leitwerk (ALU), wobei der Datenpfad Daten vom Direktzugriffsspeicher (RAM) zum Rechen- und Leitwerk (ALU) innerhalb eines einzelnen Systemtaktintervalls befördert.
DE112006000514T 2005-03-04 2006-01-25 CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme Withdrawn DE112006000514T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/071,966 US20060200650A1 (en) 2005-03-04 2005-03-04 Single-cycle low-power CPU architecture
US11/071,966 2005-03-04
PCT/US2006/002552 WO2006096250A2 (en) 2005-03-04 2006-01-25 Single-cycle low-power cpu architecture

Publications (1)

Publication Number Publication Date
DE112006000514T5 true DE112006000514T5 (de) 2008-01-10

Family

ID=36945387

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112006000514T Withdrawn DE112006000514T5 (de) 2005-03-04 2006-01-25 CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme

Country Status (6)

Country Link
US (2) US20060200650A1 (de)
CN (1) CN101133390A (de)
AU (1) AU2006221114A1 (de)
DE (1) DE112006000514T5 (de)
TW (1) TW200703103A (de)
WO (1) WO2006096250A2 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060200650A1 (en) * 2005-03-04 2006-09-07 Froemming Benjamin F Single-cycle low-power CPU architecture
US8370606B2 (en) 2007-03-16 2013-02-05 Atmel Corporation Switching data pointers based on context
US7797516B2 (en) * 2007-03-16 2010-09-14 Atmel Corporation Microcontroller with low-cost digital signal processing extensions
TW200849088A (en) * 2007-06-12 2008-12-16 Holtek Semiconductor Inc Power-saving data processor
JP5300428B2 (ja) * 2008-11-13 2013-09-25 ルネサスエレクトロニクス株式会社 演算装置及び演算処理方法
US9405534B2 (en) * 2013-01-21 2016-08-02 Tom Yap Compound complex instruction set computer (CCISC) processor architecture
CN112348180A (zh) * 2020-11-27 2021-02-09 Oppo广东移动通信有限公司 数据处理装置及配置方法、神经网络处理器、芯片、设备

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5165039A (en) * 1986-03-28 1992-11-17 Texas Instruments Incorporated Register file for bit slice processor with simultaneous accessing of plural memory array cells
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
JPH05113929A (ja) * 1991-10-22 1993-05-07 Mitsubishi Electric Corp マイクロコンピユータ
JP3184096B2 (ja) * 1995-08-31 2001-07-09 株式会社東芝 半導体記憶装置
JPH1091443A (ja) * 1996-05-22 1998-04-10 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
US6262936B1 (en) * 1998-03-13 2001-07-17 Cypress Semiconductor Corp. Random access memory having independent read port and write port and process for writing to and reading from the same
JP3344316B2 (ja) * 1998-05-01 2002-11-11 ヤマハ株式会社 ディジタル信号処理装置及び信号処理システム
US6345353B2 (en) * 1999-07-20 2002-02-05 Microchip Technology Incorporated Stack pointer with post increment/decrement allowing selection from parallel read/write address outputs
US6262396B1 (en) * 2000-03-07 2001-07-17 Hatco Corporation Oven device for rapid heating of food items
GB2419006B (en) * 2002-04-22 2006-06-07 Micron Technology Inc Providing a register file memory with local addressing in a SIMD parallel processor
TW200416598A (en) * 2003-02-24 2004-09-01 Weltrend Semiconductor Inc Method for increasing the instruction execution speed of single chip microcomputer
US20060200650A1 (en) * 2005-03-04 2006-09-07 Froemming Benjamin F Single-cycle low-power CPU architecture

Also Published As

Publication number Publication date
WO2006096250A3 (en) 2007-08-16
US20060200650A1 (en) 2006-09-07
CN101133390A (zh) 2008-02-27
AU2006221114A1 (en) 2006-09-14
TW200703103A (en) 2007-01-16
WO2006096250A2 (en) 2006-09-14
US20090319760A1 (en) 2009-12-24

Similar Documents

Publication Publication Date Title
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE2715073C3 (de) Mikroprogrammierte Rechner-Steuervorrichtung
DE112006000514T5 (de) CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE2230102A1 (de) Rechenwerk fuer variable wortlaengen
DE112004002267T5 (de) Ruhezustandsmechansimus für virtuelles Multithreading
DE2630323B2 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem Hilfsspeicher und einer Vorausschaulogik
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE102015101414A1 (de) Verbesserter Rücksprungstapelpuffer
DE19545179A1 (de) Vektorspeicheroperationen
DE102009051288A1 (de) Befehl und Logik zur Ausführung von Bereichserkennung
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung
DE69632970T2 (de) Mikroprozessor mit reduzierten Programmcodes
DE102004061339A1 (de) Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren

Legal Events

Date Code Title Description
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20110802