Heyho, erstmal wünsche ich euch ein frohes Weihnachtsfest! Ich stolpere leider gerade über ein kleines Verständnisproblem. Es geht um einen MIPS Multicycle-Prozessorkern. Wie genau die einzelnen Cycles nun aussehen ist erst einmal unerheblich. Ich soll nun einen Automaten (Moore) bauen, der die einzelnen Pipelinestufen steuert. Laut Lehrbüchern und Internet würde der z.B. so aussehen (5.42): http://www.cs.umd.edu/class/fall2003/cmsc311/Lectures/lecture34/multi_control.pdf Wenn ich jetzt versuche anhand eines Befehls das ganze nachzuvollziehen, wird mir klar, dass es funktioniert. Sobald ich aber zwei Befehle habe, die hintereinander ausgeführt werden (z.B. zwei Additionen mit völlig verschiedenen Registern), frage ich mich ob ich nicht auch mindestens 2 FSMs benötige, die korrekt versetzt arbeiten. Denn: Wenn die FSM für Befehl1 im zweiten Takt im Zustand der Stage2 steckt, dann muss sich für Befehl2 die FSM in Stage1 befinden, was sich widerspricht. Wo steckt mein Denkfehler? Ich finde nämlich nirgends erwähnt, dass man so viele FSMs wie Pipeline-Stufen braucht. Viele Grüße, GinTonic
Du versuchst wohl gerade, eine FSM mit einem Befehl zu identifizieren, der von einer Stufe zur nächsten wandert und denkst dir diese Stufe als Zustand. Aber das wäre der Zustand eines Befehls, keiner Maschine oder Stufe. Gleichzeitig denkst du dir Pipelining dazu. Das Beispiel passt dazu. Diese FSM beschreibt den Ablauf eines Multicycle-Befehls in einer Maschine ohne Pipelining. Sie ist damit aber nicht in der Lage, eine Maschine zu steuern, deren Pipeline mehrere Befehle gleichzeitig in unterschiedlichen Pipeline-Stufen zulässt. Worum geht es also? Mit oder ohne Pipelining? Multicycle impliziert ja nicht automatisch Pipelining. Mit Pipelining kannst du zwar theoretisch Befehlsabläufe über FSMs modellieren, aber damit keine Maschine steuern. Weshalb das nur umgekehrt geht, also FSMs der Pipeline-Stufen sich letztlich die Befehle durchreichen.
Ich glaube ich bin gerade mit den begriffen etwas durcheinander gekommen. Multicycle bedeutet ja, dass mein Datenpfad zerlegt wird. Damit würde ein Befehl z.B. 5 kürzere Takte brauchen statt einen langen. Und Pipelining bedeutet, dass möglichst in jedem Takt ein neuer Befehl angefangen wird? Dann brauche ich für Pipelining mit x Stufen auch x FSMs oder?
GinTonic schrieb: > Multicycle bedeutet ja, dass mein Datenpfad zerlegt wird. > Damit würde ein Befehl z.B. 5 kürzere Takte brauchen statt einen langen. Korrekt. Aber ohne Pipelining ist die Maschine stets nur mit einem Befehl beschäftigt und die Komponenten der Maschine sind die meiste Zeit arbeitslos. Der Abstand zweier Befehle entspricht damit der Anzahl Zyklen eines Befehls. > Und Pipelining bedeutet, dass möglichst in jedem Takt ein neuer Befehl > angefangen wird? Richtig. Erst damit werden die Komponenten effektiv ausgelastet und die Latenz aufeinanderfolgender Befehle kann sich auf einen Zyklus reduzieren. Nur hast du dann Abhängigkeiten entweder zu berücksichtigen - oder musst sie MIPS-typisch einfach wegdefinieren. > Dann brauche ich für Pipelining mit x Stufen auch x FSMs oder? Ohne das in dieser Form jemals modelliert zu haben würde ich das schon so sehen. Wobei man das auch als eine Art hierarchische FSM betrachten kann, die aus einzelnen Unter-FSMs besteht. Weiss nicht, wie man das offiziell betrachtet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.