Uusilla älyelektroniikan verkkopiireillä ja sulautetuilla ohjain- ja FPGA-piireillä voidaan toteuttaa nykyisin entistä paremmin nettiin kytkettyjä laitteita. Niiden toteuttamiseen on tarjolla piirien ja koekorttien lisäksi uudenlaisia työkaluohjelmia, kerrotaan tässä nykyelektroniikan suunnittelukoulu-juttusarjan PLUS-jatko-osassa.
- Nykyelektroniikan suunnittelukoulu, osat 1-3 pdf- ja issuu-muodossa (LINKKI).
- Osa1. Tutki ja selvitä markkinoista piiri- ja ohjelmistovalintoihin
- Osa 2. Kohti protoa piireistä moduuleihin ja ohjelmointiin
- Osa 3. Kotelointi, laitekokoonpano ja sertifioinnit
- Nykyelektroniikan suunnittelukoulu+++, osat 4 ja 5 www.versioina
——————————————————————————————————————————————————-
Kirjoittaja Krister Wikström, kuvat valmistajat
Ohjelmoitavien logiikkapiirien historian voidaan katsoa alkaneen noin viisikymmentä vuotta sitten kun amerikkalainen Monolithic Memories julkaisi PAL-logiikkapiirinsä. Mainitut piirit olivat nykymittapuun mukaan perin vaatimattomia ja yksinkertaisia, mutta niissä toteutui ensimmäistä kertaa mahdollisuus muuttaa eli “ohjelmoida” mikropiirin sisäisiä kytkentöjä piirin valmistuksen jälkeen.
PAL-piireissä tämä tapahtui polttamalla piirin sisäisiä sulakkeita, mikä katkaisi piirin sisäisiä yhteyksiä. Tämä oli kertaluonteinen toimenpide, sulakkeita ei voinut palauttaa alkuperäiseen tilaan sen jälkeen kun ne oli “sulautettu” ja johdinyhteydet katkaistu.
Noista PAL-piireistä oli vielä pitkä matka nykyaikaisiin FPGA-piireihin, mutta sinne päästiin pääasiassa kahden yrityksen (vuonna 1984 aloittaneet Xilinx ja Altera) monikymmenvuotisen kehitystyön ja kilpailun kautta. Lopulta 2015 Intel osti Alteran ja vuonna 2022 AMD pani vielä paremmaksi ostamalla Xilinxin. 1980-luvulla aloittaneista FPGA-valmistajista on jäljellä enää yksi itsenäisesti toimiva yritys eli vuonna 1983 aloittanut Lattice Semiconductor.
FPGA-piirien rakenteet ja teknologiat
FPGA-piiri koostuu suuresta joukosta keskenään samanlaisia konfiguroitavia logiikkalohkoja (CLB, Configurable Logic Block). Piisirulla logiikkalohkot on järjestetty pystysuuntaisiin sarakkeisiin ja vaakasuuntaisiin riveihin. Logiikkalohkojen välissä on suuri joukko vaaka- ja pystysuuntaisia yhdysjohtoja, joilla logiikkalohkot voidaan yhdistää toisiinsa monin tavoin.
Logiikkalohko kykenee sellaisenaan suorittamaan erilaisia Boolen algebran mukaisia operaatioita ja lukujen aritmeettisia yhteenlaskuja. Itse asiassa kaikki numeeriset laskutoimitukset koostuvat mainituista alkeisoperaatioista. Digitaaliseen signaalinkäsittelyyn erikoistuneiden FPGA-piirien logiikkalohkoissa voi olla käytettävissä monimutkaisempiakin toimintoja kuten binäärilukujen kertolaskuja.
Pysty- ja vaakasuuntaisten johtojen risteyskohdissa on kytkinlohkoja, joissa on suuri määrä kytkimiä. FPGA-piirien “ohjelmointi” tarkoittaakin juuri kytkimien asettamista siten, että logiikkalohkot liittyvät toisiinsa niin, että kokonaisuus totauttaa halutut toiminnot. FPGA-piirissä voi olla miljoonia kytkimiä, joista kunkin asettaminen erikseen “sopivaan” asentoon olisi toivottoman työlästä ja epähavainnollista. Siksi FPGA-piirin ohjelmointi tapahtuu huomattavasti korkeammalla abstraktiotasolla käyttäen erityisiä kuvauskieliä ja logiikkasynteesityökaluja.
FPGA-piireissä käytetään useita erityyppisiä ohjelmointikytkimiä. Ensimmäisissä ohjelmoitavissa logiikkapiireissä “kytkimet” olivat sulakkeita, joita voi polttaa piirin ulkoisella virtapiikillä. Sen jälkeen tavanomaisten sulakkeiden tilalle ryhdyttiin käyttämään antisulakkeita. Nämä ovat aluksi ei-johtavassa tilassa mutta voidaan laittaa johtamaan sopivalla virtapiikillä. Antisulake toimii siis täsmälleen päinvastoin kuin perinteinen sulake, mihin nimikin viittaa. Kummankin mainitun kytkintyypin haittana on kertakäyttöisyys, eli kytkimiä ei ohjelmoinnin jälkeen voi palauttaa alkuperäiseen tilaansa.
Varsinkin protovaiheessa kertakäyttöisiä piirejä voi kulua yllättävän paljon kun vähäisintäkin ohjelmoinnin muutosta varten tarvitaan uusi, tuore piiri ja aiempi piiri muuttuu elektroniikkaromuksi. Useimmissa nykyaikaisissa FPGA-piireissä kytkimet ovat MOS-transistoreja, joiden tilaa ohjaa SRAM-muistisolu. Kytkimien ohjaustiedot tallennetaan SRAM-soluihin, mutta tieto kuitenkin katoaa aina kun FPGA-piirin jännitesyöttö katkeaa, joten tässä siis tarvitaan apuna haihtumaton muisti. Joissakin FPGA-piireissä haihtumaton muisti on samalla piisirulla kaiken muun kanssa, mutta yleisempi ratkaisu on FPGA-piirin ulkoinen, sarjaliitännällä varustettu Flash-muistipiiri. FPGA-piirissä on erityinen bootloader-lohko, joka automaattisesti imuroi ohjausdatan ulkoisesta muistipiiristä heti kun FPGA-piiriin kytketään syöttöjännite.
Antisulaketeknologiaan perustuvien FPGA-piirien etu on parempi kestävyys haasteellisissa olosuhteissa, erityisesti ionisoivassa säteilyssä, esimerkiksi satelliiteissa ja muissa avaruusaluksissa. Siksi antisulakepiireille on edelleenkin sekä kysyntää että tarjontaa, kuten Microchipin RTAX-piiriperhe. FPGA-piireissä sirulla voi varsinaisen ohjelmoitavan logiikkaverkon lisäksi olla monenlaisia muitakin toiminnallisia lohkoja. Sellaisia ovat erityisesti mikro-ohjaimet, joita sulautetuissa järjestelmissä paljon käytetään.
Logiikkaverkolla voi toki toteuttaa kokonaisen mikro-ohjaimen, ja eräät FPGA-piirivalmistajat tarjoavatkin omiin piireihinsä upotettavia “pehmosuorittimia”. Nämä eivät kuitenkaan koskaan toimi yhtä “hyvin” kuin kiinteät lohkot, joiden pinta-ala ja rakenne on optimoitu. Kiinteä lohko toimii melkein aina suuremmalla kellotaajuudella ja pienemmällä tehonkulutuksella kuin logiikkaverkolla toteutetut vastaavat toiminnot.
Mikro-ohjainten lisäksi FPGA-piireissä sirulla voi olla muitakin kiinteitä lohkoja kuten erittäin nopeat sarjaliitännät sekä radiolähettimiä ja -vastaanottimia lyhyen kantaman radioverkkoihin, joista yleisimmät ovat Bluetooth ja ZigBee.
Netistä löytyy mielenkiintoinen sivusto opencores.org, josta voi veloituksetta ja ilman lisenssimaksuja tai käyttörajoituksia hakea monenlaisten yksiköiden ja toimintojen VHDL- ja Verilog-kielisiä toteutuksia, mukaan lukien kokonaiset mikro-ohjaimet ja prosessorit. Sivustolla on yli 36 tuhatta rekisteröityä käyttäjää, ja työn alla on 1257 projektia, joissa enemmän tai vähemmän yhdessä kehitetään mitä erilaisimpia IP-lohkoja open source-periaatteella. Tämän mittavan kokoelman hyödyntäminen ei kuitenkaan ole mitenkään triviaalia, vaan siihen tarvitaan melkoisesti asiantuntemusta ja kokemusta kuvauskielistä ja niiden käytöstä.
FPGA-piirien ohjelmointi
Mikropiirien kehityksen alkuvuosikymmeninä piirit usein suunniteltiin piirikaaviopohjaisesti kuten muukin elektroniikka. Mikropiirien muuttuessa yhä monimutkaisemmiksi oli suunnitelmien hallinta aina vain hankalampaa ja epähavainnollisempaa. Tarvittiin siis parempia suunnittelumenetelmiä kuin paperiarkeille piirretyt kaaviot. Ratkaisu oli piirien tekstimuotoinen rakennekuvaus, jota varten Yhdysvaltain puolustusminiteriö toimeksiannosta 1980-luvulla kehitettiin VHDL-kuvauskieli. Sen esikuvana käytettiin ADA- ja Pascal-ohjelmointikieliä. 1980-luvulla kehitettiin toinenkin laajan suosion saanut kuvauskieli Verilog, jonka esikuva on C-ohjelmointikieli.
Mistä tahansa laitteesta, aparaatista, elävästä olennosta tai jopa esineestä kuten vasarasta tai tuolista voi periaatteessa aina esittää sekä toiminnan että rakenteen kuvauksen. Useimmille laitteiden käyttäjille toiminnallinen kuvaus on paljon, paljon kiinnostavampi, kun taas rakenteellinen kuvaus ei voisi vähemmän kiinnostaa. Toiminnallinen kuvaus on lähtökohtaisesti abstraktimpi kuin rakenteellinen kuvaus, sillä yleensä tietty toiminta voidaan saada aikaan monilla erilaisilla rakenteilla.
Normaalit ohjelmointikielet kuten C ovat esimerkkejä lähes puhtaasti toiminnallisista kuvauksista. Sen sijaan elektroniikan piirikaavio ja piirilevy ovat täysin rakenteellisia kuvauksia, josta ilmenee yksikössä käytetyt komponentit ja miten ne on liitetty toisiinsa. Mutta vain asiantuntija voi pelkästä piirikaaviosta päätellä miten elektroniikka toimii ja mitä tekee. VHDL- ja Verilog-kielillä voidaan kuvata FPGA-piirin rakennetta mutta myös toimintaa. Rekisterinsiirtokuvaus (RTL, Register Transfer Level) on yleinen rakenteellinen kuvausmenetelmä. Siinä laitteen ajatellaan muodostuvan kiikuista eli flipflopeista koostuvista rekistereistä, joihin dat hetkellisesti tallennetaan.
Kaikki datan muokkaus eli tietojenkäsittely tapahtuu yksinomaan rekistereiden välissä logiikka- ja aritmetiikkapiireissä, joiden kautta data siirtyy rekisteristä toiseen. Tässä on siis kyse synkronisesta logiikasta, jossa kaikilla kiikuilla on periaatteessa sama kellotaajuus. Jos kellosignaalin reitillä on liikaa viivettä, kiikut voivat vaihtaa tilaansa eri tahdissa ja järjestelmä sekoaa kuin orkesteri, jossa soittajat noudattavat kapellimestarin ohjausta vaihtelevalla viiveellä.
VHDL- tai Verilog-kuvauksesta on periaatteessa varsin pitkä matka FPGA-piiriin ladattavaan bittivirtaan, joka sisältää kytkimien ohjausbitit ja logiikkalohkoihin ladattavat konfigurointitiedot. Lopputulokseen päästäänkin logiikkasynteesiksi kutsutulla prosessilla. Siinä on aluksi sijoitusvaihe, jossa esimerkiksi määritellään minkä lohkon logiikkasoluilla kootaan tietty rekisteri. Sitten seuraa reititysvaihe, jossa määritellään rekistereiden väliset ja muutkin tarvittavat yhteydet.
Hyvin samantapaista sijoitus/reititysprosessia (place and route) käytetään myös elektroniikan piirilevyjen suunnittelussa. FPGA-piirin logiikkalohkoja ei tosin voi siirtää paikasta toiseen piisirulla kuten komponentteja piirilevyllä. Sen sijaan tietyn toiminnon kuten rekisterin toteutus voidaan siirtää lohkosta toiseen ja näin mahdollisesti lyhentää kriittisiä siirtoteitä ja viiveitä.
FPGA-piirien työkalupakkiin kuuluu aina logiikkasynteesityökalu, joka automaattisesti hoitaa toimintojen sijoituksen logiikkalohkoihin ja lohkojen väliset yhteydet suunnittelijan antamien reunaehtojen mukaisesti. Työkalu myös simuloi näin saatua konfiguraatiota etenkin viiveiden ja tehonkulutuksen osalta. Ellei automaattinen “place and route” suoraan tuota kelvollista lopputulosta, on tarjolla työkalu “floorplanning”, jolla logiikkasynteesin automaattisiin ratkaisuihin voi tehdä manuaalisia muutoksia. Tähän kyllä tarvitaan suurta asiantuntemusta, muuten lopputulos voi olla huonompi kuin lähtökohta.
FPGA-piirin kaikkia resursseja ei koskaan saada samanaikaisesti käyttöön, vaikka sijoittelua ja reititystä ikuisesti hioisi ja optimoisi. Parhaassakin tapauksessa voidaan päästä enintään kahdeksankymmenen prosentin käyttöasteeseen. Siten yli kaksikymmentä prosenttia sirulla olevista elementeistä ovat aina turhia ja hyödyttömiä kuluttaen sähkötehoa ja vieden tilaa piisirulla. ASIC-piiri tarjoaa FPGA-piiriin verrattuna ylivoimaisesti paremmat mahdollisuudet rakenteen ja toiminnan optimointiin. Toisaalta, ASIC-piirien suunnittelukustannukset ja valmistuksen aloituskustannukset ovat täysin eri suuruusluokkaa kuin FPGA-piirien hinnat. ASIC-piirit tulevat siksi kyseeseen vain riittävän suurissa tuotantosarjoissa.
Monia korttikokoja ja suoritinarkkitehtuureja
Piirivalmistajien mikro-ohjaimet ovat sulautettujen järjestelmien työjuhtia, joita on tarjolla useilla erilaisilla prosessoriarkkitehtuureilla. Valmistajat tarjoavat niihin myös kokeilu- ja kehityskortteja. Lisäksi harrastajataustaisena aloittanut Arduino ja Raspberry Pi ovat nykyisin huomionarvoisia myös ammattipiireissä.
Piirivalmistajien omien arkkitehtuurien rinnalla brittitaustainen ARM on noussut Cortex-M-pohjaisilla mikro-ohjaimilla vahvasti esiin. Sen haastajaksi on nousemassa RISC-V, jonka valttikorttina on open-source-periaatteella julkaistu käskykanta-arkkitehtuuri ja maksuttomuus.
Arduinon ja normaalimuotoisen Raspberryn rinnalla ammattisovelluksissa joustoa tarjoaa Raspberryn toinen formaatti “Compute Module” eli CM, jossa on vain yksi moninapainen liitin. CM on eräänlainen “makrokomponentti”, joka aina asennetaan erityiselle, tapauskohtaisesti räätälöidylle alustalevylle. Siinä on puolestaan tavanomaiset liittimet kuten USB ja Ethernet, jotka voi sijoittaa miten ja minne haluaa alustalevyllä.
CM-korttien lisäksi samantapaisia, alustalevylle asennettavia tietokonemoduuleja on saatavissa muissakin mekaanisissa formaateissa ja erilaisille prosessoriarkkitehtuureille. Niitä valmistavat esimerkiksi saksalaiset Kontron ja Congatec ja kiinalainen Aaeon. Nämä moduulit suuresti nopeuttavat ja helpottavat prototyyppien rakentamista, mutta soveltuvat erinomaisesti myös tuotantoon.
Mikro-ohjainten työkalut
Mikro-ohjainsovellusten kehitysympäristö on IDE (Integrated Development Environment). Siihen kuuluu joukko työkaluja, ainakin tekstieditori ja koodin kääntäjä (compiler) ja linkittäjä.
Koodin testausta varten tarvitaan lisäksi debuggeri, joita on tarjolla sekä puhtaasti ohjelmistopohjaisia kuin myös laitteistoavusteisia. Jälkimmäiset ovat yleensä monipuolisempia ja niillä voi paremmin seurata mitä sovelluskoodissa oikein tapahtuu.
IDE on siis sovellus, joka toimii muussa tietokoneessa kuin kohdejärjestelmässä, kääntää sovelluskoodin konekoodiksi, lataa testattavan koodin kohdejärjestelmään ja kykenee eri tavoin ohjaamaan testattavan koodin ajoa kohdejärjestelmässä. IDE-sovelluksia on tarjolla kutakuinkin joka lähtöön sekä kaupallisina että open source-versioina. Monet näistä hyödyntävät Eclipse-kehitysympäristöä, jonka aikoinaan kehitti IBM mutta lopuksi sitten veloituksetta lahjoitti kenen tahansa käyttöön.
Aikojen kuluessa on kehitetty vaikka minkälaisia ohjelmointikieliä, joista monet eivät koskaan saavuttaneet laajaa käyttäjäkuntaa tai muusta syystä ovat unohtuneet historian hämärään. Tarkkaan etsimällä netistä löytyy toki mitä tahansa, myös jonkin verran tukea kaikkein erikoisimmillekin kielille kuten APL. Vapaaehtoistyöhön perustuva GNU-organisaatio kehittää ja ylläpitää perustyökaluja varsin monelle ohjelmointikielelle.
Perinteisen tekstimuotoisen koodauksen lisäksi mikro-ohjainsovellusten toteutukseen on tarjolla joitakin enemmän “visuaalisia” työkaluja. Esimerkiksi Flowcode-työkalussa sovelluksen voi laatia vuokaaviona, jonka Flowcode sitten kääntää konekoodiksi.
Artikkelisarjan on koonnut Krister Wikström, jolla on vuosikymmenien kokemus elektroniikan suunnittelijana. Hän on erikoistunut sulautettuihin järjestelmiin, anturiverkkoihin ja teollisen internetin sovelluksiin.
English Summary: Modern embedded and FPGA technics
Networking chips, microcontrollers and FPGA chips make it ever so much easier to design and develop all sorts of connected devices. To take advantage of all that, different development tools and evaluation boards are needed. In this part of our series we present an overview and basic info regarding microcontroller and FPGA chips and their development tools.
Microcontrollers are real workhorses in embedded systems, considering that even the most basic home appliance includes at least one microcontroller. Controller chips and development cards are available in quite bevildering varieties, sometimes making it difficult to make optimal choices.
Compared to microcontrollers, FPGA chips are in many ways a different story and can be used to enhance the processing power of a CPU. In embedded systems a FPGA is usually not an alternative to a microcontroller, but instead work together. Many FPGA chips even include one or two hard-coded microcontroller blocks together with a programmable fabric.
This new article series of offers engineers practical information and ideas for the development of new types of devices, from design to final implementation. In the fourth article we present the most important and fundamental tasks and choices that should be considered in an embedded design process using FPGA chips and microcontrollers. We also present a listing of the main design choices.
Artikkeliin liittyvät tärkeimmät lisätietolinkit löydät www.uusiteknologia.fi/linkkipankki. Mukana on linkit artikkelissa mainittujen tuotteiden valmistajiin sekä kirjoittajan aiempiin sulautetun alueen artikkeleihin Uusiteknologia.fi-lehdissä vuosina 1996-2023 (LINKKI).
Aloituskuva: Piirivalmistajien lisäksi kehitystyökalujen valmistajat ovat huomioineet ARM:n kanssa kisaavat suoritinarkkitehtuurit. Esimerkiksi MikroElektronika on tuonut laajennetun tuen RISC-V:lle Necto Studio 2.0:lle. Design tool vendors also offer support for processor architectures competing with theubiquitous and ever present ARM. Kuva/photo: MikroElektronika