Skip to main content

Kártyaszámítógép extrával – 1. rész

Megjelent: 2018. április 09.

EBV abra2A kártyaszámítógépek korát éljük; az érdeklődő diákoktól a profikig sokan ismerik és használják a Raspberry PI- vagy az Arduino-család „apróságait”. Az EBV magyarországi irodája révén egy olyan eszközzel – valójában fejlesztőrendszerrel – ismerkedhettem meg, amely a kategória legjobbjaival is felveszi a versenyt, és még egy – ebben a műfajban eddig egyedülálló – többletszolgáltatással jelzi a további fejlődés lehetséges irányát.

 

 

A nagy alkatrészdisztribútor vállalatok ma már nem egyszerűen csak részei annak a kereskedelmi láncnak, amely a gyártótól a végfelhasználóig juttatja az elektronikai alkatrészeket. Felismerték, hogy a felhasználók egyre inkább számítanak arra a technikai támogatásra is, amely egy-egy új alkalmazási terület birtokba vételéhez szükséges. Erre megvan minden lehetőség, hiszen a disztribútor komoly „rálátással” rendelkezik a piac újdonságaira, és módjában áll portfólióját úgy összeállítani, hogy a fejlesztőknek minden szükséges „hozzávalót” a rendelkezésére bocsáthasson az alkatrésztől a szoftverig, a fejlesztőeszközöktől a hatékony támogatásig. Ennek egyik újabb keletű összetevői azok az internetes mérnöki közösségek, amelyeket a közös érdeklődés köt össze. Így a támogatás hatékonyságát a tapasztalatok, ötletek, „nyílt forrású” megoldások megosztása fokozza. Ilyen közösség (www.zedboard.org) szerveződött az AVNET nemzetközi alkatrész-disztribútor szárnya alatt is, amely – a megszokottól eltérően – eléggé szűk területre fókuszál: egy meglehetősen „tudásigényes” alkatrészcsalád, a Xilinx Zynq®-7000 All Programmable SoC („minden ízében programozható” rendszercsip) felhasználóinak nyújt – a közösségi média eszközeit is felhasználva – segítséget. Ez dokumentációkkal, referenciatervekkel, oktatóanyagokkal járul hozzá néhány Zynq-alapú fejlesztőkészlet (pl. ZedBoard™, MicroZed™, Microzed™ SBC, Zynq®-7000 All Programmable SoC Mini-Module Plus és a Zynq®-7000 All Programmable SoC Mini-ITX stb.) tudásanyagának feltárásához. Ezek ideális kiindulópontok a termék megismeréséhez és az ötletek végtermékké alakításának folyamatához.

 

1. ábra A MiniZed™ starter kit tartalma

 

A termék

Az AVNET kínálatát Magyarországon az EBV Elektronik képviseli, amelynek magyarországi irodája bocsátotta rendelkezésemre a Zynq®-7000-alapú Zed fejlesztőeszköz-család egy tagja, a MiniZed™ egy példányát, amelyet tervezői a „belépő szintű” Zynq-fejlesztők olcsó prototípusrendszerének szánták, és amely lényegében egy egymagos Zynq®-7Z007S rendszercsip köré épül, memóriákkal, gazdag perifériaválasztékkal, kártyára épített szenzorokkal és külső perifériacsatlakoztatási lehetőségekkel.

 

  EBV abra2

2. ábra A MiniZed™ kártya nézeti képe


„Érzékszervi vizsgálat”
A készlet egy „szerény, de takaros” papírdobozban érkezik (1. ábra), amelynek már a mérete is sejteni engedi, hogy magán a fejlesztőkártyán kívül sok tartozékot nem tartalmazhat. És valóban, a lehegesztett antisztatikus fóliatasakba csomagolt kártyán kívül egy USB-A – mikro-B kábel, két rövidzárdugó (jumper), egy többnyelvű biztonsági tájékoztató, egy – tenyérnyinél alig nagyobb – útmutató az első lépésekről, és egy, a Xilinx szoftverfejlesztő készletének használatára felhatalmazó kódot tartalmazó utalvány alkotja a teljes készletet.
A fejlesztőkártya hordozója egy 71,5 × 76,5 mm-es, sűrűn „benépesített” NyÁK-lap (2. ábra), amely egy 30-szoros nagyítású zsebmikroszkóppal megvizsgálva 6 rétegűnek tűnik. Az alsó oldalon csak a mákszemnyi passzív alkatrészek sokaságát, és a négy sarkán elhelyezett, csúszásgátló szilikongumi-tappancsot találjuk, amely a tervező gondosságát dícséri éppúgy, mint a példásan, informatívan feliratozott NyÁK: a mérőpontok felhasználóbarát elnevezése és helyenként még a névleges feszültségérték is közvetlenül olvasható. A csatlakozók mindig sokat mondanak: egy USB-A és két mikro-AB USB anyacsatlakozót, egy Arduino shieldek csatlakoztatására alkalmas csatlakozókombinációt és két PMOD-csatlakozót találunk rajta. Két nyomógomb, egy kétpozíciós dip-kapcsoló és két kétszínű LED áll a kezelő rendelkezésére. A panelen való tájékozódást próbáljuk segíteni a 3. ábrával.

Egy kissé alaposabban is érdemes áttekinteni a hardvert:

  • Processzor: Zynq egymagos SoC, XC7Z007S-1CLG225C (gyártó: Xilinx)

  • Memória: 512MB DDR3L, 128Mb QSPI flash, 8GB Embedded MultiMedia Card (eMMC) (gyártó: Micron)

  • USB alapú JTAG és hibakereső UART interfész

  • „Type 1DX” LBEE5KL1DX vezetékmentes interfészmodul (gyártó: Murata)

    • Wi-Fi (802.11b/g /n)

    • Bluetooth 4.1 plus EDR (Enhanced Data Rate) és

    • BLE (Bluetooth Low Energy)

  • USB 2.0 hosztinterfész

  • Arduino bővítőpanel (shield) csatlakozó

  • Kettős Pmod-interfészcsatlakozó

  • DA9062 energiamenedzsment áramkör programozható GPIO-val (gyártó: Dialog) 

  • MP34DT05 MEMS mikrofon (gyártó: ST Microelectronics)

  • LIS2DS12 gyorsulásmérő és hőmérsékletszenzor (gyártó: ST Microelectronics)

  • 2 db felhasználói nyomógomb

  • kétpozíciós dip-kapcsoló 

  • 2 db kétszínű led

A felsoroltak közötti összefüggésekre a 4. ábrán látható tömbvázlat világít rá.

 

EBV abra3

3. ábra A MiniZed™ kártya „térképe”

  

Néhány szó a processzorról

A felületes szemlélőnek ez a kártya sem több egy Arduino-kompatibilis alapkártyánál. A különbség a processzortokban van elrejtve. Ugyanis a Xilinx Zynq®-7000 All Programmable SoC (AP SoC) egy, a csip hagyományos, szoftvervezérelt ARM Cortex-A9 processzormagon kívül egy 28 nm-es, Artix-7 alapú FPGA-t is tartalmaz, amely a programozhatóság egy másik lehetőségét kínálja: számos előregyártott logikai alapelemből az FPGA-programozás módszerével lehet a felhasználó által definiált digitális célhardvert létrehozni.
Akik eddig FPGA-technológiával még nem foglalkoztak, elmondjuk, hogy a programozás itt eltérő értelmezésű ahhoz képest, mint amit a hagyományos számítógépszoftvereknél megszoktunk. Az utóbbi esetben ugyanis a program „fut”, azaz az egymás után elővett utasítások egyenként, időben egymás után hajtódnak végre. Az FPGA programozása azonban lényegében nem más, mint egy „huzalozási utasítás”, amely azt írja le, hogy az FPGA logikai alapelemeit hogyan kell összekapcsolni ahhoz, hogy egy, a felhasználó által előírt logikai funkciót megvalósító céláramkör jöjjön létre. Miután ezt a huzalozási utasítást az FPGA-ba töltöttük, nincs vele további „szoftver-jellegű” teendőnk, a logikai hálózat „magára hagyva” is ugyanúgy „végzi a dolgát”, mint egy kapuáramkörökből és tárolóelemekből, esetenként még „kevert jelű” (analóg és digitális elven működő részeket is tartalmazó) elektronikus egységekből, NyÁK-lapon összehuzalozott célhardver. A különbség annyi, hogy az FPGA-ban megvalósuló „huzalozás” elektronikus kapcsolók közbeiktatásával épül fel, így az ily módon kialakított célhardver nem „végleges”, hanem a huzalozási program megváltoztatásával és betöltésével újra és újra megváltoztatható. Itt jegyezzük meg, hogy a tervező nem csak a belső huzalozást, hanem az FPGA-t tartalmazó IC-tok – bemeneti érzékelő- és kimeneti meghajtóáramkörökkel ellátott – csatlakozópontjaival való összeköttetéseket is előírhatja. Egy korszerű FPGA-ban annyi áramköri alapelem, és olyan kifinomult huzalozási rendszer van beépítve, hogy azzal az egyszerű kombinációs vagy sorrendi (szekvenciális) hálózatokon[1] kívül (ez utóbbiakat emlegetjük gyakran „állapotgép” néven) rendkívül összetett funkciók, akár teljes mikroprocesszorok (MPU-k) is megvalósíthatók (ezeket nevezzük „szoft processzornak”), de olyan „adatfolyam-kezelő” céleszközök is, amelyek például egy analóg jelnek digitalizált adatfolyam formájában rendelkezésre álló változatán egy valós idejű jeltranszformációt, például spektrumanalízist, korrelációszámítást, összetett szabályozási (PID) algoritmusokat stb. képesek végrehajtani. Ezek révén a rendszer processzora tehermentesíthető, és a megoldás sokszor egyszerűbb, a válaszidő pedig rövidebb, mintha a teljes adott feladatot szekvenciális végrehajtású, hagyományos processzorprogrammá konvertálnánk.

Arra a kérdésre, hogy melyik megoldás a kedvezőbb, nincs egyértelmű válasz. A feladat jellege dönti el, hogy melyiket érdemes választani – sőt, a „leghelyesebb” válasz (ha ilyen egyáltalán létezik), hogy a feladatot érdemes úgy „dekomponálni”, részeire hasítani, hogy világosan elkülönüljenek az MPU-val kevezőbben végrehajtható feladatok azoktól, amelyeket inkább „huzalozott elektronikával”, FPGA-ban megvalósítva érdemes realizálni. 

Azokat, akiknek még nincs FPGA-tapasztalatuk, visszariaszthatja az a – valóban nem egyszerű – kihívás, hogyan lehet például kapuáramkörökből vagy más elemi logikai cellákból – legyenek bár akármilyen sokan – az átlagfelhasználó által követhetetlenül bonyolult funkciókat – mondjuk egy CPU-t – „összemadzagolni”. A válasz itt is a modularitás: számtalan olyan kész „huzalozási utasítás” érhető el a piacon, amelyeket kipróbált „építőkockákként” használhat az a felhasználó is, aki azok működését részletesen nem feltétlenül ismeri. Ezeket a „virtuális alkatrészeket” – amelyeket akár több példányban is beépíthet a végfelhasználó a maga „huzalozási tervébe” – gyakran nevezik IP-nek (Intellectual Property – szellemi tulajdon), utalva arra, hogy ezek (egy része) – a beléjük fektetett szellemi erőforrások mennyiségét és minőségét tekintve érthető módon – térítés (licencdíj) ellenében használhatók fel.
Itt jegyezzük meg, hogy az FPGA megvalósítási módjaiban jelentős eltérések vannak mind a különböző gyártók, mind pedig egyetlen gyártó különféle termékcsaládjai között. Létezik például egy egészen „fundamentalista” megközelítés, a „kapuk tengere” (Sea-of-Gates, Gate Array), amelyben az elemi áramköri elem a logikai alapkapu (NAND vagy NOR), amelyekből elvileg akár az „iskolás” logikai áramkörtervezési módszerekkel is létrehozható a kívánt logikai hálózat (a gyakorlatban azonban itt is a számítógéppel támogatott tervezési módszereknek van realitása). A logikai tervező azonban ritkán „esik neki” ész nélkül a logikai függvények minimalizálásának: a feladat dekompozíciója során gyakran választ külön olyan logikai blokkokat (például memóriákat), amelyeket gazdaságosabb és hatékonyabb – a kapuáramkörököz hasonlóan – eleve memóriaként megtervezett áramköri részletekkel megvalósítani. A „vegytiszta” Sea-of-Gates filozófia ezért ma már szinte nem is létezik. Más FPGA-modelleknél a „logikai alapelem” a „konfigurálható logikai blokk” (Configurable Logic Block – CLB), amelynél már a kombinációs és tárolóelemeket tartalmazó logikai alapelem funkciója is programozható, és végül létezik olyan megközelítés is, amelyben gyakran használt, összetett, önálló jel- vagy adatfeldolgozásra is képes részegységek (például DSP-modulok, aritmetikai egységek stb.) állnak a tervező rendelkezésére. A Sea-of-Gates architektúra adja a legnagyobb tervezési szabadságot, az utóbbi, funkcionális modulokból „összehuzalozó” tervezés pedig a komplex feladatok aránylag leggyorsabb és leghatékonyabb megoldását. Ezen a helyen nincs lehetőség az architektúrák mélyebb elemzésére, ezért minden, az FPGA-technológiában magát „kezdőnek” érző tervezőnek ajánlom, hogy amikor egy adott feladathoz FPGA-típust választ, mindenek előtt ismerkedjen meg annak logikai felépítésével, mivel ez alapvetően meghatározza a tervezés módját, és jelentősek lehetnek az eltérések a tekintetben, hogy mennyire „illeszkedik” az adott FPGA a tervező gondolkodásmódjához és felkészültségéhez.

 

EBV abra4

4. ábra A MiniZed™ kártya tömbvázlata


Amint láttuk, a fejlesztő nem ritkán juthat arra az elhatározásra, hogy a feladatát hagyományos mikroprocesszorral és FPGA-val végrehajtható részekre bontsa fel. Ez a szempont (is) vezethette a Zynq®-7000 sorozat megalkotóit, amikor egyetlen rendszercsipben egyesítettek megszokott, ARM Cortex-A9 rendszerű processzormagokat (ez egy erős „középkategóriás” processzormag, amely számos időkritikus feladat megoldására is jól használható, és ebből 1 db van a MiniZed™ készlet rendszer-csipjében), és egy FPGA-t egyesít egy tokban. Az előbbiek alapján már van módunk arra is, hogy a MiniZed™ kártya processzorával egybeépített FPGA jellegéről is fogalmat alkothassunk. Ez a Xilinx egyik FPGA-típuscsaládja, az Artix-7 tulajdonságait örökli:

  • programozható logikai cellák száma (kb): 23 ezer,

  • programozható kombinációs funkciók (Look-Up-Table – LUT) száma: 14 400,

  • elemi tárolóelemek (flip-flopok) száma: 28 800,

  • RAM (50 db 36 kb-os blokkokba szervezve, összesen): 1,8 Mb,

  • DSP modulok (18 × 25-ös szorzó-összeadó egységek) száma: 66,

  • AMS (kevert jelű) egység (2 × 12 bites AD-konverter, max 17 differenciális bemenet): 2,

  • biztonsági funkciók: AES és SHA-256 kódolású védelem a programbetöltés (boot) és a logikai konfiguráció illetéktelen betöltésének megakadályozására.

 

EBV abra5

5. ábra A Zynq®-7000S rendszercsip tömbvázlata. Az ábrán sárga színnel jelölt mező képviseli az FPGA-funkciókat.

 

Most azonban fontos részlethez érkeztünk: az ARM Cortex processzor és az FPGA egy tokban egyesítése nem két teljesen eltérő funkció (mondjuk egy sebészkés és egy csákány) „egybecsomagolása”. A két funkcionális egység ugyanis egymással határozott és „egyirányú”, hierarchikus, master-slave logikai kapcsolatban van: az alkatrész indítása mindig az ARM-processzormag indulásával kezdődik, és annak a programja „húzza fel” az FPGA-t a kettőjük közös feladatához szükséges konfigurációra. Más szavakkal az FPGA mintegy az ARM mikrovezérlő perifériájaként működik, amint az az 5. ábrán látható tömbvázlatból is kiderül. A két részegység nagy sebességű, kétirányú (AXI) adatcsatornákon tart kapcsolatot, amelyből kétféle megoldás létezik: a normál sebességű („általános célú”) AXI-portokon keresztül kommunikál a rendszercsip perifériaegységeivel és a processzor regisztereivel, míg nagy sebességű AXI-portok állnak rendelkezésre a programozható logika (PL) és a rendszermemória közötti, a processzort megkerülő adatátviteli feladatok megoldására.
Az FPGA-szekció a külvilággal kétféle I/O-csoporton keresztül kommunikál: egyrészt az általános célú, digitális I/O, valamint az analóg bemenetként működő AD-konverter-egység számára áll rendelkezésre egy „többnormás” (3,3 V-os, illetve nagy sebességű, 1,8 V-os) I/O-csatlakozókészlet, másrészt a beépített PCIe® Gen2 típusú, nagy sebességű rendszerinterfész kiszolgálására tartalmaz soros adó/vevő portokat, amelyek döntően a gyors, közvetlen memóriahozzáférésnél használhatók ki.

 

A sorozat következő részében „beindítjuk” a kártyát és áttekintjük a szoftvermunka alapjait.

 

Szerző: Tóth Ferenc

 

A 2., 4., és 5. ábrák forrása: www.minized.org

 

Az AVNET MiniZed fejlesztőkészletét az EBV Elektronik magyarországi irodája bocsátotta a rendelkezésemre.



EBV Elektronik Kft.
1117 Budapest, Budafoki út 91-93.
Tel.: +36 1 436 7220
E-mail: Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát.

www.ebv.com

 

 

[1]A technikatörténet érdekes vargabetűje, hogy a digitális logikai áramkörök fejlődése éppen a kombinációs és szekvenciális hálózatoktól indult. Az ilyen rendszerek sajátos tervezési nehézségei, és a huzalozott logika „vele született” merev huzalozása adtak okot arra, hogy – ahol ezt a feladat időzítési követelményei lehetővé tették – a tervezők szívesebben alakították át mikroprocesszorokra „hangszerelt”, szekvenciális programokká még a tisztán kombinációs típusú feladatokat is. Erre a mikroprocesszorok könnyen változtatható, rugalmas programozhatóságának, funkcióinak, választékának és mindenek előtt költséghatékonyságának ugrásszerű növekedése is bátorította a fejlesztőket. Az FPGA tehát tulajdonképpen „visszatérés a gyökerekhez”, mivel a célhardverek kétségtelen előnyeinek megtartásával és hátrányaik (módosíthatatlan kivitelük, aránylag alacsony integrációs mértékük) elhagyásával, új műszaki alapokon újra versenyképes megoldássá fejlődött. – A szerk. megj.