Voraussetzung für den Einsatz ist die Verfügbarkeit einer Java-Runtime-Umgebung. Getestet wurde mit SUN j2re-1.4.2 unter Linux und Windows. Der Simulator wird von der Kommandozeile aus mit "java Sim" gestartet. Derzeit sind keine Möglichkeiten zur Auswahl der Dateien implementiert, daher müssen sich die Dateien "test.lst", "test.mem" und "test_edata.mem" im Verzeichnis der Simulator-Klassen befinden. Wer mag, kann ja mal eine Menüleiste mit typischen Datei-Funktionen programmieren. Die Speicherbereiche für Befehle und Daten in "test.mem" müssen Parity-Informationen enthalten.
Nach dem Start präsentiert sich eine Oberfläche mit drei Bereichen: Links werden Register und Flags angezeigt, in der Mitte der Inhalt der Datei "test.lst" und im rechten Bereich oben der Inhalt des internen Datenspeichers, darunter der des externen Datenspeichers gemäß den Inhalten der Dateien "test.mem" und "test_edata.mem".
In der Mitte wird der als nächstes auszuführende Befehl mittels eines blauen Dreiecks markiert (zur Zeit wird der aktuelle Befehl allerdings nicht automatisch in den sichtbaren Bereich gescrollt). Klickt man mit der Maus links neben eine Zeile, wird ein Haltepunkt für diese Zeile gesetzt, erkennbar an dem roten "Stop"-Zeichen. Durch Drücken von "Ein Schritt" wird genau ein Befehl ausgeführt, durch Drücken von "Bis Haltepunkt" wird die Programmausführung bis zum Erreichen eines Haltepunkts fortgesetzt. Wird eine Zeile angeklickt, erscheint sie grau hinterlegt. Bei Drücken von "Bis Zeile" wird das Programm bis zum Erreichen des markierten Befehls fortgesetzt. Wenn die Taste "Reset" gedrückt wird, wird der Zustand nach Neuinitialisierung des FPGA eingenommen, also wie nach einem Erst-Start. Die Speicher-Dateien werden dabei erneut eingelesen.
Register können im linken Bereich durch Eingabe neuer Werte verändert werden. Wird das IP-Register verändert, äußert sich dies erst nach Fortsetzung des Programms mittels einer der Tasten "Ein Schritt", "Bis Zeile" oder "Bis Haltepunkt". Der im IP-Register gesetzte Wert zeigt dabei auf den als nächstes auszuführenden Befehl. Werte im Datenspeicher können durch Eingabe der Adresse und des neuen Werts ebenfalls wortweise verändert werden. Unter Windows wird der Eingabe-Cursor leider nicht richtig gesetzt und muss daher mittels Maus auf andere Stellen bewegt werden.
Alle seit dem letzten Halt veränderten Register und Speicherstellen werden durch rote Schrift markiert, alle manuell veränderten Register blau.
Von einer detaillierten Beschreibung möchte ich hier absehen, da der Simulator/Debugger sicher kein Musterstück zukunftsweisender Technik ist oder sein will - entsprechend nachlässig ist auch der Programmierstil (an einigen Stellen extrem ineffizient oder unergonomisch).
Der Prozessor wurde nahezu auf RTL-Ebene abgebildet, um die Suche von Fehlern im VHDL-Code zu ermöglichen. Die Dateien "Processor.java", "Datenpfad.java", "Befehlspfad.java" und "Steuerung.java" entsprechen funktional nahezu exakt den gleichnamigen VHDL-Dateien. Dieses Vorgehen ist natürlich relativ kompliziert, da die zeitliche Parallelität der zwischen den einzelnen Modulen des Prozessors ausgetauschten Signalen berücksichtigt werden muss. Zudem macht diese Struktur das Debuggen von Assembler-Programmen sehr rechenintensiv, was sich bei längeren Programmläufen zwischen Halten durchaus bemerkbar macht.
Für die Simulation von Peripherie wie externem RAM, Interrupt-Controller etc. steht das Modul "IOSimulator.java" zur Verfügung. Derzeit ist nur das externe RAM modelliert.
| Zurück: Assembler | Index | Weiter: Installation und Tests |
Stand 15.09.2006
Copyright 2006 by Thomas Brunnengräber
Diese Dokumentation unterliegt den Bestimmungen der GNU Free Document License