Projekt 2.20 - Spezifikation
Spezifikation/Entwicklerdokumentation
|
Mikroprogrammierung-Projekt 2.20 - Gruppe 4
|
add Addition zweier Operanden
bmove Kopieren von Speicherblöcken
cmp Vergleich zweier Operanden
jmpc Verzweigung, wenn Carry gesetzt
move Kopieren von Daten
-
Navigation: Projekthauptseite
add Addition zweier Operanden
|
Notwendige Schritte im Mikroprogramm:
- Berechnung RA+RB über die ALU, beide im Instruktionsregister angegeben
- Setzen der Flags OVR, C, Z, N im Maschinenstatusregister
- Sprung zu IFE
Realisierung:
Schritte 1/2 müssen gleichzeitig ausgführt werden, da die von der ALU gelieferten Flags nur im Takt der Rechenoperation gültig sind.
Schritt 3 kann gleichzeitig mit 1/2 ausgeführt werden.
Ausführungsschema:
Der Befehl benötigt also zur Ausführung 1 Takt.
bmove Kopieren von Speicherblöcken
|
Funktionsschema:
do
[r1]=[r0]
r0=r0+1
r1=r1+1
dst=dst-1
while (dst!=0)
Zunächst wird der Inhalt der über r0 adressierten Speicherstelle eingelesen, dann an die durch r1 adressierte Speicherzelle geschrieben. Dann werden r0 und r1 jeweils inkrementiert. Erst am Schluß wird RB dekrementiert und geprüft, ob es dadurch 0 geworden ist. Wenn ja, ist die Befehlsausführung beendet und es wird zu IFE gesprungen. Wenn nicht, wird das nachste Speicherwort kopiert. Dadurch daß RB erst nach dem Dekrementieren geprüft wird, ergibt sich, daß bmove 65536 Wörter kopiert, wenn RB am Anfang den Wert 0 hat.
Notwendige Schritte im Mikroprogramm:
- r0 über die ALU auf den Adreßbus ausgeben
- das Datum aus dem Hauptspeicher über den Datenbus in das Q-Register der ALU einlesen
- r0 inkrementieren
- r1 über die ALU auf den Adreßbus ausgeben und MEW* auf LOW (=Write) setzen
- das Q-Register der ALU auf den Datenbus ausgeben und somit in den Hauptspeicher schreiben, MEW* wieder auf HIGH (=Read bzw. nicht schreiben) setzen
- r1 inkrementieren
- RB (im Instruktionsregister angegeben) dekrementieren und µSR-Zero setzen
- wenn das Zero-Flag 0 ist (also RB ungleich 0), dann zu Schritt 1 springen
- ansonsten zu IFE springen.
Realisierung:
Schritt 2 muß direkt auf Schritt 1 folgen, da eine Leseoperation immer einen Takt nach der Adreßausgabe erfolgen muß.
Schritte 3 und 4 können gleichzeitig ausgeführt werden, indem man r1 direkt auf den Adreßbus ausgibt die ALU r0 um 1 erhöhen läßt.
Schritt 5 muß direkt auf 3/4 folgen, da eine Schreiboperation immer einen Takt nach der Adreßausgabe erfolgen muß.
Schritte 6 und 7 müssen jeweils nacheinander ausgeführt werden, da die ALU nur eine Rechenoperation pro Takt ausführen kann.
Schritt 8 kann erst nach 7 erfolgen, da die Statusflags erst nach ausgeführter Rechenoperation gültig sind.
Schritt 9 muß nach Schritt 8 ausgeführt werden, da nur eine direkte Sprungadresse pro Mikroinstruktion angegeben werden kann.
Ausführungsschema:
|
Takt |
Schritte |
|
1 |
1 |
7 Takte |
|
2 |
2, 3 |
|
3 |
4 |
|
4 |
5 |
|
5 |
6 |
|
6 |
7 |
|
7 |
8 |
|
8 |
9 |
1 Takt |
Daraus ergibt sich die Ausführungszeit mit (7*n)+1 Taktzyklen für n Kopieroperationen.
cmp Vergleich zweier Operanden
|
Notwendige Schritte im Mikroprogramm:
- Berechnung RB-RA über die ALU, beide im Instruktionsregister angegeben
- Setzen der Flags OVR, C, Z, N im Maschinenstatusregister
- Sprung zu IFE
Realisierung:
Schritte 1/2 müssen gleichzeitig ausgführt werden, da die von der ALU gelieferten Flags nur im Takt der Rechenoperation gültig sind.
Schritt 3 kann gleichzeitig mit 1/2 ausgeführt werden.
Ausführungsschema:
Der Befehl benötigt also zur Ausführung 1 Takt.
jmpc Verzweigung, wenn Carry gesetzt
|
Notwendige Schritte im Mikroprogramm:
- Prüfen des Carry-Flags des Maschinenstatusregisters über den Am2904,Ergebnis wird an den CC-Eingang des Sequencers gelegt.
- Wenn Carry=0 (fail), dann zu IFE springen und somit den nächsten Befehl nach JMPC ausführen
- Wenn Carry=1 (pass), dann RA (im Instruktionsregister angegeben) über die ALU auf dem Datenbus ausgeben.
- Den Befehlszähler vom Datenbus einlesen
- Sprung zu IFE
Realisierung:
Die Schritte 1/2 müssen gleichzeitig ausgeführt werden, da der CC-Eingang über den der bedingte Sprung gesteuert wird, nur in dem Takt in dem er gesetzt wird, gültig ist.
Die Schritte 3/4 müssen gleichzeitig ausgeführt werden, da der über die ALU an den Datenbus angelegte Wert nur einen Takt lang gültig ist. Außerdem müssen 3/4 nach 1/2 ausgeführt werden, da der Befehlszähler nur geladen werden darf, wenn das Carry-Flag gesetzt ist.
Schritt 5 kann gleichzeitig mit 3/4 ausgeführt werden.
Ausführungsschema:
|
Takt |
Schritte |
| 1 |
1, 2 |
| 2 |
3, 4, 5 |
Der Befehl benötigt also zur Ausführung
- bei fail (Carry=0): 1 Takt
- bei pass (Carry=1): 2 Takte.
Notwendige Schritte im Mikroprogramm:
- Befehlszähler auf den Adreßbus ausgeben, um das Konstantenfeld einzulesen.
- Datum aus dem Konstantenfeld über den Datenbus in das durch RB adressierte Register schreiben.
RB ist im Instruktionsregister angegeben.
- Befehlszähler um eins erhöhen
- Sprung zu IFE
Realisierung:
Schritt 2 muß direkt auf Schritt 1 folgen, da eine Leseoperation immer einen Takt nach der Adreßausgabe erfolgen muß.
Schritt 3/4 können zusammen mit Schritt 2 ausgeführt werden.
Ausführungsschema:
|
Takt |
Schritte |
| 1 |
1 |
| 2 |
2, 3, 4 |
Der Befehl benötigt also zur Ausführung 2 Takte
14.7.98