Forum: Mikrocontroller und Digitale Elektronik Multicycle MIPS FSM


von GinTonic (Gast)


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

von (prx) A. K. (prx)


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.

von GinTonic (Gast)


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?

von (prx) A. K. (prx)


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.

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
Noch kein Account? Hier anmelden.