Small Simple FPGA 16-bit Microprocessor (SSFP16)



Hintergrund und Zweck

Während meiner Zeit als Integrator von elektronischen Systemen in Schienenfahrzeuge begegnete mir immer öfter der Begriff "FPGA". Zwar verfüge ich über recht umfangreiche Kenntnisse bezüglich analoger und digitaler Hardware [der 80er und 90er Jahre], und habe auch in diversen Sprachen incl. Assemblern programmiert, von FPGAs und VHDL hatte ich jedoch keine Ahnung. Da ich immer gerne verstehe, wie die Systeme funktionieren, für die ich verantwortlich bin (und auch warum sie manchmal nicht so funktionieren, wie sie sollen), beschloss ich, diese Lücke zu schließen.

Nach ein paar Tagen allgemeiner Orientierung (was ist ein PLA, ein CPLD oder ein FPGA, welche Software-Werkzeuge braucht man etc.) bestellte ich den Spartan3-Starter Kit von Digilent als eine günstige Variante, in die Welt der FPGAs einzutreten. Die ersten Schaltungen waren in VHDL aufgrund meines Hintergrunds schnell beschrieben, und so sollte als nächstes ein digitaler Funktionsgenerator mit zwei Kanälen, 4-zeiliger LCD-Anzeige etc. entstehen. Soweit kein Problem, allerdings fiel auf, dass der Funktionsgenerator an sich nur einen Bruchteil eines FPGAs benötigt, die für die Bedienung erforderliche Hardware im FPGA allerdings in der Größenordnung von mehreren 100 Slices zuzüglich RAM liegt und der Bedienkomfort trotzdem nicht das ist, was man von dergleichen Systemen erwartet. Die geplante Erweiterung um einen USB-Anschluss und einen A/D-Wandler war auf dem Niveau gar nicht zu realisieren. Einzige Lösung war ein Mikroprozessor. Selbstverständlich im FPGA - dass dies machbar wäre, war mir aus diversen Artikeln und Foren-Beiträgen klar. Warum ich keinen fertigen Prozessor wie den Picoblaze eingebunden habe? Ich wollte doch was lernen - und dafür ist der Weg bekanntlich das Ziel.

Merkmale und Architektur

Struktur:

Sprache, Dokumentation und Tools

Prozessor

Die Beschreibung des Prozessors erfolgte in VHDL und ist für Spartan 3 optimiert. Die Synthese erfolgte mit ISE Webpack 8.1. Soweit möglich wurde das Verhalten beschrieben. An einigen Stellen hat ISE WebPack 8.1 mit der Verhaltensbeschreibung nicht das optimale Ergebnis gefunden, dort wurden daher Strukturbeschreibungen verwendet.

Der Prozessor ist ausführlich in deutscher Sprache in HTML-Format dokumentiert. Die Dokumentation ist Teil des Downloads und unterliegt der GNU Free Document License.

Assembler

Will man nicht Befehle von Hand codieren, muss ein Assembler her. Da ich auf die Schnelle nichts Brauchbares gefunden habe (entweder ohne jegliche Dokumentation oder zu einfach oder zu kompliziert), habe ich einen relativ einfacher Kommandozeilen-Assembler in C geschrieben. Er sollte mit jedem C-Compiler auf vielen Plattformen zu kompilieren sein. Ich nutzte sowohl gcc unter Linux als auch Dev-C++ mit mingw32.

Für Microsoft Windows ist der Assembler als Binär-Datei "ssfp16asm.exe" im Download enthalten.

Bei Aufruf von "ssfp16asm" ohne Parameter wird eine Befehls-Referenz angezeigt.

Die Beschreibung des Assemblers ist Teil der HTML-Dokumentation.

Simulator und Debugger

Da sich in einem FPGA relativ schwer Fehler suchen lassen, schrieb ich einen Simulator in Java, welcher gleichzeitig als Debugger dient. Der Prozessor wurde dabei nahezu auf RTL-Ebene abgebildet, was die Suche von Fehlern im VHDL-Code vereinfacht, aber natürlich für das Debuggen von Assembler-Programmen unnötig langsam ist.

Die Beschreibung des Simulators/Debuggers ist Teil der HTML-Dokumentation.

Letztlich benötigt habe ich ihn dann doch nur für das Debuggen von Assembler-Programmen, da im VHDL-Code von Anfang an wider Erwarten keine wesentlichen Fehler waren. Da das Lernziel damit erreicht war, erfuhr der Debugger keine Erweiterung des Funktionsumfangs. Auch die Implementierung ist sicher kein Muster für gute oder gar effiziente JAVA-Programmierung.

Rechtliches

Sämtliche Quellcodes dieses Projekts unterliegen der GNU General Public License. Dies trifft auch für die VHDL-Beschreibung des Prozessors zu, welche ebenfalls zu Software im Sinne der GNU GPL gerechnet wird. Ich behalte mir vor, die von mir erstellten Teile zu einem späteren Zeitpunkt auch unter andere Lizenzen zu stellen. Dies gilt selbstverständlich nicht für ggf. zukünftig von Dritten gemäß GNU GPL entwickelte Module oder Verbesserungen.

Dieses Projekt ist in erster Linie zu Demonstrations- und Lehrzwecken gedacht. Eine patentrechtliche Prüfung konnte daher nicht vorgenommen werden. Da ich jedoch keinerlei Vorlagen für dieses Projekt nutzte und trotz meiner nur unwesentlich über Studieninhalte hinausgehenden Kenntnisse bezüglich Mikroprozessor-Architektur an keinem Punkt mehr als wenige Stunden nachdenken musste, gehe ich davon aus, zumindest kein Patent verletzt zu haben, welches diese Bezeichnung verdient.

Schließlich möchte ich noch darauf hinweisen, dass keinerlei Gewährleistung für die hier veröffentlichten Quelltexte besteht, da diese kostenlos lizensiert werden. Der hier veröffentlichte Quelltext steht so zur Verfügung, "wie er ist", ohne irgendeine Gewährleistung, weder ausdrücklich noch implizit, einschließlich aber nicht begrenzt auf Marktreife oder Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit der Programme bzw. des vorgestellten Mikroprozessors liegt bei Ihnen. Sollte sich eines der Programme oder der Mikroprozessor als fehlerhaft herausstellen, liegen die Kosten für notwendigen Service, Reparatur oder Korrektur bei Ihnen. In keinem Fall ist irgendein Copyright-Inhaber oder irgendein Dritter, der diese Programme oder die Hardware-Beschreibungen gemäß der GNU GPL modifiziert oder verbreitet hat, Ihnen gegenüber für irgendwelche Schäden haftbar, einschließlich jeglicher allgemeiner oder spezieller Schäden, Schäden durch Seiteneffekte oder Folgeschäden, die aus der Benutzung der Programme oder der Hardware-Beschreibungen oder der Unbenutzbarkeit derselben folgen (einschließlich aber nicht beschränkt auf Datenverluste, fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen getragen werden müssen, oder dem Unvermögen des Programms, mit irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter über die Möglichkeit solcher Schäden unterrichtet worden war.

Download

Der Download enthält:

Copyright 2019 by Thomas Brunnengräber, Munich, Germany
Email: homepage@thomas-brunnengraeber.de