MPR Projekt 9 - Spezifikation

 

Gliederung

  1. Zielplattform
  2. Arbeitsumgebung
  3. Hilfsmittel
  4. Spezifikation der Befehle
    1. Der MOVE-Befehl
    2. Der DEC-Befehl
    3. Der CMP-Befehl
    4. Der SCF-Befehl
    5. Der RLC-Befehl
    6. Der JMPNC-Befehl
    7. Das BSCANF-Programm


Projektüberblick MPR Frames anzeigen
Zurück zur Homepage

Zielplattform

Aufbau des mikroprogrammierbaren TGI Rechners

Der mikroprogrammierte Rechner besteht aus einem Leitwerk zur Generierung der Steuersignale für die einzelnen Komponenten des Rechners, einem Rechenwerk zur Verarbeitung von 16 Bit Integer-Daten, einem Speicherwerk mit einem 64K * 16 Bit großen Hauptspeicher und einem Ein/Ausgabewerk, über das die Kommunikation mit dem PC erfolgt. Die einzelnen Werke sind über einen 16 Bit breiten Datenbus und einen 16 Bit breiten Adreßbus miteinander verbunden.

Das Leitwerk

Das Leitwerk besteht aus dem Sequenzerbaustein Am2910, einem 4K * 80 Bit großen Mikroprogrammspeicher und dem Mikroinstrukiosregister. Im Mikroprogrammspeicher sind die Mikroprogramme, bestehend aus einer Folge Mikroinstruktionen, abgelegt. In jedem Taktzyklus wird eine Mikroinstruktion ausgewählt und alle in ihr zusammengefaßten Mikrooperationen werden gleichzeitig zur Ausführung angestoßen. Die Auswahl der im nächsten Taktzyklus auszuführenden Mikroinstruktion erfolgt durch das Mikroleitwerk, das in jedem Taktzyklus eine Speicherzelle des Mikroprogrammspeichers adressiert.

Weiterhin enthält das Mikroleitwerk einen Befehlszähler BZ und ein 16 Bit breites Instruktionsregister für die zu implementierenden Maschinenbefehle. Der Befehlszähler addressiert die Maschinenbefehle im Hauptspeicher. Der Inhalt des Befehlzählers kann inkrementiert werden oder auf den Daten- bzw. den Adressbus ausgegeben werden. Es ist ebenso möglich Adressen vom Datenbus in den Befehlszähler zu laden. Das Instruktionsregister enthält den Maschinenbefehl der gerade ausgeführt wird.

Die Programme, die mit den Maschinenbefehlen der Zielmaschine geschrieben werden können, stehen zusammen mit den zu verarbeitenden Daten im Hauptspeicher.

Das Rechenwerk

Zur Verarbeitung der Daten steht ein 16 Bit breites Rechenwerk, auf Basis von 4 kaskadierbaren Rechenwerksbausteinen vom Typ Am2901 und einem Wortrandlogikbaustein Am2904, zur Verfügung. Das Rechenwerk unterstützt einfache arithmetische und logische Operationen. Darüberhinaus können Schiebeoperationen ausgeführt werden. Seine Daten erhält das Rechenwerk aus einer Registerdatei oder vom Datenbus. Ergebnisse können in die Registerdatei zurückgeschrieben werden oder auf den Daten bzw. den Adreßbus ausgegeben werden. Die Registerdatei enthält 16 Register von je 16 Bit.

Der Wortrandlogikbaustein Am2904 enthält zwei unabhängige Statusregister. Ein Maschienenstatusregister, dessen Werte von Maschienenbefehlen verwendet werden können, und ein Mikrostatusregister, das von Mikroprogrammen verwendet werden kann. Sie enthalten folgende Flags:

OVR Overflow - Flag
N Negative - Flag
Z Zero - Flag
C Carry - Flag


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Arbeitsumgebung

Die Erstellung der Mikroprogramme erfolgt mit dem Simulationsprogramm der mikroprogrammierbaren Maschine MIC (Version 5.2) auf eigenen Rechnern. Implementierung, Test und Optimierung erfolgen ausschließlich mit diesem Programm.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Hilfsmittel

  1. Praktikumsbeschreibung:
  2. Skripten zur Vorlesung:
    Titel: Technische Grundlagen Informatik - Wintersemester 1998/99
    Verfasser: Prof. Dr. Arndt Bode
    Herausgeber: Lehrstuhl für Rechnertechnik und Rechnerorganisation
  3. Übungsblätter aus der Zentralübung:
    Übungsblätter zur Mikroprogrammierung
    Verantwortlicher: Herr Wismueller
    Wintersemester 1998/99


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Spezifikation der Befehle



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

MOVE IMM RB Opcode: F4

1. Takt
  1. Konstante im Hauptspeicher adressieren. Die Speicheradresse befindet sich als Folgeadresse im Befehlszähler. Das Datum ist aber erst im nächsten Takt verfügbar, da der Hauptspeicher es erst dann auf den Datenbus legt.
2. Takt
  1. Die Konstante aus dem Hauptspeicher wird vom Datenbus über den D-Eingang als Quelloperand R in die ALU eingelesen.
  2. Das in RB bezeichnete Register (die Adresse von RB liegt im Instruktionsregister) wird als Zielregister für die ALU-Operation angegeben.
  3. Der Konstantenwert wird mit "0" addiert. Das hat zur Folge, daß der Wert unverändert bleibt und im gleichen Takt in das Zielregister gespeichert wird (RB).
  4. Sowohl das Maschinen- als auch das Mikrostatusregister sind während dieser ALU - Operation schreibgeschützt.
  5. Der Befehlszähler wird inkrementiert.
  6. Sprung in das Mikroprogramm IFETCH.

Bemerkung: Angegeben wurde als Opcode eigentlich 00. Da aber an dieser Stelle eigentlich das Mikroprogramm IFETCH steht, wurde der Opcode in Absprache mit dem Betreuer auf F4 geändert.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

DEC RB Opcode: 44

1. Takt
  1. Das in RB bezeichnete Register (die Adresse von RB liegt im Instruktionsregister) wird als Quelloperand S in die ALU geladen.
  2. Es wird die Differenz zwischen B und 0 (am R-Eingang) mit CarryIn = 0 gebildet und das Ergebnis in das Register geschrieben das in RB (im Instruktionsregister) adressiert ist.
  3. Sowohl das Maschinen- als auch das Mikrostatusregister sind während dieser ALU - Operation schreibgeschützt.
  4. Sprung in das Mikroprogramm IFETCH.

Bemerkung: Es ist natürlich ebenso möglich, bei der Subtraktion, statt 0 als zweiten Operanden 1 anzugeben und das CarryIn auf 1 zu setzen. Der zweite Operand müßte dann als Konstante angegeben und über den Datenbus eingelesen werden. Dafür würde aber ein Takt mehr benötigt werden, da es nicht möglich ist den D Eingang der ALU mit einem Register zu verknüpfen das in RB angegeben ist.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

CMP IMM RB Opcode: 30

1. Takt
  1. Konstante im Hauptspeicher adressieren. Die Speicheradresse befindet sich als Folgeadresse im Befehlszähler. Das Datum ist aber erst im nächsten Takt verfügbar, da der Hauptspeicher es erst dann auf den Datenbus legt.
  2. Der Inhalt des Maschinenstatusregisters wird gelöscht.
2. Takt
  1. Die Konstante aus dem Hauptspeicher wird über den Datenbus und den D-Eingang als Quelloperand R an die ALU übergeben.
  2. Als Zielregister wird in RB rD angegeben.
  3. Der Konstantenwert wird nun mit "0" addiert. Das hat zur Folge, daß der Wert unverändert bleibt und im gleichen Takt in rD abgespeichert wird.
  4. Sowohl das Maschinen- als auch das Mikrostatusregister sind während dieser ALU - Operation schreibgeschützt.
  5. Der Befehlszähler wird inkrementiert. 
3. Takt
  1. Der Wert des in RB (im Instruktionsregister) bezeichneten Registers und die Konstante aus rD werden als Quelloperanden für die ALU adressiert.
  2. Das CarryIn ist auf 1 zu setzen.
  3. Nun wird der Wert aus rD von dem Wert aus dem Register RB subtrahiert. Das Ergebnis wird nicht zurückgeschrieben.
  4. Die Flags im Maschinenstatusregister werden gesetzt. Der Bedingungscode wird dabei so gewählt, daß das Carry negiert gespeichert wird.
  5. Sprung in das Mikroprogramm IFETCH.

Bemerkung: bei einer Subtraktion A - B, bei welcher der Operand A größer oder gleich dem Operanden B, wird im Maschinenstatusregister das Carry Flag gesetzt. Laut Vorgabe für den Befehl cmp soll das Carry Flag aber gesetzt werden, wenn gilt, daß A kleiner B ist. Daher muß das Carry Flag negiert abgespeichert werden. Die Alternative würde darin bestehen das Carry Flag manuell zu manipulieren, was aber einen zusätzlichen Takt kosten würde.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

SCF Opcode: F5

1. Takt
  1. Die Konstante FFFFh aus dem MIR wird über den Datenbus und den D-Eingang als Quelloperand R an die ALU übergeben.
  2. Als Zielregister wird in RB rD angegeben.
  3. Der Konstantenwert wird nun mit "0" addiert. Das hat zur Folge, daß der Wert unverändert bleibt.
  4. Das Ergebnis dieser Operation wird nun über das Carry-Flag nach links rotiert, so daß im Carry-Flag der Wert 1 steht.
  5. Sowohl das Maschinen- als auch das Mikrostatusregister sind während dieser ALU - Operation schreibgeschützt.

Bemerkung: Es wurden für diesen Befehl keine genauen Angaben darüber gemacht, ob im Maschinenstatusregister andere Flags als das Carry gesetzt werden sollen oder nicht. Wir haben uns dafür entschieden, nur das Carry Flag zu setzen und die anderen Flags nicht zu verändern. Da das Carry - Flag im Maschinenstatusregister nicht direkt manipuliert werden kann, muß man den Umweg über die Schiebeoperation gehen. Alternativ bestünde die Möglichkeit, den Inhalt des Maschinenstatusregisters in das Mikrostatusregister zu laden. Nachdem dort das Carry gesetzt wurde, müßte der Inhalt des Mikrostatusregisters in das Maschinenstatusregister zurückgeschrieben werden. Dieses Verfahren nimmt allerdings 3 Takte in Anspruch.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

RLC RB Opcode: 64

1. Takt
  1. Das in RB bezeichnete Register (die Adresse von RB liegt im Instruktionsregister) wird als Quelloperand S in die ALU geladen.
  2. Der Inhalt dieses Registers wird mit 0 addiert (bei CarryIn = 0) , so daß er sich nicht verändert.
  3. Das Ergebnis wird anschließend nach links geschoben.
  4. Die Schiebesteuerung wird so gesteuert das über das Carry rotiert wird.
  5. Der Schreibschutz für das Maschinenstatusregister ist aufgehoben.
  6. Sprung in das Mikroprogramm IFETCH.

Bemerkung: Es wurden für diesen Befehl keine genauen Angaben darüber gemacht, ob im Maschinenstatusregister andere Flags als das Carry gesetzt werden sollen oder nicht. In der konkreten Implementierung werden diese Flags gesetzt, da sie von nachfolgenden Befehlen (z.B. Bedingte Sprünge) durchaus sinnvoll genutzt werden können.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

JMPNC IMM RB Opcode: 8D

1. Takt
  1. Maschinenstatusregister auslesen und überprüfen ob das das Carry - Flag gesetzt ist.
  2. Wenn das Carry - Flag gesetzt ist erfolgt ein Sprung nach "WEITER".
Carry-Flag = 0
2. Takt
  1. Konstante im Hauptspeicher adressieren. Die Speicheradresse befindet sich als Folgeadresse im Befehlszähler. Das Datum ist aber erst im nächsten Takt verfügbar, da der Hauptspeicher es erst dann auf den Datenbus legt.
3. Takt
  1. Den Wert (die Speicheradresse) aus dem Hauptspeicher über den Datenbus in den Befehlszähler einlesen.
  2. Sprung in das Mikroprogramm IFETCH.
Carry-Flag = 1
2. Takt
"WEITER"
  1. Befehlszähler inkrementieren.
  2. Sprung in das Mikroprogramm IFETCH.


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Nachbildung von BSCANF

Das Maschinenprogramm das den Befehl BSCANF implementiert erwartet, daß der zu überprüfende Wert im Register r0 liegt. Im Register r1 steht dann das Ergebnis.

Zunächst wird mittels scf das Carry Flag im Maschinenstatusregister gesetzt. Das ist wichtig, da sonst das Programm nicht terminiert, wenn der zu überprüfende Wert keine binäre 1 enthält. Mittels MOVE wird nun die Konstante 10 hex in das Register r1 geschrieben. Der Wert im Register r0 wird nun nach links geschoben. Anschließend wird das Register r1 dekrementiert.

Ist das Carry Flag nun noch nicht gesetzt (d.h. es wurde noch keine binäre 1 in das Carry Bit geschoben), so erfolgt ein Sprung zu dem Befehl RLC. Wurde es hingegen gesetzt so stoppt die Ausführung des Programms und das Ergebnis liegt vor.

Pseudocode:

01 SCF
02 MOVE x 1
03 0010
04 RLC x 0
05 DEC x 1 06 IMPNC 07 0004


Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage