Wie erweitere ich einen Eintaktprozessor richtig?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Folgende Überlegung:

Die Spezifikation des neuen Befehls sagt, daß der PC über mehrere Takte konstant (0) bleiben muß und wenn eine 0 gelesen wird, um 4 erhöht wird. D.h. Du brauchst anstatt der fixen 4 an Stelle A etwas, das entweder die 4 oder eine 0 liefert, also einen MUX, der von dem entsprechenden Steuersignal angesteuert wird.....

Bzw. solltest Du merken:

Ich habe je nach Situation eine 4 oder eine 0, die auf den PC addiert wird, eine 4 für Alle ISNs außer der neuen, wenn die neue ISN ausgeführt wird je nach Situation 0 oder 4 in Abhängigkeit eines (weiteren) Steuersignals.

Also wirst Du einen MUX für die beiden Fälle der neuen ISN benötigen, der in Abhängigkeit des erreichens der 0 eine 4 ausgibt und mit einem weiteren MUX, der zwischen dieser ISN und allen ANDEREN (fixe 4) umschaltet.

Insofern kommen nur noch 3+4 in Frage, wobei nicht zu sehen ist, welche Aufgabe der Shifter hat (Wenn überhaupt könnte man mit diesen nach Bedarf eien 4 zu ner 0 shiften anstatt zu muxen - wäre aber auch ein wenig drüber).

----------

Unbesehens der konkreten Aufgabe (ist ja nicht Deine erste Frage), kannst Du mal nach Vorlesungsskripten zum Thema schauen (einen Link hast Du schon). Ferner würde ich mir mal anschauen, wie eine FSMD (Finite State Machine with Datapath) so aussieht. Diese ist quasi um die freie Programmierbarkeit beraubt, sodaß man sich erstmal besser die grundlegende Funktionsweise von Datenpfaden und deren Ansteuerung anschauen kann.

Der endliche Automat kodiert das feste Programm.

jedrzejkoko 
Fragesteller
 22.02.2024, 13:44

Hallo, vielen Dank für die Antwort. Ich habe noch einmal versucht, es selbst in Worte zu fassen und wollte fragen, ob es vielleicht möglich wäre, kurz darüber zu schauen, ob die Erklärung damit richtig ist oder ob ich immer noch etwas missverstanden habe.:

"Anhand der Spezifikationen können wir mehrere Aspekte für die Erweiterung "rwuz" herauslesen.

Zunächst soll das Immediate zum "rs"-Register addiert und dann im "rt"-Register gespeichert werden. Dies entspricht dem bereits vorhandenen "addi"-Befehl (addi rt, rs, immediate) in unserem Eintaktprozessor, bei dem die ALU die Addition durchführt. Daher ist keine Änderung erforderlich.

Allerdings soll das "rt"-Register auch als Adresse für einen Lesezugriff auf den Datenspeicher dienen. Und solange der gelesene Speicherwert nicht null ist, soll "rwuz" erneut ausgeführt werden. Für diese Anforderung benötigen wir also auf jeden Fall mindestens einen MUX, der überprüft, ob die Adresse im Datenspeicher gleich 0 oder 1 ist. Basierend auf dem Text wissen wir, dass dieses Signal "rZero" genannt wird.

Wir wissen auch, dass wir mindestens einen weiteren MUX benötigen, der überprüft, ob unsere neue Anweisung ("rwuz") überhaupt erneut ausgeführt werden soll oder nicht. Denn falls ja, soll der PC gleich bleiben und falls nein, soll der PC sich um 4 erhöhen.

Also wissen wir nun, dass wie zwei MUXs benötigen. Abbildung 3 und 4 haben 2 MUXs, wobei jedoch kein Shifter wie von Abbildung 3 nötig ist, somit ist die klare Wahl Abbildung 4.

Als nächstes stellt sich die Frage, wo wir diesen Baustein einsetzen sollen. Gemäß der Anforderung: "Falls der gelesene Datenwert null ist, soll die nächste Instruktion ausgeführt werden (PC um 4 erhöhen)" sollte es in "A" eingesetzt werden. Denn wir wissen, dass der PC vom Addierer erhöht wird, und dass diese immer +4 Byte rechnet (da jeder Befehl normalerweiße 4 Byte groß ist). Und da der Output von unseren beiden MUXs entscheidet, ob es erhöht werden soll oder nicht, setzten wir es vor den Addierer.

Abschließend wird gefragt, welche Anweisungen bei "newsig" auf 1, 0 oder "don't care" gesetzt werden müssen. Wie oben erwähnt wurde, hat "newsig" den Opcode 0x11. Daher setzen wir diesen auf 1 und alles andere auf 0."

0
KarlRanseierIII  22.02.2024, 14:07
@jedrzejkoko
Für diese Anforderung benötigen wir also auf jeden Fall mindestens einen MUX, der überprüft, ob die Adresse im Datenspeicher gleich 0 oder 1 ist. Basierend auf dem Text wissen wir, dass dieses Signal "rZero" genannt wird.

Ich würde einem MUX nicht die Fähigkeit des "Prüfens" zusprechen wollen. die Prüfung auf 0 macht ja 'irgendwas anderes' und der MUX erhält entsprechend dann den Stimulus (Steuersignal) rZero basierend auf der eigentlichen Prüfung.

rZero steuert also den MUX, der daraufhin einen Eingang für den gewünschten Festwert wählt.

Direkt drauf ist nochmal eine ähnliche Formulierung, da solltest Du auch nochmal ran.

Randnotiz: Ich würde also Plural MUXes schreiben, das lässt sich sonst so schlecht sprechen ;-).

Denn wir wissen, dass der PC vom Addierer erhöht wird,

vielleicht besser 'von diesem Addierer', sonst kommt man vielleicht auf die Idee es könnte der allgemeine Addierer in der ALU sein.

1
jedrzejkoko 
Fragesteller
 22.02.2024, 18:30
@KarlRanseierIII

Vielen Dank für die Hilfe! Es war wirklich sehr hilfreich. Ich werde dir den Stern geben, sobald die 24 Stunden vorbei sind.

0

Die Frage sprengt das was ich in Textform bereit bin zu schreiben

Ohne Erklärungen: Der Befehl an der Adresse die im program counter steht wird geladen, der opcode (Teil des Befehls) wird dekodiert und löst das zugehörige Steuer Signal new signal aus (Daher new signal nur für den entsprechenden opcode 1). Das aktiviert einen Multiplexer der dafür sorgt, dass nicht mehr wie sonst grundsätzlich in jedem Takt 4 auf den program counter addiert wird, sondern nurnoch wenn der gelesene Wert nicht 0 ist (das ist das Signal das bei ? anliegt rZero)

Ich mag die Vorlesung nicht, aber sie deckt vermutlich alles ab (außer die zugrunde liegenden Logikgatter und Volladdierer und Zähler etc.): https://youtube.com/playlist?list=PLfk0Dfh13pBMh-5TcPtx-3bXAwnDnKTME&si=_rkVkEvGSSGR-8mL

Geht vermutlich zu sehr in die Tiefe, einiges kannst du sicherlich skippen