Skip to main content

A memóriaprobléma megoldása GUI-alapú mikrovezérlő-alkalmazásoknál

Megjelent: 2018. december 06.

Microchip lidAzt a világtrendet, amelyhez az okostelefonok kényelmes, látványos, kézenfekvő és „öntanító” grafikus felhasználói felületei és alkalmazásai szoktatták hozzá a végfelhasználókat, a beágyazott elektronikai eszközöknek is érdemes követniük. Ha ezt a tervezők mikrovezérlő-bonyolultságú eszközökkel kívánják megvalósítani, gyakran ütköznek nehézségekbe a grafikus memória illesztésekor. A cikk ezeket a problémaforrásokat tekinti át, és olyan – magas fokon integrált – eszközökre hívja fel figyelmet, amelyekkel lényegesen egyszerűbb színvonalas grafikus megjelenítőket tervezni.

 

Számomra a beágyazott grafikus alkalmazások egyik legnehezebben megoldható funkciója a frame-buffer[1] céljára szolgáló memória. Ez az a memória, amelynek egyszerre kell nagy kapacitásúnak, gyorsnak és olcsónak lennie. Emiatt sajnos gyakran kényszerülünk kompromisszumokra, ha beágyazott elektronikai eszközökhöz kell memóriát tervezni. Ezek a kompromisszumok a legjobb esetben is kellemetlenül költséges megoldásokra vezetnek, amelyek felhajtják az árat és csökkentik az elérhető profitot. Rosszabb esetben akár arra is szükség lehet, hogy a tervezési feladatot szakértő vállalkozóhoz szervezzük ki, esetleg új, speciális gyakorlattal rendelkező munkatársat kell felvennünk azért, hogy sikeresen befejezhesse a tervezés feladatát. Ez a cikk azokat a megfontolásokat tekinti át, amelyek a mikrovezérlőkkel megvalósított, beágyazott grafikus alkalmazásokhoz szükséges nagy alkatrészsűrűségű és nagy teljesítményű memóriák kialakításával járnak, továbbá azt, hogyan lehet minimálisra csökkenteni, esetleg teljesen kiküszöbölni ezek kedvezőtlen hatásait.
A mikrovezérlők (MCU-k) beágyazott grafikus alkalmazásainak sok előnye van a hagyományos mikroprocesszorokkal (MPU-kkal) megvalósított megoldásokhoz képest. Míg egy MPU-architektúra esetén teljes mértékben elvárt egy bizonyos szintű grafikus felhasználói interfész (Graphical User Interface – GUI) megvalósítása, ezekhez hasonlóan számos beágyazott alkalmazás is képes vizuálisan vonzó megjelenéssel és hatékony GUI-val futni a kapcsolókkal vezérelt, többletköltségek árán kivitelezett és betanítást igénylő megoldások nélkül is. A szokásos mikrovezérlőkkel megoldott kivitel legnagyobb előnye talán az általuk elérhető magasabb fokú integráció. A tervezés során el kell döntenünk a kikapcsoláskor törlődő (SRAM) és a tartalmukat kikapcsolt állapotban is megőrző (flash) memóriák méretét, a processzormag órafrekvenciáját, ki kell választanunk a kommunikációs interfészeket, a szükséges be/kimeneti (I/O) portokat és analóg perifériákat. További döntést igényel a megfelelő alkatrészek kiválasztása, amelyekből gyakorlatilag végtelen széles a legtöbb beágyazott rendszer igényeinek megfelelő eszközök kínálata. Ha viszont a grafikus felhasználói interfésznek a beágyazott rendszerekhez illeszkedő egyszerűségű, kis helyfoglalású és olcsó kialakítása is követelmény, az MCU egyszerűsége ellenére is egyre bonyolultabbá válik a kívánt specifikációk megvalósítása. Ha ez az igény is jelentkezik, sok beágyazottrendszer-tervező „adja fel” a válasz keresését arra a kérdésre, hogyan tehetne alkalmassá egy mikrovezérlőt az igények kielégítésére, és választja inkább helyette a potenciálisan költségesebb és bonyolultabb váltást a mikroprocesszoros megoldásra.

 

1. megfontolás: hogyan hajtjuk meg a grafikai egységet?

A grafikus rendszerek tervezése során először azt kell megfontolnunk, hogyan fogjuk meghajtani a grafikus megjelenítőt. Általánosságban egy beágyazott grafikai egységnek háromféle funkciót kell ellátnia: a kép előállítását (renderelését), a grafikus egység meghajtását és a grafikus kép tárolását. A „renderelés” kifejezés arra utal, hogyan állítjuk elő és hogyan módosítjuk, manipuláljuk a képi információt. A „belépő szintű” rendszereknél erre a feladatra a mikrovezérlő központi egységét (CPU-ját) használjuk. A magasabb képességű, célorientált, grafikus mikrovezérlőkbe saját grafikus feldolgozóegységet (Graphics Processing Unit – GPU) építenek, amelyek a CPU-t tehermentesítik azzal, hogy képesek megoldani bizonyos renderelési funkciókat: egyenes vonalak generálását, négyszögek rajzolását és kitöltését, grafikus objektumok mozgatását vagy az általa lefedett háttérkép kezelését (overlay). A meghajtási funkció azt jelenti, hogyan jut el a képi információ a képernyőn való megjelenítésig. Ezt akár egy külső párhuzamos portról közvetlen memóriahozzáféréssel (Direct Memory Access – DMA), akár egy célotrientált grafikus vezérlővel is végre lehet hajtani. Ez utóbbi olyan további szolgáltatásokat is megvalósíthat, mint az overlay vagy a kép elforgatása, amelyekkel a végterméket előnyösebb tulajdonságokkal lehet felruházni. Végül pedig a tárolási funkció azt jelenti, hogy hol tároljuk azt a képi információt, amelyet a rendszer éppen megjelenít. A cikk hátralevő részében ez utóbbi funkcióra összpontosítunk.

 

2. megfontolás: hol tároljuk a GUI megjelenítéséhez szükséges képet?

A jelenlegi csúcskategóriás MCU-kba integrált statikus RAM memória (SRAM) felső határa 512 kbájt körül van. Ez elegendő lehet egy olyan egyszerű GUI meghajtására, amely csak egyetlen képkockányi frame-buffer memóriát igényel, vagy ha a GUI pixelenként csak 8 bitnyi információ tárolását igényli a kis színfelbontás miatt, vagy például kis képernyőméret miatt az alacsony geometriai felbontásigény teszi lehetővé a tárolást a korlátozott méretű SRAM-ban. A jelenlegi piaci trend azonban arra ösztönöz, hogy a végfelhasználó számára a beágyazott eszköz hasonló élményt biztosítson, mint amit az okostelefonján futó kedvenc alkalmazása kínál számára. Ráadásul a cégek arra is törekednek, hogy bármelyik GUI képes legyen hűen visszaadni a cég arculatát, amely a termék „önazonosságát” testesíti meg és a márkahűségnek is fontos hajtóereje. Egy „simán futó”, gazdag GUI több képkockányi frame-buffert, több képkocka egymásra rétegezését és nagyobb színmélységet is igényel. Ez utóbbi különösen igaz akkor, ha például az alkalmazás fotorealisztikus megjelenítést igényel, esetleg a márka arculata pontos színmegjelenítést követel meg.

 

Microchip cikk dec 1abra

1. ábra  Két megjelenítési példa és a hozzájuk rendelt memóriakapacitás

 

Az 1. ábra olyan GUI-alkalmazásokra mutat példát, amelyek számos ilyen képességnövelést igényelnek. A bal oldali példa egy nagy mértékben fotorealisztikus kép torzulását demonstrálja, ha annak futásidejű megjelenítésére csak 12 Mbájt flashmemória áll rendelkezésre. Egy másik alkalmazás, egy kávéfőző gép grafikus felhasználói interfésze kihasználja a kis méretű ikonokból adódó előnyöket, de ugyancsak szüksége van a többrétegű megjelenítésre és a GUI animációjára. Ennek futásidejű memóriaigénye kb. 3 Mbájt.

 

3. megfontolás: szükségünk van-e külső memóriára a GUI tárolásához?

Ne feledjük: a tipikus felsőkategóriás MCU-kba integrált SRAM nagyjából 512 kbájt kapacitású. Világosan látható, hogy a bemutatott két alkalmazás a piacon kapható majd minden mikrovezérlő beépített, nagy sebességű memóriájának terjedelmét meghaladó igényt támaszt. Ez az MCU-n kívüli további memória beépítését teszi szükségessé. Az ilyen tárolóalkatrészeknek nagy kapacitásúaknak, nagy teljesítőképességűeknek és széles körben elérhetőknek kell lenniük. A grafikus MCU-alkalmazásokhoz szükséges külső memória megvalósításának egyik lehetséges megoldása az aszinkron SRAM-ok beépítése. A külső SRAM-mal elérhető tárolóbővítéshez szükséges alkatrészek nagyjából 8 Mbájt kapacitásúak, és aránylag egyszerűen betervezhetők, mivel a címvezetékeik nem multiplexeltek és a lábkiosztásuk is jól illeszkedik sok mikrovezérlő párhuzamos portjához. A külső SRAM-ok beépítésével kompromisszumot vállalunk az alkatrészsűrűség tekintetében (a 8 Mbájt nagy, de nem elég nagy számos grafikus alkalmazás számára), és az áruk sem elég alacsony (az online disztribútoroknál elérhető „egydarabos” ár gyakran meghaladja magának az MCU-nak az árát), és a NyÁK-lapon is jelentős helyigénnyel kell számolnunk.
Számos – a mai piacon elérherő – mikrovezérlőben SDRAM-interfészt (Synchronous Dynamic Random Access Memory) is megvalósítottak, és az SDRAM az MCU grafikus tárolójaként is felhasználható. Az ilyen külső memóriák ár/teljesítőképesség optimuma 8…16 Mbájt körül van. Az SDRAM-okat aránylag könnyű beszerezni és messze költséghatékonyabbak a külső SRAM-oknál. Amint arra már korábban utaltunk, a 8 Mbájt tekinthető az alsó határnak, azzal, hogy bizonyos GUI-alkalmazások igénye (lásd a fotorealisztikus megjelenítés torzulását mutató ábrát) meg is haladja ezt a határt. Az SDRAM-ok használatánál viszont a nyomtatott áramköri lap tervezésén is el kell gondolkoznunk. Az olyan buszoknál, amelyek sebessége eléri a 120 MHz-es busz-órafrekvenciát, speciális tervezési követelményeket kell érvényesítenünk. Például bizonyos alkalmazásoknál javasolt, hogy az SDRAM-okkal kapcsolatos huzalozást (legalább) hat rétegű NyÁK-kal valósítsák meg. Ez azt jelenti, hogy a nagy teljesítőképességű külső memória legalább négy réteggel növelheti meg egy tipikus beágyazott alkalmazás NyÁK-lapjának rétegszámát, ami dollárokkal drágíthatja meg a teljes alkalmazás anyagigényét. Maga a teljesítőképesség is probléma lehet az SDRAM-ok alkalmazásánál.
Egy tipikus, 100 MHz-es, 16 bites busznál az elméletileg elérhető legnagyobb adatsebesség 200 Mbájt/s. Egy 800 × 380 képpont felbontású, 60 Hz-es képfrissítési frekvenciájú és 16 bit/pixel színmélységű megjelenítő 46 Mbájt/s adatsávszélességet igényel. Ha viszont a CPU vagy egy opcionális grafikai feldolgozó csip képmanipulációkat végez, esetleg több rétegből (overlay) állítja össze a végleges képet, amely ma már rendszeressé kezd válni a beágyazott, grafikus mikrovezérlőknél, a követelmény eléri vagy meghaladja az SDRAM-alapú tárolórendszer képességeit. Más szavakkal: az SDRAM teljesítőképessége korlátozó tényezővé válhat néhány magasabb igényű grafikus alkalmazásnál.Emlékszünk a korábban említett trendekre? A végfelhasználó minden elektronikus eszközétől ugyanazt a megjelenítési szintet várja el, amit az okostelefonján és az azon futó kedvenc alkalmazásain megszokott. Ezért aztán a teljesítőképesség növelésére irányuló nyomás is fokozódik. Így tehát nagyobb teljesítményű és nagyobb alkatrészsűrűségű technológiára van szükség.

 

MCA740 Eyecatcher

 

4. megfontolás: lehetséges-e egyáltalán a GUI-alkalmazásokat belső memóriával megoldani?

Utolsóként a DDR2 SDRAM technológiát vizsgáljuk meg. Ez a még az SDRAM-mal elérhetőnél is nagyobb alkatrészsűrűségű (akár 128 Mbájt) technológia előnyét kínálja a fejlesztőnek. A másik előny, amit a DDDR2 SDRAM-tól várhatunk, az a teljesítőképesség. A DDR2 memóriainterfész órajel-frekvenciája legalább kétszerese az SDRAM-énak. Ezt maga a DDR rövidítés (Double Data Rate – kétszeres adatsebesség) is kifejezi, ami azt jelenti, hogy a memóriába írás vagy az onnan kiolvasás minden óraciklusban kétszer történik meg. Az eredmény egy olyan tárolótechnológia, ami legalább négyszer gyorsabb a piacon ma elérhető SDRAM-oknál.
A DDR2 memóriatechnológia egyik fő hátránya a NyÁK-technológia iránt támasztott végletes követelmény. Egy olyan buszinterfésszel, amelynek órafrekvenciája 200 MHz-nél kezdődik és minden félperiódusban adatátvitel történik, az SDRAM-hoz szükséges megoldások színvonalát meghaladó és azon túlmutató követelményeket kell teljesíteni a jelek integritásának megőrzéséhez, valamint a hozzá tartozó áramköri részleteknek a kártyán található többi elektronikától való elválasztásához. A DDR memóriák tervezéséhez más specifikációkra is tekintettel kell lennünk, mint például a referencia-, a forrás- és a lezárási feszültségek szűkebb toleranciasávjai, a megfelelő kapacitív csatolásmentesítés („hidegítés”), a NyÁK-tervezési szabályok, köztük a fóliasávok és a vezetékpárok távolsága és a fóliasávok vonalvezetése.
Ahogy a beágyazott grafikai alkalmazások egyre nagyobbakká, nagyobb felbontásúakká és bonyolultabbakká válnak, az igény egyre inkább a nagyobb kapacitású és gyorsabb DDR2 memóriák felé fordul. A beágyazott rendszerek fejlesztői, akiknek néhány éve még legfeljebb 150 MHz-en futó mikrovezérlős rendszereket kellett megvalósítaniuk, most kétszeres sebességű MCU-kkal és olyan memóriainterfészekkel kell foglalkozniuk, amelyek órafrekvenciája összemérhető a processzor belső óragenerátorának sebességével. A legtöbb mikrovezérlő-gyártónak ezért több módon is tervezési segítséget kell nyújtaniuk felhasználóik számára.
Nem volna-e jobb, ha olyan – nagy alkatrészsűrűségű és nagy teljesítőképességű, gyors memóriákat igénylő, grafikai képességekkel ellátott – MCU-k is elérhetők lennének a piacon, amelyek nem igénylik a NyÁK-lap rétegszámának költséges növelését, amely akár néhány dolláros többlettel is megterhelheti a végtermék alkatrészköltségét, többleterőforrásokat igényelnek, és rákényszerítik a tervezőt, hogy behatoljanak a 200 MHz-nél is gyorsabb órajelű DDR2 memóriák tervezésének világába? A Microchip PIC32MZ DA mikrovezérlője azon kevés MCU-k egyike a jelenkori piacon, amelyek DDR2 interfésszel és beépített SDRAM tárolóval is fel vannak szerelve. A PIC32MZ DA mikrovezérlő-család ezzel enyhíti azt a nyomást, amit a külső memóriák illesztésének tervezése jelent. Az MCU-csipre – azzal közös tokozatban – DDR2 DRAM-ot rétegező PIC32MZ DA 32 Mbájt DDR2 DRAM-ot tartalmaz, ezért nincs szükség külső memória illesztésére (2. ábra). Ez az eszköz a memórián kívül egy háromrétegű megjelenítésre alkalmas grafikai vezérlőt és egy nagy teljesítőképességű grafikus processzort is tartalmaz ugyanazon a csipen, amely egyedülállóan magas szintű integrációt és teljesítőképességet tesz lehetővé a grafikaorientált MCU-alkalmazásokban.

 

Microchip cikk dec 2abra

2. ábra  A PIC32MZ DA mikrovezérlő tömbvázlata

 

Összefoglalás

A grafikus felhasználói interfészek szép megjelenésére és komplexitására vonatkozó igény rohamosan növekszik. Több memóriatechnológia is létezik, amelynek az a célja, hogy a mikrovezérlő-architektúra és a memória illesztésénél fellépő fontos problémákat megoldja. Ezek mindegyikének vannak előnyei és hátrányai is. Ez a cikk a különféle architektúrák előnyeit és hátrányait foglalta össze. A GUI-tervezés problémáit nem kerülhetjük el, és miközben a memóriák korlátai gondot okozhatnak a tervezőknek, ez nem szabad, hogy útját állja annak, hogy olyan nagyszerű alkalmazásokat dolgozhassanak ki, amelyek hasznosak és hatékonyak a végfelhasználók számára.

 

szerző: Kurt Parker, termékmenedzser – Microchip MCU32 részleg

 

www.microchip.com

 

Még több Microchip

 

A cikk angol nyelvű változatához kattintson ide.

 

If you want to read this article in english, click here.

 

[1] A frame-buffer az a memória, amely a grafikus alkalmazásoknál a képernyőtartalomnak megfelelő információt tárolja. Ha ragaszkodunk a magyar fordításhoz, talán képkockatárolónak nevezhetnénk. Ebből egy grafikus rendszer többet is tartalmazhat, amely így egyidejűleg több képkockányi kép előkészítését, gyors frissítését vagy módosítását könnyíti meg. A szakmában oly mértékben elterjedt az angol frame buffer elnevezés, hogy az egyértelműséget a magyar fordítás helyett legjobban az eredeti kifejezés megtartásával tudjuk garantálni. – A ford. megj.