Rechnerarchitektur

hallo.

bin grad an der vorbereitung für die prüfung. und da hab ich doch gleich mal ne frage zum datenpfadentwurf. und zwar geht’s um die offenbar von jedem prof verwendeten bildchen. zu finden z.b. unter
http://inferno.informatik.uni-halle.de/~molitor/CDRO…

auf der seite „Erster Schritt einer R-Type-Instruktion“ is die erweiterung für den branch-befehl eingezeichnet. frage:

wozu brauch ich den shifter?

wie wird branch on NOT equal realisiert?

kann der pc nicht erniedrigt werden? der angegebene datenpfad sieht nur eine erhöhung um jeweils 4 bzw. um die sprungadresse+4 vor. was ist, wenn ich an eine frühere stelle des programms springen will?

welche aufgabe hat das „sign extend“?

warum brauch ich zwei steuersignale MemRead und MemWrite? kann ich denn gleichzeitig in den speicher schreiben und aus ihm lesen?

soviel erstmal :smile:

gruß

michael

hallo.

wozu brauch ich den shifter?

Die Sprungbefehle kommen offenbar relativ und in ganzen Befehlen.
Die Startadressen sind immer 4 auseinander. Shift um 2 Bits nach links ist dasselbe wie *4.

wie wird branch on NOT equal realisiert?

Sehe ich hier nur als Programm:

0 branch on eq 1
4 branch sonstwohin
8 NOP

ueberspringt halt 4

kann der pc nicht erniedrigt werden? der angegebene datenpfad
sieht nur eine erhöhung um jeweils 4 bzw. um die
sprungadresse+4 vor. was ist, wenn ich an eine frühere stelle
des programms springen will?

welche aufgabe hat das „sign extend“?

kein Ahnung, aber ich vermute mal, dass damit Sprünge nach hinten
durch das erzeugen von negativen Zahlen ermöglicht werden. wahrscheinlich - ich kenne den rest der VOrlesung ja nicht- kommt der Befehl als sign + Entfernung und wird hier in die entsprechende Komplementdarstellung umgewandelt.

warum brauch ich zwei steuersignale MemRead und MemWrite? kann
ich denn gleichzeitig in den speicher schreiben und aus ihm
lesen?

Du möchtest doch manchmal gar nicht mit dem Speicher arbeiten.
Es gibt also mindestens die Zustände read, write und nix. da komst Du mit zwei Leitungen nicht hin.

soviel erstmal :smile:

gruß

michael

Hallo Mmichael

bin grad an der vorbereitung für die prüfung. und da hab ich
doch gleich mal ne frage zum datenpfadentwurf. und zwar geht’s
um die offenbar von jedem prof verwendeten bildchen. zu finden
z.b. unter
http://inferno.informatik.uni-halle.de/~molitor/CDRO…

auf der seite „Erster Schritt einer R-Type-Instruktion“ is die
erweiterung für den branch-befehl eingezeichnet. frage:

wozu brauch ich den shifter?

Der „Shifter left 2“ entspricht einer Multiplikation mit 4. Im Prinzip werden einfach die 32-Datenleitungen um 2 bit versetzt angeschlossen und Bit.0 und Bit.1 sind fest auf „0“ angeschlossen, Bit.30 und Bit.31 sind überflüssig.

wie wird branch on NOT equal realisiert?

In der Zeichnung „Datenpfad-Operation bei Branch Equal“ ist ein Fehler: der „Zero“-Ausgang der Daten-ALU und der „Branch“-Ausgang der „Control“-Einheit sowie das UND-Gatter sind auch aktiv.
„Barnch on NOT equal“ wird realisiert in dem der „Zero“-Ausgang der Daten-ALU invertiert wird.

kann der pc nicht erniedrigt werden? der angegebene datenpfad
sieht nur eine erhöhung um jeweils 4 bzw. um die
sprungadresse+4 vor. was ist, wenn ich an eine frühere stelle
des programms springen will?
welche aufgabe hat das „sign extend“?

Wenn du einen NEGATIVEN Wert ADDIERST dann geht doch rückwärts!
Aus diesem Grund wird auch das „sign extend“ benötigt, da ja die Daten von 16 auf 32 Bit erweitert werden. Der „sign extend“ ist in diesem Fall recht einfach konstruiert: Bit.15 (Eingangswert) wird einfach mit Bits.15-31 (Ausgang) verbunden; Bits.0-14 (Eingang) werden 1:1 mit den Bits.0-14 (Ausgang) verbunden.

warum brauch ich zwei steuersignale MemRead und MemWrite? kann
ich denn gleichzeitig in den speicher schreiben und aus ihm
lesen?

Natürlich nicht, aber es gibt hat 3 Zustände auf dem Bus:

  1. Lesen
  2. Schreiben
  3. Ungültig (wenn keine gültige Adresse auf dem Bus anliegt oder die Signale gerade am umschalten sind).
    Deshalb brauchst du mindestens 2 Bit um diese Zustände zu identifizieren. Eine Variante ist halt ein Read- und ein Write-Signal zu erzeugen die Andere ein Write- und ein AdressValid-Signal.

MfG Peter(TOO)