Minecraft Restone – kompaktes RAM Modul

Veröffentlicht am Veröffentlicht in Basteln mit Minecraft

Minecraft bietet so viel mehr als nur Türen oder Lampen mit Hebeln zu betätigen. Über Redstone lassen sich komplexe digitale Schaltungen aufbauen, die aus der Elektronik bekannten logischen Gatter lassen sich komplett abbilden. Auch Speichermodule, also RAM. In diesem Artikel stelle ich meine Version von Random Access Memory vor.

Unterschiede zur Elektronik im real life gibt es dennoch. Bei der Arbeit mit Logikschaltungen im realen Leben, also da, wo der Lötkolben auch wirklich heiß wird, das Ziel oft ist, alles auf NAND zu optimieren, ist bei Minecraft die NOR Schaltung am Einfachsten zu bauen.
Im realen Leben werden Schaltungen oft zu NAND hin optimiert, da mit dem SN7400 ein günstiger Standartbaustein zur Verfügung steht. Es geht also um Kostenoptimierung.
Diesen Druck hat man bei Minecraft Redstone nicht. Hier besteht eher das Problem, das komplexe und auf die Fläche bezogen große Schaltungen langsam sind. Kompakte Bauweise mit möglichst wenigen Repeatern sind der Schlüssel zum Erfolg.

Jetzt aber zum eigentlichen Thema.
Die hier vorgestellte Speicherzelle ist Teil eines Gesamtpakets, das 256 Byte groß sein soll. Der Gesamtspeicher wird in mehrere Blöcke aufgeteilt mit jeweils 16 Byte. Diese werden hintereinander gebaut und mit einem 8 bit breiten Datenbus, Steuersignale „memory write“ und „memory read“ und dem Adressbus angebunden. Für 16Byte Speicher in einer Bank werden 4 Adressleitungen benötigt, dazu eine weitere Leitung zur Auswahl der RAM Bank, wenn das Speichervolumen größer werden soll.
Der Adressbusdecoder lässt sich nur mit XNOR Gattern (Exklusiv-Nicht-Oder) realisieren, eine der komplexesten und damit größten Logikschaltungen in Minecraft. Dieses Gatter benötigt bei flacher Bauweise 3 Blöcke in der Breite und noch einen Block Abstand zum nächsten Modul. Damit ist die Breite je Speicherzelle fix, 4 Blöcke. Wenn man also 32 Byte hintereinander in eine RAM Bank bauen möchte, hat man schon eine Tiefe von 64 Blöcken. Entfernungen muß man zwangsläufig berücksichtigen beim Bau, damit Minecraft die Schaltungen mit Abstand zur Spielerfigur überhaupt berücksichtigt.
In der Höhe sind ebenfalls 4 Blöcke zur nächsten Schaltung angezeigt um Beeinflussung untereinander zu vermeiden und Signale vertikal nach oben zu führen. Der Adressbus für eine 16 Byte RAM Bank ist 4 bit breit, es müssen je Byte 4 XNOR Gatter übereinander gebaut werden, also 4 x 4 Blöcke zuzüglich des Signals für die Auswahl der RAM Bank. Ich schaffe damit eine Bauhöhe von 18 Blöcken. Es ist gerade noch möglich, den Ausgang des Adressbusdecoders ohne zusätzlichen Verstärker zu realisieren.

Bild: ein ganz normales Exklusiv-Nicht-Oder. Nur wenn an beiden Eingängen das gleiche Signal anliegt, liegt am Ausgang auch ein Signal an.
(Basis http://technic-de.gamepedia.com/Schaltkreise/Logikgatter_(Redstone) )

 

Bild: aus einem anderen Blickwinkel

 

Bild: wenn man an Eingang in2 auf Null setzt, kann man sich den Hebel auch sparen

 

Bild: möchte man Eingang in2 auf logisch 1 setzen, kann man auch einfach den ganzen Eingang weglassen, also einen Block und zwei Fackeln.

 

Jetzt kommt der Haken an der Sache: Um eine komplette Speicherzelle zu adressieren benötigt man mehrere Adressbits, also pro Byte Speicher mehrere XNOR Gatter. Deren Ausgänge müßte man mit logisch UND verknüpfen und das wird baulich ziemlich groß, im schlimmsten Fall eine mehrstufige UND Schaltung. Die Lösung heißt NOR, Nicht ODER.
Die Boolsche Algebra sagt, dass man eine UND Verknüpfung ersetzen kann, indem man daraus ein ODER macht, und alle Eingangssignale und das Ausgangssignal negiert.

für die erste Speicherzelle sieht das dann aus wie im folgenden Bild

Für jede Speicherzelle muss logischerweise der Addressdecoder individuell erstellt werden. Es bietet sich an, einmal ein Modul komplett als Prototyp zu bauen und dann mit dem /clone Kommando zu vervielfältigen.

 

Zwischen den Adressbusdecoder und die Speicherzellen werden noch zwei Steuerleitungen eingeschliffen für schreiben und lesen. Das Schreibsignal wird mit dem Ausgang des Adressbusdecoders mit NAND verknüpft um den Inhalt des 8 bit breiten Datenbus in die Speicherzellen zu schreiben. Das Lesesignal wird mit dem Adressbusdecoder mit AND verbunden um den Inhalt des über den Adressbus gewählten Bytes auf einen Ausgabebus und ein Ausgaberegister zu kopieren. Für die Ansteuerung des Ausgaberegisters wird es zuvor noch einmal invertiert.
Eine Reset Funktion wurde aus Platzgründen nicht implementiert.

Zum Speichern eines Bits gibt es verschiedene Möglichkeiten, als RS NOR oder RS NAND Latch, auch zu finden auf http://technic-de.gamepedia.com/Schaltkreise/Logikgatter_(Redstone)
Das ist für meinen Zweck viel zu komplex, hier tut es auch ein fixierter Redstone Verstärker, kompakt und schnell.
Die Funktionsweise ist simpel. Ein Redstone Verstärker gibt ein Eingangssignal maximal verstärkt am Ausgang wieder heraus. Belegt man den Verstärker von der Seite mit einem Steuersignal wird der Ausgang des Verstärkers festgesetzt, also 0 oder 1, egal ob am Eingang noch ein Signal anliegt. Das Verhalten mache ich mir zu Nutze, um beim Schreiben in die Speicherzelle das Signal der Datenleitung in den Verstärker zu geben. Das Signal zur Fixierung wird kurz abgeschaltet und der Wert der Datenleitung 0 oder 1 durch den Verstärker geführt. Der Verstärker wird wieder fixiert und auch bei veränderten Signalen auf der Adressleitung bleibt der Wert am Ausgang des Verstärkers erhalten.
Je Byte gibt es acht Speicherzellen übereinander im Abstand von 4 Blöcken in der Höhe.

Das Auslesen erfolgt aus der RAM in ein Register zur weiteren Verwendung. Die Speicherzelle wird über den Adressbus adressiert und mit dem Read Signal logisch Und verknüpft auf den Ausgabebus gegeben. Gleichzeitig wird der Eingang des Ausgaberegisters freigegeben und der Inhalt des Ausgabebus in das Register geschrieben. Wenn das Lesesignal wieder 0 ist, wir auch der Ausgang des Ausgaberegisters fixiert.

<bilder einfügen zur Erläuterung>

 

 

Kommentar verfassen