ZPU (mikroprocesor) - ZPU (microprocessor)

Sovětské / ruské protiletadlové dělo viz ZPU .

ZPU je mikroprocesor zásobník stroj navržený norské firmy Zylin AS spustit kód dohledu v elektronických systémech, které obsahují programovatelné hradlové pole (FPGA).

ZPU je relativně nedávný zásobníkový stroj s malým ekonomickým výklenkem a má rostoucí počet uživatelů a implementací. Byl navržen tak, aby vyžadoval velmi malé množství elektronické logiky, což zpřístupňuje více elektronické logiky pro jiné účely v FPGA. Aby to bylo snadno použitelné, má port GNU Compiler Collection . Díky tomu je mnohem jednodušší použít než CPU bez překladačů. Obětující rychlost výměnou za malou velikost, udržuje průběžné výsledky výpočtů v paměti, v zásobníku dolů, spíše než v registrech.

Společnost Zylin Corp. vytvořila ZPU jako open source v roce 2008.

Používání

Mnoho elektronických projektů zahrnuje elektronickou logiku v FPGA. Je zbytečné mít také mikroprocesor, takže je běžné přidat CPU do elektronické logiky v FPGA. Často by bylo možné použít menší a levnější FPGA, pokud by CPU využívalo méně zdrojů. Toto je přesná situace, kterou měla ZPU řešit.

ZPU je navržen tak, aby zvládl různé úkoly systému, které nejlépe zvládá software, například uživatelské rozhraní. ZPU je velmi pomalý, ale jeho malá velikost pomáhá umístit jakýkoli potřebný vysokorychlostní algoritmus do FPGA.

Dalším problémem je, že většina procesorů pro FPGA je uzavřeným zdrojem a je k dispozici pouze od konkrétního výrobce FPGA. Příležitostně musí mít projekt design, který může být široce distribuován, pro bezpečnostní kontroly, vzdělávací účely nebo z jiných důvodů. Licence na těchto proprietárních procesorech mohou těmto účelům zabránit. ZPU má otevřený zdroj.

Některé projekty potřebují kód, který musí být malý, ale běží na CPU, který má ze své podstaty větší kód. Alternativně může projekt těžit ze širokého výběru kódu, kompilátorů a ladicích nástrojů pro GNU Compiler Collection. V těchto případech lze napsat emulátor pro implementaci instrukční sady ZPU na cílovém CPU a kompilátory ZPU lze použít k vytvoření kódu. Výsledný systém je pomalý, ale zabalí kód do méně paměti než mnoho procesorů a umožní projektu používat širokou škálu kompilátorů a kódu.

Designové vlastnosti

ZPU byl navržen výslovně k minimalizaci množství elektronické logiky. Má minimální sadu instrukcí, ale může být zakódována pro GNU Compiler Collection. Také minimalizuje počet registrů, které musí být v FPGA, a minimalizuje počet klopných obvodů. Namísto registrů jsou průběžné výsledky uchovávány na zásobníku v paměti.

Má také malý kód, který šetří paměť. Pokyny pro skládací stroj nemusí obsahovat ID registrů, takže kód ZPU je menší než u ostatních procesorů RISC, které podle všeho potřebují jen asi 80% prostoru ARM Holdings Thumb2 . Například podepsané okamžité pomáhá ZPU ukládat 32bitovou hodnotu do maximálně 5 bajtů prostoru instrukcí a jen do jedné. Většina procesorů RISC vyžaduje alespoň osm bajtů.

Nakonec asi 2/3 jeho instrukcí lze emulovat pomocí firmwaru implementovaného pomocí dalších 1/3 „požadovaných“ instrukcí. I když je výsledek velmi pomalý, výsledný procesor může vyžadovat pouhých 446 vyhledávacích tabulek (míra složitosti FPGA, zhruba ekvivalentní 1700 elektronickým logickým branám).

ZPU má resetovací vektor, který se skládá z 32 bajtů kódového prostoru počínaje nulovou polohou. Má také jediné přerušení citlivé na hranu, s vektorem skládajícím se z 32 bytů kódového prostoru začínajícího na adrese 32. Vektory 2 až 63 mají každý 32 bytů prostoru, ale jsou rezervovány pro kód pro emulaci pokynů 33 až 63.

Základní ZPU má 32bitovou datovou cestu. ZPU má také variantu s 16bitovou datovou cestou, která šetří ještě více logiky.

Nástroje a zdroje

ZPU má dobře otestovaný port GNU Compiler Collection. Nadšenci a inženýři firmwaru přenesli ECos , FreeRTOS a μClinux . Alespoň jedna skupina nadšenců zkopírovala populární vývojové prostředí Arduina a přizpůsobila ho ZPU.

Nyní existuje několik modelů jádra ZPU. Kromě původních jader Zylin existují také jádra ZPUino a jádro ZPUFlex. Jádro Zylin je navrženo pro minimální stopu FPGA a zahrnuje 16bitovou verzi. ZPUino má praktická vylepšení rychlosti, může nahradit emulované instrukce hardwarem a je zabudován do rámce systém na čipu. ZPUFlex je navržen pro použití bloků externí paměti a může nahradit emulované instrukce hardwarem.

Akademické projekty zahrnují studie a vylepšení energetické účinnosti a studie spolehlivosti.

Aby se zlepšila rychlost, většina implementátorů implementovala emulované pokyny a přidala mezipaměť zásobníku. Kromě toho jeden implementátor řekl, že dvousložková architektura by umožňovala pipeline (tj. Zvýšení rychlosti na jednu instrukci za taktovací cyklus), ale to může také vyžadovat změny kompilátoru.

Jeden implementátor snížil spotřebu energie o 46% díky vyrovnávací paměti zásobníku a automatickému vložení hodinového hradlování. Spotřeba energie byla poté zhruba ekvivalentní malému jantarovému jádru open-source , které implementuje architekturu ARM v2a.

Části ZPU, kterým by nejvíce pomohla odolnost proti chybám, jsou adresní sběrnice, ukazatel zásobníku a čítač programu.

Sada instrukcí

„TOS“ je zkratka pro „Top Of Stack“. „NOS“ je zkratka výrazu „Next to the top Of Stack“.

Požadovaná sada instrukcí ZPU
název Binární Popis
BREAKPOINT 00000000 Zastavte CPU a / nebo přeskočte na debugger.
IM_x 1xxxxxxx Okamžitě odeslat nebo připojit podepsaný 7bitový protokol k TOS.
STORESP_x 010xxxxx Pop TOS a uložte jej do zásobníku s posunem od horní části.
LOADSP_x 011xxxxx Načtěte z hodnoty indexované v zásobníku a vložte ji do TOS.
EMULATE_x 001xxxxx Napodobte instrukci s kódem na vektoru x.
ADDSP_x 0001xxxx Načíst z hodnoty indexované v zásobníku a přidat hodnotu do TOS.
POPPC 00000100 Vyplňte adresu z TOS a uložte ji do počítače.
ZATÍŽENÍ 00001000 Vysuňte adresu a zatlačte načtenou hodnotu paměti na TOS.
OBCHOD 00001100 Uložte NOS do paměti, na kterou ukázal TOS. Pop oba.
PUSHSP 00000010 Zatlačte aktuální SP do TOS.
POPSP 00001101 Vyplňte TOS a uložte je do SP.
PŘIDAT 00000101 Celočíselné přidání TOS a NOS.
A 00000110 Bitové AND z TOS a NOS.
NEBO 00000111 Bitové NEBO TOS a NOS.
NE 00001001 Bitově NE z TOS.
FLIP 00001010 Obrátit pořadí bitů TOS.
NOP 00001011 Bez provozu. (Obvykle se používá pro zpožďovací smyčky nebo tabulky kódu.)

Kódové body 33 až 63 lze emulovat kódem ve vektorech 2 až 32: LOADH a STOREH (přístup k 16bitové paměti), LESSTHAN (srovnání 1 pro true, 0 pro false), LESSTHANOREQUAL, ULESSTHAN, ULESSTHANOREQUAL, SWAP (TOS s NOS), MULT, LSHIFTRIGHT, ASHIFTLEFT, ASHIFTRIGHT, CALL, EQ, NEQ, NEG, SUB, XOR, LOADB a STOREB (přístup k 8bitové paměti), DIV, MOD, EQBRANCH, NEQBRANCH, POPPCREL, CONFIG, PUSHPC, SYSCALL, PUSHSPADD, HALFMULT, CALLPCREL

Reference