Parallax Propeller
Der Parallax Propeller ist ein im Jahr 2006 eingeführter Mikrocontroller mit acht unabhängig arbeitenden 32-bit RISC-CPU-Kernen.
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 (Byte-Code) transformiert, der von einem Byte-Code-Interpreter im Prozessor abgearbeitet wird. Parallax stellt als integrierte Entwicklungsumgebung das „Propeller Tool“ kostenlos zur Verfügung.
Bemerkenswert ist, dass sowohl der Prozessor als auch die Programmiersprache SPIN inklusive Compiler und Byte-Code-Interpreter von einer einzigen Person, nämlich Chip Gracey, dem Mitbegründer und heutigen Vorsitzenden von Parallax entwickelt wurde.
Mittlerweile kann auch in C programmiert werden; der Compiler ist jedoch kostenpflichtig.
Mehrkern-Architektur
Jeder der acht 32-Bit Kerne, den man 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 kB) 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ückspungmechanismus 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-Digitalwandler nach dem sigma-delta Verfahren und umgekehrt als Digital-Analogwandler 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 kB, 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. Dies ist nichts anderes als ein Multiplexer, der in diesem Zusammenhang von Parallax auch als Hub bezeichnet wird.
Geschwindigkeit und Energiemanagement
Der Propeller kann auf zwei Weisen mit einem Systemtakt versorgt werden: entweder durch einen internen on-chip-Oszillator (wodurch eine geringere Gesamtzahl an Bauteilen nötig ist, aber etwas Genauigkeit und thermische Stabilität verloren geht) oder einen externen Schwingquarz bzw. Keramikresonator (woraus bei höheren Gesamtkosten größere Geschwindigkeit und erhöhte Genauigkeit resultieren). Jede dieser Taktquellen kann durch einen auf dem Chip integrierten PLL-Taktvervielfacher geleitet werden, welcher auf eine Vervielfachung von 1x, 2x, 4x, 8x, oder 16x eingestellt werden kann.
Sowohl die eingebaute Oszillatorfrequenz (sofern verwendet) als auch der PLL-Multiplikatorwert können zur Laufzeit verändert werden. Korrekt eingesetzt kann dies die Energieeffizienz erhöhen. Beispielsweise kann der PLL-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 dieser Code nicht sorgfältig dafür entworfen wurde, mit solchen Veränderungen zurecht zu kommen). Der Grund hierfür liegt in der effektiven Taktrate, welche alle Cogs gemeinsam 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 benutzbar für die Schrift auf dem Bildschirm,
- 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 LQFP, oder als besonders platzsparender QFN. Besonders die DIP Bauform ist wegen der einfachen Handhabung bei Hobbyanwendern beliebt.
Externer EEPROM
Der Propeller kann beim Aufstarten 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.