RETI - f [2:0]
06.03.2010 18:26:48
Hallo,
Mich plagt auch noch eine Frage, die mir heute beim Lernen nochmal in den Kopf gekommen ist:
Bei Aufgabe 14 gab es doch die 3a), in der man zeigen sollte, wie /f[0].. /f[2] definiert sind.
Nun ist ja die Lösung

/f[0] =/I31*/I30*/I26
/f[1] =/I31*/I30*/I27
/f[2] =I31+I30+/I28

Was ich aber nicht verstehe, ist die Tatsache, dass /f[2] invertiert ist. Was ist dafür der genaue Grund?
Grüße



1 mal bearbeitet. Zuletzt am 06.03.2010 18:27 von David Zügel.
Re: RETI - f [2:0]
06.03.2010 19:53:49
David Zügel schrieb:
-------------------------------------------------------
> Hallo,
> Mich plagt auch noch eine Frage, die mir heute
> beim Lernen nochmal in den Kopf gekommen ist:
> Bei Aufgabe 14 gab es doch die 3a), in der man
> zeigen sollte, wie /f[0].. /f[2] definiert sind.
> Nun ist ja die Lösung
>
> /f[0] =/I31*/I30*/I26
> /f[1] =/I31*/I30*/I27
> /f[2] =I31+I30+/I28
>
> Was ich aber nicht verstehe, ist die Tatsache,
> dass /f[2] invertiert ist. Was ist dafür der
> genaue Grund?
> Grüße


Soweit ich weiß , muss nicht nur /f[2] invertiert werden sondern auch f 1 und f2 sind zu invertieren, weil eben eine eigenschaft von pals gleichungen ist.



1 mal bearbeitet. Zuletzt am 06.03.2010 19:54 von Baldini.
Re: RETI - f [2:0]
06.03.2010 20:00:05
Naja, habe mir auch die Lösung auf der Fachschaftseite angeschaut und da war das auch so das endgültige Ergbnis... Das irritiert ja auch so.. =/
Re: RETI - f [2:0]
07.03.2010 10:43:11
Mal so:

wie wäre denn deine Lösung für f[2:0] (nicht invertiert)? Und wie sieht dann die/deine Lösung aus für /f[2], /f[1] und /f[0] aus - also mit der obligatorischen PAL-Invertierung? kurze erläuterung, warum deine lösung so aussieht kann auch nicht schaden.

nur mal soviel... die herausgegebene Lösungsskizze ist da schon korrekt - auch die der *hüstel* fach- *prust* schafts- *räusper* seite.
Re: RETI - f [2:0]
07.03.2010 11:10:26
Meine nicht invertierte Lösung wäre ja dann einfach:

f[0]=I31+I30+I26
f[1]=I31+I30+I27
f[2]=/I31*/I30*I28

Ich verstehe ja auch, wie f und I im Zusammenhang stehen. Mir ist nur nicht klar, warum bei f[2] genau das Gegenteil als Lösung steht.
Re: RETI - f [2:0]
07.03.2010 11:35:40
Ja .. ist klar, dass f[0]=I31+I30+I26 invertiert /f[0] = /I31*/I30*/I26 ergibt... das meine ich nicht.

Die Frage ist, wie DEINE Lösung zu dieser Aufgabe aussehen würde.
Lösungsskizze ausgeblendet, wie sollte f[2:0] deiner Meinung nach aussehen? Auch wenn's falsch ist, ist ja erstmal egal...
Re: RETI - f [2:0]
07.03.2010 12:03:13
Ok ^^, bin bissel langsam heute..
Also nach meiner Vorstellung müsste es sich ja an den ADDI Befehl orientieren, was dann so nach meiner Meinug sein müsste:

ADDI: 000011

f[0] = /I31+/I30+I26
f[1] = /I31+/I30+I27
f[2] = /I31+/I30+/I28

/f[0] = I31*I30*/I26
/f[1] = I31*I30*/I27
/f[2] = I31*I30*I28

Leider stimmt das halt leider nicht mit der Lösung überein... Ist der Ansatz mit ADD falsch?
Re: RETI - f [2:0]
07.03.2010 12:40:29
ok... sehe die Probleme... daher muss ich doch weiter ausholen:

was will ich denn mit den f[2:0] erreichen? Ich will, dass die ALU immer richtig eingestellt wird, wenn ich was rechnen will - nicht nur bei Addition, sondern immer - also auch bei OR, XOR, SUB, usw.
Wie kriege ich das hin? Ich muss dafür sorgen, dass die select-Eingänge der ALU immer korrekt gesetzt sind, den Rest übernimmt dann die ALU.
Wir haben es uns einfach gemacht und gesagt: die Kodierung für die select-Eingänge der ALU entspricht genau der Kodierung der Bits I[28:26] im Befehlswort.
Ein Problem bleibt: diese Bits zeigen nicht immer an, was die ALU machen soll. Z.B. beim MOVE stehen im I[28:26] irgendwelche Registerkodierungen, wenn ich die der ALU gebe, macht die irgendwas - das will ich aber nicht, da auch beim MOVE Datenwörter durch die ALU geschleust werden sollen und "irgendwas" macht diese Wörter unter Umständen kaputt.

Ich muss also zunächst unterscheiden zwischen: 1) "ich will irgendwas rechnen. Was, das steht in I[28:26]" und 2) "alles andere".

zu 1): Also z.B. für f[0]:
"Bei Compute Befehlen (ich will was rechnen)" ( I31 UND I30 müssen gleich "0" sein)
UND "dann soll f[0] gleich I[26] sein" ( also einfach I26 dazu)
Damit: f[0] = /I31 * /I30 * I26

und auch für die anderen:

f[1] = /I31 * /I30 * I27
f[2] = /I31 * /I30 * I28

reicht aber nicht, da 2) noch behandelt werden muss.
Wenn ich die Gleichungen so nehme wie oben, würde bei allen anderen Befehlen gelten f[2:0] = [000] (da bei allen anderen Befehlen nicht gleichzeitig I31 und I 30 gleich "0" sind). Das würde bedeuten, dass ich bei allen anderen Befehlen eine Konstante 0 aus der ALU gebe (Siehe Signalkodierung der ALU in Kapitel 10.2). Aber wie oben gesagt: auch bei anderen Befehlen müssen Datenwörter durch die ALU - sollte also nicht Konstant 0 rauskommen.
Was soll die ALU machen, wenn sie nicht "rechnen" soll? Schaut man sich die anderen Befehle und Datenpfade an, erkennt man: sie soll sonst immer addieren - will ich jetzt nicht im Detail ausführen, muss man sich mal kurz anschauen, dann sieht man, dass das gilt.
Addition der ALU heißt: f[2:0] = [011].
Heißt also: f[2] soll nur aktiv (also "1") sein, bei Compute Befehlen und wenn I28 auch "1" ist und sonst soll es "0" sein. Damit macht die Gleichung aus 1) schon das Gewünschte.
f[1] und f[0] sollen beim "rechnen" I[27:26] ensprechen und bei allen anderen Befehlen soll es aktiv (also "1") sein. Sie sind also aktiv bei 1) ODER wenn I31 = "1" ODER I30 = "1"

Also:
f[0] = /I31 * /I30 * I26 + I31 + I30
f[1] = /I31 * /I30 * I27 + I31 + I30
f[2] = /I31 * /I30 * I28

Und ich behaupte jetzt mal ganz dreist, dass dies genau der Lösung in der Lösungsskizze entspricht.



1 mal bearbeitet. Zuletzt am 07.03.2010 12:44 von Sven Reimer.
Re: RETI - f [2:0]
07.03.2010 13:05:50
Danke für die sehr gute Erklärung =). Ist füt mich jetzt echt verständlich geworden.
MIt freundlichen Grüßen
David Zügel