Parallax Propeller

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Parallax Propeller

De Parallax Propeller, of P8X32 zoals hij officieel heet, is een multiprocessor-microcontroller met acht 32 bit-RISC-CPU-kernen. Hij werd geïntroduceerd in 2006, en heeft een zeer bijzondere architectuur. Zijn architectuur is speciaal ontworpen voor het genereren van (een of meerdere) videosignalen, maar hij is ook zeer bruikbaar voor een groot scala aan andere taken, waarvan sommige dingen heel moeilijk, of helemaal niet, met andere microcontrollers mogelijk zouden zijn.

Multicorearchitectuur[bewerken]

Elk van de acht 32 bit-kernen, die als COG's aangeduid worden, heeft een elementaire ALU (een instructie om te delen is bijvoorbeeld niet aanwezig, maar een deelinstructie, of andere mathematische instructie, kan wel middels de ingebouwde mathematische tabellen uitgevoerd worden), en elke COG heeft toegang tot 512 32 bit geheugenlocaties, waarvan er 496 als RAM-geheugen uitgevoerd zijn, en 16 bedoeld zijn voor het benaderen van de registers van speciale hardware zoals counters. Het RAM-geheugen kan instructies en data bevatten, maar elke locatie kan ook opgevat worden als een CPU-register. Zelfmodificerende code is niet alleen mogelijk, maar sommige machinetaalinstructies maken er zelfs intern gebruik van. Zo is er een instructie die een andere instructie (de "RETURN"-instructie) modificeert, en daarna een "JUMP" doet naar een willekeurig adres. Hiermee wordt een CALL/RETURN-subroutinemechanisme gemaakt dat werkt zonder een stack nodig te hebben. De toegang tot een (door de acht COG's gedeeld) 32 KB RAM en 32 KB ROM-geheugen (elk als 8 K 32 bit woorden uitgevoerd) wordt gecontroleerd door een "bus controller" die de naam "the hub" draagt, en die op een "round robin" (rotatieschema) manier elke COG even toegang geeft. Elke COG heeft daarbij ook steeds toegang tot alle 32 beschikbare I/O-poorten, twee hardwarecounters, en twee speciale "videoregisters" die de COG assisteren bij het opwekken van een PAL/NTSC-compatibel composiet videosignaal.

Zeer hoge executiesnelheid[bewerken]

De eerste versie van de propeller (er zijn er nog meerdere in ontwikkeling) draait op een kloksnelheid van 32 KHz tot 80 MHz. Bij een 80MHz-klok kan de ingebouwde geïnterpreteerde SPIN-programmeertaal ongeveer 80.000 8 bit-tokens per seconde interpreteren, per COG. Ofwel 640.000 SPIN-instructies per seconde. De Propeller kan echter ook direct machinetaal instructies uitvoeren en aangezien deze ongeveer vier klok perioden per instructie gebruiken kan de propeller 20 MIPS per COG uitvoeren, ofwel 160 MIPS in totaal voor alle acht COG's.

Energiezuinigheid[bewerken]

De propeller is zeer zuinig, daar hij op 3,3 volt werkt, en slechts 75 mA verbruikt als alle COG's vol in gebruik zijn, op hun volle snelheid. Wanneer een COG echter niet nodig is wordt deze automatisch uitgezet en verbruikt dan vrijwel geen stroom meer. Dit en het feit dat de kloksnelheid onder softwarecontrole zeer sterk omlaag geschroefd kan worden (desnoods naar 32 KHz) betekent dat de propeller zeer zuinig met energie kan omgaan. In de zuinigste stand gebruikt hij dan zelfs slechts enkele microampères, en kan vele maanden draaien op enkele penlightbatterijtjes.

Ingebouwde kristaloscillator[bewerken]

De propeller kan geklokt worden met een ingebouwde klokgenerator, of met een kristal. Wanneer men een kristal wil gebruiken kan er een toegepast worden uit een zeer brede reeks van frequenties zonder dat enige andere componenten nodig zijn. Als geen precieze timing nodig is kan ook zonder kristal gewerkt worden. De chip gebruikt de intern opgewekte, of door een kristal geproduceerde, frequentie voor de aansturing van een in software bestuurbaar PLL-systeem dat de frequenties opwekt die intern in de chip nodig zijn voor de COG's en de diverse counters. De intern opgewekte frequentie kan hoger zijn dan de kristalfrequentie, en kan zonder meer door software bepaald worden, om bijvoorbeeld energie te sparen.

Ingebouwde ROM[bewerken]

De ingebouwde ROM bevat een aantal bruikbare faciliteiten, bijvoorbeeld een computerlettertype, dat gebruikt kan worden bij het opwekken van TC-signalen, of om een lcd aan te sturen. Verder bevat het diverse mathematische tabellen waarmee sinussen gegenereerd kunnen worden, en voor het doen van "snelle Fouriertransformatie", maar ze kunnen ook gebruikt worden om het gebrek aan rekenkundige mogelijkheden van de CPU te ondervangen, door bijvoorbeeld te assisteren bij het doen van delingen en vermenigvuldigingen. Ten slotte bevat de ROM firmware om op te kunnen starten en voor het uitvoeren van de "bytecode-interpreter" waarmee de speciale SPIN-programmeertaal wordt uitgevoerd.

Ingebouwde SPIN Bytecode interpreter[bewerken]

De propeller heeft een ingebouwde bytecode-interpreter voor de speciaal voor de propeller ontworpen hogere programmeertaal genaamd 'SPIN'. Dit is een object georiënteerde programmeertaal waarvoor een (gratis) ontwikkelingsomgeving bestaat, genaamd "The propeller tool", deze draait (voorlopig alleen) onder Windows XP (en Vista). SPIN draait veel langzamer dan de eigen machinetaal van een COG, maar is niet gebonden aan de 2K-geheugenlimiet van een COG, en is veel zuiniger met geheugen omdat elke instructie in slechts één byte is opgeslagen, in plaats van de vier die elke machinetaalinstructie behoeft. Deze oplossing lijkt een beetje op die van de ARM9-processors, die 8 bit "thumb"-code-instructies kunnen gebruiken voor "compacte langzame code" en 32 bits instructies voor de rest, alleen doet de propeller dit met firmware, in plaats van met een hoop extra hardware. De propeller kan in elk van zijn acht COG's een kopie laden van de "SPIN-code-interpreter", dus kunnen er acht SPIN-programma's tegelijk draaien. SPIN is snel genoeg om in software dingen te doen zoals het nabootsen van een snelle UART. Vanuit een in SPIN geschreven programma kan de propeller echter ook (in een andere COG) machinetaalprogramma's starten.

32 I/O-poorten[bewerken]

De eerste versie van de chip, die officieel als S8X32 aangeduid wordt, heeft één 32 bit I/O-poort, en is in een 40 pin-, 0,6 inch- DIP-chip, of een 44 pin-LQFP of -QFN Surface-mount technology-behuizing beschikbaar. Van de 40 beschikbare pinnen zijn er 32 voor I/O-pinnen beschikbaar, vier worden er voor voeding en aarde gebruikt, en de resterende vier zijn voor de aansluiting van een kristal, en een reset en "brownout enable"-pin.

Alle acht COG's kunnen de 32 bit I/O-poort gelijktijdig onbeperkt aansturen, een speciaal "arbitragemechanisme" zorgt er voor dat er geen gekke dingen gebeuren als de ene COG probeert een pin als ingang, en een andere dezelfde pin als uitgang te programmeren. Elke COG heeft ook diverse hardware tellers, hiermee is het bijvoorbeeld mogelijk op een pulsbreedte gemoduleerd signaal op te wekken (zonder daarmee de CPU's te belasten) waarmee bijvoorbeeld acht audio-uitgangen gecreëerd kunnen worden. Omdat deze counters ook faciliteiten hebben voor het moduleren van de fase van het opgewekte signaal kunnen de counters ook helpen bij het opwekken van het "color-burst"-signaal gebruikt in de composiet videokleursignalen volgens de PAL- en NTSC-normen.

Latere versies van de propeller zullen meer COG's, meer I/O-pinnen en meer geheugen hebben, en zullen sneller zijn.

Virtuele I/O-toestellen[bewerken]

De ontwerpkeuzes die de ontwerper van de propeller gemaakt heeft (hij is voornamelijk door slechts één persoon ontwikkeld), dragen er sterk toe bij dat de propellerchip geen speciale I/O-interfaces, zoals A/D- en D/A-converters, RS232, I²C en seriële SPI-interfaces, of andere speciale interfacehardware nodig heeft, deze kunnen namelijk allemaal met software en de ingebouwde tellers nagebootst worden. het is zelfs mogelijk een complete Video Display Controller in software na te bootsen. Dit wordt bijvoorbeeld gebruikt in de Hydra-spelconsole, en op een propeller gebaseerd systeem waarbij een hobbyist zelf zijn eigen videospelletjes kan ontwikkelen. Het is zelfs mogelijk om direct een radiofrequent (VHF-)tv-signaal, (inclusief audio) op te wekken, dat rechtstreeks op de antenne ingang van een tv kan worden aangesloten. Maar ook kan een VGA-monitor aangesloten worden.

Softwarebibliotheken zijn beschikbaar waarmee vele verschillende oplossingen geboden worden voor het nabootsen van I/O-apparaten, bijvoorbeeld voor het aansturen van de motoren in robots, maar ook vele andere interfaces, zoals USB, MIDI en MMC-geheugenkaartjes. Er is zelfs al software voor het nabootsen van een complete synthesizer.

Interruptmechanisme[bewerken]

Interessant aan de propeller is ook dat hij geen interrupts gebruikt of nodig heeft. Wanneer je de propeller aan een zeer snelle chip wilt interfacen, bijvoorbeeld aan een ethernetchip, dan gebruik je gewoon één COG voor de interface, die ook met een snel "polling"-mechanisme doet waarvoor anders een interrupt nodig zou zijn.

Opstartmechanisme[bewerken]

Als een propeller gestart of herstart wordt, door een voedingsstoring, interrupt, of door software, dan laadt het de bootcodefirmware in een van de COG's en voert deze uit. Deze software kijkt heel even of er commando's komen van een (in software nagebootste UART, en als dat niet zo is laadt hij SPIN code van een externe EEPROM (middels een ook in software opgewekte I2C-interface) Daarna laadt hij een SPIN-code-interpreter in een COG, en deze voert het in SPIN geschreven programma uit. Vanuit de SPIN-code kunnen op andere COG's andere programma's opgestart worden, dat kunnen dan andere kopieën zijn van de SPIN-interpreter, maar ook andere machinetaalprogramma's.

Externe EEPROM[bewerken]

De propeller kan niet alleen maar booten van de externe EEPROM, andere programma's kunnen deze ook gebruiken om meer code ervan in het 32K-hoofdgeheugen te laden, het is mogelijk om dus veel grotere programma's dan 32 K uit te voeren. Een externe EEPROM van 1 MB is mogelijk, maar het is natuurlijk ook mogelijk om via de I/O-pinnen een extern geheugen aan te sturen, bijvoorbeeld een geheel random acces benaderbaar 256K-RAM kan aangesloten worden met slechts tien I/O-pinnen.

Toekomstige versies[bewerken]

Parallax is bezig met de ontwikkeling van een vier keer snellere, en ingewikkeldere propeller, en is nu aan het nagaan waar hun gebruikers meer behoefte aan hebben, aan meer COG's, of aan een groter geheugen, ze doen dat via hun forum.

  • Optie 1: 16 cogs met 128 KB of hub-RAM. Hub-toegang elke zestien kloktikken.
  • Optie 2: 8 cogs met 256 KB of hub-RAM. Hub-toegang elke acht kloktikken.

Ook denken ze aan een tweede 32 bit I/O-poort, al zal die in eerste instantie alleen gebruikt worden voor de directe communicatie tussen COG's.

Externe links[bewerken]