Mikroprogrammausführung

Automatisierte Aktivierung von Steuersignalen

Das Mikroprogramm dient dazu, den Steueralgorithmus umzusetzen. Im letzten Abschnitt wurde die Befehlsausführung genauer betrachtet. Offen ist noch, wie die im Steueralgorithmus vorkommende Wiederholung und Fallunterscheidung im Mikroprogramm realisiert werden.

Wiederhole:
    # Befehl holen
    10                      PC -> ABus
    10, 3, 11               Mem[Abus] -> DBus -> IR 
    10, 3                   Mem[Abus] -> DBus
    # Befehl decodieren und ausführen
    Falls op(IR):
        1 (inc):
            12              adr(IR) -> ABus
            12, 3, 7        Mem[ABus] -> DBus -> Akku
            12, 3           Mem[ABus] -> DBus
            12, 5, 13       upAkku; incPC 
            12, 8, 4        Akku -> DBus -> Mem[ABus]
            12, 8           Akku -> DBus
        2 (dec):
            12              adr(IR) -> ABus
            12, 3, 7        Mem[ABus] -> DBus -> Akku
            12, 3           Mem[ABus] -> DBus
            12, 6, 13       downAkku; incPC 
            12, 8, 4        Akku -> DBus -> Mem[ABus]
            12, 8           Akku -> DBus
        3 (jmp):
            12, 9           adr(IR) -> ABus -> PC
            12              adr(IR) -> ABus
        4 (tst):
            12, 13          adr(IR) -> ABus; incPC
            12, 3           Mem[ABus] -> DBus
            12, 3, 14       incPCz
        5 (hlt):

Experimente mit dem Bonsai-Simulationsprogramm

Bonsai-Logo Du kannst den Simulator auch etwas größer direkt in einem separaten Fenster öffnen: Bonsai-Simulator
Zum Ausdrucken gibt es auch eine Übersicht des Simulators mit seinen Steuerleitungen.

Aufgabe 1

(a) Initialisiere den Bonsai-Simulator, indem du die aktuelle Seite neu lädst. Mit der Takt-Schaltfläche rechts unten (erkennbar am Handsymbol) kannst du einen Taktimpuls auslösen. Führe das mehrfach aus und beobachte das MPC-Register, den Mikroprogrammspeicher und die Steuerwörter im Controlboard. Was wird im MPC-Register verwaltet?

manueller Takt

Aufgabe 2

(a) Initialisiere erneut den Bonsai-Simulator. Steppe noch einmal mit der Takt-Schaltfläche einige Befehle durch und beobachte dabei insbesondere den Befehlsdecoder. Zu welchen Zeitpunkten wird er aktiv? Wie übersetzt er einen Operationscode in eine Einsprungstelle im Mikroprogramm?

(b) Öffne den Befehlsdecoder-Editor. Hier erkennst du, dass der Befehlsdecoder eine einfache Tabelle ist, die einem Opcode eine zweistellige Zahl zuordnet. Diese zweistellige Zahl ist die Einsprungadresse im Mikroprogramm. Dem Opcode 2 (der für einen dec-Befehl steht) wird also die Einsprungstelle 20 im Mikroprogramm zugeordnet. Probiere einmal aus, wie sich die Ausführung eines Programms ändert, wenn du im Befehlsdecoder dem Opcode 2 die Einsprungstelle 10 zuordnest. Hast du Erklärung hierfür?

Aufgabe 3

Controlboard Ausschnitt (a) Initialisiere erneut den Bonsai-Simulator. Führe einge Takte durch, indem du die Takt-Schaltfläche anklickst. Im MPC-Register sollte irgendeine Zahl ungleich 0 stehen. Aktiviere jetzt gezielt das Steuersignal 1 im Controlboard. Wie ändert sich der Wert im MPC-Register?

(b) Initialisiere erneut den Bonsai-Simulator. Steppe mit der Takt-Schaltfläche einige Befehle durch und beobachte, wann das Steuersignal 1 aktiviert wird. Welche Funktion hat die Aktivierung des Steuersignals 1?

Hintergrundwissen

Mit jedem Takt-Impuls wird ein Steuerwort des Mikroprogramms ausgeführt. Das jeweils auszuführende Steuerwort wird mit dem Mikroprogrammzähler (MPC) verwaltet.

Der Wert des Mikroprogrammzählers kann in der Bonsai-Architektur auf drei verschiedene Weisen verändert werden:

Ausschnitt des MPC Mit einer Schaltung bestehend aus logischen Gattern wird genau festgelegt, welcher dieser drei Fälle gerade realisiert wird.

Der Befehlsdecoder dient dazu, aus dem Operationscode eines Befehls die Einsprungstelle des betreffenden Befehls im Mikroprogramm zu bestimmen.

Mit diesen Bauteilen lässt sich jetzt die automatisierte Ausführung des Befehlszyklus realisieren:

Die folgende Darstellung des Mikroprogramms verdeutlicht noch einmal die Realisierung des Befehlszyklus.

# Befehl holen
00: [10]
01: [10, 3, 11]
02: [10, 3]
03: [12]
04: [12, 2]        # Befehl decodieren: MPC = [op(IR)]0
...
# inc ausführen
10: [12]
11: [12, 7, 3]
12: [12, 3]
13: [13, 12, 5]
14: [12, 8, 4]
15: [12, 8]
16: [1]            # Rücksprung: MPC = 00
...
# dec ausführen
20: [12]
21: [12, 7, 3]
22: [12, 3]
23: [13, 12, 6]
24: [12, 8, 4]
25: [12, 8]
26: [1]            # Rücksprung: MPC = 00
...
# jmp ausführen
30: [12, 9]
31: [12]
32: [1]            # Rücksprung: MPC = 00
...
# tst ausführen
40: [13, 12]
41: [12, 3]
42: [14, 12, 3]
43: [1]            # Rücksprung: MPC = 00
...
# hlt ausführen
50: [12, 2, 0]
X

Fehler melden

X

Suche