Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  – Noch keinen Server gefunden? Es gibt einen Wiki-Server

Rechenwerk (Redstone)

Aus Technik Wiki
Wechseln zu: Navigation, Suche
Gruppe: Grid Redstone-Komparator.png
Schaltwerke

Grid Roter Sand blass.png mit Mechaniken
                Hier:
Grid Redstone.png mit Redstone

Grid Befehlsblock blass.png mit Befehlen

Die vorgestellte Technik kann in der Redstone-Welt angesehen werden.

Eine Arithmetisch-logische Einheit (ALU) ist der wichtigste Teil des Rechenwerks. Sie führt alle Rechenoperationen aus, die der Computer benötigt: arithmetische, logische und bitweise Operationen. Sie hat standardmäßig zwei Dateneingänge (für die zwei Zahlen A und B, mit denen gerechnet wird), einen Datenausgang (für das Ergebnis), Steuerleitungen und Signalleitungen (etwa für Teilen durch 0, Überlauf oder das Ergebnis von Vergleichoperationen).

Variante 1[Bearbeiten | Quelltext bearbeiten]

Rechenwerk (Redstone) Bild 1.1.png Rechenwerk (Redstone) Bild 1.2.png Rechenwerk (Redstone) Bild 1.3.png Rechenwerk (Redstone) Bild 1.4.png

Die hier beispielhaft gebaute ALU kann Strichrechnen und alle logischen Verknüpfungen berechnen. Das Vergleichen von Zahlen kann man damit auch, der Vergleicher als spezielles Bauteil kann das jedoch schneller erledigen.

Aufbau und Funktionen[Bearbeiten | Quelltext bearbeiten]

Die ALU basiert auf identischen Segmenten, die nebeneinander platziert und miteinander verknüpft werden. Ein Segment kann alle Rechenoperationen für ein Bit ausführen. Für eine 8-bit Zahl muss man dementsprechend acht von ihnen nebeneinander bauen.

Die Basis aller Funktionalität bildet ein Volladdierer, bestehend aus zwei Halbaddierern und einer Carry-Leitung für Überträge. Der Carry-Ausgang des einen wird mit dem Carry-Eingang des nächsten verbunden. Jeder der Halbaddierer besteht aus einem UND und einem XOR-Gatter, wobei das UND-Gatter aus Platzgründen mit dem XOR-Gatter geteilt wird.

Unterbindet man jedoch die Carry-Funktionalität, bleibt von dem Addierer nur noch das XOR-Gatter übrig. Durch einen weiteren Kurzschluss lässt sich aus dem XOR-Gatter ein OR-Gatter machen. Beide dieser Funktionalitäten werden durch zwei Steuerleitungen bedient, die je nach Operation an- und ausgeschaltet werden. Durch sie kann der Rechner nicht nur addieren, sondern auch XOR und OR.

Um alle restlichen Operationen berechnen zu können, reicht es, die Eingänge und Ausgänge per Steuerleitung invertierbar zu machen. So werden aus den XOR- und OR-Gattern je nach Kombination zusätzlich AND, NAND, NOR, XNOR schalten.

Um eine Zahl zu invertieren (NOT), muss man die Zahl entweder am Eingang oder am Ausgang invertieren und dafür sorgen, dass sie durch die ausgewählte Rechenoperation nicht verändert wird. Dies setzt voraus, dass die bei dieser Operation nicht benötigte Zahl B einen festgelegten Wert annimmt. 0 (alle Bits aus) ist zwar naheliegend, allerdings lässt es sich einfacher bauen, alle Bits anzuschalten. Unter diesen Umständen entsprechen sich A XOR B und NOT A. Es wird also noch eine Steuerleitung benötigt, die alle Bits von B auf 1 setzt (FLOOD B)

Die letzte fehlende Operation ist die Subtraktion. A von B subtrahieren lässt sich, indem man B invertiert, A addiert und 1 addiert. Ersteres lässt sich durch Steuerleitungen bereits einrichten, letzteres, indem man den ersten Carry-Eingang an eine weitere Leitung anschließt.

Weitere Funktionen[Bearbeiten | Quelltext bearbeiten]

Es lassen sich durch geschickte Kombinationen auch noch weitere Rechenoperationen erreichen: Inkrementieren, also A+1, oder Dekrementieren A-1. Beim Inkrementieren muss ähnlich wie beim NOT darauf geachtet werden, dass B 0 ist. Das ist in der ALU in diesem Artikel nicht der Fall. Beim Dekrementieren muss man bei B alle Bits aktivieren und A und B dann addieren. Es bietet sich deshalb an, die FLOOD B-Funktion so zu bauen, dass sie vor B INVERTIEREN kommt. So lassen sich alle Bits von B wahlweise an- oder ausschalten.

Zahlen vergleichen kann man, indem man sie subtrahiert. Ist das Ergebnis positiv (mind. ein gesetztes Bit), ist A größer als B. Ist es 0 (kein Bit gesetzt), sind beide Zahlen gleich groß. Ist es negativ (Carry Out ist an), ist A kleiner als B. Auf Gleichheit überprüfen lassen sich zwei Zahlen am auch durch ein XNOR oder ein XOR-Gatter. Wenn alle Ausgangsbit den gleichen Wert haben (ob an oder aus hängt vom verwendeten Gatter ab), sind beide Zahlen gleich groß.

Steuerleitungen[Bearbeiten | Quelltext bearbeiten]

Es gibt folgende Steuerleitungen:

  • CUT CARRY - unterbindet das weiterleiten des Übertrags von einem Bit zum nächsten.
  • OR - Macht aus dem XOR-Gatter im Halbaddierer ein OR-Gatter
  • INV A - Invertiert die eingehende Zahl A
  • INV B - Invertiert die eingehende Zahl B
  • INV OUT - Invertiert das ausgehende Ergebnis
  • FLOOD B - Setzt alle Bits von B auf 1

Und folgende Rechenoperationen lassen sich mit ihnen realisieren:

Rechenoperation CUT CARRY CARRY IN OR INV A INV B INV OUT FLOOD B
A+B Nein Nein Nein Nein Nein Nein Nein
A-B Nein Ja Nein Nein Ja Nein Nein
A OR B Ja Nein Ja Nein Nein Nein Nein
A NOR B Ja Nein Ja Nein Nein Ja Nein
A AND B Ja Nein Ja Ja Ja Ja Nein
A NAND B Ja Nein Ja Ja Ja Nein Nein
A XOR B Ja Nein Nein Nein Nein Nein Nein
A XNOR B Ja Nein Nein Nein Nein Ja Nein
INV A Ja Nein Nein Nein Nein Nein Ja
A + 1 Nein Ja Nein Nein Ja Nein Ja
A - 1 Nein Nein Nein Nein Nein Nein Ja

Die Leitungen werden mit einem Nur-Lese-Speicher (ROM) verbunden, ein Bit für jede Leitung. Jede Adresse des ROMs enthält dann die Bit, die richtigen Steuerleitungen für eine bestimmte Operation anschalten. Jede Adresse entspricht dann einer Operation. Es kann sinnvoll sein, die Menge aller möglichen Operationen auf 8 (oder ein anderes Vielfaches von 2) zu reduzieren. Über einen Dekodierer kann dann die benötigte Rechenoperation ausgewählt werden.


Disambig color.svg