TAMS / Java / Hades / applets: contents | previous | next | |||||||||||||||||||||||||
Hades Applets contents visual index introduction std_logic_1164 gatelevel circuits delay models flipflops adders and arithm... counters LFSR and selftest memories programmable logic state-machine editor misc. demos I/O and displays DCF-77 clock relays (switch-le... CMOS circuits (sw... RTLIB logic RTLIB registers Prima processor D*CORE MicroJava Pic16 cosimulation Mips R3000 cosimu... Intel MCS4 (i4004) image processing ... [Sch04] Codeumsetzer [Sch04] Addierer [Sch04] Flipflops [Sch04] Schaltwerke [Sch04] RALU, Min... D-Register Zähler ALU RALU Tristate-Tre... RaluBus RaluLeit RaluRAM MiniCPU CpuAdr [Fer05] State-Mac... [Fer05] PIC16F84/... [Fer05] Miscellan... [Fer05] Femtojava FreeTTS | RALU mit Leitwerk
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:
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 |