Vrtule paralaxy - Parallax Propeller

Vrtule Parallax v dvojitém řadovém balení
Paralaxní vrtule v TQFP

Paralaxa P8X32A Vrtule je multi-core procesor paralelní architektura počítače mikrokontrolér čip s osmi 32-bit RISC (RISC) centrální procesorovou jednotku (CPU) jader. Představený v roce 2006, je navržen a prodáván společností Parallax, Inc.

Mikroprocesor Propeller, jazyk sestavení vrtule a tlumočník Spin navrhl spoluzakladatel a prezident Parallaxu Chip Gracey. Programovací jazyk Spin a integrované vývojové prostředí (IDE) Propeller Tool navrhli Chip Gracey a softwarový inženýr Parallaxu Jeff Martin.

Dne 6. srpna 2014 vydala společnost Parallax Inc. veškerý hardware a nástroje Propeller 1 P8X32A jako hardware a software s otevřeným zdrojovým kódem pod licencí GNU General Public License (GPL) 3.0. To zahrnovalo kód Verilog , soubory nejvyšší úrovně popisu hardwaru (HDL), interpret Spin, programovací nástroje a překladače PropellerIDE a SimpleIDE.

Vícejádrová architektura

Každé z osmi 32bitových jader (nazývaných ozubené kolo ) má centrální procesorovou jednotku (CPU), která má přístup k 512 32bitovým dlouhým slovům (2  kB ) instrukcí a dat. Samoobslužný kód je možný a používá se interně, například když se zavaděč přepíše pomocí nástroje Spin Interpreter. Podprogramy ve Spinu (objektově založený kód na vysoké úrovni) používají mechanismus zpětného volání, který vyžaduje použití zásobníku volání . Sestavovací (PASM, nízkoúrovňový) kód nepotřebuje žádný zásobník volání. Přístup do sdílené paměti (32 KB paměť s náhodným přístupem (RAM); 32 KB paměť jen pro čtení (ROM)) je řízen prostřednictvím plánování každý s každým interním řadičem počítačové sběrnice nazývaným rozbočovač . Každé ozubené kolo má také přístup ke dvěma vyhrazeným hardwarovým čítačům a speciálnímu video generátoru pro použití při generování časovacích signálů pro PAL , NTSC , VGA , ovládání servomechanismu a další.

Řízení rychlosti a výkonu

Vrtuli lze taktovat buď pomocí interního oscilátoru na čipu (poskytuje nižší celkový počet součástí, ale obětuje určitou přesnost a tepelnou stabilitu) nebo externího krystalového oscilátoru nebo keramického rezonátoru (poskytuje vyšší maximální rychlost s vyšší přesností při vyšších celkových nákladech ). Pouze externí oscilátor může být provozován multiplikátorem hodin na čipu fázově uzamčené smyčky (PLL) , který lze nastavit na 1x, 2x, 4x, 8x nebo 16x.

Jak frekvenci palubního oscilátoru (je-li použit), tak hodnotu multiplikátoru PLL lze za běhu změnit. Pokud je používán správně, může to zlepšit energetickou účinnost; například multiplikátor PLL může být snížen před tím, než je pro účely časování nutné dlouhé čekání bez operace , a poté se může zvýšit, což způsobí, že procesor spotřebuje méně energie. Užitečnost této techniky je však omezena na situace, kdy žádný jiný zub nevykonává kód závislý na časování (nebo je pečlivě navržen tak, aby se vyrovnal se změnou), protože efektivní taktovací frekvence je společná všem zubům.

Efektivní taktovací frekvence se pohybuje od 32 kHz do 80 MHz (s přesnými hodnotami dostupnými pro dynamické řízení v závislosti na použité konfiguraci, jak je popsáno výše). Když běží na 80 MHz, proprietární interpretovaný programovací jazyk Spin provede přibližně 80 000 tokenů instrukcí za sekundu na každé jádro, což dává 8krát 80 000 pro 640 000 instrukcí na vysoké úrovni za sekundu. Většina instrukcí ve strojovém jazyce trvá 4 hodinové cykly, což má za následek 20 milionů instrukcí za sekundu (MIPS) na ozubené kolo, nebo celkem 160 MIPS pro vrtuli s 8 zuby.

Spotřeba energie může být snížena snížením rychlosti hodin na to, co je potřeba, vypnutím nepotřebné čepy (které se pak používají malý výkon) a změnou konfigurace vstupů / výstupů, které jsou nepotřebné, nebo mohou být bezpečně umístěny ve vysoké impedance stavu ( tristated ), jako vstupy. Piny lze překonfigurovat dynamicky, ale opět se změna týká všech ozubených kol, takže synchronizace je u určitých návrhů důležitá. Určitá ochrana je k dispozici pro situace, kdy se jedno jádro pokusí použít pin jako výstup, zatímco jiné se pokusí použít jej jako vstup; to je vysvětleno v technické referenční příručce Parallaxu.

Palubní periferie

Každý zub má přístup k vyhrazenému hardwaru čítače časovače a speciálnímu generátoru časovacího signálu určenému ke zjednodušení návrhu výstupních fází videa, jako jsou kompozitní PAL nebo NTSC displeje (včetně modulace pro vysílání) a monitorů Video Graphics Array (VGA). Parallax tak zpřístupňuje ukázkový kód, který může generovat videosignály (text a grafika s poněkud nízkým rozlišením) s použitím minimálního počtu dílů sestávajícího z vrtule, krystalového oscilátoru a několika rezistorů, které tvoří hrubý převodník digitálního signálu na analogový (DAC) ). Frekvence oscilátoru je důležitá, protože schopnost korekce hardwaru časování videa je omezena na taktovací frekvenci. Pro generování jednoho video signálu je možné použít paralelně více zubů. Obecněji lze časovací hardware použít k implementaci různých časovacích signálů různé modulace šířky impulzů (PWM).

Rozšíření ROM

Kromě tlumočení Spin a zavaděče poskytuje vestavěná ROM některá data, která mohou být užitečná pro určité zvukové, video nebo matematické aplikace:

  • je k dispozici bitmapové písmo , vhodné pro typické aplikace pro generování znaků (ale ne přizpůsobitelné);
  • logaritmus tabulka (základ 2, 2048 položek);
  • antilog tabulka (základ 2, 2048 položek); a
  • sinusová tabulka (16bitová, 2049 záznamů představujících první kvadrant, úhly od 0 do π/2; další tři kvadranty jsou vytvořeny ze stejné tabulky).

Matematická rozšíření mají pomoci kompenzovat nedostatek jednotky s plovoucí desetinnou čárkou a primitivnější chybějící operace, jako je násobení a dělení (toto je maskované ve Spinu, ale je limitem pro rutiny jazyků sestavení ). Propeller je však 32bitový procesor a tyto tabulky mohou mít nedostatečnou přesnost pro použití s ​​vyšší přesností.

Integrovaný tlumočník Spin bytecode

Spin je víceúlohový počítačový programovací jazyk na vysoké úrovni, který vytvořil Chip Gracey společnosti Parallax , který také navrhl mikrokontrolér Propeller, na kterém běží, pro svou řadu mikrokontrolérů Propeller.

Spin kód je napsán na Propeller Tool, platformě pro vývoj softwaru orientované na GUI napsané pro Windows XP. Tento kompilátor převádí Spin kód na bytecodes, které lze načíst (stejným nástrojem) do hlavní 32 KB RAM, a volitelně do I²C boot elektricky vymazatelné programovatelné paměti jen pro čtení ( EEPROM ) čipu Propeller. Po spuštění vrtule se z vestavěné paměti ROM zkopíruje interpret bajtového kódu do 2 kB RAM primárního COG. Tento COG pak začne interpretovat bajtové kódy v hlavní 32 KB RAM. V jiných COG může běžet více než jedna kopie interpretu bytecode, takže lze současně spustit několik vláken Spin kódu . V rámci Spin kódu programu a, montáž programový kód (y) může být inline vložen. Tyto programy assembleru pak poběží na vlastních COG.

Stejně jako Python , Spin používá k oddělení bloků mezery v odsazení, spíše než složené závorky nebo klíčová slova .

Tlumočník vrtule pro svůj proprietární vícevláknový počítačový jazyk Spin je tlumočník bytecode . Tento tlumočník dekóduje řetězce instrukcí, jednu instrukci na bajt , z uživatelského kódu, který byl upraven, zkompilován a načten do vrtule v rámci účelově integrovaného vývojového prostředí (IDE). Toto IDE, které Parallax pojmenovává Nástroj Propeller , je určeno k použití pod operačním systémem Microsoft Windows .

Jazyk Spin je programovací jazyk na vysoké úrovni . Protože je interpretován v softwaru, běží pomaleji než čistá sestava vrtule, ale může být prostorově efektivnější: Operační kódy sestavy vrtule jsou dlouhé 32 bitů; Spin direktivy jsou dlouhé 8 bitů, po nichž může následovat několik 8bitových bytů, aby se určilo, jak tato směrnice funguje. Spin také umožňuje vyhnout se významným problémům se segmentací paměti, které je třeba vzít v úvahu pro kód sestavy.

Při spuštění bude zkopírována kopie interpretu bajtkódu (menší než 2 KB) do vyhrazené paměti RAM ozubeného kola a poté začne interpretovat bajtkód v hlavní paměti RAM o velikosti 32 kB. Od tohoto bodu lze spustit další ozubená kola, načtení samostatné kopie tlumočníka do vyhrazené paměti RAM nového ozubeného kola (celkem tedy může současně běžet osm vláken tlumočníka). Zejména to znamená, že alespoň minimální množství spouštěcího kódu musí být Spin kód pro všechny aplikace Propeller.

Syntax

Syntaxi Spinu lze rozdělit do bloků, které obsahují:

  • VAR - globální proměnné
  • CON - programové konstanty
  • PUB - kód pro veřejný podprogram
  • PRI - kód pro soukromý podprogram
  • OBJ - kód pro objekty
  • DAT - předdefinovaná data, rezervace paměti a kód sestavy

Příklad klíčových slov

  • restart: způsobí restart mikrokontroléru
  • waitcnt: počkejte, až se čítač systému rovná nebo překročí zadanou hodnotu
  • waitvid: čeká na (video) časovací událost před výstupem (video) dat na I/O piny
  • coginit: spustí procesor na novém úkolu

Příklad programu

Příklad programu (jak by to vypadalo v editoru Propeller Tool ), který vydává aktuální čítač systému každých 3 000 000 cyklů, poté se po 40 000 000 cyklech vypne dalším ozubeným kolečkem:

Příklad SPIN program.png

Vrtule Parallax postupně hromadí softwarové knihovny, které jí dávají podobné schopnosti jako starší produkt BASIC Stamp společnosti Parallax ; neexistuje však jednotný seznam zařízení PBASIC, která nyní mají ekvivalenty roztočení .

V žertu se tvrdilo, že „Kdyby se v baru setkaly dva jazyky - Fortran a BASIC - o devět měsíců později by se našel Spin.“ To se týká formátování FORTRAN na mezerách a operace BASIC na základě klíčových slov.

Balíček a I/O

Počáteční verze čipu (nazývaná P8X32A) poskytuje jeden 32bitový port ve 40pólovém 0,6 v duálním in-line balíčku (DIP), 44pólovém LQFP nebo Quad Flat No-Lead Package (QFN) povrchu- balíček technologie mount . Ze 40 dostupných pinů je 32 použito pro I/O, čtyři pro napájecí a uzemňovací piny, dva pro externí krystal (je -li použit), jeden umožňuje detekci výpadku napájení a detekce výpadku a jeden pro reset.

Všech 32 jader může přistupovat k 32bitovému portu (označenému „A“; v současné době neexistuje žádné „B“) současně. Aby se předešlo konfliktům I/O, používá se speciální řídicí mechanismus, pokud se jedno jádro pokusí použít I/O pin jako výstup, zatímco jiné se jej pokusí použít jako vstup. Kterýkoli z těchto kolíků lze použít pro výše popsané techniky časování nebo modulace šířky pulsů.

Parallax uvedl, že očekává, že novější verze vrtule nabídnou více I/O pinů a/nebo více paměti.

Virtuální I/O zařízení

Zachycení obrazovky grafické ukázky, kterou Parallax vytvořil, aby předvedl videotéku NTSC

Designéři společnosti Propeller navrhli koncept „virtuálních I/O zařízení“. Například HYDRA Game Development Kit (počítačový systém navržený pro fandy, aby se naučili vyvíjet retro hry) používá vestavěný generátor znaků a logiku podpory videa ke generování virtuální grafické jednotky -generátoru, který produkuje VGA barevné obrázky, barevné obrázky kompatibilní s PAL/NTSC nebo vysílání softwaru RF video+audio.

Zde zobrazený snímek obrazovky byl vytvořen pomocí softwarového ovladače virtuálního zobrazení, který odesílá data o pixelech přes sériové propojení do počítače.

Softwarové knihovny jsou k dispozici pro implementaci několika I/O zařízení od jednoduchých UART a sériových I/O rozhraní, jako jsou SPI, I²C a PS/2 kompatibilní sériová rozhraní myši a klávesnice, ovladače motorů pro robotické systémy, MIDI rozhraní a LCD ovladače.

Vyhrazená jádra místo přerušení

Filozofie vrtule je taková, že vícejádrová architektura v reálném čase neguje potřebu vyhrazeného hardwaru pro přerušení a podporu při montáži. V tradiční architektuře CPU jsou externí přerušovací linky přiváděny do řadiče přerušení na čipu a jsou obsluhovány jednou nebo více rutinami služby přerušení . Dojde -li k přerušení, řadič přerušení pozastaví normální zpracování CPU a uloží interní stav (obvykle do zásobníku), poté vektory do určené rutiny služby přerušení. Po zpracování přerušení servisní rutina provede instrukci návratu z přerušení, která obnoví vnitřní stav a obnoví zpracování CPU.

Pro rychlé zpracování externího signálu na vrtuli je jako vstup nakonfigurován kterýkoli z 32 I/O linek. Převodník je pak nakonfigurován tak, aby čekal na přechod (kladný nebo záporný okraj) na tomto vstupu pomocí jednoho ze dvou čítačových obvodů, které jsou k dispozici pro každé ozubené kolo. Při čekání na signál zub pracuje v režimu nízké spotřeby, v podstatě spí. Rozšířením této techniky lze nastavit vrtuli tak, aby reagovala na osm nezávislých přerušovacích linek s v podstatě nulovým zpožděním zpracování. Alternativně lze pro signalizaci přerušení použít jeden řádek a poté lze načíst další vstupní řádky pro určení povahy události. Kód běžící v ostatních jádrech není ovlivněn ozubeným kolem zpracování přerušení. Na rozdíl od tradiční víceúlohové architektury přerušení s jedním procesorem zůstává načasování odezvy signálu předvídatelné a použití termínu přerušení v tomto kontextu může způsobit zmatek, protože tuto funkci lze vhodněji považovat za dotazování s nulovým časem smyčky.

Zaváděcí mechanismus

Při zapnutí, detekci Brownoutu , resetování softwaru nebo resetování externího hardwaru vrtule načte rutinu spouštění strojového kódu z interní paměti ROM do RAM svého prvního (primárního) ozubeného kola a spustí ji. Tento kód emuluje je I²C rozhraní v softwaru, dočasně pomocí dvou I / O piny pro potřebné sériové hodiny a datových signálů do uživatelského kódu zátěže z externí I 2 C EEPROM .

Současně emuluje sériový port pomocí dvou dalších I/O pinů, které lze použít k nahrání softwaru přímo do RAM (a volitelně do externí EEPROM). Pokud vrtule nevidí žádné příkazy ze sériového portu, načte uživatelský program (jehož vstupní kód musí být zapsán ve Spinu, jak je popsáno výše) ze sériové EEPROM do hlavní 32 KB RAM. Poté načte Spin interpreter z vestavěné paměti ROM do vyhrazené paměti RAM prvního ozubeného kola a přepíše většinu zavaděče.

Bez ohledu na to, jak je načten uživatelský program, spuštění začíná interpretací počátečního uživatelského bajtkódu s překladačem Spin spuštěným v primárním ozubeném kole. Po spuštění tohoto počátečního kódu Spin může aplikace zapnout jakékoli nepoužívané ozubené kolo, aby spustilo nové vlákno a/nebo spustilo rutiny jazyka sestavení .

Externí trvalá paměť

Vrtule se spouští z externí sériové EEPROM ; jakmile se zaváděcí sekvence dokončí, lze k tomuto zařízení přistupovat jako k externímu perifernímu zařízení.

Jiné jazykové implementace

Kromě Spinu a nízkoúrovňového assembleru Propeller je do něj přenesena řada dalších jazyků.

Kompilátor C.

Parallax podporuje Propeller-GCC, což je port kompilátoru GNU Compiler Collection (GCC) pro programovací jazyky C a C ++ , pro Propeller (větev release_1_0). Kompilátor C a knihovna C jsou kompatibilní s ANSI C. Kompilátor C ++ je kompatibilní s ANSI-C99. Plné C ++ je podporováno s externí pamětí. Program SimpleIDE poskytuje uživatelům jednoduchý způsob, jak psát programy, aniž by bylo nutné makefiles . V roce 2013 začlenila Parallax do řady výukových programů Propeller-C Learn Propeller-GCC a Simple Libraries. Propeller-GCC je aktivně udržován. Propeller-GCC a SimpleIDE jsou oficiálně podporované softwarové produkty Parallax.

Kompilátor ImageCraft ICCV7 pro Propeller C byl označen jako stav konce životnosti.

K dispozici je bezplatný překladač ANSI C s názvem Catalina. Je založen na LCC . Catalina je aktivně udržována.

ZÁKLADNÍ kompilátor

PropBASIC je ZÁKLADNÍ programovací jazyk pro mikrokontrolér Parallax Propeller. PropBASIC vyžaduje Brad's Spin Tool (BST), multiplatformní sadu nástrojů pro vývoj s Parallax Propeller. Od srpna 2015 běží BST na i386-linux-gtk2, PowerPC-darwin ( Mac OS X 10.4 až 10.6), i386-darwin (Mac OS X 10.4 až 10.6) a i386-Win32 ( Windows 95Windows 7 ).

Forth on the Propeller

Pro Propeller je k dispozici nejméně šest různých verzí Forthu , komerčního i open-source softwaru .

PropForth

Bezplatná verze, která se těší rozsáhlému vývoji a komunitní podpoře, je PropForth. Je přizpůsoben architektuře rekvizit a nutně se odchyluje od jakéhokoli obecného standardu týkajícího se architektonické jedinečnosti, který je v souladu s konceptem Forth.

Kromě tlumočníka Forth poskytuje PropForth mnoho funkcí, které využívají schopnosti čipu. Propojený I/O odkazuje na způsob přidružení proudu k procesu, což umožňuje, aby se jeden proces za běhu propojil s dalším, což je pro aplikaci transparentní. To může v mnoha případech snížit nebo eliminovat potřebu ladění hardwaru nebo rozhraní JTAG ( Joint Test Action Group ). Multi-Channel Synchronous Serial (MCS) označuje synchronní sériovou komunikaci mezi prop čipy. 96bitové pakety jsou odesílány nepřetržitě mezi dvěma ozubenými koly, výsledkem je, že aplikace vidí další zdroje (+6 ozubených kol pro každý přidaný prop čip) s malým nebo žádným dopadem na propustnost dobře konstruované aplikace.

LogicAnalyzer odkazuje na rozšiřující balíček, který implementuje analyzátor softwarové logiky. EEPROMfilesystem a SDfilesystem jsou rozšíření, která implementují základní úložiště pomocí EEPROM a SD flash.

PagedAssembler odkazuje na balíček optimalizací, které umožňují za běhu vyměnit (a přepsat) rutiny assembleru, což umožňuje prakticky neomezenou velikost aplikace. Spuštění skriptu umožňuje načítání rozšíření za běhu, což umožňuje zdroji programu až do velikosti paměťového média.

Vrtule a Java

Vyvíjí se úsilí o spuštění virtuálního stroje Java (JVM) na Propeller. Vyvíjí se překladač, ladicí program a emulátor.

Kompilátor a běhový modul Pascal

Velká podmnožina Pascalu je implementována překladačem a překladačem založeným na systému P4 stroje stroje P-Code .

Grafické programování

Snímek obrazovky editoru žebříčku PICoPLC

Programovatelný logický řadič PICo (PLC, PICoPLC) podporuje výstup do procesoru Propeller. Program je vytvořen v editoru logiky žebříčku GUI a výsledný kód je emitován jako zdroj Spin. PICoPLC také podporuje P8X32 s funkcí create-simulate-run. Žádná omezení cílového hardwaru, protože frekvence oscilátoru a IO piny jsou volně konfigurovatelné v editoru žebříku. Web vývojáře PICoPLC ( [2] ).

Budoucí verze

V roce 2014 společnost Parallax staví novou vrtuli s ozubenými koly, z nichž každá poběží na přibližně 200 MIPS, zatímco současná čepel vrtule běží přibližně na 20 MIPS. Vylepšený výkon by byl důsledkem zvýšení maximální rychlosti hodin na 200 MHz (z 80 MHz) a architektury, která pipeluje instrukce, přičemž v průměru provede téměř jednu instrukci za hodinový cyklus (přibližně desetinásobné zvýšení).

Reference

externí odkazy