Erstellt von Merlin09, brainsh und mir (ThiloA); auf der Karte bei -700,*,700 sichtbar
Die MC16b CPU ist eine vollständige, orthogonale 16 Bit RISC Harvard Architektur mit 16 Allzweckregistern, LINK und PC Register und 16 ALU Befehlen, 3 Flags, Sprung, Lade- und Speicherbefehlen. Der Adressbus ist für den Instruktions- und Datenport jeweils 16 Bit breit. Durch einen speziellen Memorycontroller "fühlt" sich die CPU für den Programmierer wie eine Von-Neumann-Architektur an (gleicher Adressraum für Daten und Instruktionen) besitzt aber die Vorteile einer erhöhten Ausführungsgeschwindigkeit der Harvard Archtiktur, sofern sich Code- und Datenzugriff in unterschiedlichen Bereichen befinden. Außerdem verfügt die CPU über eine einstufige Pipeline, die den nächsten Befehl lädt während der aktuelle ausgeführt wird.
Die CPU und ihre Komponenten wurden in Minecraft erstellt und die Korrektheit der einzelnen Komponenten wurde mit einem speziell dafür entwickelten Tool bewiesen.
Ein Assembler und Emulator der CPU und Peripherie wurde komplett in Javascript nachprogrammiert und lässt sich somit direkt im Webbrowser aufrufen: Zum Minecraft MC16b CPU Assembler (Webversion)Ein Blick auf die Kontrollkonsole
Ansicht auf den Pixelbildschirm (64x32 Pixel, monochrom), darunter 3x4 Hexdezimaldisplays
Ein Blick auf das Dach einiger Komponenten des CPU: Die linken unbeschrifteten Komponenten sind ein Teil des Festspeichers (ROM, 2048 Worte je 16 Bit bzw. 4 KiB, Design: Merlin09).
Die rechten unbeschrifteten Komponenten sind ein Teil des RAM (256 Worte je 16 Bit bzw. 0,5 KiB).
Die mit CDEC beschriftete Komponente gehört zum Instruktionsdekoder, und dekodiert Immediate Werte. Der PC enthält den Programmzähler und Link Register
Auch zu sehen sind ist die Registerbank mit 16 Register (je 16 Bit). Dahinter befindet sich die Recheneinheit (ALU).
Zwischen Konstantendekoder (CDEC) und dem Programmzähler (PC) befindet sich noch der Speichercontroller, welcher den Zugriff auf RAM und ROM regelt. Er besitzt zwei Adresseingänge und ermöglicht unter Umständen das parallele Lesen von zwei Daten in einem Takt (wenn eine Adresse in den RAM und die andere in den ROM zeigt). Bei einer Kollision findet werden die Zugriffe serialisiert. In Verbindung mit einer einstufigen Pipeline kann der CPU so unter umständen den nächsten Befehl aus dem Speicher laden, während er den aktuellen ausführt. Die Pipeline kann per Schalter in der Konsole auch deaktiviert werden.
Der gesamte CPU ist einem Etagendesign aufgebaut: Ganz unten befindet sich eine Etage mit allgemeiner Steuerlogik, darüber befinden sich 16 Etagen die sehr ähnlich aufgebaut sind und jede ein Bit abbildet. D.h. sowohl die Recheneinheit also auch beide Speicher sind nach dieser Methode aufgebaut. Durch diese dreidimensionale Bauweise können längere Wege vermieden werden.
Ein Blick zwischen zwei Komponenten: Links befindet sich die Registerbank, rechts das Recheneinheit (ALU). Die goldenen und blauen Blöcke sind dabei für die Funktion nicht erforderlich, sondern beschriften die Ein- bzw. Ausgänge. Mit einem selbst geschriebenen Programm wurde die Minecraft Welt eingelesen und aus jeder Komponente eine logische Netzliste extrahiert. Diese wurde dann auf die korrekte Funktion für alle denkbaren Zustände und Eingänge simuliert. Mit dieser formelen Verifikation konnte die korrekte Funktion bewiesen werden.
Die Registerbank besitzt im Gegensatz zum RAM zwei Adresseingänge (Dual Port): Pro Takt können zwei beliebige Register gelesen, und eines neu beschrieben (die Adresse des Schreibregister stimmt mit der ersten Leseadresse überein).
Ein Blick in den Festwertspeicher (ROM, Design von Merlin09). Hierbei repräsentiert jeder grüne Block ein Bit des Speichers, die Redstonefackel darüber (vorhanden oder nicht) den Inhalt der Speicherzelle. Dieses Design ermöglicht eine für Minecraftverhältnisse extrem hohe Speicherdichte, lässt aber nur den lesenden Zugriff zu. Der Speicher kann innerhalb des Spiels manuell durch entfernen oder setzen der entsprechenden Fackeln beschrieben werden, was jedoch sehr mühsam und fehleranfällig ist. Alternativ gibt es ein Script, welches die Welt anhand einer Hexdatei (z.B. aus einem Assembler) entsprechend modifiziert.
Blick in eine Speicherzelle des flüchtigen Speichers (RAM). Dieser ist statisch, behält also seine Information auch bei abgeschaltetem Takt.
Wieder ein Blick auf das Dach der CPU, von etwas weiter hinten. Man sieht in der Mitte noch den Instruktionsdekoder (von Merlin09), sowie im Vordergrund einige Leitungen von dem Daten- und Adressbus hoch zu der Konsole.
Ein Blick hinter den Pixelbildschirm (64x32 Pixel Monochrom). Jeder Pixel besteht dabei aus 2x2 Minecraftlampen, welche jeweils eine eigene Speicherzelle besitzen. Diese Speicherzelle kann von CPU nur beschrieben werden.
Zum Schluss ein Blick von unten auf den riesig anmutenten Computer. Im Vordergrund ist der Konstantendekoder.
Impressum | Datenschutzerklärung | [*]: externer Link | thilo.ackermann@gmail.com