Hades logoHades applet banner
RALU mit Leitwerk

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 Datenbus aus dem vorangegangenen Beispiel um ein Leitwerk, dass die automatische Ansteuerung der verschiedenen Kontrollsignale übernimmt und damit erstmals vollautomatische Abläufe erlaubt. Für eine detaillierte Erläuterung vgl. Abschnitt 6.6.4 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. Alle Steuersignale dieser Komponenten werden jedoch nicht mehr interaktiv von externen Schaltern aus versorgt, sondern sind direkt an die Ausgänge von zwei Festwertspeichern (ROM) angeschlossen. Dazu werden insgesamt 10 Steuerleitungen benötigt; dies sind S1,S0,Cmpl,Cin für die ALU, InG,AccuG für die Tristate-Treiber, sowie die Taktsignale AccuC, BC, OutC und das Resetsignal BR. Anstelle eines speziell entwickelten ROMs der passenden Größe (hier 128x10 bit) nutzt die Schaltung einfach zwei parallelgeschaltete ROMs der Standardgröße von je 256x8 bit Kapazität.

Die Adressierung der ROMs erfolgt über vier Schalter (Op3,Op2,Op1,Op0), die direkt mit den Adresseingängen A6,A5,A4,A3 verbunden sind, sowie einen 3-bit Binärzähler, der die Adressen A2,A1,A0 liefert. Der Zähler wird über die Schalter C (Takt) und R (Reset) gesteuert und erlaubt es, eine Abfolge von jeweils 8 Schritten automatisch hintereinander auszuführen.

Die Datenwerte in den ROM Speichern sind so vorprogrammiert, dass die Gesamtschaltung abhängig von den Schalterwerten (Op3,Op2,Op1,Op0) ausgehend vom Zählerstand 0 bis zum Zählerstand 7 des Binärzählers jeweils die folgende Operation ausführt:

  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) b=(datain)
    0   1   0   0  |  SUB    |  sub: accu=(accu-datain) b=(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

Bitte alle Befehle in verschiedener Reihenfolge und Kombination ausprobieren! Zur erstmaligen Initialisierung des Accu-Registers ist der IN-Befehl geeignet. Das Umschalten der Opcode-Bits mittels der Schalter sollte nur erfolgen, während der Zähler sich im Zustand 000 befindet (warum?).

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

TasteEingangKommentar
'1'op0Opcode bit 0
'2'op1Opcode bit 1
'3'op2Opcode bit 2
'4'op3Opcode bit 3
'c'CTakt Zähler
'r'RReset Zähler

Hinweis: Um die oben gezeigte Schaltung der RALU mit Leitwerk möglichst übersichtlich und leicht verständlich zu gestalten, werden die Taktleitungen der D-Register direkt von den ROMs aus angesteuert. Auch die folgenden Beispielschaltungen inklusive des vollständigen MiniCPU-Prozessors basieren auf dieser Art der Ansteuerung. Dabei ist zu beachten, dass solche Schaltungen nur dann korrekt funktionieren, wenn die verwendeten Komponenten (wie hier die ROMs) hazardfrei arbeiten. Bei nicht hazardfreien Komponenten kann es dagegen zu zusätzlichen, unerwünschten Impulsen auf den Taktleitungen kommen, so dass die Register zu falschen Zeiten ihre Eingangswerte übernehmen und die Gesamtschaltung nicht mehr korrekt funktioniert (vgl. Hazard-Demos).

Beim Versuch, die obige Schaltung beispielsweise mit TTL-ICs auf einer Steckplatine oder als VHDL-Beschreibung für ein FPGA direkt nachzubauen, kann es daher zu Problemen kommen, denn die üblicherweise erhältlichen ROM-Schaltungen oder aus Gattern synthetisierte ROMs sind nicht hazardfrei. Durch Hazards verursachte Fehler sind oft nur sehr schwer zu finden.

Eine Abhilfe besteht darin, zusätzliche Flipflops hinter die Ausgänge der ROMs einzuschleifen, deren Taktimpuls gegenüber dem Takt des Zählers Cnt (bzw. des Befehlsregisters IR in den folgenden Beispielen) um die Zugriffszeit der ROMs verschoben ist. Mit diesem Trick werden Hazards auf den Ausgangsleitungen der ROMs wirkungsvoll vermieden. Eine alternative Möglichkeit ist die Verwendung von D-Registern mit Enable-Eingang anstelle der gewöhnlichen D-Register. In diesem Fall steuern die ROMs die Enable-Eingänge der Register an, während die Takteingänge aller Register mit dem zentralen Taktsignal verbunden sind.

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-ralu/raluleit.html