Stop ARMing, lets RISC V!

RISC-V není open-source procesor. Je to něco, co vznik open-source procesorů umožňuje.

X86 je prehistorická, monopolizovaná (tedy spíš duopolizovaná), CISCovitá, neohebná architektura se spoustou instrukčního balastu. O pár let mladší ARM ja na tom v některých ohledech lépe, nicméně i v instukčních sadách ARMu lze nalézt některé historické či CISCovitě zavánějící instrukce. Hlavním problémem je ale uzavřenost obou zmíněných, dnes všudypřítomných architektur. Jak ISA (architektura pro instrukční sadu), tak i konkrétní implementace na křemíku jsou pod kontrolou mateřských korporací. Třetí strany nemůžou svobodně vylepšovat implementaci (třeba opravit bezpečnostní chyby typu Spectre, Meltdown), ani přidávat do procesoru svá vlastní rozšíření. Nemůžou ani (legálně) vytvořit, publikovat a nasadit open-source implementaci x86 či ARM procesoru. Problém se již delší dobu snaží adresovat nově vznikající procesorové architektury s otevřenou specifikací. Takové architektury svobodně poskytují inktrukční sadu a specifikaci pro návrh konkrétní implementace procesoru. Kdokoliv si tedy může navrhnout vlastní procesor, případně vytvořit či použít open-source procesor. To vše bez nutnosti jakýhkoliv licenčních poplatků a bez rizika blokace technologie z politických důvodů. Architektur s otevřenou specifikací tu již bylo několik, ale žádná nezpůsobila v technologickém světě takové vlny jako právě nyní RISC-V. Za RISC-V se totiž postavilo hned několik desítek technologických firem, a to těch, které patří v současnosti mezi ty nejvýznamnější – Samsung, Google, Qualcomm, Microchip, NXP a další.

RISC-V

RISC-V je procesorová architektura s otevřenou specifikací postavená na principech redukované instrukční sady. Vznikla v roce 2010 na Kalifornské univerzitě v Berkeley, původně jen jako výukový prostředek pro interní použití univerzity. Zájem o dobře navrženou architekturu nezatíženou licenčními poplatky, ale rychle přerostl brány univerzity. V současnosti architekturu zastřešuje RISC-V Foundation.
Podobně jako ARM i RISC-V cílí na různé druhy využití – od malých mikrokontrolérů, přes CPU/SOC pro mobilní/desktopové operační systém, až po serverová CPU s podporou virtualizace. RISC-V pro tento účel specifikuje 4 módy: Uživatelský (U), Supervisor (S), Hypervisor (HS), Machine (M). Mikrokontrolér bude disponovat pouze módem M, desktopový procesor M + S + U, procesor s podporou virtualizace bude zahrnovat všechny 4 módy. Z technického hlediska RISC-V vyniká výbornou hustotou kódu (code density). Zde s přehledem překonává ARMv8, x86 i mnoho dalších konkurenčních architektur. Hustota kódu přitom hraje zásadní roli v lepším využití instrukční cache a tím i v celkové efektivitě procesoru. Nejzásadnějším rozdílem proti architekturám ARM je ale metoda licencování. RISC-V Foundation vydává RISC-V ISA (architekturu pro instrukční sadu) pod svobodnou, bezplatnou licencí. Kdokoliv tedy může vytvořit procesor postavený na této architektuře a svobodně rozšířit ISA o jakákoliv rozšíření (extensions). V světě ARMu tohle možné není a zákazník je omezený jen na rozšíření nabízená samotným ARMem. Nyní tedy můžou konečně vznikat svobodná open-source procesorová jádra. Můžou také vznikat procesory rozšířené výrobcem o nějrůznější specializované akcelerátory – DSP, kódování videa, neuronové sítě, apod. kde akcelerátor bude stále součástí ISA.

Základní podpora RISC-V byla přidána do Linux kernelu od verze 4.15 a čipy schopné Linux rozběhnout již existují nějakou dobu – viz SiFive U54-MC. Penetrace RISC-V do desktopového/mobilního světa ale ještě nejspíš nějakou dobu potrvá (pokud vím, tak doposud neexistuje RISC-V SoC s GPU na palubě). Ve světě malých mikrokontrolérů (pro které není nutné migrovat rozsáhlý softwarový stack a GPU netřeba) se zdá být situace o poznání živější. Někteří výrobci (např. SiFive) se zaměřují jen na prodej IP corů, nicméně reálné RISC-V mikrokontroléry lze zakoupit například z dílny fabless výrobce GigaDevice (distribuováno přes tmall.com) či Sipeed. Netuším jaký podíl z celkové ceny činí v případě ARMu licenční poplatky, ale ceny nového RISC-V silikonu jsou opravdu proklatě nízké. Například RISC-V MCU GD32VF103CBT6 lze koupit na cenu lehce přes jeden dolar. Ekvivalentně vybavený ARM Cortex-M3 MCU STM32F103VB zhruba za 5$ (při 100ks). Některé čipy překvapí cenou a některá zase výbavou. Příkladem takového křemíku je 64bitovový(!) mikrokontrolér Kendryte K210. Každý kdo realizuje strojové vidění v embedded prostředí, by měl při pohledu na K210 zbystřit.

Kendryte K210

Kendryte K210 je dvoujádrový, 64bitový RISC-V mikrokontrolér taktovaný na 400MHz (lze přetaktovat na 600MHz). Jádra využívají architekturu RV64GC, obsahují tedy rozšíření M, A ,F ,D a C. Mikrokontrolér dále zahrnuje jednotku pro akceleraci neuronových sítí (KPU), 8 kanálovou jednotku pro zpracování audio signálů (APU), jednotku pro akceleraci hashování SHA256 a šifrování AES. Na čipu je přítomno neuvěřitelných 8MB statické RAM paměti. Statická paměť je tradičně nejdražším artiklem na MCU a podobné velikosti se opravdu často nevidí. Dále tu nalezneme sadu konvenčních rozhraní – 4xUART, 4xSPI, 3xI2C, I2S, univerzální GPIO a jeden digitální videoport (DVP). 48 IO pinů je také vyhrazeno pro FPIOA, je tedy možné na ně volitelně namapovat některou z 255 vnitřních funkcí MCU.

Právě kombinace DVP portu (umožňujícího připojit modul kamery), SPI0 (umožňující připojit LCD display), vysokého výkonu a akcelerace konvolučních neuronových sítí dělá z mikrokontroléru vynikající obvod pro strojové vidění v embedded nasazení. Digitální videoport je 8bitové paralelní rozhraní umožňující přímé spojení s CMOS snímačem. Je tedy alternativou populárního DCMI rozhraní známého z procesorů STM32. Hlavním cílem je umožnit vyčítání jednotlivých pixelů ze sensoru, bez zatížení ALU jednotky – tedy přes DMA rovnou do RAM paměti. V případě Kendryte K210 tedy především do úseku paměti vyhrazeného pro akcelerátor neuronové sítě. Zamrzí jen omezené maximální rozlišení 640x480px.

Kendryte K210

Natrénované modely neuronových sítí je potřeba zkompilovat do formátu optimalizovaného pro KPU – tzv. kmodelu. K tomu účelu slouží kompilátor nncase. Vstupním modelem můžou být formáty TensorFlow Lite (.tflite), Caffe (.caffemodel), ONNX (.onnx). Výstupní soubor (.kmodel) lze již nahrát do flash paměti a (zvlášť při použití MicroPythonu) lze neuronovou síť nasadit pro zpracování obrazu za pár okamžiků a za použití pár řádek kódu.

Dostupné nástroje pro Kendryte K210

Pokud jde o prošlapaná řešení, existují zde dvě možnosti – vývoj nativně, v C/C++ nebo vývoj v MicroPythonu. Tedy klasická volba mezi jednoduchostí vývoje (MicroPython) a maximálně optimalizovaným kódem (C/C++).

C/C++
Kendryte IDE – speciálně upravené IDE postavené na VS Code. IDE umožňuje firmware pro MCU zkompilovat, linkovat a následně konvertovat do *.bin formátu. *.bin formát lze následně nahrát do K10 pomocí nástroje KFlash_GUI. Programování probíhá prostřednictvím sériové linky, resp. virtuální sériové linky v případě použití UART->USB převodníku. UART0 totiž slouží procesoru zároveň jako ISP rozhraní. Pro debugování je možné použít J-Link.

MicroPython
MaixPY IDE – speciálně upravené IDE postavené na MV IDE umožňující vývoj firmwaru v MicroPythonu. Před použitím je potřeba do procesoru nahrát podpůrný firmware s interpreterem pro MicroPython. Nahrání firmwaru lze provést opět pomocí KFlash_GUI. Fimware nabídne vývojáři také tzv. REPL rozhraní přístupné přes sériovou linku (USART0). Díky REPL lze zadávat MicroPython příkazy interaktivně pomocí terminálu.

Sipeed MAIX Bit

Sipeed MAIX Bit je vývojárský kit umožňují seznámení se s mikrokontrolérem Kendryte K210. Kromě samotného mikrokontroléru kit obsahuje také obvod EA3036 zajišťující napájení pro Kendryte K210 – 0.9V, 1.8V a 3.3V. Dále pak 128MBit flash paměť GD25LQ128D, MEMS mikrofon s I2S výtupem MSM261S4030H0, slot na SD kartu, konektory pro připojení FFC kabelů pro LCD displaye a modulu kamery. V neposlední řade je zde pak obvod CH552T, tedy dvojitý konvertor 2xUART -> USB ústící do USB-C konektoru na čele DPS. Jen jeden kanál obvodu CH552T je využit a ten je připojen na UART0 MCU Kendryte K210. Po připojení USB k počítači se Sipeed MAIX Bit přihlásí jako složené USB zařízení a vytvoří dvojici virtuálních sériových portů. CH552T má dotupné kernel ovladače v prostředí Linuxu, takže není třeba nic instalovat.

Sipeed Maix Bit
Kamerový modul stereo disparitního vidění pro Sipeed MAIX Bit – MaixBinocular

Stop ARMing, lets RISC-V?

Obecně tohle tvrzení platí spíš do budoucna. V rámci některých, specifických projektů se ale nasazení obvodů typu Kendryte K210 zdá jako bezkonkurenční řešení již nyní. Jeden takový projekt aktuálně řeším a právě nahrazení původního ARM MCU se stalo impulsem pro tento článek. Nabídka RISC-V MCU je ale stále zoufale omezená a distribuce komplikovaná. Mouser, Farnell či Digikey (a mnoho dalších populárních distributorů) nabízejí vývojářské kity pro různé RISC-V čipy, ale obvykle ne čip samotný. Pokud jde o SoC schopné spouštět plnohodnotné operační systémy, stále je zde problém s chybějícím GPU. Je tu tedy například Freedom U540 čip (HiFive Unleashed) s podporou Debianu. Je-li ale potřeba grafický výstup, GPU je nutné doplnit externě. To je oproti ARM SoC (ze kterého obvykle rovnou trčí HDMI linka) stále hodně nepohodlné řešení. Problematické jsou i chybějící standardní rozšíření pro SIMD a vektorové operace, které stále nemají uzavřenou specifikaci. Budoucnost platformy ale vypadá dobře a nezbývá než těšit se s jakým RISC-V křemíkem přijde Qualcomm, Microchip či ST.

Buďte první kdo přidá komentář

Napsat komentář

Vaše emailová adresa nebude nikde zveřejněna.


*