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:
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.
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 muss folgende Anschlüsse besitzen:
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_0
erstellen 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.
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.
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.
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!
Testen Sie nun Ihre Schaltung wie folgt:
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?