Hades logoHades applet banner
RALU mit RAM

applet icon

The image above shows a thumbnail of the interactive Java applet embedded into this page. Unfortunately, your browser is not Java-aware or Java is disabled in the browser preferences. To start the applet, please enable Java and reload this page. (You might have to restart the browser.)

Circuit Description

Das Applet erweitert die RALU mit Leitwerk aus dem vorangegangenen Beispiel um ein Instruktionsregister IR und einen Hauptspeicher, der sowohl für Programme (Instruktionen) als auch für Daten verwendet wird. Die Schaltung dient als Zwischenschritt zur Erläuterung des vollständigen 4-bit Prozessors MiniCPU. Für eine detaillierte Erläuterung vgl. Abschnitt 6.6.5 in Technische Informatik 1.

Kernstück der Schaltung ist wiederum die bekannte 4-bit ALU mit vorgeschalteten Registern (Accu und RegB), die mit der Dateineingabeeinheit und dem Ausgaberegister an den gemeinsamen Datenbus angeschlossen sind. Die Steuersignale aller Komponenten werden wiederum aus zwei ROMs (mit je 256x8 bit) ausgelesen. Wegen der zusätzlichen Steuersignale für das Instruktionsregister (Takt) und den Hauptspeicher (Output-Enable und Write-Enable) werden für die Ansteuerung dieser Schaltung bereits insgesamt 13 bit aus den ROMs benötigt.

Der 3-bit Binärzähler übernimmt wieder die Adressierung der drei untersten Adressbits, so dass jeder einzelne Maschinenbefehl wie im vorherigen Beispiel in acht einzelne Takte unterteilt wird. Dagegen werden die höheren Adressen der ROMs in dieser Schaltung direkt über das Befehlsregister angesteuert (IR, instruction register, links mitte). Das Instruktionsregister selbst wird über den Datenbus mit Werten versorgt und jeweils im ersten Subzyklus (Zählerwert 000) eines Befehls aktualisiert.

Ebenfalls neu ist der Hauptspeicher, hier realisiert als RAM des TTL-Typs 74219 mit einer Kapazität von lediglich 16 Worten a 4 bit (unten rechts). Die Adressierung der RAMs erfolgt über vier Schalter (A3,A2,A1,A0). Zum Beobachten der Speicherzugriffe sowie zum Ändern der gespeicherten Daten für das RAM (und gerne auch die ROMs!) einfach den jeweiligen Speichereditor über das Popup-Menu (popup-edit) öffnen!

Die Befehlskodierung bleibt unverändert:

  op3 op2 op1 op0  |  Mnemo  |  Operation
-------------------+---------+--------------------------
    0   0   0   0  |  NOP    |  no operation
    0   0   0   1  |  LDA    |  load:  accu=(bus)
    0   0   1   0  |  STA    |  store: bus=(accu)
    0   0   1   1  |  ADD    |  add: accu=(accu+datain)
    0   1   0   0  |  SUB    |  sub: accu=(accu-datain)
    0   1   0   1  |  INC    |  increment  accu=(accu+1)
    0   1   1   0  |  DEC    |  decrement  accu=(accu-1)
    0   1   1   1  |  AND    |  and: accu=(accu&datain)
    1   0   0   0  |  OR     |  or:  accu=(accu|datain)
    1   0   0   1  |  XOR    |  xor: accu=(accu^datain)
    1   0   1   0  |  IN     |  in:  accu=(datain)
    1   0   1   1  |  OUT    |  out: dataout=(accu)
    1   1   *   *  |  ---    |  undefined

Zum Steuern der Simulation entweder die verschiedenen Schalter direkt anklicken, oder die folgenden Bindkeys tippen:

TasteEingangKommentar
'1'A0RAM Adressbit 0
'2'A1RAM Adressbit 1
'3'A2RAM Adressbit 2
'4'A3RAM Adressbit 3
'c'CTakt Zähler
'r'RReset Zähler

Bedienung des Applets: Bitte zunächst einen Reset-Impuls auslösen und die RAM-Adresse 0000 einstellen, um die Schaltung auf einen definierten Zustand zurückzusetzen.

Anschließend einen Taktimpuls (C) auslösen. Beim ersten Start des Applets sind im Hauptspeicher die Werte (1,7,4,5,b,0,...0) enthalten. Durch die manuell eingestellt Adresse 0000 wird also der Wert 1 aus dem Speicher ausgelesen und beim Taktimpuls in das Befehlsregister IR übertragen. Dies selektiert den LDA-Befehl.

Da die Schaltung noch nicht vollautomatisch funktioniert, muss jetzt die RAM-Adresse manuell auf den Wert 0001 eingestellt werden, womit der Wert 7 (0111b) auf den Bus gelegt wird. Jetzt einen weiteren Taktimpuls C auslösen. Entsprechend der zuvor ausgewählten Funktion LDA wird dieser Wert beim Takt in das Accu-Register übertragen. Anschließend sechs weitere Taktimpulse auslösen oder einen weiteren Reset (R) geben, um den Befehlszyklus-Zähler zurückzusetzen.

Für die nächste Operation jetzt wieder manuell die RAM-Adresse inkrementieren, also den Wert 2 (0010b) auswählen, und einen weiteren Taktimpuls auslösen. Dies überträgt den Wert 4 (Inhalt des RAM an Adresse 2) in das Befehlsregister. Laut Befehlskodierung selektiert dies den SUB-Befehl.

Jetzt die RAM-Adresse wieder inkrementieren (Wert 3 bzw. 0011b), so dass der Wert 5 (Inhalt des RAM an Adresse 3) auf dem Bus erscheint. In den nächsten Takten wird der Wert vom Bus in das B-Register übertragen und über die ALU vom Accu-Inhalt subtrahiert. Weitere Taktimpulse auslösen, bis der Befehlszyklus-Zähler wieder den Wert 0 aufweist.

Jetzt die RAM-Adresse erneut inkrementieren (Wert 4 bzw. 0100b). Beim nächsten Taktimpuls wird der zugehörige Wert 'b' in das Befehlsregister übertragen. Dies selektiert den OUT-Befehl. Weitere Taktimpulse auslösen, bis der Wert aus der ALU in das Ausgaberegister übertragen wurde.

Print version | Run this demo in the Hades editor (via Java WebStart)
Usage | FAQ | About | License | Feedback | Tutorial (PDF) | Referenzkarte (PDF, in German)
Impressum http://tams.informatik.uni-hamburg.de/applets/hades/webdemos/90-tionline/06-raluram/raluram.html