Kaksiytimiset ratkaisut tuovat merkittäviä lisäetuja digitaalisignaalien sulautettuihin ohjaussovelluksiin, joissa hyödynnetään pitkälle integroituja mikro-ohjaimia tai signaalinkäsittelyyn erikoistuneita DSC-ohjaimia. Tarjolla on ohjainpiirien arkkitehtuuri, joka lisää järjestelmän suorituskykyä ja nopeuttaa markkinoille tuomista sekä pienentää laitteiston kokoa ja kustannuksia.
Artikkelin kirjoittaja Markus Wimmer toimii Microchip Technologyn 16-bittisten mikro-ohjainten yksikössä liiketoiminnan kehityspäällikkönä. |
Digitaalista signaalinkäsittelyä (DSP) vaativat sulautetut sovellukset kaipaavat yhä monimutkaisempien matemaattisten algoritmien toteuttamiseen lisää suorituskykyä. Lisäksi tarvitaan viestintään sekä toiminnan turvaamiseen ja hallintaan liittyvien toimintojen tehostamista. Näiden tekijöiden yhdistäminen johtaa muutoksiin tavassa, jolla prosessointitehoa hyödynnetään pitkälle integroiduissa mikro-ohjaimissa ja digitaaliseen signaalinkäsittelyyn erikoistuneissa DSC-ohjaimissa (Digital Signal Controller).
Hyvä esimerkki on laadukkaan teholähteen suunnittelu. Nykyajan toteutukset edellyttävät tarkkaa ja tehokasta energianmuunnosten hallintaa matemaattisten algoritmien ja reaaliaikaisen pulssinleveysmodulaation (PWM) avulla. Mutta sen lisäksi vaaditaan myös liitettävyyttä laitteen reaaliaikaisen toimintatilan välittämiseksi ja komentojen vastaanottamiseksi järjestelmätason hallintayksiköltä jonkin protokollan kuten PMBusin avulla.
Samoin esimerkiksi ajoneuvojen tuulettimien tai pumppujen ohjaimissa tarvitaan komentojen, järjestelmänvalvonnan ja diagnoosiraportoinnin yhteydessä tapahtuvaa tiedonsiirtoa esimerkiksi CAN-FD-protokollan (Controller Area Network Flexible Datarate) avulla. Ilmastointilaitteilla puolestaan voi olla vieläkin monimutkaisempia vaatimuksia, esimerkiksi erillisiä DSP-pohjaisia tehtäviä, jotka tukevat tehokertoimen korjausta tai suljetun silmukan moottorinohjausta tuuletin- ja pumppuyksiköissä.
Periaatteessa yksi nopea CPU-ydin voi aikajakoa hyödyntäen ajaa useita säikeitä ja siten käsitellä sekä reaaliaikaisia lyhyen viiveen ohjaustehtäviä että kaikkia verkon ja järjestelmän hallintatehtäviä. Näin vahvaan suorituskykyyn yltävä, mihin tahansa nykyiseen puolijohdeprosessiin suunniteltu laskentaydin ei kuitenkaan voi olla optimaalinen ratkaisu suuren tehonkulutuksensa ja monimutkaisuutensa vuoksi.
Toinen kaikkia yhdellä ytimellä toimivia reaaliaikaisia sovelluksia koskeva kysymys on se, kuinka helposti säikeet ja keskeytyksiä käsittelevät yksiköt kykenevät noudattamaan niille asetettuja määräaikoja. Missä tahansa resurssien jakamiseen perustuvassa toteutuksessa yleinen huolenaihe on se aika, jonka tietyn säikeen toiminta pysyy estettynä toisen prosessin tai keskeytyskäsittelyn vuoksi. Jotta voitaisiin taata, että säie noudattaa määräaikojaan kaikissa tilanteissa, joissa säikeillä ei ole keskinäisiä riippuvuuksia, resurssien laskennan perinteiset algoritmit edellyttävät, että melko merkittävä osa käsittelysykleistä jätetään kohdentamatta.
Lisäresursseja suorituskykyyn vaativat myös toistuvat tehtävien vaihdot, jotka on otettava huomioon ja joiden vaikutukset prosessin läpikulkuun on selvitettävä. Koska yhdellä ytimellä on suuri määrä keskeytystapahtumia, keskeytyskäsittelyjen ja niihin liittyvien tehtävänvaihtojen vaatimukset lisäresursseista voivat olla merkittäviä.
Yksi vaihtoehto on lisätä suorituskykyä käyttämällä entistä korkeampia kellotaajuuksia. Käytännössä voi olla kuitenkin paljon järkevämpää jakaa sovellus useammalle kuin yhdelle ytimelle. Jokaisessa monitehtäväsovelluksessa, joka ei ensisijaisesti ole riippuvainen yhden säikeen suorituskyvystä, rinnakkaisuuden hyödyntäminen johtaa yleensä parempaan energiatehokkuuteen, vahvempaan determinismiin ja helpompaan kehitystyöhön.
Kaksiytiminen toteutus voi jakaa monitehtäväisen järjestelmän työtaakan tehokkaammin. Sen avulla on myös mahdollista käyttää ytimille alhaisempia kellotaajuuksia, jotka voivat olla paremmin yhteensopivia flash-muistien kanssa. Näin voidaan vähentää pysähdysjaksoja tai jopa poistaa kokonaan odotustilat, joiden aikana suorittimen pitää odottaa komentoja tai dataa palautuakseen hakupyynnöstä.
Joissakin sovelluksissa datasyötteitä käsittelevien tehtävien tiiviisti kytketty luonne suosii edelleen yhden liukuhihnan käyttöä. Mutta kun lukuisia eri toimintoja suoritetaan tehokkaassa sulautetussa sovelluksessa, useamman kuin yhden suoritinytimen käyttäminen on järkevämpää, koska eri toiminnot ovat keskenään suhteellisen löyhästi kytkettyjä.
Esimerkiksi teholähteessä, jonka suljetun silmukan ohjaus on toteutettu kiinteän ohjelmiston avulla, suorituskyky määräytyy lähinnä siitä ajasta, joka tarvitaan analogisen näytteen muuntamiseen digitaaliseksi, uuden toimintajakson laskemiseen kyseisestä datasta ja sen jälkeen PWM-signaalin päivittämiseen. Moniytimisellä ohjaimella voidaan varmistaa, että muut järjestelmän toiminnot eivät häiritse tätä latenssin suhteen kriittistä funktiota.
Tähän päästään ajamalla sitä ytimellä, jolla ei ole muita ensisijaisia tehtäviä suoritettavana. Ohjaussilmukan aikakriittisten laskutoimitusten rinnalla toiselle CPU-ytimelle voidaan antaa muita tehtäviä kuten PMBus-datansiirtoa ja järjestelmän valvontaa. Samoin moottorinohjausta vaativissa sovelluksissa ohjaussilmukan prosessoinnin ja CAN-liitännän jakaminen eri ytimille varmistaa, että moottorin kommutointi tapahtuu tarkasti ja deterministisesti.
Kahdelle ytimelle hajautetusta prosessoinnista on hyötyä myös projektin kehittämisajan kannalta. On kuitenkin tärkeää, että ytimet ovat homogeenisia tämän hyödyn saavuttamiseksi. Perinteinen vaihtoehto moniprosessoinnissa on ollut jakaa työmäärä suoritintyypin mukaan. Signaalinprosessointiin käytettävää koodia on ajettu liukuhihnalla, joka on optimoitu rekisterioperaatioiden ja kertolaskujen suorittamiseen, mutta ei juurikaan ohjauskoodin ajamiseen. Yleiskäyttöinen prosessori puolestaan on hoitanut paljon ohjelmahaaroja sisältäviä rutiineja.
Käytännössä monissa reaaliaikaisissa sovelluksissa tämä arkkitehtuurin pohjalta on vaikea työskennellä. Signaalinkäsittelytoimet riippuvat usein ulkoisista olosuhteista, jotka voivat muuttua nopeasti. Eri ytimien tilojen synkronointiin tarvittava suorittimien välinen viestintä voi olla monimutkaista toteuttaa. Viestit asettavat tiukempia ajoitusta koskevia synkronointivaatimuksia kuin ne viestit, joita käytetään komentojen ja tilapäivitysten välittämiseksi verkkoliitäntään.
Yhtenäiset digitaalisten signaalinohjainten arkkitehtuurit, kuten Microchipin dsPIC33, ratkaisevat synkronointiin liittyvät ongelmat yhdistämällä nämä kaksi eri tyyppistä suoritustapaa samaan arkkitehtuuriin. Tällainen liukuhihna voi suorittaa datavirralle rekisteri-, kertolasku- ja matriisioperaatioita, mutta tarjoaa lisäksi mahdollisuuden nopeisiin haaroituksiin ja pikaisiin keskeytysvasteisiin niin, että parametrit ja algoritmit voivat mukautua muuttuviin olosuhteisiin välittömästi.
Tämä helpottaa signaalinkäsittelyn monimutkaisten algoritmien ohjelmallista toteutusta. Suunnitteluaikoihin kohdistuva paine tarkoittaa kuitenkin sitä, että käyttäjät kohtaavat koodin integroinnissa haasteita riippumatta siitä, minkä arkkitehtuurin valitsevat. Monissa sovelluksissa tiedonsiirto- ja ohjaustoimintojen yhdistelmä jaetaan tavallisesti eri kehitysryhmille, joista kukin on oman alansa asiantuntija.
Avainkysymys kahden tai useamman ryhmän kehittämien koodien integroinnissa on määrittää, kuinka ajoitus ja tehtävien priorisointi toimivat niiden välillä. Näennäisesti pienillä päätöksillä, kuten yksittäisten tehtävien priorisoinnilla, voi olla suuri vaikutus sovelluksen yleiseen reaaliaikaiseen käyttäytymiseen.
Huono päätös tarkoittaa, että elintärkeät tehtävät suljetaan suorittimen ulkopuolella pidemmäksi ajaksi kuin hyvän suorituskyvyn kannalta olisi toivottavaa. Kun tehtäväjoukot jaetaan kahdelle suorittimelle, ne suunnittelijat, joilla on eniten tietoa oman sovellusosansa säikeiden välisistä prioriteeteista, ovat myös vastuussa kyseisten prioriteettien asettamisesta.
Jaettu prosessointi helpottaa myös datamuistin hallintaa ja osoitusta. Näin voidaan varmistaa, että projektin aikana luodut ja virheenkorjauksen läpikäyneet tiedostot ja linkitysasetukset pysyvät muuttumattomina lopullisessa ohjelmistopaketissa. Tämä vähentää ohjelmiston integroinnista vastaavan tiimin yleiskustannuksia ja lyhentää myös markkinoille tuomiseen kuluvaa aikaa.
Vaikka hajautettu prosessointi sinänsä jo auttaa optimoimaan sekä järjestelmän kehitystoimintaa että prosessoinnin suorituskykyä, Microchip jatkaa edelleen arkkitehtuurinsa parantelua auttaakseen käyttäjiä lisäämään sovellustensa suorituskykyä entisestään. Hyvä esimerkki on kaksiytimisen dsPIC33-ohjainpiirin entistä suurempi määrä kontekstiin valittavia rekistereitä. Niiden ansiosta keskeytysten vasteaikoja voidaan merkittävästi lyhentää. Lisäksi ytimen käskykantaa on laajennettu lisäkomennoilla, jotka nostavat piirin DSP-suorituskykyä.
Digitaalisena signaalinohjaimena (DSC) dsPIC33CH-piiri sisältää useita pitkälle kehitettyjä oheislaitteita, jotka vähentävät järjestelmän kustannuksia ja pienentävät tarvittavan piirilevyn kokoa. Näitä ovat muun muassa AD-muuntimet, aaltomuotogeneraattorilla varustetut DA-muuntimet, analogiset komparaattorit, vahvistuskertoimeltaan ohjelmoitavat analogiset vahvistimet sekä tarkat PWM-generaattorit, joiden resoluutio yltää jopa 250 pikosekuntiin.
Lisäksi mukana on edistyksellisiä ominaisuuksia kuten entistä älykkäämmät oheislohkot ja niiden liipaisugeneraattori. Ne auttavat vähentämään suoritinytimien keskeytysten tarvetta, mikä on keskeistä teholähteiden ja moottorinohjainten kaltaisissa sovelluksissa.
Esimerkiksi piirin UART-lohkot tukevat piiritasolla LIN/J2602-, IrDA- ja DMX-datansiirtoprotokollia sekä älykorttien protokollalaajennuksia, mikä vähentää ohjelmallisen suorituskyvyn tarvetta. Samoin CAN-FD-oheislohko sisältää bittivirtasuorittimen ja ohjelmoitavan uudelleenlähetyslohkon, joka toimii automaattisesti ja varmistaa näin itsenäisemmän toiminnan CPU:sta riippumatta.
Microchipin dsPIC33CH-piiri on optimoitu nykyaikaisten suunnittelutiimien vaatimuksia vastaavaksi ratkaisuksi korkeaa suorituskykyä ja aikakriittisyyttä edellyttäviin reaalimaailman sulautettuihin ohjaussovelluksiin. Sen rakenne tarjoaa tuen, jonka avulla soveltajat voivat ”suunnitella erillisesti, mutta integroida saumattomasti”. Tuloksena on arkkitehtuuri, joka lisää järjestelmän suorituskykyä ja lyhentää samalla markkinoille tuomiseen tarvittavaa aika sekä pienentää laitteiston kokoa ja kustannuksia.