Multicycle MIPS FSM

Gast #3938885
Lesenswert?

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
#3938908
Lesenswert?

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.
Gast #3938929
Lesenswert?

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?
#3938935
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren