Ohjelmoitavat logiikkapiirit ovat osa yhä useamman digitaalisuunnittelijan arkipäivää. Prosessori-lehti tutustuu tämän vuoden numeroissaan tarkemmin useiden valmistajien CPLD- ja FPGA-piirien suunnitteluohjelmistoihin. Sarjan ensimmäisessä osassa esittelemme ohjelmoitavien piirien moderneja suunnittelumenetelmiä ja käytännön vaikeuksia.
Ohjelmoitavat logiikkapiirit ovat kehittyneet uskomattomat nopeasti viime vuosina. Piirien kapasiteetit ovat jo kymmeniä tuhansia portteja ja kasvu jatkuu lähivuosia vähintään samaa vauhtia, kun valmistajat siirtyvät tiheämpiin valmistusteknologioihin. CPLD- ja FPGA-piirit ovatkin elektroniikkakomponenttien nopeimmin kasvava alue. Prosessorin numerossa 1/95 oli yksityiskohtainen katsaus ohjelmoitavien logiikkapiirien tekniikkaan.
Monipuolisten piirien toimintojen tehokas käyttö vaatii myös päteviä suunnittelutyökaluja. Monipuolisimmat ohjelmistot vastaavat ominaisuuksiltaan jo varsinaisten ASIC-piirien suunnitteluun käytettäviä työkaluja.
Monet elektroniikkasuunnittelijat ovat tottuneet käyttämään pieniä PLD-piirejä hajalogiikan korvaamiseen logiikkakorteilla. Tilan säästön lisäksi näin toteutettussa kytkennässä voidaan korjata pieniä suunnitteluvirheitä ja lisätä uusia toimintoja joustavasti ilman piirilevymuutoksia.
Ohjelmoitavien piirien nopea kehitys on mullistanut perinteisen logiikkasuunnittelun. Hajalogiikkaa ei enää pienissäkään valmistussarjoissa kannata kasata erillisistä TTL- tai CMOS-paketeista. Järjestelmät kootaan prosessoreista, muisteista ja oheispiireistä, joiden tarvitsemat aputoiminnat pakataan sopivan kokoiseen CPLD- tai FPGA-piiriin.
Ohjelmoitavat piirit tekevät mahdolliseksi aivan uudenlaisia joustavia ratkaisuvaihtoehtoja. SRAM-ohjelmoitavat piirit esimerkiksi sallivat sovelluksen logiikan lataamisen tietokoneen levyltä tarpeen mukaan. Joidenkin valmistajien piireillä sisäisen logiikan muuttaminen voi tapahtua jopa normaalin toiminnan aikana.
Eräissä teollisuuselektroniikan sovellutuksissa on selvää etua siitä, että ohjelmoitavaan logiikkapiiriin piilotetun logiikan toimintaa on huomattavasti vaikeampi selvittää ja kopioida kuin esimerkiksi sulautetun järjestelmän ohjelmiston toimintoja. Yritykset voivat näin vaikeuttaa tuotteidensa tai niiden toimintaperiaatteiden kopiointia.
Suuren kapasiteetin CPLD- ja FPGA-piirit eivät ole halpoja. Prototyypeissä ja pienissä valmistussarjoissa piirien hinta saadaan takaisin säästyneenä suunnitteluaikana ja harvemmissa piirilevyjen korjauskierroksissa.
Piirien hinta voi muodostua ongelmaksi, kun valmistusmäärä on muutamia satoja tai tuhansia kappeleita vuodessa. Nämä määrät ovat selvästi liian pieniä varsinaisten ASIC-piirien käyttöön, joiden hinta riittävän suurissa sarjoissa on hyvin halpa.
Ratkaisuksi eräät ASIC-valmistajat tarjoavat palvelua, jossa ohjelmoitavasta logiikkapiiristä tehdään nastayhteensopiva ja toiminnallisesti identtinen maskiohjelmoitava porttimatriisi, jonka hinta jo suhteellisen pienissäkin sarjoissa on huomattavasti PLD-piirejä halvempi. Aloituskustannuksia ei ole, mutta valmistajat saattavat edellyttävät ostositoumusta tietyn suuruiselle piirimäärälle.
CPLD-piirit ovat sisäiseltä rakenteeltaan karkeajakoisia. Ne sisältävät joukon monipuolisia makrosoluja, joista jokainen voidaan ohjelmoida toteuttamaan tietty looginen kytkentä. Makrolohkot kytketään toisiinsa ohjelmoitavilla johdotuksilla.
CPLD-piirien käytettävissä olevasta porttimäärästä pystytään käyttämään hyödyksi tyypillisesti vain alle puolet. Rajoittavina tekijöinä ovat makrosolujen sisäinen logiikka ja rajalliset johdotusmahdollisuudet solujen kesken. Paras täyttöaste saavutetaan silloin, kun suunnittelussa käytetään valmistajan makrosymboleja, jotka on optimoitu käyttämään tehokkaasti makrosolujen resursseja.
FPGA-piirit ovat rakenteeltaan hienojakoisempia kuin CPLD-piirit. Suunnittelutyökalut pystyvät helpommin käyttämään FPGA-piirin logiikkaelementtejä tehokkaasti, joten piirien käyttöaste muodostuu suuremmaksi kuin CPLD-piireissä. Sen sijaan ajoitusta on vaikeampi ennustaa, koska johdotus muodostaa merkittävän osan kytkennän viiveistä.
Piirivalmistajien omat integroidut suunnitteluohjelmistot ovat hinnaltaan edullisia ja helppokäyttöisiä. Ne tukevat myös parhaiten kyseisen valmistajan uusimpia piirityyppejä ja niiden erikoisominaisuuksia. Haittana on luonnollisesti vain yhden valmistajan piirityyppien käyttömahdollisuus.
Jotkut piirivalmistajat, kuten Altera ja Cypress, ovat kehittäneet täysin omia ohjelmistoja piiriensä kehitystueksi. Useimmat muut käyttävät ViewLogicin Windows-ohjelmien rajoitettuja versiota omien tuotteidensa tukemiseen. Näihin ei voi kuitenkaan hankkia muiden valmistajien piirien kirjastoja.
Aloittelevan PLD-suunnittelijan kannattaa suunnitella ensimmäiset sovelluksensa piirikaaviopohjaisella järjestelmällä. Ohjelmistojen mukana tulevissa kirjastoissa ovat tavanomaisten portti- ja kiikkutyyppien lisäksi mukana myös tutut TTL- ja CMOS-logiikkapiirit.
Viimemainitut ovat makrofunktioita, jotka vastaavat toiminnallisesti esikuviaan. Niiden rakenne on kuitenkin optimoitu piirin makrosolujen rakenteelle sopivaksi. Ajoitukset poikkeavat vastaavista standardipiireistä, yleensä onneksi nopeampaan suuntaan. Kytkennät, joiden oikea toiminta on riippuvainen porttiviiveistä, eivät todennäköisesti toimi samoin kuin erillisillä TTL-piireillä toteutettuina.
Suunnittelijan voi valita haluamansa piirityypin valmistajan valikoimasta. Haluttaessa ohjelmat osaavat myös hakea sopivan kokoisen piirin tai jakaa kytkennän automaattisesti kahdelle tai useammalle piirille.
Valmiista piirikaaviosta saadaan automaattisesti suoritettavien käännös-, synteesi- ja sovitusvaiheiden jälkeen todelliset viiveet sisältävä kytkentä, jota voidaan simuloida yhdysrakenteisella digitaalisimulaattorilla toiminnan ja ajoitusten tarkistamiseksi.
Simulaattorin käyttö toiminnan ja ajoitusten varmistamiseen on välttämätöntä vähänkin monimutkaisemmissa kytkennöissä. Digitaalisimulaattori on hyvin havainnollinen työkalu, jossa piirin eri nastoja ja sisäisiä signaaleja voidaan tarkastella ajan funktioina. Piirikaavion signaaleille annetut selväkieliset nimet ovat käytettävissä myös simulattorissa.
Simulaattorissa määritellään piirille tulevat heräteet, kellot ja signaalit. Halutut lähtösignaalit ja piirin sisäiset signaalit, kuten kiikkujen tilat, voidaan esittää näytöllä sopivassa muodossa. Esimerkiksi väyläsignaalit voidaan yleensä esittää binäärisessä, desimaalisessa tai heksadesimaalisessa muodossa.
Simulaattori näyttää havainnoillisesti virhetilanteet, joissa esimerkiksi kiikun asettumis- tai pitoaikoja on rikottu. Herätteiden täytyy tietysti kattaa kaikki mahdolliset, ja ehkä myös mahdottomatkin tilanteet. Simulaattorin huolellinen käyttö varmistaa piirin luotettavan toiminnan piirilevyllä osana muuta järjestelmää.
Virheettömän simulointituloksen jälkeen voidaan muodostaa JEDEC-standardin mukainen ohjelmointitiedosto, jonka avulla varsinainen tai siihen liitettävä muistipiiri lopulta ohjelmoidaan.
Vaikka uudelleenohjelmoitavat logiikkapiirit sallivatkin virheiden korjaamisen ilman ylimääräisiä materiaalikuluja, korjauskierrokset vievät kuitenkin kallista aikaa. Siksi kannattaa pyrkiä virheettömään lopputulokseen jo ensimmäisellä suunnittelukierroksella.
Piirivalmistajat käyttävät edullisia suunnitteluohjelmistojaan tukemaan omien piiriensä myyntiä. Kytkennän muuttaminen toisen valmistajan ohjelmistoille ja piireille ei yleensä käy kovinkaan helposti. Tämä ei todennäköisesti ole haitta yritykselle, joka käyttää ohjelmoitavia piirejä vain muutamissa sovelluksissa.
Jos ohjelmoitavien piirien käyttö on laajaa, on edullisempaa käyttää ohjelmistoja, jotka tukevat useiden eri piirivalmistajien tuotteita. Silloin voidaan käyttää kuhunkin sovellutukseen siihen parhaiten soveltuvia piirityyppejä. Nämä ohjelmistot tarjoavat myös monipuolisemman tuen edistyneille suunnittelumenetelmille ja tehokkaille aputyökaluille. Toisaalta niiden käyttö vaatii aina enemmän asiantuntemusta ja koulutusta.
Piirivalmistajan suosittelevat yleensä, että suunnitteluohjelmiston annetaan vapaasti valita piirin nastajärjestys. Näin ohjelmisto voi tehokkaimmin hyödyntää rajalliset johdotusmahdollisuudet nastojen ja piirin logiikkasolujen välillä. Erityisen tärkeää tämä on silloin, kun piirin käyttöaste on korkea.
Tällä menetelmällä piirin nastajärjestys saattaa vaihtua pienenkin muutoksen jälkeen, ja seurauksena on kalliita ja aikaa vieviä piirilevyn korjauskierroksia. Suunnittelija voi halutessaan valita nastajärjestyksen etukäteen tai jäädyttää jo olemassa olevan järjestyksen. Silloin täytyy varautua vaikeuksiin suunnitteluohjelman yrittäessä sovittaa muutettua logiikkaa piirille.
Joissakin uusissa piirityypeissä ilmoitetaan olevan niin runsaasti reititysmahdollisuuksia lähtönastoja varten, että ennalta valittua tai jäädytettyjä nastajärjetystä voidaan käyttää ilman sovitusongelmia. Nämä piirityypit ovat erityisen käyttökelpoisia sovelluksissa, joissa piirin kytkentää joudutaan useasti muuttamaan.
CPLD-piirien makrosolujen viiveet ovat tarkasti ennustettavissa, ja niillä päästään suuriin toimintanopeuksiin ja kellotaajuuksiin silloin, kun suurta nopeutta vaativat toiminnat sopivat yhteen makrosoluun. Makrosolujen väliset hitaammat reititykset pudottavat kuitenkin koko piirillä saavutettavaa suorituskykyä. Jos kellotaajuudet ovat piirin suorituskyvyn rajoilla, pienikin kytkennän muuttaminen saattaa aiheuttaa suuria muutoksia ajoitukseen ja toimintaan.
FPGA-piireissä johdotus muodostaa merkittävän osan piirin viiveistä. Piirin nopeus riippuu siten suuresti kytkennän monimutkaisuudesta eikä ole yhtä hyvin ennustettavissa kuin CPLD-piireillä. Monipuolisimmassa ohjelmistoissa on usein erityinen layout editor -ohjelma, jolla suunnittelija voi ohjata kytkennän elementtien sijoittelua siten, että kriittisten lohkojen johdotuksen viivet voidaan minimoida.
Piirivalmistajien ilmoituksiin suurimmista kellotaajuuksista kannattaa suhtautua varauksin. Ilmoitetut taajuudet pätevät yleensä vain kytkennöille, jotka on tarkasti optimoitu kyseisen piirin makrosolujen rakenteen mukaan siten, että nopeimmat toiminnot tapahtuvat solujen sisällä. Näin menetellen voidaan päästä huomattavan suuriin kellotaajuuksiin. Koko piiri voi kuitenkin toimia luotettavasti kenties kolmasosalla tästä taajuudesta. Syynä ovat jälleen makrosolujen väliset hitaammat reititykset.
Jos valmistaja lupailee esimerkiksi 60 megahertsin kellotaajuuksia, ei koko piiriä kannata yrittää kellottaa juuri 20 megahertsiä nopeammin. Suuria kellotaajuuksia voi kyllä käyttää paikallisesti esimerkiksi taajuusjakajissa silloin, kun jakajana voidaan käyttää valmistajan optimoituja makrolohkoja.
Suuria kellotaajuuksia tarvittaessa kannattaa käyttää sulakeohjelmoitavia piirityyppejä. Sulakeohjelmoitavat piirit voivat, ainakin teoriassa, toimia suuremmilla kellotaajuuksilla kuin muistikytkimillä ohjelmoitavat piirit. Ohjelmoitujen antisulakkeiden resistanssi on pieni ja ne sallivat pienikokoisina myös tiheän porttimatriisin. Näin johdotuksen viiveet pysyvät pieninä.
Tuhansia portteja sisältävien CPLD- ja FPGA-piirien suunnittelu piirikaaviota käyttäen on hidasta ja virheille altista. Tiheiden piirien suunnitteluun voidaan käyttää samoja suunnitteluperiaatteita ja -menetelmiä kuin ASIC-piirienkin suunnitteluun. Ne perustuvat korkean tason kuvauskielten käyttöön piirin toimintojen määrittelyssä, logiikan suunnittelussa ja testauksessa.
Valitettavasti vain näiden edistyneiden menetelmien vaatimat ohjelmistot ovat vieläkin aika kalliita ja niiden käyttö vaatii melkoista asiantuntemusta. Kuvauskielistä parhaiten stardisoitu ja Suomessa yleisin on VHDL.
Laajan logiikkajärjestelmän tarkka ja yksikäsitteinen spesifiointi saattaa olla kuukausia vaativa urakka. Määrittelyssä tehdyt virheet ja puutteet tulevat erityisen kalliiksi, sillä ne havaitaan usein vasta kun koko laite on valmis. Kuvauskieltä voidaan käyttää tehokaasti apuna jo projektin määrittelyvaiheessa.
Niin sanotulla käyttäytymismallilla järjestelmän toiminta voidaan kuvata ja spesifioida tarkasti ja yksikäsitteisesti. Järjestelmää pidetään mustana laatikkona, jonka vaste tietyille tulosignaaleille on haluttu. Tässä vaiheessa ei vielä kiinnitetä mitään huomiota siihen, miten toiminnat on loogisesti toteutettu laatikon sisällä.
Käyttäytymismallin tarkoituksena on testata spesifikaatioiden tarkkuutta ja järkevyyttä simuloimalla mallin toimintaa halutuilla herätteillä. Usein määrittelyissä havaitaan simuloinnin aikana virheitä ja puutteita, jotka voidaan vielä tässä vaiheessa helposti korjata ilman suuria kustannuksia.
Kuvauskielen simulaattori muistuttaa suuresti muiden ohjelmointikielien emulaattoreita ja debugger-ohjelmia. Simuloitavaan koodiin voidaan asettaa katkoskohtia (breakpoint), kaikkia muuttujia ja signaaleja voidaan tutkia ja haluttaessa muuttaa niiden arvoja.
Testattu ja hyväksytty käyttäytymismalli toimii yksikäsitteisenä spesifikaationa varsinaiselle logiikkasuunnittelulle. Tuloksena on niin sanottu RTL-malli (register transfer level model). Siinä logiikan toiminta on kuvattu yksityiskohtaisesti käyttämällä synteesiohjelman tukemia VHDL-koodin ominaisuuksia.
RTL-malli testataan täsmälleen samoilla herätteillä kuin käyttäytymismallikin. Näin varmistetaan, että looginen malli toimii täsmälleen spesifikaatioiden mukaan.
Varsinainen porteista ja kiikuista koostuva logiikka muodostetaan RTL-mallista synteesiohjelmalla. Synteesi vastaa ohjelmistotekniikassa lähdekoodin kääntämistä. Synteesiohjelman tehokkuus määrää, kuinka pienellä porttimäärällä kyseinen logiikka voidaan toteuttaa.
Vasta tässä vaiheessa kytkentä sovitetaan yhteen valitun piirin kanssa. Piiri voi aivan yhtä hyvin olla CPLD-, FPGA- tai ASIC-piiri, kunhan käytettävissä ovat piirivalmistajan kirjastot, joissa on kuvattu piirin logiikkaelementtien rakenteen ja ominaisuudet.
Tuloksena on niinsanottu rakennemalli, jossa logiikka on kasattu kirjastoista löytyvistä elementeistä. Rakennemallin toiminta testataan simuloimalla sitä samoilla herätteillä kuin aikaisempiakin malleja. Nyt vasteissa ovat mukana kaikki logiikan viiveet, mutta johdotuksen aiheuttamat todelliset viiveet vielä puuttuvat.
Seuraavassa vaiheessa rakennemallin kuvaamat elementit sijoitellaan piirin pinnalle ja johdotetaan (layout). Tämä vaihe vastaa piirilevyn suunnittelua perinteisessä suunnittelussa. Sijoittelu ja kytkentä tapahtuvat yleensä täysin automaattisesti, mutta käyttäjä voi myös halutessaan ohjata toimintaa.
Sijoittelun ja johdotuksen jälkeen myös piirin sisäisen johdotuksen aiheuttamat viiveet voidaan ottaa huomioon lopullisessa porttitason simuloinnissa. Jos tässä simuloinnissa ei havaita ajastusvirheitä, voidaan olla lähes varmoja siitä, että valmis piiri toimii spesifikaatioidensa mukaisesti.
Suurissa logiikkajärjestelmissä herätesignaalit ja niiden vasteet saattavat olla niin monimutkaisia, että niitä ei voida kunnolla testata pelkkää logiikkasimulaattoria käyttämällä. Kuvauskielellä voidaan kirjoittaa erityinen testipenkki, jota käytetään sekä herätteiden muodostamiseen että vasteiden tarkastamiseen.
Testipenkki voi hyödyntää myös sellaisia kuvauskielen ominaisuuksia, joita ei voida käyttää varsinaisessa logiikkakuvauksessa. Näitä ovat esimerkiksi herätteiden lukeminen tiedostoista ja vasteiden ja raporttien tulostaminen tiedostoon tai kirjoittimelle.
Testipenkkiä voidaan käyttää kaikkien VHDL-mallien testaukseen ja toiminnan varmistukseen. Älykäs testipenkki voi jopa itsenäisesti tarkistaa tulosten virheettömyyden tai raportoida mahdolliset virheet tulostimelle. Mittavissa projekteissa testipenkin suunnittelee ja testit suorittaa täysin eri työryhmä kuin varsinaisen logiikkasuunnittelun. Näin testauksen objektiivisuus ja kattavuus paranee.
Kuvauskielellä tehty logiikan kuvaus on sellaisenaan siirrettävissä muiden valmistajien piirityypeille tai ASIC-piiriksi. Tämä edellyttää, että käytetään standardien mukaista kieltä ja kirjastoja. Synteesit, sijoittelut ja moneen kertaan tapahtuvat simuloinnit ovat silti välttämättömiä ja kuluttavat melkoisesti aikaa.
Piirivalmistajien omat ohjelmistot eivät ole pitäneet kiirettä VHDL-tuen kanssa. Hyvä siirrettävyys kilpailijan piireille ei ole piirivalmistajan etujen mukaista. Riippumattomien ohjelmistovalmistajien tuotteissa VHDL-tuki on huomattavasti kattavampi. Kehittyneimmät ohjelmistot ovat jo hyvin vertailukelpoisia työasemien ASIC-suunnitteluun tarkoitettujen ohjelmistojen kanssa.
Alunperin ASIC-piirien suunnitteluun tarkoitettujen synteesiohjelmien suorituskyky CPLD-piireille suunniteltaessa on ollut vaatimaton, saavutetut käyttöasteet on olleet huomattavasti pienempiä kuin piirikaaviota käytettäessä. Monet tunnetut synteesiohjelmien valmistajat ovat nykyisin räätälöineet ohjelmiaan paremmin FPGA-piirien synteesiin soveltuviksi.
Riippumattomat ohjelmistovalmistajat turvautuvat myös usein piirivalmistajien omien ohjelmien apuun synteesituloksen optimoinnissa tai logiikan sijoittelussa ja reitityksessä (place & route) piireille. Sekakäytön tekee mahdolliseksi EDIF-standardi (Electronic Design Interchange Format), jonka avulla suunnittelutietoja voidaan siirtää vaivattomasti ohjelmasta toiseen.
Ohjelmistovalmistajat väittävät VHDL-kääntäjiään standardien mukaisiksi. Todellisuudessa VHDL-kielen määrittelevät IEEE 1076 ja 1176 standardit ovat niin laajoja, että tunnettujenkaan valmistajien kääntäjät eivät ole täysin standardien mukaisia. Lisäksi nämä standardit muuttuvat ja täydentyvät jatkuvasti.
Synteesiohjelmat tukevat vain pientä osaa VHDL-standardista. RTL-mallin suunnittelussa onkin tärkeintä, että VHDL-tuki on sovitettu yhteen käytettävän synteesiohjelman kanssa. Käyttäytymismalli ja testipenkki sen sijaan voivat käyttää kaikkia VHDL:n ominaisuuksia, ja niiden toteuttaminen kovin rajoittuneilla kääntäjillä ja simulaattoreilla on vaikeaa.
Ohjelmoitavat piirit tarjoavat aivan uudenlaisia mahdollisuuksia ja haasteita logiikkasuunnitteluun. Piin pinnalle suunnittelu edellyttää suunnittelijoilta aivan uudenlaisia työtapoja ja laajojen suunnitteluohjelmistojen hallintaa. Tätä ammattitaitoa ei hankita hetkessä, joten suunnittelijoiden koulutus ja sopivien työkalujen hankita muodostavat yritykselle merkittävän investoinnin.
Huolellinen harkinta ja vaihtoehtojen puntarointi ennen hankintapäätösten tekoa kannattaa. Tehokkaat työkalut voivat säästää hintansa takaisin nopeasti ja lyhentää merkittävästi suunnitteluaikaa.
Alteran MAX+PLUS II näyttää tekemänsä työvaiheet havainnollisesti käännöksen aikana. Virheilmoitukset ja varoitukset tulevat omaan ikkunaansa. Kun virheilmoitusta näpäytetään hiirellä, vastaava piirikaavion sivu avataan ja virheen paikka osoitetaan kursorilla.
VHDL-simulaattorin käyttö muistuttaa ohjelmistojen lähdekielisessä testauksessa tarvittavan debuggerin käyttöä. Koodia voidaan tarvittaessa askeltaa rivi kerrallaan, siihen voidaan asettaa katkoskohtia (breakpoint) ja muuttujien ja signaalien arvoja voidaan tutkia. Erojakin on, simulaattoreissa ei ole historiamuistia (trace). Koodin suorituksen seuraaminen on vaikeampaa, sillä wait-käskyn jälkeen suoritus jatkuu yleensä jostakin aivan toisesta modulista.
Floorplanner-ohjelmalla voidaan tutkia makrosolujen järjestystä piirin sisällä. Kaavakuva näyttää havainnollisesti, miten sisäisiä reititysresursseja on käytetty solujen välisiin johdotuksiin. Tiedoista voi olla apua ajastus- tai sovitusongelmia ratkottaessa.
Jos yritys käyttää työasemia elektroniikka- tai piirilevysuunnitteluun, työasemaohjelmistot ovat mielekäs vaihtoehto myös ohjelmoitavien piirien suunnitteluun. Useilla ASIC-suunnitteluun erikoistuneilla ohjelmistovalmistajilla on myös kattava tuki CPLD- ja FPGA-piirien suunnitteluun.
Jos mikropiiri- ja logiikkasuunnittelu ei ole yrityksen avainalueita, vaativat ohjelmoitavien piirien suunnittelutyöt kannattaa tilata ASIC- ja FPGA-suunnitteluun erikoistuneilta yrityksiltä:
NASA:n Microelectronics Research Centerin sivuilla on hyvä ohjelmoitavien piirien linkkikokoelma.
Edelliselle sivulle Kotisivulle