Jos ohjelmoitava piiri sisältää mikroprosessorin, softaa ja rautaa pitäisi pystyä suunnittelemaan käytännössä yhtäaikaisesti. Se onnistuu, kunhan käytössä ovat oikeat työkalut.
Artikkelin kirjoittaja Mark Saunders työskentelee Cypress Semiconductorilla vanhempana tuotemarkkinointipäällikkönä. Hänellä on tutkinto Leedsin yliopistosta Englannista ja yli 20 vuoden kokemus sulautetuista ohjelmistoista ja IP:stä. Mark on erikoistunut sulautettujen ohjelmistotyökalujen, reaaliaikakäyttöjärjestelmien, protokollapinojen ja middleware-ohjelmistojen kehitykseen, tukeen ja markkinointiin. |
Sulautetun mikroprosessorin sisältävät ohjelmoitavat piirit ovat tehokas keino vastata moniin suunnittelun haasteisiin, joita on vaikeaa tai kallista ratkaista vain laitteistolla tai ohjelmistolla. Nämä piirit yhdistävät digitaalisia ja analogsiia osia, joita voidaan uudelleen ohjelmoida toteuttamaan juuri haluttu toiminnallisuus. Lisäksi suunnittelutyökaluilla vältetään iso osa siitä monimutkaisuudesta, joka ohjelmoitavaan logiikkaan yleensä liitetään.
Esimerkiksi Cypress Semiconductorin PSoC Creator suunniteltiin erityisesti helpottamaan tätä tehtävää. Sen sijaan, että suunnittelija joutuisi tuottamaan sähköisesti täydellisiä piirejä, PSoC Creator antaa mahdollisuuden suunnitella vain suunnittelun relevantein osa - hieman kuin piirtäisi liitutaululle. Sen jälkeen työkalu päättelee oheislaitelohkojen (joita kutsutaan komponenteiksi) parhaan mahdollisen sijoittelun ja reitityksen, asettaa vaadittavan ajoituksen ja tehokonfiguroinnin, ja optimoi suunnittelun suunnittelijan puolesta.
Sekasignaalipiirinä PSoC-järjestelmäpiiri sisältää integroidut DA-muuntimet, joilla voidaan tuottaa haluttu jännite (tai virta) nastaan tai jonnekin muualle sirulla. DA-muunnin voidaan liittää pinniin vetämällä ja pudottamalla kaksi komponenttia piirikaaviopohjalle ja johdottamalla ne yhteen. Komponenttien paikantaminen ja kopioiminen kaavioon vie vain muutaman sekunnin aikaa.
Kuva 1. DA-muuntimen lähdön liittäminen analogiapinniin PSoC Creatorilla.
Huomaa, ettei DA-muuntimeen ole tuloja - ei virtaa, ei referenssijännitetuloa (Vref), ei hankalia väyläliitäntöjä - vain yksi jännitelähde joka yhdistetään pinniin. Ja pinni on yhtä yksinkertainen. Todellisuudessa PSoC-nastat voivat tukea laajaa valikoimaa GPIO-, SIO- ja analogiatoimintoja erilaisilla virtamoodeilla, sekä enable- (ota käyttöön) ja synkronisointi-toiminnoilla. Tässä käyttämämme analogiapinni on jo konfiguroinut fyysisen nastan juuri vaaditulla tavalla, joten suunnittelijan ei tarvitse välittää siitä miten eri toimintoja otetaan pois käytöstä niin, ettei DA-muuntimelta tulevaan signaalin vaikuteta.
Valmiita korkean tason komponentteja
PSoC Creator -työkalu toimitetaan lähes 200 valmiin, täysin validoidun komponenttikirjaston kera, joihin kuuluu AD- ja DA-muuntimia ja vahvistimia, UART- ja I2C-väyliä, PWM-modulaattoreita ja ajastimia. Näiden käyttö on huomattavasti helpompaa kuin perinteisistä piirikaaviotyökaluista löytyvien tyhjien IP-lohkojen käyttäminen. Komponenteissa toteutuksen yksityiskohdat on abstrahoitu pois ja suunnittelusta tulee virheetöntä jo ensimmäisellä kerralla. Käyttäjät voivat valita toimintoja parametrieditorissa, jota kutsutaan kustomointi-ikkunaksi. Työkalu määrittelee itse vaatimusten saavuttamiseksi tarvittavat konfiguroinnit piirille. Komponentti vain pudotetaan sivupohjalle ja sitä tuplaklikkaamalla päästään valitsemaan parametreja editorissa.
Ajatellaan vaikkapa UART-liitäntää. Tämä on tyypillisesti firmware-pohjainen komponentti, joten kustomointityökalu esittää konfiguroinnin asetusvaihtoehdot suunnittelijan kannalta luonnollisella tavalla. Kellosignaalin tulolle tai ylinäytteistyksen tahdille ei anneta optiota. Suunnittelijan pitää vain syöttää haluttu datanopeus (baud rate), jonka perusteella työkalu luo automaattisesti kellosignaalilähteen, joka syöttää komponentilla oikeaa taajuutta.
Kuva 2. UART-komponentin asettaminen. Huomaa, että vaihtoehdot liittyvät toimintoon, eivät oheislaitteen toteutukseen.
Integroituja prosessoreja sisältävät ohjelmoitavat piirit tarvitsevat työkaluja , jotka myös yhdistävät laitteiston ja ohjelmiston kehitystehtäviä. Piikeskeisissä työkaluissa yksi ongelma on, että ohjelmistosuunnittelijat joutuvat yleensä käyttämään työkaluja, joista he eivät erityisesti pidä esimerkiksi joutuessaan käsittelemään muisti- ja rekisteritason liitäntöjä oheislaitteisiin. Ilman oikeita ohjelmistotyökaluja ohjemoitava SoC-piiri nostaa laitesuunnittelijan erikoisasemaan, mikä haittaa koko ohjelmistotiimiä. Laitesuunnittelun aikataulu kyllä nopeutuu merkittävästi ja sen riskit kutistuvat erityisesti ASIC-tyyppiseen suunnitteluvuohon verrattuna. Samalla kuitenkin vastuu kaiken saamisesta toimimaan työnnetään ohjelmistonkehitystiimille.
PSoC Creator poistaa suunnittelijoilta tarpeen kehittää omat liitäntänsä SoC-toiminnallisuuteen ja antaa heille mahdollisuuden valita oma IDE-kehitysympäristö (integrated development environments) sovelluskehitykseen. Useimmilla komponenteilla on ohjelmistoliitäntä (poikkeuksia ovat matalan tason komponentit kuten LUT-hakutaulukot, logiikkaportit ja multiplexer-kertojat), joiden avulla oheislaitteita on helppo ajaa C-koodista. Sen sijaan, että joutuisi esittämään joukon muistin asetusrekistereitä (memory mapping) esoteerisilla bittiarvoilla ja (usein) dokumentoimattomilla sivuvaikutuksilla, komponentit sitovat tyypilliset toiminnallisuudet C-kielen API-kutsuiksi.
Kuva 3. PSoC Creatorin käyttöliittymässä näkyy tiedostonhallinta vasemmalla, piirikaavioeditori keskellä ja komponenttiluettelo oikealla.
Ajastimen käynnistämiseksi kutsutaan rajapintaa kuten Timer_1_Start(). (Et ikinä arvaa, miten se pysäytetään.) Ajastimen arvon lukeminen tapahtuu käyttämällä paluuarvoa Timer_1_ReadCounter(). Sen jälkeen kun API-rajapintojen tyyliin tottuu, API-nimen voi usein arvata komponentilla jota ei ole koskaan aikaisemmin käyttänyt. Ja jos et arvaa oikein, kustomointi-ikkunasta pääsee aina käsiksi täydelliseen datalehteen vain tuplaklikkaamalla komponenttia.
Kun laitesuunnittelu on valmis, sisäänrakennettu debugger-virheenkorjaus tukee firmware-ohjelmiston suunnittelua. Isäntälaitteeseen liittytään tyypilliseen tapaan JTAG- tai SWD-liitännän kautta. Cypressin kehitysalustoissa piirikortille on integroitu debuggauspiiri - joka on tietysti itsekin PSoC-piiri -joka korvaa perinteisen virheentarkistusmittapään. Laite vain liitetään USB-kaapelilla ja virheenkorjaus voi alkaa. Omaa laitteistoa varten voi debuggaukseen ostaa edullisen MiniProg3 -mittapään.
Kuva 4. PsoC-projektin virheentarkistusta ARM µVision-ympäristössä.
Dokumentaatio on menestyksen avain
Kaikkien komponenttien API-rajapinnat toimitetaan lähdekoodina, joten ohjelmiston ja laitteiston yhteentoiminnan virheentakristus on hyvin yksinkertaista. Mitään erillisiä kirjastoja ei tarvita, eikä suunnittelijan tarvitse metsästää webistä laiteajureita (jotka aina tuntuvat olevan jonkun toisen laitteen ajureita kuitenkin). Pysäytyskohtien asettamiselle ei ole rajoituksia, eikä sille mitä koodia voidaan käydä läpi virheentarkistuksessa. Assembler-näkymään tarvitsee vaihtaa vain hyvin harvoin, kun etsitään ratkaisua komponentin käyttäytymisen ongelmaan.
Nykyään kehitys on usein jaettu rauta- ja softatiimien kesken, eivätkä tiimit aina ole edes samassa rakennuksessa tai maassa. Tämä voisi olla ongelma, kun valitaan projektityökaluja, debuggausratkaisuja, ylläpitosopimuksia ja niin edelleen. Vaihtaminen täysin uuteen ohjelmistonkehitysympäristöön on usein epäkäytännöllistä, koska se on yleensä hyvin vakiintunut osa tuotekehityksen vuota ja tiukasti integroitu osaksi yrityksen järjestelmiä esimerkiksi lähdekontrollin ja dokumenttien hallinnan osalta.
Parempi lähestymistapa näissä ympäristöissä on harkita PSoC Creatoria “piirin konfiguroinnin” työkaluksi, eikä niinkään IDE-kehitysympäristön korvaajaksi. Laitesuunnittelijat voivat käyttää työkalua suunnittelun generointiin ja kaiken konfigurointidatan ja API-rajapintojen luomiseen. Softatiimin tarvitsee vain integroida nämä tiedostot valitsemaansa IDE-ympäristöön ja seurata omaa tuttua editoi-rakenna-tarkista -prosessiaan (edit-build-debug). Laitetiimi voi käyttää PSoC Creatoria vapaasti suunnittelujensa testipenkkien kehittämiseen ja testeissä käytettävien korttien rakentamiseen. On jopa mahdollista kehittää BSP-paketteja (board support package) tai laitteiston abstraktiokerroksia (HAL, hardware abstraction layers) jaettavaksi ohjelmistotiimin kanssa, mikä tekee laitteen käsittelystä mahdollisimman helppoa ja virheetöntä.
Uuden piirikortin siirtäminen ohjelmistosuunnittelijoille on valitettavan ongelmallinen prosessi. Tämän ongelman ratkaisemiseksi PSoC Creatorissa on toiminto, joka generoi PSoC-suunnittelusta datalehden. Yhteen ainoaan datalehtitiedostoon voidaan suoraan työkalusta koota laitekonfiguraation informaatio, kellopuun asetukset, pinnivalinnat ja kuvaukset kaikista generoiduista komponenttien API-rajapinnoista. Tällöin ei ole olemassa riskiä, että informaatiota kopioidaan väärin tai osa siitä unohdetaan, koska dokumentti on työkalun generoima.
Uudenlaisten mikropiirien, kuten Cypressin PSoC-piirien, myötä markkinoille on tulossa ratkaisuja, jotka näyttävät yhdistävän eri lähestymistapojen parhaat puolet. Nämä ohjelmoitavat ARM Cortex-M -pohjaiset piirit tarjoavata laajan valikoiman ohjainvaihtoehtoja, nopeuksia ja toimintoja ilman, että suunnittelijan tarvitsee integroida mukaan IP:tä, välittää väyläliitännöistä tai kehittää käynnistyskoodia. Lisäksi laitteisto on täysin ohjelmoitavissa, joten suunnittelija saa käyttöönsä ASIC-tyyppisen suorituskyvyn ja pienen tehonkulutuksen, hyvin kilpailukykyiset kustannukset ja pääsyn välittömästi tuotantovalmiisiin piireihin, jotka voidaan modifioida (uudelleenohjelmoida) aina siihen asti kun tuote on valmis toimituksiin. Ja mikä parasta, siruilla on suorituskykyisiä analogiatoimintoja kuten AD-muuntimia, komparaattoreiat ja vahvistimia, jotka perinteisistä FPGA-piireistä puuttuivat. Mikä siis estää luopumisen räätälöidystä IC-suunnittelusta ja tehosyöpöistä FPGA-piireistä?
Vastaus on yksinkertainen: kyse on ohjelmistosta. Jotta saisi kaiken irti näistä uusista piireistä, suunnittelijat tarvitsevat ohjelmistotyökaluja, jotka yhdistävät laite- ja ohjelmistokokemuksen rajoittamatta jokaista projektiin osallistuvaa yhteen yhtenäiseen IDE-kehitysympäristöön.