2011-02-14 Aufgabe 3: Mikroprogrammierung

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

2011-02-14 Aufgabe 3: Mikroprogrammierung
Hier mal mein Lösungsversuch zur Aufgabe 3:

a)

Man wähle A := 1
----------------------------------------
|A+B->D (1), E->out (0) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (1)             | 1, 12, 14    |
----------------------------------------
|A+B->D (2), E->out (1) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (2)             | 1, 12, 14    |
----------------------------------------
|A+B->D (3), E->out (2) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (3)             | 1, 12, 14    |
----------------------------------------
|A+B->D (4), E->out (3) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (4)             | 1, 12, 14    |
----------------------------------------
|A+B->D (5), E->out (4) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (5)             | 1, 12, 14    |
----------------------------------------
|A+B->D (6), E->out (5) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (6)             | 1, 12, 14    |
----------------------------------------
|A+B->D (7), E->out (6) | 3, 8, 11, 16 |
----------------------------------------
|D->E,B (7)             | 1, 12, 14    |
----------------------------------------
|E->out (7)             | 16           |
----------------------------------------

b)
Wenn man das Ergebniss des Addierers direkt nach B und E schreiben könnte, würde sich die Anzahl der Schritt halbieren, da der Zwischenschritt über Register D wegfallen kann.

könnte das so richtig sein?


sollte einige korrekur machen

  1. du sollttest zuerst 0 aus Ausgabe haben, aber bei dir ist 1, und ich denke , kannst du nicht gleichzeitig 16 mit die andere leitung setzen, man braucht das werte zuerst von D wählen und dann nach E laden, und auf nächste Takt kannst du 16 (Ausgabe ) setzen. Du brauchst 1 takt , damit ein Datum komplett geladen wird
    dsh a) Ausgabe 0, A=1->D ---------> 16,9,11
    A=1 nach A ---------->14,2
    A+B nach E und Nach C,C nach B ---------->3,8,11,12,7,13,1
    Ausgabe 1,A+B usw… ---------> 16,3,us… …

Da in der Angabe explizit steht, dass B,C,D und E bei Programmstart den Wert 0 enthalten, ist die Lösung hier richtig, und man muss nicht erst extra noch den Wert von D nach E laden.


Tut mir Leid, ich bin einverstanden,dass die Lösung richtig, ich habe falsch gelesen, dass er mit 1 angefangen hatte,
Ich denke für die Werte 0 als Ausgabe braucht man , ja , von D nach E ausladen, aber für andere Werte schon
und die andere Frage, daß ich mir stelle, ob man kann mit A=1 , berechnen, ich hätte, zuerst 1 von ‚Eingabe‘ geladen und dann im Register A geladen hätte.


Auch das steht in der Angabe.

Sollte in der Angabe (wie hier) nicht explizit stehen, dass etwas an der Eingabe anliegt, würde ich diese auch nicht verwenden.


Ich habe eine Frage. Darf man gleich von D nach E und nach B gehen? 1,12,14
Danke!


Jopp.


Wir haben uns das auch überlegt, aber das wäre ja dann deswegen widersprüchlich, weil der Addierer gleichzeitig von B lesen und in B schreiben würde.


Das auch nach B geschrieben wird, stand in der Frage jetzt nicht. Aber auch das ist möglich (die verwendeten FlipFlops sinds glaub ich Master-Slave FlipFlops oder sowas), entsprechend kannst du im selben Takt den alten Wert Lesen und bereits den neuen Schreiben. (Das hat auch unser Tutor bestätigt.)