Ohjelmoitavan logiikan kehittäjien seuraava sukupolvi

Joskus kauan sitten ennen loogisen synteesin aikakautta insinööriä olisi saatettu pyytää suunnittelemaan täysin looginen järjestelmä. Siihen aikaan oli olemassa tutka, mutta ei mikro-ohjaimia, ja digitaalinen signaalinkäsittely oli olemassa, mutta myynnissä ei ollut valmiita digitaalisia signaaliprosessoreita. Digitaaliseen signaalinkäsittelyyn perustuva tutka oli kuitenkin olemassa.

Vastavalmistuneen insinöörin piti siihen aikaan osata suunnitella analogisia ja digitaalisia laitteita sekä kehittää ohjelmistoja. Pelkäänpä, että laajan, monipuolisen insinöörityön aikakausi on mennyttä, ja olen huolissani loogisen suunnittelun tulevaisuudesta. Jos ainoa työkalu on vasara, kaikki ongelmat näyttävät naulalta, sanoo vanha sanontakin. Olemmeko saavuttaneet jo pisteen, jossa kaikki ongelmat näyttävät ohjelmisto-ongelmilta?

Jos netistä tekee haun ilmaisulla ”FPGA applications”, saa luettelon elektroniikan eturintaman sovelluksista. Ne vaihtelevat tekoälystä ja puheentunnistuksesta tiedonsiirtoon ja kuvankäsittelyyn. Tällaiset sovellukset eivät kuitenkaan ole millään tapaa yksinkertaisia – niitä ei ole tarkoitettu aloittelijoille. Niiden toteutuksen hallinta vaatii valtavasti monenlaisten monimutkaisten aiheiden opettelua.

Opeteltavana ovat itse ohjelmoitavat logiikkakomponentit, niiden integroidut kehittämisympäristöt (IDEt – ja jokaisella valmistajalla on omansa) ja uudet ohjelmointiparadigmat (laitteistokuvauskielet eli HDL:t ja niiden mukautukset samanaikaisuudesta ja aikakäsitteestä). Myös itse sovellus täytyy ymmärtää. Kaikkien näiden asioiden hallinta on yleensä mahdotonta muille kuin asiantuntijoille. Tämä ei ole kovin inspiroivaa logiikkasuunnittelijoiden seuraavan sukupolven kannalta, joka haluaa päästä alkuun ohjelmoitavaan logiikkaan liittyvien taitojensa hyödyntämisessä. Ensimmäinen askel on liian vaikea. Uskon, että tämä heikentää ihmisten halukkuutta tulla tälle alalle ja vähentää siten ohjelmoitavan logiikan faneja tulevaisuudessa. Internetistä löytyy paljon kertomuksia, joissa ihmiset kuvailevat turhautumistaan ohjelmoitavan logiikan suunnittelun nykytilanteeseen, ja moni avoimen lähdekoodin yhteisö pyrkii ratkaisemaan tätä ongelmaa. Monet uskovat, että pelastus löytyy metaohjelmoinnista, jossa ohjelma käyttää toista ohjelmaa datanaan.

Ohjelmoitavan logiikan alan yritykset ovat hankalassa tilanteessa. Niiden sijoittajat vaativat niiltä yhä monipuolisempien ja kalliimpien sirujen kehittämistä, mutta toisaalta suhteessa yhä harvemmat ihmiset pysyvät käyttämään niitä. Yritysten ratkaisu on tehdä ohjelmistokehittäjistä laitteistosuunnittelijoita, ja ne käyttävät tähän uusia työkaluja.

HLS-kääntäjät (High level synthesis) vievät suunnittelun vieläkin abstraktimmalle tasolle, mikä johdattaa meidät yhä kauemmas loogisen suunnittelun juurilta. On aika hienoa, että pystymme tuottamaan kehittyneitä laitteistosuunnitelmia pelkästään ohjelmistokuvausten avulla, mutta tässä toimintatavassa ei oteta huomioon sitä, miten houkuttelevaa looginen suunnittelu voi olla ihmisille. En väitä, että ihminen pystyisi voittamaan tietokoneen optimoinnissa, mutta olen kylläkin sitä mieltä, että yksinkertaisten piirien suunnittelu oli ennen helpompaa. Ongelma onkin juuri siinä, että yksinkertaisten piirien suunnittelu on nykyään aiempaa vaikeampaa.

Muistan, miten riemuissani olin, kun näin oman loogisen suunnittelutyöni piirin muodossa. Oma älyni minimoi tarvittavien laitteiden lukumäärän. Kun opiskelin ohjelmoitavaa logiikkaa 1990-luvun alkupuolella, olin vieläkin iloisempi siitä, että pääsin hyödyntämään piirisuunnittelutaitojani logiikan toteuttamisessa yhdessä 128:sta logiikkaelementistä koostuvassa laitteessa, ja että minun älyni valitsi jokaisen noista logiikkaelementeistä. En joutunut tukeutumaan jonkun tuntemattoman algoritminkehittäjän älyyn.

Logiikkasuunnittelun rinnalla kehittyi myös ohjelmistosuunnittelu. Se on muuttunut pitkälti olio-ohjelmoinnin (OOP) maailmaksi, ja yleisten suunnittelumallien kirjastot on dokumentoitu hyvin ja ne ovat saatavana koodikirjastoissa. Oma suunnittelumallikirjani on kirja, joka oli aikanaan suosittu: Erich Gamma, et. al., Design Patterns, Elements of Reusable Object-Oriented Software. Minusta on kiinnostavaa, että laitteistosuunnittelu alkoi oliopohjaisena, mutta HDL-kielten ilmestyminen pysäytti tämän kehityksen. Vaikka suunnitelmien uudelleenkäyttö on mahdollista laitteistokuvauskielissä, suunnittelukirjastot sisältävät perustoimintoja. Internethaulla ”List of 7400-series integrated circuits” löytää joitakin varhaisia laitteistosuunnittelumalleja. Minusta on kiinnostavaa, että Meilir Page-Jones viittaa kirjassaan Fundamentals of Object-Oriented Design in UML integroituihin piireihin esimerkkinä hyvästä oliosuunnittelusta, sillä niissä yhdistyvät suuri koheesio ja vähäiset kytkennät. Olemme kuitenkin kadottaneet yksinkertaisen ja suoran logiikkasuunnittelun lähtökohdat pyrkiessämme kehittämään yhä monimutkaisempia ohjelmoitavia logiikkalaitteita. Nykyisissä suunnittelumenetelmissä logiikka toteutetaan tietokonealgoritmin avulla. Mielestäni tämä lähestymistapa tekee ohjelmoitavan logiikan oppimisesta vaikeampaa aloittelijoille.

Voisi kysyä: ”Kuinka monta riviä koodia oli ensimmäisessä televisioon kytkettävässä Pong-pelissä?” Vastaus on nolla. Peli oli nimittäin puhtaasti laitteisto (ks. kuva 1), eikä siinä ollut mitään ohjelmistoa! En usko, että kovinkaan moni vastavalmistunut insinööri osaisi suunnitella Pong-pelin ilman ohjelmiston käyttöä.  He kysyisivät: ”Miksi niin pitäisi tehdä?” Minä vastaisin: ”Perspektiivin saamiseksi ja koska teidän on syytä tietää, että se on mahdollista ja helpompaa kuin uskottekaan.”

Kuva 1: Pong-pelin piirikaavio (Kuva löydetty Adafruit-blogin kautta, alkuperä tuntematon)

IEEE julkaisi vuoden 2019 alussa luettelon ohjelmointikielistä, joita insinöörit rakastavat ja vihaavat. Sen mukaan insinöörit rakastavat Pythonia, ja uskon sen hyvin. Toimin vuosikausia sitten Texas Instrumentsin suunnittelukilpailun tuomarina ja huomasin, että yhdeksän collegejoukkuetta kymmenestä käytti projekteissaan Pythonia. VHSIC Hardware Description Language (VHDL) ja Verilog eivät olleet suosikkien eivätkä inhokkien luetteloissa. Voi olla, että IEEE:n toimittajat eivät pitäneet näitä HDL-kieliä ohjelmointikielinä, mutta todennäköisemmin kukaan kyselyyn osallistujista ei ollut koskaan edes harkinnut laitteistokuvauskielten käyttöä. Jos tämä pitää paikkansa, se kuvastaa hyvin sitä, miten harvat insinöörit miettivät näitä kieliä tai ylipäänsä loogista suunnittelua, ja tämä on paha merkki loogisen suunnittelualan kannalta.

Mitä sitten pitäisi tehdä? Kuinka kehitämme uusille insinööreille ajattelumallin, jossa tarkastellaan ongelmaa ja etsitään siihen ratkaisua joko ohjelmistosta tai laitteistosta? Useimmat ongelmat voi nimittäin ratkaista kummallakin tavalla. Minulla on tähän liittyvä idea.

Uskon, että Arduino-alusta sai valtavat määrät nuoria kiinnostumaan ohjelmistoista. He opiskelevat nyt tietotekniikkaa ja tietojenkäsittelyoppia. Miten Arduino onnistui tässä? Arduino helpotti ohjelmistokehittämisen oppimista ja teki ohjelmistokehityksestä vähemmän pelottavaa.

Kortin määrittelyllä voitiin välttyä tarpeelta määrittää linkkikomentotiedostoja, signaalien nimistä tuli standardi ja sen IDE piilotti kääntämistiedot. Yksi Pythonin kauniista piirteistä on se, että se edellyttää tarkkaa muotoilua. Esimerkiksi sisennysten täytyy olla yhtenäisiä. Tämä poistaa arvoltaan vähäiset, sattumanvaraiset valinnat, ja tekee koko kehittämisprosessista yksinkertaisemman, mikä puolestaan tehostaa kehitystyötä. Tätä vastaava ratkaisu tarvitaan myös ohjelmoitavaan logiikkaan, ja koko alan kannattaisikin kehittää standardi yhteistyössä.

Seuraavassa on joitakin ominaisuuksia, joita itse kannatan osaksi tällaista standardia. Aivan kuten Arduinossa ei ole luontaista ja kestävää mahdollisuutta muokata sen perusarkkitehtuuria, kuten sisäkkäisten keskeytysten käyttöä, oletetaan, että tällä alustalla ratkaistavat logiikkaongelmat ovat niin yksinkertaisia, että nykyiset ohjelmoitavat logiikkalaitteet pystyvät vastaamaan kaikkiin aikarajoituksiin. Arduinon vastineen, ohjelmoitavan logiikkapiirilevyn (PLDB), kellon olisi oltava niin hidas, että mikä tahansa tuhannen logiikkaelementin suunnitelma toimisi. Tämä tarkoittaa, että alusta vaatisi vain yhden funktionaalisen todennuksen.

Koska kaikki rakastavat Pythonia, ehdotan, että PLDB:tä tuettaisiin Pythonilla ja rakennettaisiin nMigenin tai MyHDL:n kaltainen runko (ks. kuva 2) – tai jopa RTLIL:ää käyttävän Yosysin kaltainen. Näin aloittelijat pääsisivät simuloimaan loogisia suunnitelmiaan tulkitun kielen avulla, tuottamaan totuustaulukkoja ja käyttämään saatavana olevia Python-kirjastoja. Python-kirjastoista tulikin mieleeni, että Pythonin käytön ansiosta yhteisö voisi käyttää myös Python package indexiä (PyPI) uudelleenkäytettävien laitteistolohkojen jakeluun, jolloin käyttöön saataisiin kestäviä, jaettuja suunnittelumalleja. nMigen tukee metaohjelmointia Pythonin tapaan, joten vaikka tämä runko tukeekin yksinkertaista suunnittelua, alusta on skaalattavissa tukemaan monimutkaisiakin ratkaisuja.

Kuva 2: Python-pohjainen runko (kuvien lähteet: MyHDL.org ja m-labs.hk)

Isäntätietokoneen ja PLDB:n rajapinta olisi toteutettava USB-yhteytenä, jossa käytetään PLDB-sulautettua mikro-ohjainta. Sen ja isäntätietokoneen välisen APIn pitäisi oppia PLDB:n kokoonpano, jolloin se voisi määrittää Python-ympäristön automaattisesti ohjelmoitavan logiikan kehittämiseen. Tämä ratkaisu piilottaisi kaikki synteesin tulokset, sijainnin ja reitin sekä ohjelmoinnin, ja sen avulla tietokoneella voitaisiin tehdä toimintojen simulointi ja ne voitaisiin toteuttaa varsinaisella laitteistolla.

Siltä varalta, että jotkut lukijat kuvittelevat, ettei yksinkertaisia logiikkaongelmia enää ole ratkaistavana, jaan hieman Digi-Keyn mikro-ohjainten myyntitietoja. Kuvassa 3 on esitetty asiakkaiden ostamien mikro-ohjainten luokat ja kuvassa 4 kunkin luokan myytyjen laitteiden määrät. Digi-Keyllä on kaiken kaikkiaan yli 80 000 mikro-ohjainten osanumeroa ja varastossa yli 19 000 mikro-ohjainta valmiina välittömään toimitukseen minne tahansa maailmassa. Kuvat osoittavat, että yksinkertaisia 8-bittisiä suorittimia käyttää useampi insinööri ja että DigiKey toimittaa 8-bittisiä mikro-ohjaimia enemmän kuin mitään muita suorittimia. Tämä osoittaa minulle, että yksinkertaisia ongelmia on enemmän kuin monimutkaisia.

Kuva 3: Erilaisia mikro-ohjaimia ostavien Digi-Keyn asiakkaiden määrät (kuvan lähde: DigiKey)

Kuva 4: Digi-Keyn myymien mikro-ohjaintyyppien laitemäärät (kuvan lähde: DigiKey)

Meidän tulisi pitää tavoitteena, että kuka tahansa voi kehittyä ohjelmoitavan logiikan faniksi myös ilman alan muodollista koulutusta, mutta tavoitteen toteutuminen edellyttää kehittämisparadigmojen muuttamista.

Tietoja kirjoittajasta

Image of Randy Restle

Randall Restlellä on yli 40 vuoden kokemus elektroniikkakomponenttiteollisuudessa.  Hän on nyt puoliksi eläkkeellä, aikaisemmin hän toimi DigiKey Electronicsin sovellussuunnittelun varatoimitusjohtajana. Hänellä on kokemusta kyvykkäistä sovellusinsinööreistä, teknikoista ja johtohenkilöistä muodostuvien tiimien johtamisesta originaalien ja ainutlaatuisten huipputeknisten tuotteiden kehittämisessä.

Hänen henkilökohtaisiin harrastuksiinsa kuuluvat digitaalinen signaalinkäsittely, ohjelmoitavan logiikan toteutus, liikeohjauksen parantaminen sekä ohjelmistosuunnittelu.  Hänellä on patentteja useilta teollisuudenaloilta ja hän toimii IEEE-järjestössä vanhempana jäsenenä.  Randall on suorittanut Cincinnatin yliopistossa BSEE-, MS- ja MBA-tutkinnot.

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum