Témakör:
A 8 bites MCU-k ma is az elosztott feldolgozás bevált eszközei
Megjelent: 2019. november 13.
Négy évtizede, hogy az első 8 bites mikrovezérlők megjelentek a piacon. A mérnökök hamar felismerték ezek előnyeit: teljes mikroprocesszort, memóriát, időzítő és I/O-elemeket tartalmazó eszközt kaptak a kezükbe, amely jelentősen csökkentette az anyagszükségletet, és egyszerűsítette számos elektronikai termék tervezési feladatait. A mikrovezérlők először a számítógép-billentyűzetekben találtak alkalmazásra, az azt követő évtizedekben pedig típusváltozataik és versenytársaik meghódították az alkalmazások széles körét.
Bár a mikrovezérlő- (MCU-) gyártók választékában ma már 16, 32, sőt 64 bites architektúrájú MCU-k is megtalálhatók, a nyolcbiteseknek továbbra is erős a pozíciója a beágyazott rendszerek alkatrészpiacán. A 8 bites mikrovezérlőkön alapuló megoldások ma is széles alkalmazási területeket fednek le. Számos esetben a 8 bites MCU a rendszer egyetlen programozható alkotóeleme. Ennek legjobb példái a füstjelzők és az ipari érzékelőmodulok. Olyan alkalmazás is előfordul, amelyben 16-, 32- vagy 64 bites architektúrájú processzorok mellett egy vagy több nyolcbites is helyet kap. Jó példa erre az említett billentyűzetvezérlő: az ilyen feladatot a 8 bites alapú okosperiféria a hosztprocesszornál sokkal jobban el tudja látni; nem kell például a hosztprocesszor számos – értékes – gépi ciklusát a billentyűk kontaktusbizonytalanságát szűrő programok futtatására vagy a bemeneti vezetékek folyamatos letapogatására pazarolni. A több alkatrész együttműködésére épülő megoldás ezért – ebben a példában is – a teljes rendszer teljesítményét javítja. A mai MCU-kban hasonló koncepció valósul meg, amelyben több, egymástól független működésű részegység működik együtt a teljes rendszer teljesítőképességének fokozása érdekében.
Ha egy új termékkoncepciót dolgozunk ki, amely beágyazottprocesszor-alapú vezérlést igényel, a tervezőnek meg kell fontolnia, hogyan ossza fel a terhelést a rendelkezésre álló erőforrások között. Ez lehet akár aránylag összetett feladat is, amelyet több processzor közötti munkamegosztással lehet a legjobban megoldani – mint például egy „okoshangszórónál”. Más esetben a rendszer lehet sokkal egyszerűbb is – mint mondjuk egy háztartási füstgáz-érzékelőnél –, amelynek a teljes szoftvertevékenysége futtatható akár egyetlen nyolcbites mikrovezérlőn is. Mindkét esetben létfontosságú azonban az árhatékonyság és az energiafogyasztás hatásfoka, amely arra irányíthatja a tervező figyelmét, hogy nem feltétlenül egyetlen szoftvervezérlésű processzor használata jelenti az optimális megoldást.
1. ábra Magfüggetlen perifériák
Hardverszempontból a legegyszerűbb megközelítésnek egyetlen nagy teljesítményű processzor használata tűnik, amely egy operációs rendszer felügyelete alatt számos különböző részfeladatot képes – gyakorlatilag egyidejűen – kezelni. Ám ez szinte soha nem jelent energiatakarékos megközelítést, mivel a rendszer és annak bemenetei és kimenetei közötti adatcsere gyakorisága sokkal alacsonyabb, mint amire egy nagy teljesítményű, csővezeték- (pipeline-) alapú processzor adatfeldolgozó teljesítménye méretezve van. Miközben egy ilyen, 32 vagy 64 bites, 1 GHz-es órajellel futó processzor I/O-műveleteket hajt végre, számos üres várakozóciklust kell végrehajtania, amíg egy újabb I/O-adatbájt vagy adatszó feldolgozására sor kerül. Az állandó lekérdezésen (polling) alapuló feldolgozás elkerülésének egyik módszere a programmegszakítás (interrupt) használata. Ez lehetővé teszi, hogy a processzor a lassú I/O-műveletek közben is folytathassa a nagy számítási teljesítményt igénylő „magfeladat” végrehajtását. Ez azonban csak részleges hatékonyságnövekedéssel jár, mivel a programmegszakítások érzékelésekor az éppen feldolgozás alatt álló adatokat (és az aktuális processzorállapotot) a rendszer veremtárolójába (stack) kell helyezni, majd – miután a programmegszakítás kiszolgálása megtörtént – onnan helyreállítani. Ez az „adminisztrációs” feladat is számos óraciklust köt le minden interrupt kiszolgálásakor.
A külső események által okozott programmegszakítások számos beágyazott rendszer működésének alapjául szolgálhatnak. Az ilyen rendszerek valamilyen külső forrásból érkező jelre várnak, mielőtt a bemeneteiken megjelent adatok feldolgozásához hozzákezdenének. Emiatt alapvető fontosságú, hogy a megszakításalapú rendszerekben a megszakítást kezelő „adminisztratív” műveletek igen hatékonyan legyenek végrehajthatók. Ez éppen olyan igaz az 1970-es évek végén kidolgozott billentyűzetvezérlőkre, mint a jelenkor rendszereire. A bemeneti jelvezetékek állandóan ismétlődő lekérdezése helyett az ilyen rendszerek aktív processzorhasználat nélkül is képesek várni akár egyetlen villamos kontaktus záródására is. Az ekkor keletkező elektromos impulzust a rendszer megszakításvezérlője érzékeli, amely továbbítja a jelzést a mikroprocesszor firmware-jének, amely erre válaszul letapogatja a billentyűzet érzékelővezetékeit, hogy azok állapotából meghatározza: melyik fizikai billentyűt nyomta le a felhasználó. A megszakításvezérlő ezután üzenetben küldi el ennek az állapotnak a jelzőbitjeit a hoszt-processzornak, amely alapján az meghatározza, hogy milyen billentyűkódot kell hozzárendelni a lenyomott billentyűhöz vagy azok kombinációjához.
Egy tipikus IoT-rendszer azonban még a teljes aktív életciklusa alatt is csak nagyon kevés adatfeldolgozási munkát végez, és képességeinek legnagyobb részét csak a rövid működési periódusokban használja ki. Egy „okoshangszóróban” például csak arra van szükség, hogy amikor a mikrofont a megfelelő frekvenciatartományú és megfelelően erős hangjel éri, elinduljon benne az emberi hang felismerésére szolgáló szoftverfunkció. Egy másik példa a füstérzékelő, amelynek nem kell mikroszekundumos periódusidővel méréseket végrehajtania a mérőkamrájába megérkező levegőn; a környezet ugyanis nem változik olyan gyorsan, ami ilyen gyakoriságú méréseket indokolna. A megfelelő hatékonyságú riasztáshoz elegendő másodpercenként vagy még ritkábban mintát venni annak eldöntéséhez, hogy mikor változik meg a levegő minősége olyan mértékben, amikor az adatok már komolyabb elemzést igényelnek. Az ehhez szükséges számításokat még akkor is el lehet végezni a másodperc töredéke alatt, ha a processzormagot csak igen alacsony, néhány MHz nagyságrendű órafrekvenciával működtetjük. Ezzel elkerülhető, hogy a processzormag a két mérés között tétlenül, üres órajelciklusokban fecsérelje el a rendszert tápláló energiát. A jó megoldás az, ha a processzormagot két mérés között alacsony energiafelvételű, „alvó” állapotba helyezzük, és csak akkor ébresztjük fel, amikor a rendszer óragenerátora vagy egy számláló azt jelzi, hogy új mérési ciklust kell kezdeni, illetve, ha egy eseményvezérelt periféria aktív processzorműködést igénylő, külső aktivitást érzékel.
A nagy számítási teljesítmény fenntartása érdekében a felső kategóriás processzorok a helyi statikus RAM (SRAM) tárolóban tartják a gyakran használt utasításokat és adatokat. Ha ilyen gyorsmemória (cache) nem áll rendelkezésre, a kódot az aránylag lassú flashmemóriából kell az SRAM-ba vagy a dinamikus tárolóba (DRAM) átmásolni annak érdekében, hogy a magas utasításvégrehajtási teljesítményt fenntarthassuk. Az energiafogyasztás alvó állapotban való csökkentése érdekében az SRAM-ban és a DRAM-ban tárolt adatok elvesznek, ezért ezeknek a tárolóknak a tartalmát a rendszert az alvó állapotából felébresztő jel vétele után helyre kell állítani, hogy a processzor folytathassa a program végrehajtását – és ez megint csak energiafelhasználással és a program folytatását megelőző késleltetés (latenciaidő) növekedésével jár.
A legtöbb nyolcbites processzor képességei a most bemutatott helyzetnél jobban illeszkednek a kikapcsoláskor nem törlődő memóriák adatátviteli jellemzőihez, ezért alkalmasabbak arra, hogy a processzor az utasításokat közvetlenül a flashmemóriából olvassa ki. Az ilyen mikrovezérlőkbe gyakran építenek be kikapcsoláskor vagy alvó állapotban nem törlődő adatmemóriát is, amely tárolni képes a tartós megőrzést igénylő adatokat a processzor ébrenléti cikusai közötti időben is, ezért aránylag ritkán van szükség az SRAM tartalmának visszatöltésére az ébresztés folyamán. Ennek következtében még alacsonyabb számítási teljesítményű processzormag esetén is megnövekszik a processzormag „válaszkészsége” a külső eseményekre.
2. ábra A PIC16F18446 mikrovezérlő tömbvázlata
Mindennek eredményeképpen a rendszertervezők az összetettebb rendszerekben gyakran szívesen használnak 8 bites mikrovezérlőket a 10, 32 vagy 64 bites processzorok mellett annak érdekében, hogy az eseménykezelő logikai áramköröket energiahatékonyabban és a számítási teljesítménnyel jobban gazdálkodva valósíthassák meg. Az említett „okoshangszórós” alkalmazásban például egy nyolcbites mikrovezérlőt használhatunk azoknak az audio-bemeneti jeleknek a kezelésére, amelyek nem igényelnek beszédfeldolgozási képességet. Ezeken csak egyszerű algoritmusok futnak annak meghatározására, hogy a bemenetre érkező hang erőssége meghaladja-e a háttérzaj szintjét, majd ezután meghatározzák, hogy zajról van-e szó, vagy a jel paraméterei megfelelnek az emberi beszéd jellemzőinek. Ha a jel ezek alapján eléggé „beszédszerűnek” minősül, a nyolcbites segédprocesszor felébreszti a főprocesszort a jel további – tartalom szerinti – elemzésének elvégzése érdekében.
Az elosztott, együttműködő feldolgozású rendszerarchitektúra nem áll meg a processzormag szintjénél. Gyakoriak az olyan helyzetek, ahol a szoftvervégrehajtás rugalmasságára nincs igazán szükség a rendszer által detektált külső események legtöbbjének kezeléséhez. Ismét csak az „okoshangszóró” példáját említve: amennyiben a mikrofont csak alacsony szintű háttérzaj éri, a processzornak felesleges annak meghatározásával foglalkoznia, hogy az érzékelt hangjel rendelkezik-e a beszédhang tulajdonságaival. Az ilyen feladatokat magfüggetlen perifériákra lehet bízni (Core Independent Peripherals – CIP, olyan, a mikrovezérlőbe integrált hardverfunkció, amely a processzormag működésétől függetlenül képes egy egyszerű célfeladatot hatékonyan, kis energiafogyasztással és – a kezdeti konfiguráció egyszeri beállítását leszámítva – számítási teljesítmény igénybevétele nélkül, önállóan végrehajtani, lásd az 1. ábrát). Ilyen részfeladat lehet például az analóg bemenetre bejövő hangjelszintnek egy referenciaértékkel való folyamatos összehasonlítása. Egy e célra konfigurált CIP csak akkor ébreszti fel a processzort, ha az okoshangszórót érő hangjel amplitúdója meghaladja az előre beállított küszöbszintet.
A mikrovezérlőbe integrált részegységek összetételétől függően a CIP-ek konfigurálható, intelligens perifériák választékát kínálják, köztük kombinációs logikai hálózatok, állapotgépek és órajelgenerálási funkciók megvalósítására, amelyekből egyebek közt összetett motorvezérlésre, tápfeszültség-sorrend meghatározására, adatmodulációra és feltételes jelzéstovábbítási feladatok megvalósítására szolgáló alegységek állíthatók össze, amelyek a processzormag állandó és közvetlen beavatkozása nélkül is képesek rendeltetésüknek megfelelni.
Az olyan eszközök, mint az ATmega4809 is, amelyek konfigurálható logikai céláramkörök megvalósítására (Configurable Custom Logic – CCL) alkalmas részegységet tartalmaznak, az ugyancsak a csipre integrált AD-konverter áramkörrel együtt olyan megoldásokat is lehetővé tesznek, amelyek programozható módon teszik függővé analóg jelek értékétől például logikai állapotgépek (sorrendi logikai hálózatok) állapotát, és ezzel jelentős mértékben tehermenetesíthetik a processzormagot. A Microchip egyes 8 bites mikrovezérlőiben (mint például a PIC16F18446 típusban – lásd a 2. ábrát – is) megtalálható ADC2 nevű PIC-modullal a hardver magfüggetlenül képes olyan összetett jelfeldolgozási funkciók megvalósítására is, mint a digitalizált analóg jelek átlagolása és aluláteresztő szűrése. Ezzel például elkerülhető, hogy a rendszer működését rövid időtartamú zajok és hallható „kattogások” befolyásolják, de az említett „okoshangszóróban” például erre a rendszerre bízhatjuk azt az előfeldolgozást, ami eldönti, hogy az ADC-vel digitalizált jel értékelhető-e beszédhangként. Az ADC2-ben is megtalálható hardvertulajdonságokkal egyszerűsíthetünk például egy másik olyan alkalmazást, amelyet hagyományosan komoly szoftverfeldolgozás révén szokás megvalósítani: az érintésvezérelt kapacitív panelek érzékelőáramköreit is.
A programozható hardvermodulként megvalósított perifériák hatása nem merül ki annyiban, hogy lehetővé teszik, hogy a processzormag tovább maradhasson alvó üzemmódban. Az általuk megvalósított feldolgozóképesség a funkcionalitások feláldozása nélkül csökkenti az olyan – minden mástól függetlenül működő – alkalmazások anyagigényét, mint a riasztórendszerek elemei. A hardveralapú szűrés az ADC2 modult felhasználó készülékekben lehetővé teszi, hogy egy nyolcbites mikrovezérlővel oldjunk meg olyan feladatokat, amelyekhez – hagyományos eszközöket használva – „első ránézésre” legalább 16 bites processzor tűnne a legmegfelelőbb választásnak. Ugyanis az ipari és audioalkalmazások tipikus felbontásánál a 16 bites architektúra az, amely nem igényli a 8 bitnél tipikusan hosszabb minta-adatszavak szoftveres felosztását a feldolgozás során, amire pedig egy 8 bites szóhosszúságú adatfeldolgozó láncnál szükség lenne. Ha viszont van olyan részegységünk, amely például a szűrést képes önálló hardverrel megoldani, az mentesíti a 8 bites processzormagot attól a jelentékeny mennyiségű feldolgozási feladattól, amit a jelfeldolgozás megkíván, ezáltal a felszabaduló feldolgozási kapacitás a rendszerszintű menedzsmentre és vezérlésre fordítható. Az így megnövekedett mozgástér pedig lehetővé teszi, hogy olcsóbb 8 bites típus választásával csökkenthessük a végtermék anyagköltségét és egyszerűsíthessük felépítését.
A 8 bites architektúrán alapuló mikrovezérlők más okból is jobban illeszkednek az aránylag sok I/O-funkciót tartalmazó, eseményvezérelt alkalmazásokhoz. Sok digitális I/O-funkció bitszinten, vagy egy bájtnál kevesebb digitális adat kezelésével valósul meg. A nagyobb szóhosszúságú processzorok ezért kevésbé hatékonyan kezelik az ilyen kis terjedelmű adatokat, mivel néhány bit kedvéért teljes szóhosszúságú adatok mozgatását követelik meg a belső regiszterek és az I/O-kivezetések között, és ugyanezen okból bonyolult bitmaszkok kezelését teszik szükségessé ahhoz, hogy az adott I/O-művelet csak az érintett bitekre legyen hatással. Mivel a célszerű segédfunkciókkal felruházott nyolcbites mikrovezérlőket olyan egyszerű feladatok megoldására tervezték, mint a nyomógombok pergésmentesítése, vagy motorvezérléshez, világítástechnikához vagy tápegységekhez használható impulzusszélesség-modulált (PWM) jelek előállítása, a feladat bonyolultságához helyesen megválasztott megoldásszinttel jelentős mennyiségű felesleges számítási munka elvégzése kerülhető el.
3. ábra Az MPLAB Code Configurator
Az I/O-ra „kihegyezett” alkalmazásokban a 8 bites mikrovezérlők program- és adatmemóriája is általában hatékonyabban használható ki, így ezekből kevesebb is elegendő, mint amennyi a más architektúrákon alapuló mikrovezérlők használatakor szükséges. Az összetettebb alkalmazásokban viszont nagyobb mennyiségű memória válhat indokolttá, amely már igazolhatja a programkód alkalmassá tételét a 16 vagy 32 bites processzormagokon történő futtatásra, amellyel a tipikusan nagyobb terjedelmű és költségesebb memóriakonfiguráció is együtt jár. A 8 bites architektúra egyszerűbb szilíciumtechnológiával gyártható, miközben ugyanolyan robusztus analóg és I/O-áramköröket, egyszerűbb energiaellátó rendszert tartalmaz, és jobb a jelek minősége is, mint a finomabb felbontással gyártott, nagyobb sűrűségű szilíciumtechnológiával előállított, bonyolultabb típusoknál. Sok esetben azt is érdemesnek látszik megfontolni, hogy azzal használjuk ki az együttműködő processzorokban rejlő előnyöket, hogy felosztjuk a munkaterhelést az alkalmazásspecifikus 8 bites, és az általános célú 16 vagy 32 bites processzorok között.
Előfordulhat, hogy az együttműködő processzorokra szétosztott feldolgozás használata növeli a tervezés bonyolultságát, mivel figyelemmel kell lenni az együttműködő processzorok és az okosperifériák működésének szinkronizálására is. Azonban az olyan fejlesztési segédeszközök, mint a Microchip MPLAB Code Configurator (MCC) szoftveralkalmazása (3. ábra), gondot viselnek a szükséges firmware-szintű menedzsmentre, olyan megoldásokat állítanak elő, amelyek az alkalmazások számos fajtájában használhatók, mint például a kommunikáció, a motorvezérlés és az energiaellátás.
A nyolcbites architektúra évtizedek óta sikeres, bár egyes piaci elemzők szerint ezek architektúrája nem fejlődik eléggé. Azok a mikrovezérlők azonban, amelyeket a nyolcbites processzormagok köré terveznek, okosperifériák hozzáadásával, a magas szintű programnyelvek támogatásának bővülésével alkalmazkodnak azokhoz az igényekhez, amelyeket a termékfejlesztők új generációja támaszt velük szemben, és amelyekre az együttműködő intelligencia korának modern környezetében van szükség.
Szerző: Lucio di Jasio – MCU8 Business Development Europe, Microchip Technology Inc.
www.microchip.com
még több Microchip