Hallo Wuerfel_21,
danke für dein Antwort. Ich habe jetzt mal GEAR auf dem selben Rechner (aber unter Windows statt Linux) mit dem Blinky und dem Matrix VGA Code ausgeführt. Über 30 Sek gemessen kam ich auf eine Taktfrequenz von
Gear:
Blinky: 66 kHz
Matrix VGA Demo: 58 kHz
Hive Emulator (ein Propeller):
Blinky: 1240 kHz
Matrix VGA Demo 570 kHz.
Mit Frequenz meine ich dabei übrigens die Frequenz des Systemzählers (auf dem Hive die 80MHz).
Kommen die Werte bei GEAR so etwa hin oder habe ich da was falsch gemacht?
Bezüglich der "Emulationsgenauigkeit" habe ich mich an die veröffentlichten Verilog Dateien von Parallax gehalten. Die Äquivalenz von meiner Kopie zu den Originaldateien konnte ich für die meisten Teilkomponenten (cog, cog_alu, cog_ctr, cog_vid, hub) mit dem Tool yosys formal verifizieren.
Ich hoffe nur, dass die Verilogdateien von Parallax auch wirklich ihrem Chip in Hardware entsprechen
In der ALU sind mir auch die von dir angesprochenen, undokumentierten Flag Verhalten aufgefallen, bei GEAR scheint das nicht in allen Befehlen korrekt implementiert zu sein. Das WAITVID (WHOP) Verhalten ist bei mir auch der Fall. Der Videogenerator bekommt nämlich von der WAITVID Instruktion genau genommen gar nichts mit. Er gibt nur ein Signal weiter, dass er die Daten von den Bussen genommen hat.
GEAR scheint einen etwas anderen Weg zu gehen, da damals die Originaldateien auch nicht zur Verfügung standen. Hier wird z.B. sowohl der Assembler Code als auch der Spin Code separat ausgewertet. Bei mir hingegen läuft beim Spin Code der original Interpreter aus dem ROM auf der virtuellen COG.
Bei GEAR werden auch die Subschritte eines Befehls nicht wirklich einzeln durchgeführt, sondern er führt alles in einem Schritt durch und wartet dann ein paar Takte. Eigentlich müsste GEAR deshalb zwar etwas weniger originalgetreu aber dafür schneller sein (vor allem bei Spin Code). Eventuell liegt der Geschwindigkeitsunterschied aber auch nur an C# (VM) im Vergleich zu C++?
Ich werden nochmal mit einem Profiler den Hive Emulator durchgehen, um zu schauen, was die meiste Zeit frist. Gefühlt ist bei den Countern noch etwas an Optimierungspotential, unter der Annahme, dass selten alle 16 Counter wirklich aktiv sind.