Lernaufgabe Speicher

Damit wir mit einem Computer überhaupt Berechnungen durchführen können, müssen wir in der Lage sein, Daten zu speichern. Wenn wir zum Beispiel an eine Addition denken, so müssen wir zwei Summanden und dann auch das Resultat speichern können.

In dieser Lernaufgabe sollen Sie einen funktionsfähigen Speicher, ähnlich zum Speicher des 4-Bit- Democomputers, mit der Freeware LogiSim nachbauen.

Diese Lernaufgabe setzt voraus, dass Sie mit den Grundlagen der Digitalelektronik (Rechnen mit Strom) vertraut sind. Alle neuen Überlegungen werden beim Lösen der Aufgaben erklärt.
Sie können die unten gestellten Aufgaben auf 3 verschiedenen Schwierigkeitsstufen lösen:

  1. Versuchen Sie die Aufgaben ohne Hilfsmittel zu lösen
  2. Fragen Sie Ihre Mitschülerinnen, Mitschüler oder Lehrperson um Hilfe. Diese Personen werden Ihnen sagen, welche Bauteile Sie für die Lösung der Aufgabe benötigen. Sie müssen die verwendeten Bauteile danach noch „verdrahten“.
  3. Nach Rückfrage bei der Lehrperson laden Sie sich die Lösungen vom Wiki herunter und versuchen diese Schaltungen zu verstehen.

Versuchen Sie die Aufgaben immer zuerst auf der Stufe 1) zu lösen! Erst wenn Sie nicht weiterkommen gehen Sie eine Stufe höher.

Noch eine paar Worte zum Aufbau dieser Lernaufgabe. Die Lernaufgabe ist nach dem Prinzip «vom Kleinen zum Grossen» aufgebaut, welches man sehr häufig in der Informatik antrifft. Sie werden also zuerst kleine Schaltungen entwickeln und diese danach zu grösseren zusammenfassen. Am Schluss werden Sie sehen, dass dieses Prinzip alleine schon wegen der Übersichtlichkeit einer Schaltung unerlässlich ist.

Der Speicher allgemein

Wie auf dem Bild zum 4-Bit-Democomputer bereits zu sehen ist, sind zwei verschieden Speicher vorhanden. Der ROM-Speicher (Read Only Memory) ist ein Speicher, bei welchem die Daten fest einprogrammiert sind. Zur Laufzeit des Systems ist es also nicht möglich, diese Daten zu verändern. Man kann sie nur lesen. Der zweite Speicher ist der `RAM-Speicher (Random Access Memory). In diesen Speicher kann man während der Laufzeit des Systems sowohl Daten hineinschreiben wie auch Daten lesen. (Frage: Warum braucht es zwei verschiedene Speicher?)
Die Speicher sind technisch bedingt so gebaut, dass bei einem Stromunterbruch (z.B. wenn der Computer heruntergefahren wird) die Daten im ROM erhalten bleiben, die Daten im RAM hingegen verloren gehen.

Als erstes müssen wir also zwei Schaltungen haben, welche es uns ermöglichen, Daten einerseits dauerhaft und nicht überschreibbar (ROM) und andererseits temporär und überschreibbar (RAM) zu speichern. Im Folgenden werden wir diese Schaltungen für 1 Bit entwerfen.

Das ROM

Das ROM muss folgende Anschlüsse besitzen:

  • Einen Adressanschluss (A)
  • Einen Leseanschluss (R), (R steht für „read“)
  • Einen Datenoutputanschluss (D_O)

Als Blackbox dargestellt, Sieht ein 1-Bit-ROM wie folgt aus:

Was muss nun aber diese Blackbox für Eigenschaften haben? Sobald das ROM über die Adresse angesprochen wird, d.h. die Leitung A erhält Spannung, oder wie wir im Folgenden sagen werden: die Leitung A wird auf 1 gesetzt, und wenn die Leitung R ebenfalls auf 1 gesetzt wird, dann soll die Leitung D_0 auf 0 gesetzt werden, wenn das ROM eine 0 gespeichert hat, und auf 1 gesetzt werden, wenn das ROM eine 1 gespeichert hat. Diesen Sachverhalt kann man auch den beiden untenstehenden Wahrheitstabellen entnehmen:

Das ROM hat den Wert 0 gespeichert.

A R Ausgang (D_0)
0 0 0
1 0 0
0 1 0
1 1 0

Das ROM hat den Wert 0 gespeichert.

A R Ausgang (D_0)
0 0 0
1 0 0
0 1 0
1 1 1

Wie können wir aber den Wert 1 bzw. 0 speichern? Dies erreichen wir, indem wir intern in der Blackbox eine Datenleitung haben, welche wir konstant mit Strom versorgen (1) oder nicht mit Strom versorgen (0).

Fügen Sie im LogiSim eine neue Schaltung mit dem Namen 1_bit_rom_0 und eine zweite Schaltung mit dem Namen 1_bit_rom_1 hinzu. In der Schaltung 1_bit_rom_0erstellen Sie die Schaltung für ein ROM, welches konstant den Wert 0 gespeichert hat. In der Schaltung 1_bit_rom_1 erstellen Sie die gleiche Schaltung, aber so abgeändert, dass das ROM konstant den Wert 1 speichert.

Das RAM

Für das RAM wird die Blackbox nun etwas grösser. Wir brauchen nämlich zwei Leitungen mehr, eine Dateninputleitung (D_I) und eine Schreibleitung (W). (W steht für „write“). Wir haben also die folgenden Anschlüsse mit der dazugehörigen Blackbox.

  • Einen Dateninputanschluss (D_I)
  • Einen Adressanschluss (A)
  • Einen Schreibanschluss (W)
  • Einen Leseanschluss (R), (R steht für „read“)
  • Einen Datenoutputanschluss (D_O)

Die interne Schaltung des RAMs ist entspricht dem gleichen Prinzip wie die interne Schaltung des ROMs, einfach mit einer zusätzlichen Schreibleitung. Was hier aber neu dazu kommt, ist die Speicherung der Daten, was wir mit einem sogenannten Flip-Flop machen. Falls Sie nicht mehr wissen, was ein Flip-Flop ist, lesen Sie im Skript „Rechnen mit Strom“ S.8 den Abschnitt „FlipFlops“ und betrachten Sie zudem Ihre Lösungen zur Aufgabe 3. In dieser Aufgabe haben Sie ein RS-Flip-Flop gebaut. Für die RAM-Schaltung benötigen wir kein RS-Flip-Flop, sondern ein D-Flip-Flop. In Worten lässt sich der Unterschied dieser beiden Flip-Flops wie folgt erklären: Beim RS-Flip-Flop haben Sie eine separate Leitung, um im Flip-Flop eine 1 zu speichern (Set) und eine zweite separate Leitung, um im Flip-Flop eine 0 zu speichern (Reset).

Im D-Flip-Flop haben Sie weiterhin zwei „Zuleitungen“, aber mit etwas anderen Eigenschaften. Die D- Leitung gibt an, welcher Zustand gespeichert werden soll. Wenn also D auf 0 gesetzt ist, so wird eine 0 im Flip-Flop gespeichert, ist D auf 1 gesetzt, so wird eine 1 gespeichert. Um diese Werte aber wirklich zu speichern, benötigen wir die zweite Leitung. Jedes Mal, wenn diese Leitung von 0 auf 1 wechselt, wird der aktuelle Wert der D-Leitung im Flip-Flop gespeichert. Um ein „Gefühl“ für das D- Flip-Flop zu erhalten, bauen Sie die unten abgebildete Schaltung nach, womit Sie das D-Flip-Flop austesten können. („D“ steht hier für die Datenleitung, Q für den Output)

Fügen Sie im LogiSim eine neue Schaltung mit dem Namen „1bitram“ hinzu und erstellen Sie darin die Schaltung für ein 1-Bit-RAM.
Wir haben jetzt die beiden Grundbausteine für den Speicher beisammen. Wie können wir nun aber genau den gewünschten ROM bzw. RAM Speicher ansprechen, wenn z.B. 2 ROM bzw.2 RAM Speicher vorhanden sind? Dazu benötigen wir die sogenannten Decoder.

Decoder

Ein Decoder hat folgende Funktion: Wir nehmen z.B. an, wir haben eine 1-Bit Adresse, also insgesamt die beiden Adressen 0 und 1. Im Falle einer 1-Bit Adresse benötigen wir einen 1-Decoder. Dieser besitzt die folgende Blackbox mit der dazu abgebildeten Wahrheitstabelle.

I_0 O_0 O_1
0 1 0
1 0 1

In Worten bedeutet dies also, dass wenn I_0 auf 0 gesetzt ist, dann der Ausgang O_0 auf 1 gesetzt wird. Ist hingegen I_0 auf 1 gesetzt, so wird O_1 auf 1 gesetzt. Der Decoder ordnet also jeder Adresse einen separaten Ausgang zu, genau was wir benötigen, um unser ROM- bzw. RAM-Speicher richtig anzusprechen.
Wie Sie dem unten stehenden Bild entnehmen können, ist die Umsetzung eines 1-Decoders relativ einfach.

Mit Hinzunahmen von AND-Gattern können wir für beliebig grosse Adressen solche Decoder bauen. Dazu ein kleines (Teil-)Beispiel:

Wir nehmen an, ich habe die binäre Zahl 10 und möchte eine kleine Schaltung bauen, welche mir genau für diese Adresse einen Ausgang freischaltet. Wie können wir das bewerkstelligen? (Tipp: Eine der Inputleitungen müssen Sie mit einem Inverter versehen und die beiden Leitungen danach mit einem UND-Gatter verknüpfen.)

Fügen Sie im LogiSim eine neue Schaltung mit dem Namen „2_decoder“ hinzu und erstellen Sie darin die Schaltung für einen 2-Bit-Decoder, also einen Decoder mit folgender Blackbox:

Nun haben Sie alle Einzelteile zusammen, um eine vereinfachte Version des Speichers des 4-Bit- Demo-Computers nachzubauen.

Bauen Sie einen Speicher, welcher über vier 1-Bit-ROM- und vier 1-Bit-RAM-Speicherzellen verfügt. Achten Sie beim Bau dieses Speichers darauf, dass Sie die Anordnung der Speicherzellen und der Busse etwa ähnlich zum 4-Bit-Democomputer wählen.

Sie können die Aufgabe natürlich auch ohne Anleitung lösen, sofern Sie das möchten. Dann müssen Sie aber hier mit Lesen stoppen!

  • Da wir insgesamt 8 Speicherzellen haben, benötigen Sie mindestens einen ...-Decoder, um alle Zellen einzeln ansprechen zu können. Versuchen Sie diesen Decoder in LogiSim zu bauen. Falls Ihnen das nicht gelingen sollte, können Sie den Decoder aus den Vorlagen nehmen.
  • Fügen Sie sowohl vier ROM- wie auch vier RAM-Bausteine zu Ihrer Schaltung hinzu. Bei den ROM-Bausteinen können Sie selbst zwischen „0-ROM“ und „1-ROM“ Bausteinen auswählen, versuchen Sie aber nicht nur die eine Sorte zu verwenden.
  • Wenn Sie die Speicherzellen „anhängen“, sollten Sie das so tun, dass die ROM-Adressen den binären Adressen 000-011 entsprechen und die RAM-Adressen den Adressen 100-111.
  • Fügen Sie eine Daten-Input-Taste so wie Read und Write Tasten hinzu und verkabeln Sie diese.
  • Verkabeln Sie auch die Daten-Output-Anschlüsse. Hier ist aber Vorsicht geboten: Sie können zwei Ausgänge nicht einfach zusammenhängen. Wenn Sie das tun, dann erhalten Sie eine Fehlermeldung vom Programm (Warum?). Die Frage lautet also: Wie kann ich mehrere Leitungen geeignet zusammenhängen, so dass wenn mind. eine Leitung auf 1 gesetzt ist, dass dann auch der Output auf 1 gesetzt ist?

Testen Sie nun Ihre Schaltung wie folgt:

  1. Lesen Sie den Inhalt des ersten ROMs.
  2. Schreiben Sie den gleichen Inhalt in das erste RAM.
  3. Wiederholen Sie die Punkte 1 und 2 für die anderen ROMs und RAMs.

Der oben erstellte Speicher hat eine sehr unschöne Eigenschaft. Welche? Könne Sie die Schaltung so abändern, dass dieses Unschönheit nicht mehr auftritt?