Parallax Propeller
# Parallax Propeller

Der Parallax Propeller ist ein im Jahr 2006 eingeführter Mikrocontroller mit acht unabhängig arbeitenden 32-Bit-RISC-CPU-Kernen. Die Herstellerbezeichnung lautet P8X32A. Seit 2020 ist der zweite Chip der Familie verfügbar.

Die Idee hinter dem Produkt ist, dass statt spezialisierter IO-Komponenten (Timer, PWM, UART) einer der Kerne diese Aufgabe übernehmen kann, was mehr Flexibilität erlaubt, da man nicht auf die Funktionen angewiesen ist, die der Hersteller eingebaut hat.

Programmiert wird der Propeller in der eigens für ihn entwickelten Hochsprache SPIN und in Assembler. Die Hochsprache Spin wird jedoch nicht in Maschinencode übersetzt, sondern in einen Zwischencode (Bytecode) transformiert, der von einem Bytecode-Interpreter im Prozessor abgearbeitet wird. Parallax stellt als integrierte Entwicklungsumgebung das „Propeller Tool“ kostenlos zur Verfügung.

Sowohl der Prozessor als auch die Programmiersprache SPIN (inklusive Compiler und Byte-Code-Interpreter) wurden von Chip Gracey, dem Mitbegründer und heutigen Vorsitzenden von Parallax, entwickelt.

Mittlerweile kann der Propeller auch in anderen Sprachen wie BASIC, C oder Forth programmiert werden; verschiedene Compiler existieren als freie Software und als kommerzielle Produkte.

## Mehrkern-Architektur

Jeder der acht 32-Bit-Kerne, auch als Cog bezeichnet, besitzt eine elementare ALU, die Division nicht direkt unterstützt, sowie ein RAM für 512 32-Bit-breite long words (zusammen also 2 KiB) in dem sowohl ausführbarer Code als auch Daten abgelegt werden können. Selbstmodifizierender Code ist daher möglich und diese Möglichkeit wird auch genutzt. (Beispielsweise durch eine Anweisung, die verwendet wird, um einen Rücksprungmechanismus nach einem Aufruf eines Unterprogramms zu schaffen, der ohne einen Stack auskommt.)

Des Weiteren hat jeder CPU-Kern exklusiven Zugriff auf sämtliche I/O-Pins (insgesamt 32), auf zwei unabhängig konfigurierbare Zähler (verwendbar als Zähler, Zeitgeber oder numerisch gesteuerter Oszillator; auch als Analog-Digital-Wandler nach dem Sigma-Delta-Verfahren und umgekehrt als Digital-Analog-Wandler mittels Pulsbreitenmodulation zu gebrauchen) und auf einen Videogenerator (erzeugt RGB-Signale zur direkten Ansteuerung eines Computer-Displays oder Composite-Signale für einen Fernseher gemäß der NTSC- oder PAL-Norm).

Gemeinsam genutzte Ressource ist ein Speicher von 64 KiB, dessen untere Hälfte als RAM und dessen obere Hälfte als ROM ausgelegt ist. Um sicherzustellen, dass höchstens ein Cog gleichzeitig auf diesen Speicher zugreift, findet das sogenannte Round-Robin-Verfahren Anwendung, bei dem jeder Cog während eines kleinen Zeitfensters exklusiv auf den gemeinsamen Speicher zugreifen kann, bevor der nächste Cog an der Reihe ist. Dieser Multiplexer wird in diesem Zusammenhang von Parallax auch als Hub bezeichnet.

## Geschwindigkeit und Energiemanagement

Der Systemtakt kann intern erzeugt oder von außen angelegt werden. Er kann durch einen auf dem Chip integrierten PLL-Taktvervielfacher um den Faktor 1, 2, 4, 8 oder 16 erhöht werden.

Der PLL-Multiplikatorwert kann zur Laufzeit verändert werden, was die Energieeffizienz erhöhen kann. Beispielsweise kann der Multiplikator verringert werden, bevor eine aus Timing-Gründen benötigte längere Wartezeit ohne Instruktionsausführung eingelegt wird. Im Anschluss kann der Multiplikator wieder erhöht werden. Der Prozessor nimmt somit weniger Energie auf. Die Anwendung dieser Technik ist jedoch auf Situationen beschränkt, in denen kein anderer Cog Timing-abhängigen Code ausführt (sofern dessen Code nicht dafür entworfen wurde, mit solchen Veränderungen zurechtzukommen), da alle Cogs einen gemeinsamen Takt haben.

## ROM-Erweiterungen

Im eingebauten ROM sind außer dem Spin-Interpreter und Boot-Loader noch einige Daten hinterlegt, die besonders für mathematische Berechnungen sowie für Audio- und Videoanwendungen hilfreich sein können:

* ein Bitmap-Font-Satz für Bildschirmausgabe
* eine logarithmische Tabelle (Basis 2, 2048 Einträge)
* eine antilogarithmische Tabelle (Basis 2, 2048 Einträge) für Umrechnungen
* eine Sinus-Tabelle (16 Bit, 2049 Einträge)

## Bauformen

Der Parallax Propeller ist verfügbar in den Bauformen 40-Pin-DIP, 44-Pin-QFP, oder als besonders platzsparender QFN. Besonders die DIP-Bauform ist wegen der einfachen Handhabung bei Hobbyanwendern beliebt.

## Externes EEPROM

Der Propeller kann beim Start sein Programm aus einem externen seriellen EEPROM laden, nach Abschluss des Bootvorganges kann dieser Speicher für andere Aufgaben (etwa Speicherung von Messwerten) verwendet werden.

## Open Source

Die Hardware des Propeller wurde als Verilog-Source unter der GPL veröffentlicht. Auch der ROM-Code wurde als kommentierter Quelltext veröffentlicht. Somit kann der gesamte Prozessor nachvollziehbar auf einem FPGA nachgebildet werden.

Auch die Entwürfe für den P2 sind öffentlich verfügbar, sodass man den Chip vorab erproben und Verbesserungsvorschläge einbringen kann.

