Emulator programmieren

  • Wenn man einen Prozessor (nach)bauen will, muss man ihn erstmal verstehen. Dazu gehört, dass man sich mit der boolschen Algebra (AND, OR, NOT, NAND, NOR, XOR, usw.), Flipflops usw. vertraut macht, ohne das geht es nicht. Dann muss man den Prozessor erstmal gedanklich in seine Funktionseinheiten zerlegen, Taktsyncronsierung, Adresszähler, Befehlsdecoder (Das ist - je nach Bauart - ein Mealy- oder Moore-Automat, den man erstmal verstehen muss!), Register, artithmetisch-logische Einheit, Businterface, und solche Sachen. Dann kann man sich bei jeder Funktionseinheit überlegen, wie man diese aufbaut. In einer arithmetisch logischen Einheit findet man z.B. Volladdierer, Barrelshifter, und solche Sachen innen drin, und jede Menge Latches (Zwischenspeicher, Register), Buffer (die Adress oder Datenwörter mal durch schalten, mal nicht) usw. Da kommt dann schon die boolsche Algebra zum Einsatz. Und diese Funktionen kann man dann nachbauen, entweder in Software, als Gatter-Schaltung oder als logische Beschreibung in VHDL. Wenn man dann diese Funktionseinheiten hat, verbindet man diese nach ausführlichen Tests (funktioniert mein Volladdierer, setzt er bei Überlauf das Carry-Bit, usw.). Ich habe sowas um 1990 mal in einem Programm zur Simulation von Digitalschaltungen in Form eines 4-Bit-Prozessors umgesetzt, wo man z.B. dem Shiftregister oder dem Addierer auf dem Monitor zusehen kann, oder sehen kann wie der Adresszähler bei jedem RAM/ROM-Zugriff hochzählt, oder wie er durch einen Jump-Befehl mit einer neuen Zieladresse geladen wurde. 4 Bit bedeutet glücklicherweise nur 16 Befehle die man erkennen muss, also maximal 16x AND-Gatter mit bis zu 16 Eingängen (die Eingänge teils negiert) hinter einem 4:16 Demultiplexer, deren Ausgänge dann Register und/oder Recheneinheiten, Bustreiber zu den Einheiten aktivieren und solche Sachen. Trotz der Beschränktheit der Simulationssoftware lief das Ding dann sogar und konnte ein ganzen Nibble (also 4 Bit) von 4 Schaltern an IO-Adressen einlesen, die eingelesenen Werte addieren und shiften und wieder an anderen Adresse ausgeben, eine Bedingung prüfen und verzweigen.
  • 1ST1 schrieb:

    Wenn man einen Prozessor (nach)bauen will, muss man ihn erstmal verstehen. Dazu gehört, dass man sich mit der boolschen Algebra (AND, OR, NOT, NAND, NOR, XOR, usw.), Flipflops usw. vertraut macht, ohne das geht es nicht. Dann muss man den Prozessor erstmal gedanklich in seine Funktionseinheiten zerlegen, Taktsyncronsierung, Adresszähler, Befehlsdecoder (Das ist - je nach Bauart - ein Mealy- oder Moore-Automat, den man erstmal verstehen muss!), Register, artithmetisch-logische Einheit, Businterface, und solche Sachen. Dann kann man sich bei jeder Funktionseinheit überlegen, wie man diese aufbaut. In einer arithmetisch logischen Einheit findet man z.B. Volladdierer, Barrelshifter, und solche Sachen innen drin, und jede Menge Latches (Zwischenspeicher, Register), Buffer (die Adress oder Datenwörter mal durch schalten, mal nicht) usw. Da kommt dann schon die boolsche Algebra zum Einsatz. Und diese Funktionen kann man dann nachbauen, entweder in Software, als Gatter-Schaltung oder als logische Beschreibung in VHDL. Wenn man dann diese Funktionseinheiten hat, verbindet man diese nach ausführlichen Tests (funktioniert mein Volladdierer, setzt er bei Überlauf das Carry-Bit, usw.). Ich habe sowas um 1990 mal in einem Programm zur Simulation von Digitalschaltungen in Form eines 4-Bit-Prozessors umgesetzt, wo man z.B. dem Shiftregister oder dem Addierer auf dem Monitor zusehen kann, oder sehen kann wie der Adresszähler bei jedem RAM/ROM-Zugriff hochzählt, oder wie er durch einen Jump-Befehl mit einer neuen Zieladresse geladen wurde. 4 Bit bedeutet glücklicherweise nur 16 Befehle die man erkennen muss, also maximal 16x AND-Gatter mit bis zu 16 Eingängen (die Eingänge teils negiert) hinter einem 4:16 Demultiplexer, deren Ausgänge dann Register und/oder Recheneinheiten, Bustreiber zu den Einheiten aktivieren und solche Sachen. Trotz der Beschränktheit der Simulationssoftware lief das Ding dann sogar und konnte ein ganzen Nibble (also 4 Bit) von 4 Schaltern an IO-Adressen einlesen, die eingelesenen Werte addieren und shiften und wieder an anderen Adresse ausgeben, eine Bedingung prüfen und verzweigen.

    Siehst Du, das ist wieder sehr interessant. Meine Frage ist aber naatürlich wieder das gleiche :) Gibt es da irgendein empfehlenswertes Buch oder ähniliches welcher den Laien einen Einblick in diese verschieden Funktionseinheiten gibt? (z.B. Was sind die typischen Einheiten, was ist ihre Rolle, wie funtinieren sie... Und ich meine natürlich recht "einfachere/grundlegende" Sachen die man z.B. in ein 8-bit Prozessor finden kann, und nicht gleich alles was so in ein modernem Prozessor so gibt.) Und zweitens wäre es toll wenn da irgendwo Bespiele/Analysen/Erklärungen finden könnte die existierende (8-bit) Prozessoren von dieser Perspektive aus "zerlegen" und aus denen man lernen könnte.

    Aber wie gesagt, obwohl mich dieses Thema aus sehr interesseiert, ich werde mal "klein" anfangen, und erst beim Softwareemulator bleiben...
  • FPGA und Verilog zum Schnuppern...

    Die c*t hatte Ende 2015 ein kleines FPGA-Projekt zum Reinschnuppern:

    ct schrieb:

    c't 21/2015 Mit FPGAs (Retro-)Chips implementieren, Teil 1Wer heutzutage selbst Chips designen will, braucht weder teure Entwicklungswerkzeuge noch eine Fabrik. Es reichen ein erschwingliches FPGA-Board und kostenlose Software.

    c't 22/2015 Mit FPGAs (Retro-)Chips implementieren, Teil 2
    Am Beispiel eines Pong-Spiels zeigen wir, wie sich einfache Spiele auf einem FPGA auch ohne CPU, RAM und GPU realisieren lassen – genau wie im Original von 1972.

    c't 26/2015 Mit FPGAs (Retro-)Chips implementieren, Teil 3
    Zum Abschluss unseres FPGA-Crashkurses kommen Farbe, Grafikspeicher, RAM und eine Z80-CPU ins Spiel – „fertig“ ist der Retro-Computer.


    siehe: ct Artikelarchiv

    Grüße
  • Es gibt sehr gute Fachbücher zum Thema Digital-Technik, die sind zumindestens schonmal ein Einstieg für das Thema. Das hier zum Beispiel: amazon.de/Digitaltechnik-Elekt…eywords=digitalelektronik Darauf aufbauend dann vielleicht dieses hier: amazon.de/Mikroprozessortechni…fRID=6KVN7C3EH4N39C5J5EPB (Unter "Digitaltechnik" und "Mikroprozessortechnik" findest du bei Amazon auch noch mehr Bücher zum Thema.)
  • Problem: Ein Prozessor-Emulator (oder gar FPGA-Nachbau) umfaßt mindestens drei Level im OSI-Schichtenmodell eines Heimcomputers. Fängt man mit simpletr Digitalelektronik an, wird man einige Zeit brauchen bis man bei Flip-Flops und Halbaddierern ankommt- und das sind erst die aller-untersten Grundlagen der Computerei. Einen recht kurzweiligen Einblick findet man bei Lutz/Lohbaerg, 'Was denkt sich ein ELektronengehirn?'. Geschrieben Anfang der 1960er bleibt es bei Relais und den ersten deutschen Großrechnern, die Grundklagen sind aber auch heute noch aktuell.

    Eine Ebene höher geht es dann um interne Busse, Rechenwerke, Register und so ein Zeug. Hierzu lohnt sich ein Blick in IIRC Kapitel zwei von Rodnay Zaks' 'Programming the Z80' (gibts auch auf deutsch) wo sich ein gründlicher Überblick über die internen Schaltelemente und zeitlichen Abläufe in so einem Prozessor findet. Auch wird hier schon das Thema Ansteuerung externer Bausteine, Timing etc. angeschnitten.

    Ist das soweit verstanden und ein Grudnkurs Digitaltechnik wenigstens grob überfliogen, dann ist Visual6502 einen Blick wert. Da gehts dann wirklich bis auf Gatterebene runter. Und auch Datenblätter von Prozessoren und Peripheriebausteinen sind keine Bücher mit sieben Siegeln mehr.

    Übrigens: fertige VHDL-Vorlagen existierender Prozessoren sind gut- aber sie sind oft ganz anders aufgebaut als die Originale; dazu haben FPGA halt zu unterschiedliche Stäken und Schwächen.
  • bjavor schrieb:

    VHDL ist auch interessant. FPGAs haben mich schon immer fasziniert. Da würde ich auch gerne einsteige
    Da würde ich dir empfehlen, dir ein FPGA entwicklungsboard zuzulegen, habe mir seinerzeit das Xlinx Spartan 3AN Starter Kit zugelegt. Ich hatte 2 Semester Hardware Entwicklung im Studium, da allerdings mehr Verilog.

    Bei ebookaktiv.de/ gibt es dazu ein m.E. gutes eBook:

    ebookaktiv.de/eBook_VHDL/eBook_VHDL.htm
    Arcade & Pinballs: F14 Tomcat, TOTAN, Visual Pinball, MAME Arcade Cab, Münzschieber Glückskarussel
    Musikproduktion: Korg Kronos 61 (2nd 256GB SSD 4GB), Korg M50 61, Akai MPD32, Alesis IO4, KORG Nanopad 2
    Retro: C64, VC20, 2x 1541, 2x Datasette, Amiga 500 + 2nd Floppy + int. 512 KB + 4MB Speichererw., CBM 8032SK
    Heimkino: Epson TW6000, Xbox 360 Kinect mit Amazon Prime, Nintendo Wii

    "Weise einen klugen Mann auf einen Fehler hin und er wird sich bedanken. Weise einen dummen darauf hin und er wird dich beleidigen"