Datenpfad

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. April 2016 um 20:33 Uhr durch (Diskussion | Beiträge) (→‎Beispiele: .). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Ein Datenpfad ist eine Sammlung aus Rechenwerken, wie z.B. ALU oder Multiplizierer, die Datenverarbeitungsoperationen, Register und Busse ausführen.[1] Zusammen mit dem Steuerwerk bildet es die CPU.[1]

Seit kurzem gibt es einen Anstieg der Forschung im Bereich der rekonfigurierbaren Datenpfade - das sind Datenpfade die man während der Laufzeit umfunktionieren könnte, in dem man FPGA nutzt. Diese Designs können möglicherweise in effizientere Berechnungen und beträchtlichen Energieeinsparungen resultieren.[2]

Funktionale Blöcke eines Datenpfads

In Computerprozessoren besteht der Datenpfad aus folgenden funktionalen Blöcken oder aus Variationen aus diesen:

  • Das Instruktionsregister speichert die derzeitige Instruktion, um sie auszuführen.
  • Der Befehlszähler (kurz PC genannt) speichert die Adresse der nächsten Instruktion, um sie dann zu laden.
  • Das Memory Adress Register (kurz MAR) ist ein Register, das entweder die Speicheradresse von wo aus die Daten von der CPU abgeholt werden, oder die Adresse zu der die Daten gesendet und gespeichert werden, speichert.
  • Das Memory Data Register (kurz MDR) ist ein Register einer Computersteuereinheit, dass die Daten die in den Computerspeicher (z. B. RAM) gespeichert werden, oder die Daten die vom Computerspeicher geholt wurden, beinhaltet.

Es gibt auch noch zwei Register innerhalb des Prozessors, die die Kommunikation vom Prozessor und Speicher ermöglichen - oder prinzipiell bei den Speicheroperationen des Registers helfen.

Single-Bus-Aufbau eines Datenpfades

Das Erste und daher wichtigste Verbindungselement für alle Register innerhalb des Prozessors ist der Systembus. Dieser Bus ist der Prozessorbus und sollte nicht mit dem externen Bus, der verschiedene Speicherchips und Ein- und Ausgabegeräte mit dem Prozessor verbindet, verwechselt werden.

Dieser externe Bus ist mit dem internen Systembus via den MAR- und MDR-Register verbunden. Die Datenleitungen vom externen Bus sind mit dem MDR verbunden und die Adressleitungen vom externen Bus sind mit dem MAR verbunden. Der MDR ist ein bidirektionales Register, d. h. es kann Daten senden und empfangen und zwar zu internen und externen Bussen. Der MAR ist ein unidirektionales Register, es empfängt seinen Input vom internen Bus und übergibt seinen Output dem externen Bus.

Die ALU wird genutzt um arithmetische und logische Operationen, mit den Daten die in den verschiedenen Registern gespeichert sind, auszuführen. Es ist das Herz eines Mikroprozessors. Der Multiplexer (kurz MUX) ist vorgesehen um entweder den gleichbleibenden Wert 4 (engl. "constant value") oder das Register X auszuwählen. Der gleichbleibende Wert 4 wird ausgewählt, wenn eine Instruktion abgeschlossen wurde und der Programmzähler (engl. "programm counter") erhöht wird. {Wie früher erwähnt: (PC ← (PC)+4)}. Der "Instruktionsdekoder und Steuerlogik"-Block dekodiert und befördert die laufende Instruktion in das IR-Register.

Der Prozessor nutzt all diese Blöcke zusammen um verschiedene Primäroperationen auszuführen wie z. B.:

  1. Inter-Register-Datentransfer
  2. Arithmetische oder logische Operationen
  3. Daten vom Speicher abrufen
  4. Daten in den Speicher schreiben

Beispiele

Nun betrachten wir eine Addition als eine arithmetische Operation und das Abrufen von Daten vom Speicher im Detail.

Beispiel 1) Arithmetische Addition : Inhalt der Register reg1 und reg2 werden miteinander addiert und in reg3 gespeichert.

Sequenz der Operationen:

  1. reg1out,Xin
  2. reg2out,choose X,ADDITION,Yin
  3. Yout,reg3in

Die Steuersignale, die in der einen Zeile geschrieben sind, werden in einem Taktzyklus ausgeführt. Alle anderen Signale bleiben unberührt. Im ersten Schritt wird der Inhalt von Register1 in Register X durch den Bus geschrieben. Im zweiten Schritt wird der Inhalt von Register2 auf den Bus platziert und der MUX wählt den Input X als den Inhalt von reg1, dieser in Register X gespeichert ist, aus. Die ALU addiert dann den Inhalt vom Register X und reg2 und speichert das Ergebnis der Addition im Spezialtemporärregister Y. Im abschließenden Arbeitsschritt wir das Ergebnis, das im Register Y steht, nach Register reg3 über den internen Prozessorbus geschickt und dort abgespeichert. Nur ein Register kann pro Schritt seine Daten über den Bus schicken, daher können die Schritte 2 und 3 nicht kombiniert werden.[3]

Beispiel 2) Abruf vom Daten im Speicher: Um Daten vom Speicher abzurufen muss der Prozessor die Adresse kennen, an dem die benötigten Daten abgelegt sind. Die Daten die in einem bestimmten Speicherort sind, können entweder eine Instruktion eines Programms sein oder ein Operand einer bestimmten ausführbaren Instruktion.

Die Sequenz der Operationen von oben, ist folgende:

  1. reg1out,MARin,,READM
  2. MDRinEX,WMC
  3. MDRout,reg2in,

Ein neues Steuersignal WMC wurde hier eingeführt. WMC steht für "Wait for Memory operation to Complete" z.Dt. "Warte bis die Speicheroperation abgeschlossen wird". Meistens ist das adressierte Gerät am Speicherbus langsamer als der Mikroprozessor. Daher muss der Mikroprozessor warten bis das adressierte Gerät seinen Befehl abgearbeitet hat. Dieser Hinweis, dass die Speicheroperation abgeschlossen wurde, wird dem Prozessor über das Steuersignal WMC mitgeteilt.

Ebenfalls oben beschrieben, der MDR ist ein bidirektionales Register d.h. es ist mit beiden den internen und externen Bussen verbunden. Daher wird das Signal MDR indiziert als EX. Das EX steht für externen Bus. Das Signal impliziert das Daten vom externen Speicherbus in das MDR-Register verschoben wurde. Die verbleibenden Steuersignale sind selbsterklärend und können verstanden werden wie in Beispiel 1, indem MDR das bidirektionale Datenspeicherregister (engl. Memory data register) und MAR das unidirektionale Speicheradressregister (engl. Memory Address Register) ist.

Eine vollständig ausgeführte Instruktion

Nun, fügen wir die ursprünglichen Operationen zusammen, um zu sehen wie eine vollständige Instruktion ausgeführt wird.

Ziehen wir z.B. folgende Instruktion in Betracht:

ADD (reg3),reg1.

Diese Instruktion addiert die Daten vom gezeigten Speicherort Register3 zum Inhalt vom Register1.

Die Sequenz von Steuersignale für die oben genannten vollständigen Instruktion lautet wie folgt:

  1. PCountout,MARin,READM,Choose4,ADDITION,Yin
  2. Yout,PCin,Xin,WMC
  3. MDRout,IRegin
  4. reg3out,MARin,READM
  5. reg1out,Xin,WMC
  6. MDRout,ChooseX,ADDITION,Yin
  7. Yout,reg1in,HALT

Die ersten drei Schritte die oben beschrieben werden sind üblich bei allen Instruktionen von Mikroprozessoren. Diese bilden die früher erwähnte "Holen des Befehls"-Phase. Nach der Ausführung der ersten drei Schritte wird die Instruktion in das Instruktionsregister geladen. Die "Instruktionsdekodierung und Steuerschaltung" dekodiert anschließend die Instruktionen und schaltet dann alle Steuersignale, die für die Schritte 4 bis 7 benötigt werden, an. Die Schritte 4 bis 7 stellen die "Ausführung, basierend auf der Holen des Befehls"-Phase dar.

Der Inhalt von Register 3 wird in das MAR-Register kopiert und in Schritt 4, welche die Adresse des gewünschten Speicherorts übergibt und die READM-Instruktion wird ausgeführt. Der Inhalt vom Register 1 wird über den Bus nach Register X transferiert. Sobald der READM-Befehl abgeschlossen ist, werden die Daten vom gewünschten Speicherort im MDR verfügbar gemacht. Der Multiplexerwert der in Y gespeichert ist wird über dem Bus zum Register1 im siebten Schritt geschickt.

Der Inhalt vom aktualisierten Programmzähler wird in das Register X im zweiten Schritt kopiert. Obwohl es für das oben angeführte Programm nicht gebraucht wird, wird der aktualisierte Wert vom PC generell immer im Register X gespeichert im Falle von Verzweigte Instruktionen (engl. branched instructions), die die 'Verzweigungszieladresse' (engl. branch target address) berechnen.

Multi-Bus Aufbau eines Datenpfades

Der interne Aufbau eines Prozessors, wie oben beschrieben, war ein Single-Bus-Aufbau. Dieser wurde lediglich beschrieben um eine Grundidee zu bekommen. Praktisch jedoch sind solche Single-Bus-Mikroprozessoren nicht realisierbar. Diese würden in sehr umfangreiche Steuersignalsequenzen resultieren. Daher, um die Nummer der Schritte die für die Ausführung einer Instruktion gebraucht werden zu senken, verwendet man einen Multi-Bus-Aufbau.

Einzelnachweise

  1. a b The Essentials of Computer Organization and Architecture by Null & Lobur, 4e, pg 216 "All computers have a CPU that can be divided into two pieces. The first is the datapath, which is a network of storage units (registers) and arithmetic and logic units... connected by buses... where the timing is controlled by clocks."
  2. J. R. Hauser and J. Wawrzynek, Garp: a MIPS processor with a reconfigurable coprocessor, FCCM’97, 1997, S. 12–21.
  3. Computer Organization by Hamacher, Zaky, vranesic.