8-bittisten mikro-ohjaimien voittokulku jatkuu. Niitä käytetään yhä useammin myös monimutkaisissa järjestelmissä hyödyntämällä yhteistyössä tapahtuvaa prosessointia pääsuorittimen kanssa. Lisäksi ytimestä riippumattomien CIP-oheislohkojen avulla voidaan keventää pääprosessorin tehtäväkuormaa. Näin voidaan parantaa järjestelmän suorituskykyä ja energiatehokkuutta.
Ensimmäinen 8-bittinen mikro-ohjain ilmestyi markkinoille yli 40 vuotta sitten. Suunnittelijat oivalsivat nopeasti sen tarjoamat edut. Yksittäinen piiri, joka sisälsi täydellisen mikroprosessorin, muistin, ajastimen ja I/O-portit, alensi merkittävästi elektronisten laitteiden materiaalikuluja (BoM) ja yksinkertaisti niiden suunnittelua. Mikro-ohjain löysi nopeasti tiensä tietokoneiden näppäimistöihin ja sen johdannaiset levisivät seuraavien vuosikymmenten aikana lukuisiin sulautettuihin järjestelmiin.
Vaikka mikro-ohjainten valmistajat ovat sittemmin ottaneet käyttöön piirirakenteita, jotka perustuvat 16-, 32- ja jopa 64-bittisiin arkkitehtuureihin, 8-bittisellä arkkitehtuurilla on edelleen vahva rooli sulautetuissa järjestelmissä. Nykyään 8-bittisiä mikro-ohjaimia käytetään monenlaisiin sovelluksiin. Monissa tapauksissa 8-bittinen mikro-ohjain on järjestelmän ainoa ohjelmoitu ja ohjelmallisesti toimiva piiri.
Savuhälyttimet ja teollisuuden anturimoduulit ovat tyypillisiä esimerkkejä keskeisistä sovelluskohteista. Vaihtoehtoisesti voidaan käyttää yhtä tai useampaa 8-bittistä mikro-ohjainta muiden prosessorien rinnalla, jotka perustuvat 16-, 32- tai 64-bittiseen arkkitehtuuriin.
Näppäimistönohjain on kuvaava esimerkki edellä mainituista älykkäistä oheislaitteista, jotka helpottavat tietokoneen isäntäprosessorin työtä. Sen ansiosta pääsuorittimen ei enää tarvitse tuhlata useita kellosyklejä syöttörivien skannaukseen ja poistamiseen. Tämä on samalla hyvä esimerkki usean komponentin yhteistoiminnasta, jolla voidaan parantaa järjestelmän yleistä suorituskykyä.
Kun edessä on uusi tuotekonsepti, joka vaatii sulautettua prosessoripohjaista ohjausta, suunnittelijan on mietittävä, kuinka työtaakka voidaan parhaiten jakaa resursseille. Kyseessä voi olla suhteellisen monimutkainen järjestelmä, joka hyödyntää erilaisten suorittimien yhdistelmää. Sellainen on esimerkiksi älykäs kaiutin.
Vaihtoehtoisesti järjestelmä voi olla paljon yksinkertaisempi kuten kotikäyttöön tarkoitettu savuhälytin, joka voi toimia kokonaan 8-bittiseen mikro-ohjaimeen tallennetun ohjelmiston ohjaamana. Kummassakin tapauksessa kustannustehokkuus ja energiatehokkuus ovat tärkeitä näkökohtia. Ne ohjaavat suunnittelijaa kohti arkkitehtuuria, joka ei hyödynnä pelkästään yhtä ohjelmallisesti ohjattua prosessoria.
Laitteiston näkökulmasta yksinkertaisin lähestymistapa voi tuntua olevan käyttöjärjestelmän hyödyntäminen useiden erilaisten tehtävien hoitamiseksi samanaikaisesti yhdessä huipputehokkaassa suorittimessa. Mutta lähes poikkeuksetta tämä ei ole energiatehokas lähestymistapa, koska järjestelmän sekä sen tulojen ja lähtöjen välinen tiedonsiirto tapahtuu usein paljon hitaammin kuin datankulku huipputehokkaan prosessorin liukuhihnalla nopeimmillaan.
Kun I/O-tapahtumia suoritetaan, 1 gigahertsin tai jopa suuremmalla taajuudella toimivan 32- tai 64-bittisen suorittimen on odotettava useiden kellojaksojen ajan kunkin uuden tavun tai sanan ilmaantumista. Yksi tapa jatkuvien datakyselyjen välttämiseksi on käyttää keskeytyksiä. Niiden avulla prosessori voi jatkaa ydintoimintaansa jokaisen I/O-siirron tapahtuessa lennossa. Mutta tarve siirtää ja poistaa lukemia järjestelmäpinoon/pinosta jokaisessa kontekstivaiheessa vaatii useita ylimääräisiä kellojaksoja jokaisen keskeytyksen jälkeen.
Ulkoisten tapahtumien aiheuttamat keskeytykset ohjaavat monia sulautettuja järjestelmiä. Järjestelmä odottaa tiettyä signaalia ulkopuolisesta toiminnasta ennen kuin siirtyy tulosignaalien intensiiviseen käsittelyyn. Tämän vuoksi sen on toimittava mahdollisimman energiatehokkaasti odotusjaksojen aikana.
Tämä oli yhtä totta jo 1970-luvun näppäimistönohjainten kohdalla kuin nykyäänkin. Tulolinjojen jatkuvien datakyselyjen sijaan voidaan odottaa sähköisen kontaktin syntymistä. Keskeytysohjain tunnistaa siitä syntyvän pulssin ja ilmoittaa suorittimen laiteohjelmalle, että sen täytyy skannata näppäimistölinjat havaitakseen, mitä näppäintä on painettu, sekä lähettää viesti isäntäkoneelle, mitä merkkiä kyseinen näppäin edustaa.
Suurimman osan toiminta-ajastaan tyypillinen IoT-järjestelmä tekee hyvin vähän tietojenkäsittelyä. Valtaosaa toiminnoista tarvitaan vain hyvin lyhytkestoisten toimintajaksojen aikana. Esimerkiksi älykkään kaiuttimen ei tarvitse kuin aloittaa ihmisen puheen tunnistaminen, kun riittävän voimakas audiosignaali oikealla taajuusalueella tulee jo poimituksi mikrofonin avulla.
Samoin esimerkiksi savuhälyttimen ei tarvitse suorittaa mittauksia kammioonsa tulevalle ilmalle mikrosekunnin välein. Ympäristö ei muutu niin nopeasti, että tuollaista toimintanopeutta vaadittaisiin. Hälytin voi ottaa näytteitä vaikkapa sekunnin välein tai jopa harvemmin määrittääkseen, onko ilmanlaatu sellaisella tasolla, että tuloksia on analysoitava tarkemmin. Tähän tarvittavat laskutoimitukset kestävät yleensä vain sekunnin murto-osia jopa niillä suoritinytimillä, jotka toimivat alhaisilla kellotaajuuksilla.
Kummassakin esimerkkitapauksessa suoritinytimen pitäminen käynnissä mittausten välisenä joutoaikana kuluttaa energiaa. Ratkaisuna on siirtää ydin niukkatehoiseen lepotilaan siinä vaiheessa, kun se saapuu toiminnassa tyhjäkäyntisilmukkaan, ja herättää se jälleen, kun järjestelmäkellosta tai laskurista tulee keskeytys, tai tapahtumaohjattu oheislaite havaitsee jonkin ulkoisen toiminnan.
Korkean suorituskyvyn ylläpitämiseksi huipputehokkaat prosessorit käyttävät paikallisia SRAM-pohjaisia välimuisteja usein käytettyjen komentojen ja tietojen tallentamiseen. Ellei välimuistia käytetä, koodi on kopioitava suhteellisen hitaasta flash-muistista ensin SRAM- tai DRAM-muistiin, jotta voitaisiin säilyttää käskyjen läpimeno yhtä nopeana kuin välimuistia käytettäessä. Lepotilassa nämä muistit kuitenkin menettävät sisältönsä tehonsäästöntoiminnan vuoksi ja vaativat uudelleenvirkistyksen herätyssignaalin jälkeen ennen kuin prosessori voi aloittaa toimintaansa. Tämä taas haaskaa energiaa ja lisää järjestelmän viiveitä.
Useimmat 8-bittiset prosessorit mukautuvat paremmin haihtumattoman muistin suorituskykyyn ja ominaisuuksiin lataamalla komennot suoraan flash-muistista. Niihin on yleensä integroitu haihtumatonta datamuistia pysyvien tietojen tallentamiseksi herätyssyklien välillä, joten niiden täytyy vain harvoin ladata lisää dataa SRAM-pohjaisesta SPM-muistista (Scratchpad memory). Tuloksena on suoritinydin, joka reagoi nopeammin ulkoisiin tapahtumiin hitaammasta laskutoimitusten huippunopeudesta huolimatta.
Tämän vuoksi monimutkaisten järjestelmien suunnittelijat suosivat usein 8-bittisten mikro-ohjainten käyttämistä 16-, 32- tai 64-bittisten prosessorien rinnalla tapahtumienkäsittelyn loogisten operaatioiden suorittamiseksi nopeammin ja energiatehokkaammin. Esimerkiksi älykkäässä kaiuttimessa 8-bittistä mikro-ohjainta voidaan käyttää audiotulojen signaalinkäsittelyyn silloin, kun ei ole tarvetta varsinaisen puheen prosessointiin. Ohjain voi käyttää yksinkertaisia algoritmeja selvittääkseen ensin, onko saapuva ääni taustatason yläpuolella ja arvioida sen jälkeen, vaikuttaako se meluääneltä vai onko sillä ihmisen puheen kaltaisia ominaisuuksia. Jos signaali vaikuttaa olevan riittävän tärkeä, se voi herättää pääprosessorin tekemään tarkempia jatkoanalyysejä.
Yhteistoimintana tapahtuvan prosessoinnin arkkitehtuuri ei rajoitu vain suoritinytimeen. Usein syntyy tilanteita, joissa ohjelmiston suoritukselta ei vaadita joustavuutta käsittelemään suurta osaa järjestelmän havaitsemasta ulkoisesta tapahtumasta. Esimerkiksi älykkään kaiuttimen tapauksessa prosessorin ei tarvitse määrittää, onko tulevalla äänellä puheen kaltaisia ominaisuuksia, jos mikrofoni poimii vain vaimeata taustamelua.
Itsenäiset CIP-oheislohkot (Core Independent Peripheral) voivat suoritinytimestä riippumatta suorittaa erilaisia toimintoja kuten analogisten tulojen vertailua referenssitasoihin. Esimerkiksi jos mikrofonin vastaanottaman signaalin amplitudi ylittää komparaattorin määrittämän kynnystason, se voi herättää prosessorin toimimaan.
Mikro-ohjainpiirin tyypistä riippuen CIP-oheislohkot tarjoavat laajan valikoiman älykkäitä konfiguroitavia oheislaitteita, jotka toteuttavat kombinaatiologiikkaa sekä tila- ja kellotustoimintoja, jotka voidaan yhdistää hoitamaan moottorinvalvontaa, tehonsekvensointia, datan modulointia ja ehdollista signalointia suoritinytimen puuttumatta lainkaan suoraan tapahtumiin. Microchipin valmistaman ATmega4809-mikro-ohjaimen kaltaiset piirit sisältävät CCL-ohjauslohkoja (Confugurable Custom Logic) ja niiden AD-muuntimet voidaan varustaa ohjelmoitavilla liipaisupiireillä sekä muilla tilaohjatuilla toiminnoilla, jotka keventävät itse suoritinytimen tehtäväkuormaa.
Microchipin useiden 8-bittisten mikro-ohjainten sisältämän ADC2-lohkon (esim. PIC16F18446) avulla voidaan digitalisoiduille signaaleille suorittaa käsittelytoimintoja kuten keskiarvoistusta ja alipäästösuodatusta. Tämä estää järjestelmää reagoimasta lyhytkestoiseen kohinaan ja audiopiikkeihin sekä tarjoaa hyödyllisen esikäsittelyn silloin, kun ADC-lohkon vastaanottama signaali on arvioitava puhesisällön osalta. ADC2-lohkoon on sisällytetty myös kaikki piiritason ominaisuudet helpottamaan kosketuspaneelien kapasitiivista tunnistusta. Se on toinen esimerkki sovelluksesta, jossa aiemmin on vaadittu korkean tason ohjelmallista prosessointia.
Sirutason ohjelmoitavien oheislohkojen kokonaisvaikutus ei rajoitu vain energiatehokkuuteen, kun suoritinydin saadaan pysymään pitempään lepotilassa. Lisäetuna oheislohkot auttavat leikkaamaan itsenäisesti toimivien sovellusten materiaalikuluja (BoM) niiden toiminnallisuudesta tinkimättä. Tällaisia sovelluskohteita ovat esimerkiksi erilaiset hälyttimet. ADC2-oheislohkon sisältävien piirien tapauksessa tuki piiritason suodatukselle antaa mahdollisuuden käyttää 8-bittistä mikro-ohjainta sellaisissa kohteissa, joissa perinteisesti 16-bittinen piiri on alun perin tuntunut sopivimmalta valinnalta.
Teollisuussovellusten ja audiosignaalien näytteistyksen tyypillisesti vaatimalla resoluutiolla 16-bittinen arkkitehtuuri ei vaadi näytedatan jakamista ohjelmalliseen käsittelyyn samaan tapaan kuin 8-bittinen liukuhihna vaatisi. Suodatuksen kaltaisten toimintojen piiritason toteuttaminen vähentää kuitenkin suoritinytimen kuormitusta merkittävästi keventämällä signaalinkäsittelyyn tarvittavaa työtä. Näin ydin voi keskittyä järjestelmätason hallintaan ja ohjaamiseen. Prosessoinnin suorituskyvyn parantuminen antaa siten mahdollisuuden käyttää hinnaltaan edullisia 8-bittisiä ohjainpiirejä yksinkertaisemman pään laitteistoissa.
8-bittiseen arkkitehtuuriin perustuvat mikro-ohjaimet soveltuvat I/O-keskeisiin tapahtumaohjattuihin sovelluksiin paremmin muilla tavoin. Monet digitaaliset I/O-tehtävät toimivat bittitasolla ja alle yhden tavun leveyksillä. Suuremmilla sananleveyksillä toimivat suorittimet ovat yleensä vähemmän tehokkaita käsittelemään näitä datatyyppejä, sillä ne vaativat kokonaisten datasanojen siirtämistä rekistereihin ja niistä pois, sekä monimutkaisten bittimaskien käyttämistä oikean sisällön käsittelemiseksi. 8-bittiset mikro-ohjaimet, jotka on suunniteltu painikkeiden tunnistamisen ja PWM-signaalien tuottamisen kaltaisiin tehtäviin moottorinohjauksissa, valaistusratkaisuissa ja teholähteissä, tarjoavat sopivantasoista toiminnallisuutta sovelluksiin, joissa ei tarvita suurta määrää laskutoimituksia eri toimintavaiheiden välillä.
I/O-keskeisissä tehtävissä 8-bittiset mikro-ohjaimet ovat yleensä tehokkaampia sekä ohjelman että datamuistin käytössä ja vaativat siten vähemmän verrattuna piireihin, jotka käyttävät muihin arkkitehtuureihin perustuvia suorittimia. Monimutkaisemmissa sovelluksissa saatetaan tarvita laajempaa muistia, ja tämä voi kannustaa siirtämään ohjelmakoodin 16- tai 32-bittiseen piiriin, joka yleensä valmistetaan korkeatasoisemmin skaalatussa tuotantoprosessissa laajemman muistimakron tukemiseksi.
8-bittinen arkkitehtuuri taas antaa piirinvalmistajille mahdollisuuden tuottaa sirut prosessissa, joka tukee myös vankkoja analogisia ja I/O-lohkoja sekä tarjoaa näin parempaa tehonhallintaa, suorituskykyä ja joustavuutta sekä laadukkaampia signaaleja verrattuna piireihin, jotka vaativat korkeatasoisemmin skaalattuja piiprosesseja. Monissa tapauksissa voi olla järkevää ottaa huomioon kaikki piirien yhteistoiminnan ja valmistusprosessivalintojen tarjoamat edut sekä jakaa järjestelmän tehtäväkuorma sovelluskeskeisen 8-bittisen ohjainpiirin ja yleiskäyttöisen 16- tai 32-bittisen suorittimen kesken.
Yhteistoiminnallisen datankäsittelyn hyödyntäminen saattaa lisätä suunnittelutyön monimutkaisuutta, koska kehittäjien on otettava huomioon useiden yhteistyötä tekevien suoritinytimien ja oheislohkojen välinen synkronointi. Microchipin ilmaiseksi tarjoaman MCC-paketin (MPLAB Code Configurator) kaltaiset graafiset ohjelmointiympäristöt huolehtivat kuitenkin vaadittavasta laitetason ohjelmistonhallinnasta tarjoamalla ratkaisuja, jotka palvelevat lukuisia eri sovellusalueita. Näitä ovat esimerkiksi verkkoliitännät, moottorinohjaukset ja tehonhallinta.
8-bittinen arkkitehtuuri on ollut menestyksekäs jo vuosikymmenien ajan. Kehitystä seuranneet saattavat ajatella, että suunnitelmien rakenne on kaiken aikaa pysynyt staattisena. Mutta näihin ytimiin perustuvat mikro-ohjainpiirit ovat kuitenkin sopeutuneet uusien suunnittelijasukupolvien asettamiin vaatimuksiin. Niihin on lisätty uusia ominaisuuksia kuten älykkäitä oheislohkoja ja tukea korkean tason ohjelmointikielille, joita tarvitaan suorittimien yhteistoimintaan perustuvissa nykyaikaisissa ympäristöissä.
Artikkelin kirjoittaja Lucio di Jasio vastaa Microchip Technologyn MCU8-liiketoiminnan kehittämisestä Euroopassa.
Artikkeli on ilmestynyt ETNdigi-lehden numerossa 2/2019. Sitä pääset lukemaan ilmaiseksi täällä.