PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Projektvorstellung] Mini-Mikrocontroller als simuliertes Logikgrab + Assembler



-schumi-
05.05.2014, 21:47
Hallo Zusammen,

rein aus Langeweile und Intresse habe ich vor einiger Zeit schon angefangen in einem Simulationsprogramm einen kleinen Mikrocontroller aus Logikbausteinen zusammenzubauen. Vor kurzem habe ich das Ganze wieder rausgekramt, nochmal neu aufgebaut und einen Assembler geschrieben um den kleinen Mikrocontroller einfach programmieren zu können. Hier sieht man wie er in der Simulation gerade das Blink-Beispielprogramm abarbeitet:
https://dl.dropboxusercontent.com/u/19005544/CPUSimulation/Simulation_klein.png
(Volle Auflösung: https://dl.dropboxusercontent.com/u/19005544/CPUSimulation/Simulation.png)
(Die Schaltung ist schon noch ein gutes Stück größer, ist in Form von Submodulen in den "ICs" versteckt)

Dank des Assemblers lässt sich der Controller auch kinderleicht programmieren, so sieht das Blinkprogramm aus:


define ledport PORTB

label: main
copy l0 ledport
copy l1 ledport
setPC main


Features des uC:

64 Ausgänge
64 Eingänge
128 Byte Ram
ROM für 256 Befehle
Ein Befehlszyklus dauert immer 5 Taktzyklen. Dabei werden

Zwei Werte miteinander verrechnet (entweder einfache Zahlen oder welche aus Registern/Speicherzellen) und im frei wählbaren Zielregister/-speicherzelle gespeichert
Wenn man in ein besimmtes Register speichert wird sogar noch im selben Befehlszyklus ein Sprung durchgeführt falls das Ergebnis Null ist (Skip if Zero) (Und das gibts auch als "Skip if not zero" ;-) )



Was noch fehlt:

Pointer gehen noch nicht
Unterprogramme gehen blos mit der Tiefe 1, indem man sich den ProgramCounter selbst in eine RAM-Zelle speichert und ihn beim Rücksprung da auch selbst wieder rausfummelt :Haue -> Stack muss noch eingebaut werden
Interrupts
Mehr Hardware als nur Ein-/Ausgänge wäre noch nett, z.B. Timer



Das Ganze hat jetzt sehr schnell viel Fahrt aufgenommen und es sehr viel Spaß macht mit dem Ganzen zu Arbeiten. Daher veröffentliche ich das Projekt:
Download: https://dl.dropboxusercontent.com/u/19005544/CPUSimulation/CPU_Logisim%20v5.zip
Zum selbst Simulieren wird nur Logisim benötigt (java), ein paar ladbare Beispielprogramme liegen auch bei. Wenn man auch selbst Programmieren möchte braucht man noch Python3 (Weil der Assembler ein Python-Skript ist)
Habe auch Doku geschrieben so gut es geht (Zumindest was Register, Programmierung und Simulation angeht. Der Schaltplan (=Simulation) ist auch viel beschriftet)

Vielleicht findet ja der eine oder andere auch Spaß daran. Über ein paar Verbesserungsvorschläge etc. würde ich mich freuen :)

PS: Es kann sehr gut sein, dass das eine oder ander etwas komisch oder ungewöhnlich gelöst ist (z.B. zeigt der ProgramCounter im Gegensatz zu fast allen anderen CPUs auf den aktuellen Befehl und nicht auf den nächsten). Das kommt daher, dass ich einfach losgebaut habe ohne mir vorher andere Designs anzusehen..